# ufw

Uncomplicated Firewall. Nadstavba nad [nftables](nftables), která z běžných úkonů dělá jednořádkové příkazy. Pro jednoduchý server je to správná volba — pod podmínkou, že víš, kde přestává platit.

## Základ

```bash
ufw default deny incoming
ufw default allow outgoing

ufw allow 22/tcp
ufw allow 80,443/tcp

ufw enable
ufw status verbose
```

To je celý firewall pro typický webový server. Proto se ufw používá.

## Užitečné varianty

```bash
ufw allow from 192.168.1.0/24                    # celá síť kamkoliv
ufw allow from 192.168.1.0/24 to any port 22     # síť na konkrétní port
ufw allow from 10.10.0.0/24 to any port 8006     # Proxmox jen z VPN
ufw limit 22/tcp                                 # omezení opakovaných pokusů
ufw deny from 203.0.113.5                        # blokace adresy
ufw allow in on wg0                              # celé rozhraní (VPN)
```

`ufw limit` je šikovná drobnost — povolí šest spojení za třicet vteřin z jedné adresy a další zahodí. Na SSH vystavené do internetu to výrazně zředí log.

## Mazání

```bash
ufw status numbered
ufw delete 3
ufw delete allow 8080/tcp     # podle pravidla, ne podle čísla
```

Po smazání podle čísla se ostatní přečíslují. Když mažeš víc pravidel, jdi odspodu nahoru, nebo je maž podle znění.

## Aplikační profily

```bash
ufw app list
ufw allow "Nginx Full"
ufw app info "Nginx Full"
```

Profily jsou v `/etc/ufw/applications.d/`. Pohodlné, ale skryjí ti, které porty se skutečně otevřely — u `ufw app info` si to ověř.

## Logování

```bash
ufw logging on
ufw logging medium
tail -f /var/log/ufw.log
```

Úrovně jsou `low`, `medium`, `high`, `full`. `medium` je rozumný kompromis. `full` zaplní disk.

## IPv6

Zkontroluj `/etc/default/ufw`:

```
IPV6=yes
```

Ve výchozím stavu to zapnuté je, ale u starších instalací a u některých obrazů pro VPS ne. Pak máš IPv4 zajištěnou a IPv6 dokořán.

Ověř to takhle:

```bash
ufw status verbose | grep v6
```

## Kde ufw přestává platit

Tohle je důvod, proč tahle stránka existuje. Ufw je pohodlné rozhraní k jedné části netfilteru — ne k celému.

**`ufw status` neukazuje cizí pravidla.** Docker, Proxmox, libvirt a další si zapisují vlastní řetězce, o kterých ufw neví a neřekne ti o nich. Jediný způsob, jak vidět pravdu:

```bash
nft list ruleset
iptables -L -n -v
```

Když se ti výstup `ufw status` a `nft list ruleset` výrazně liší, věř tomu druhému.

**Docker ufw úplně obchází.** `ufw deny 8080` a `docker run -p 8080:80` znamená, že port **je** veřejně dostupný, ať si ufw říká cokoliv. Je to nejzávažnější věc na téhle stránce a má vlastní stránku: [Docker a firewall](Docker-a-firewall).

**Forwarding se nastavuje jinde.** Když chceš, aby stroj směroval provoz (router, VPN brána), samotný `ufw allow` nestačí. Musíš v `/etc/default/ufw` nastavit:

```
DEFAULT_FORWARD_POLICY="ACCEPT"
```

a povolit forwarding v `/etc/ufw/sysctl.conf`.

**Složitější logiku ufw neumí.** Značkování, přesměrování portů, podmíněná pravidla, dynamické množiny. V tu chvíli jdi na [nftables](nftables) a ufw vypni — ne obojí naráz.

## Kdy ufw a kdy ne

**Ano:** jednotlivý server s několika službami, VPS, stroj bez kontejnerů, situace, kdy chceš rychle a bez chyb.

**Ne:** router nebo VPN brána, hostitel s Dockerem (nebo ano, ale s vědomím omezení a s pravidly v `DOCKER-USER`), cokoliv, co potřebuje NAT.

## Ověření zvenku

Ufw ti řekne, co si myslí. Skutečnost ti řekne sken zvenku:

```bash
nmap -Pn -p- adresa.serveru
```

Pusť to z jiného stroje nebo z mobilu na datech. Viz [nástroje](Nastroje).
