Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| navody:server:firewall [2015/10/14 12:25] – krcmar | navody:server:firewall [2026/08/16 18:56] (aktuální) – Přirozenější znění návodů, lokalizace ukázek a doplnění týdenního vyzkoušení VPS aither | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| + | < | ||
| + | |||
| + | < | ||
| + | source=" | ||
| + | test=" | ||
| + | /> | ||
| + | |||
| ====== Firewall ====== | ====== Firewall ====== | ||
| - | Firewall | + | Firewall |
| + | VPS. vpsFree před VPS žádný společný firewall nezapíná. Výchozí stav proto | ||
| + | záleží na distribuci: například NixOS má firewall standardně zapnutý, zatímco | ||
| + | čistý Debian nebo Ubuntu obvykle žádná vlastní omezující pravidla nemají. | ||
| + | |||
| + | Vlastní firewall **není povinný**. Může být rozumné provozovat jen potřebné | ||
| + | a pravidelně aktualizované služby a ostatní vůbec nespouštět. Firewall přidává | ||
| + | další ochrannou vrstvu, ale nenahrazuje bezpečnou konfiguraci, | ||
| + | přihlašování pomocí SSH klíčů. | ||
| + | |||
| + | ===== Jak pravidla fungují ===== | ||
| + | |||
| + | Síťový program naslouchá na kombinaci adresy, protokolu (nejčastěji TCP nebo | ||
| + | UDP) a portu. Web běžně používá TCP porty 80 a 443, SSH TCP port 22. Příkaz | ||
| + | '' | ||
| + | všechny IPv4 adresy, '' | ||
| + | je dostupná jen uvnitř VPS. | ||
| + | |||
| + | Při filtrování na samotné VPS se setkáš se třemi základními řetězci: | ||
| + | |||
| + | * **INPUT** zpracovává příchozí pakety určené VPS. | ||
| + | * **OUTPUT** zpracovává pakety odesílané z VPS. | ||
| + | * **FORWARD** zpracovává pakety směrované přes VPS, například pro VPN, router nebo některé kontejnery. | ||
| + | |||
| + | Pravidla v řetězci se vyhodnocují shora dolů. Jakmile paket odpovídá pravidlu | ||
| + | s konečnou akcí, například '' | ||
| + | se už nezkoušejí. Pokud žádné pravidlo nerozhodne, použije se výchozí politika | ||
| + | řetězce. Stavový firewall navíc pozná pakety patřící k navázanému spojení, takže | ||
| + | odpovědi může povolit dříve než pravidla pro nová spojení. | ||
| + | |||
| + | IPv4 a IPv6 jsou dvě samostatné rodiny adres. Firewall musí chránit obě; | ||
| + | povolení služby jen pro IPv4 ji neschová na veřejné IPv6 adrese. | ||
| + | |||
| + | Vyber si **jeden** způsob správy firewallu. Nekombinuj ruční pravidla | ||
| + | '' | ||
| + | budou ovlivňovat. Jednoduchá pravidla níže počítají s VPS bez Dockeru, VPN, | ||
| + | směrování a jiných služeb, které | ||
| + | |||
| + | <note important> | ||
| + | Než zapneš blokující politiku, povol TCP port 22, nech otevřené současné SSH | ||
| + | spojení a přihlášení ověř v druhém terminálu. Stejný postup opakuj po každé | ||
| + | větší změně. | ||
| + | </ | ||
| + | |||
| + | ===== Jednoduchý firewall pomocí iptables ===== | ||
| + | |||
| + | Syntaxe '' | ||
| + | současném Debianu příkazy '' | ||
| + | to pomocí '' | ||
| + | '' | ||
| + | |||
| + | Tento skript pro čistou VPS povolí loopback, ICMP, navázaná spojení a nová TCP | ||
| + | spojení | ||
| + | OUTPUT zůstává '' | ||
| + | vytvoří pravidla | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | set -eu | ||
| + | |||
| + | # Nainstaluj nástroje pro příkazovou řádku a trvalé ukládání pravidel. | ||
| + | apt update | ||
| + | apt install -y iptables iptables-persistent | ||
| + | |||
| + | # Při nahrazování současných pravidel ponech provoz povolený. | ||
| + | iptables -P INPUT ACCEPT | ||
| + | iptables -P FORWARD ACCEPT | ||
| + | iptables -P OUTPUT ACCEPT | ||
| + | ip6tables -P INPUT ACCEPT | ||
| + | ip6tables -P FORWARD ACCEPT | ||
| + | ip6tables -P OUTPUT ACCEPT | ||
| + | |||
| + | # Odstraň současná pravidla filtru a uživatelsky definované řetězce. | ||
| + | iptables -F | ||
| + | iptables -X | ||
| + | ip6tables -F | ||
| + | ip6tables -X | ||
| + | |||
| + | # Vstup IPv4: zahoď neplatné pakety, zachovej navázaný provoz a otevři služby. | ||
| + | iptables -A INPUT -m conntrack --ctstate INVALID -j DROP | ||
| + | iptables -A INPUT -m conntrack --ctstate ESTABLISHED, | ||
| + | iptables -A INPUT -i lo -j ACCEPT | ||
| + | iptables -A INPUT -p icmp -j ACCEPT | ||
| + | iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT | ||
| + | |||
| + | # Vstup IPv6: použij stejná pravidla a zachovej funkční řídicí provoz IPv6. | ||
| + | ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP | ||
| + | ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED, | ||
| + | ip6tables -A INPUT -i lo -j ACCEPT | ||
| + | ip6tables -A INPUT -p ipv6-icmp -j ACCEPT | ||
| + | ip6tables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT | ||
| + | |||
| + | # Zahoď ostatní vstupní | ||
| + | iptables -P INPUT DROP | ||
| + | iptables -P FORWARD DROP | ||
| + | ip6tables -P INPUT DROP | ||
| + | ip6tables -P FORWARD DROP | ||
| + | |||
| + | # Ulož pravidla a zobraz výslednou politiku vstupu. | ||
| + | netfilter-persistent save | ||
| + | iptables -L INPUT -n -v | ||
| + | ip6tables -L INPUT -n -v | ||
| + | </ | ||
| + | |||
| + | **Výsledek: | ||
| + | a nová TCP spojení na porty 22, 80 a 443. Ostatní příchozí a veškerý | ||
| + | předávaný provoz se zahodí, odchozí provoz z VPS zůstane povolený. | ||
| + | |||
| + | '' | ||
| + | '' | ||
| + | '' | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | |||
| + | ===== Nativní nftables ===== | ||
| + | |||
| + | nftables spravuje IPv4 i IPv6 v jednom pravidlovém jazyce. Ulož následující | ||
| + | konfiguraci do ''/ | ||
| + | rodiny adres a pořadí pravidel odpovídá výkladu výše: | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | |||
| + | # Nahraď celou současnou sadu pravidel. | ||
| + | flush ruleset | ||
| + | |||
| + | table inet filter { | ||
| + | chain input { | ||
| + | type filter hook input priority filter; policy drop; | ||
| + | |||
| + | # Nejprve zpracuj stav, povol loopback, zachovej řídicí provoz a otevři služby. | ||
| + | ct state invalid drop | ||
| + | ct state established, | ||
| + | iifname " | ||
| + | meta l4proto { icmp, ipv6-icmp } accept | ||
| + | tcp dport { 22, 80, 443 } accept | ||
| + | } | ||
| + | |||
| + | chain forward { | ||
| + | # Tento jednoduchý firewall nepředává žádný provoz. | ||
| + | type filter hook forward priority filter; policy drop; | ||
| + | } | ||
| + | |||
| + | chain output { | ||
| + | # Povol veškerý provoz vytvořený na VPS. | ||
| + | type filter hook output priority filter; policy accept; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Výsledek: | ||
| + | jako předchozí příklad: povolí loopback, ICMP, navázaná spojení a nová TCP | ||
| + | spojení na porty 22, 80 a 443, ostatní vstup a předávání zahodí a odchozí | ||
| + | provoz povolí. | ||
| + | |||
| + | Konfiguraci nejprve zkontroluj bez aplikování pomocí '' | ||
| + | službu, která ji načte nyní i při dalších startech: | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | set -eu | ||
| + | |||
| + | # Nainstaluj nftables. | ||
| + | apt update | ||
| + | apt install -y nftables | ||
| + | |||
| + | # Před použitím zkontroluj celou konfiguraci. | ||
| + | nft -c -f / | ||
| - | Linuxové jádro obsahuje firewall zvaný Netfilter, který je obsluhován pomocí utility '' | + | # Načti konfiguraci nyní i při startu |
| + | systemctl enable --now nftables | ||
| + | nft list ruleset | ||
| + | </ | ||
| - | Na našem VPS je v každém případě nejprve potřeba povolit podporu iptables. V detailu VPS je potřeba zapnout podporu iptables | + | Po úpravě soubor znovu ověř pomocí '' |
| + | ho příkazem '' | ||
| + | [[https:// | ||
| + | [[https:// | ||
| - | {{: | + | ===== UFW na Debianu a Ubuntu ===== |
| - | ===== IPtables ===== | + | UFW nabízí jednodušší rozhraní ke stavovému firewallu. Tento příklad přidá |
| + | pravidla, která povolí SSH a web. Stávající uživatelská pravidla zůstanou | ||
| + | platná a vestavěná pravidla dál obslouží loopback a nezbytný síťový řídicí | ||
| + | provoz. Pro provoz, na který se žádné z těchto pravidel nevztahuje, výchozí | ||
| + | politiky zahodí nová příchozí spojení a povolí odchozí provoz. Výchozí | ||
| + | instalace spravuje IPv4 i IPv6; skript před zapnutím ověří, že | ||
| + | ''/ | ||
| - | Současný stav je možné zjistit pomocí | + | <code bash> |
| + | # | ||
| + | set -eu | ||
| - | iptables | + | apt update |
| - | + | apt install -y ufw | |
| - | Výstup bude vypadat pravděpodobně nějak takto | + | ufw default deny incoming |
| + | ufw default allow outgoing | ||
| + | ufw allow 22/tcp comment ' | ||
| + | ufw allow 80/tcp comment ' | ||
| + | ufw allow 443/tcp comment ' | ||
| + | ufw show added | ||
| + | grep -Fx ' | ||
| + | ufw --force enable | ||
| + | ufw status verbose | ||
| + | </ | ||
| - | < | + | **Výsledek: |
| - | | + | na porty 22, 80 a 443. Stávající uživatelská pravidla i vestavěná pravidla UFW |
| + | zůstanou platná. Pro provoz, na který se žádné pravidlo nevztahuje, výchozí | ||
| + | politiky zahodí nová příchozí spojení a povolí odchozí provoz. | ||
| - | Chain FORWARD (policy ACCEPT) | + | Pokud kontrola '' |
| - | | + | opravit. Pravidlo smažeš například příkazem '' |
| + | Číslovaný seznam zobrazí '' | ||
| + | [[https:// | ||
| - | Chain OUTPUT (policy ACCEPT) | + | ===== firewalld na Fedoře a distribucích rodiny RHEL ===== |
| - | target | + | |
| - | + | ||
| - | Ve výpisu jsou zobrazeny tři řetězce (chain): vstup, průchod | + | |
| - | < | + | firewalld sdružuje rozhraní a pravidla |
| - | + | Následující nastavení použije výchozí zónu '' | |
| - | ===== Shorewall ===== | + | web a pak trvalou konfiguraci načte: |
| - | Nastavení firewallu se dělá pomocí balíku | + | <code bash> |
| + | #!/usr/bin/env bash | ||
| + | set -eu | ||
| - | apt-get install shorewall | + | dnf install -y firewalld |
| - | cd /etc/shorewall | + | systemctl enable --now firewalld |
| + | firewall-cmd --set-default-zone=public | ||
| + | firewall-cmd --permanent --zone=public --add-service=ssh | ||
| + | firewall-cmd --permanent --zone=public --add-service=http | ||
| + | firewall-cmd --permanent --zone=public --add-service=https | ||
| + | firewall-cmd --reload | ||
| + | firewall-cmd --get-active-zones | ||
| + | firewall-cmd --zone=public --list-all | ||
| + | </code> | ||
| + | **Výsledek: | ||
| + | '' | ||
| + | provoz se dál řídí existujícími pravidly a cílem zóny. Toto nastavení neomezuje | ||
| + | odchozí provoz z VPS. | ||
| - | **/etc/shorewall/zones** | + | Použij zónu, kterou pro rozhraní VPS ukáže '' |
| + | --get-active-zones''; | ||
| + | '' | ||
| + | změna se projeví až po '' | ||
| + | [[https://firewalld.org/documentation/ | ||
| - | Nastavení zón ($FW v ostatních souborech se automaticky nahrazuje " | + | ===== NixOS ===== |
| - | #ZONE | + | NixOS má '' |
| - | # | + | porty popiš deklarativně. Následující modul můžeš uložit jako |
| - | | + | ''/ |
| - | | + | '' |
| - | vpn ipv4 | + | |
| + | <code nix> | ||
| + | { ... }: | ||
| + | { | ||
| + | networking.firewall = { | ||
| + | enable = true; | ||
| + | allowedTCPPorts = [ 22 80 443 ]; | ||
| + | }; | ||
| + | } | ||
| + | </ | ||
| - | **/ | + | **Výsledek:** Modul na IPv4 i IPv6 přidá mezi povolené nové TCP porty 22, 80 |
| + | a 443. Firewall dál povolí navázaná spojení a vestavěný síťový řídicí provoz. | ||
| + | Výchozí politika zahodí ostatní nový příchozí provoz, který nepovolí tento ani | ||
| + | jiný modul. Odchozí provoz modul neomezuje. | ||
| - | Tohle je nastaveni implicitních akcí (vyhodnocuje se v zadaném pořadí!). | + | Některé služby mají vlastní volbu '' |
| + | otevře automaticky. Před změnou si ověř, co daný modul nastavuje. První | ||
| + | aktivaci proveď pomocí '' | ||
| - | # | + | <code bash> |
| - | # | + | #!/ |
| - | + | set -eu | |
| - | # povol spojeni "ze serveru na internet" | + | |
| - | $FW | + | |
| - | + | ||
| - | # zahod vsechno "z internetu na server" | + | |
| - | net | + | |
| - | + | ||
| - | # odmitni vsechno "z vpn na internet" | + | |
| - | vpn | + | |
| - | + | ||
| - | # povol vsechno ostatni "z vpn" | + | |
| - | vpn | + | |
| - | | + | |
| - | # The FOLLOWING POLICY MUST BE LAST | + | |
| - | | + | |
| + | nixos-rebuild test | ||
| + | </ | ||
| - | **/ | + | Ověř nové SSH spojení. Teprve když funguje, ulož konfiguraci do nové bootovací |
| + | generace: | ||
| - | FORMAT 2 | + | <code bash> |
| - | ############################################################################### | + | #!/ |
| - | #ZONE | + | set -eu |
| - | net | + | |
| - | | + | |
| - | **/ets/ | + | nixos-rebuild switch |
| + | </code> | ||
| - | Tady se nastavují jednotlivá pravidla, kterými se pak firewall řídí. V následujícím souboru jsou v komentářích vysvětleny jendotlivé příklady. | + | Viz [[https:// |
| - | # | + | ===== Docker a jiné kontejnery ===== |
| - | # | + | |
| - | #SECTION ALL | + | |
| - | #SECTION ESTABLISHED | + | |
| - | #SECTION RELATED | + | |
| - | SECTION NEW | + | |
| - | + | ||
| - | # povoleni SSH sluzby pro klienty z internetu | + | |
| - | + | ||
| - | ACCEPT | + | |
| - | # - pro urcitou IP adresu | + | |
| - | # | + | |
| - | # - pro skupinu IP adres (subnet) | + | |
| - | # | + | |
| - | + | ||
| - | # OpenVPN | + | |
| - | ACCEPT | + | |
| - | ACCEPT | + | |
| - | + | ||
| - | # WEB | + | |
| - | ACCEPT | + | |
| - | ACCEPT | + | |
| - | **/ | + | Port publikovaný Dockerem může procházet pravidly, která vytvoří Docker, a |
| + | nemusí se řídit očekáváním z UFW nebo firewalld. Nepovažuj proto '' | ||
| + | incoming'' | ||
| + | mají být opravdu veřejné; službu pro místní reverzní proxy navaž například na | ||
| + | '' | ||
| - | V tomto souboru je potřeba Shorewallu říci, že má začít pracovat | + | Podrobnosti |
| + | [[https:// | ||
| - | startup=1 | + | ===== Když se odřízneš ===== |
| + | Pokud nové SSH spojení po změně firewallu nefunguje, **nezavírej původní | ||
| + | relaci**. Z ní zkontroluj '' | ||
| + | '' | ||
| + | '' | ||
| - | Poté můžeme nechat Shorewall zkontrolovat konfiguraci: | + | Když už žádné SSH spojení nemáš, návod ke [[navody: |
| + | ve vpsAdminu]] tě provede obnovením přístupu. [[navody: | ||
| + | menu]] nabízí záchranný postup nezávislý na funkční síti a povoleném portu SSH. | ||
| + | Položka **Run shell** při restartu zpřístupní shell přímo v souborovém systému | ||
| + | VPS, odkud můžeš pravidla opravit. | ||
| - | /etc/init.d/shorewall check | + | V normálně spuštěném systému UFW dočasně vypne '' |
| - | + | '' | |
| - | Pokud potvrdí | + | iptables nejdřív nastav politiku INPUT pro IPv4 i IPv6 na '' |
| + | potom pravidla opravuj. | ||
| - | | + | V prostředí **Run shell** neběží systemd ani správce firewallu. Obnov v něm |
| + | trvalou konfiguraci, | ||
| + | '' | ||
| + | spusť normálně. Na NixOS můžeš ve start menu místo toho vybrat předchozí | ||
| + | funkční generaci a pak konfiguraci opravit. | ||
| - | Další užitečné příkazy: | + | Dočasné vypnutí odstraňuje ochrannou vrstvu. Firewall potom znovu zapni a nové |
| - | + | SSH spojení ověř. Nemaž naslepo nízkoúrovňová pravidla, pokud mohou patřit | |
| - | shorewall status | + | Dockeru, VPN nebo jiné službě. |
| - | shorewall show | + | |
| - | shorevall safe-start | + | |
| - | shorewall safe-restart | + | |
| - | Odkazy: [[http:// | ||