Firewall — Sieťová bezpečnosť na Linuxe
Firewall je prvá línia obrany servera. Kontroluje, ktorá sieťová prevádzka smie vstúpiť alebo odísť. V Linuxe máš na výber niekoľko nástrojov — od nízkoúrovňových iptables až po user-friendly UFW.
Ako funguje Linux firewall?
Jadrom je Netfilter — subsystém v Linux kerneli, ktorý spracováva pakety. Nástroje ako iptables, nftables a UFW sú len frontendy na jeho konfiguráciu. Pakety prechádzajú cez chains (INPUT, OUTPUT, FORWARD) a na základe pravidiel sa ACCEPT, DROP alebo REJECT.
iptables — Klasika
Dlhé roky štandard, stále bežný v produkčných prostrediach:
# Povoliť SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Povoliť HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Povoliť established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Zahodiť všetko ostatné
iptables -A INPUT -j DROP
# Uložiť pravidlá
iptables-save > /etc/iptables/rules.v4
nftables — Moderný nástupca
nftables nahrádza iptables s čistejšou syntaxou a lepším výkonom:
# Vytvorenie tabuľky a chainu
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
# Povoliť loopback a established
nft add rule inet filter input iif lo accept
nft add rule inet filter input ct state established,related accept
# Povoliť SSH a web
nft add rule inet filter input tcp dport { 22, 80, 443 } accept
UFW — Jednoduchosť pre Ubuntu/Debian
UFW (Uncomplicated Firewall) je wrapper nad iptables pre rýchlu konfiguráciu:
# Aktivácia s default deny
ufw default deny incoming
ufw default allow outgoing
# Povoliť služby
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow from 10.0.0.0/8 to any port 5432 # PostgreSQL len z internej siete
# Zapnúť firewall
ufw enable
ufw status verbose
firewalld — Zóny (RHEL/CentOS)
firewalld pracuje s konceptom zón, kde každé sieťové rozhranie patrí do zóny s definovanými pravidlami:
# Zoznam zón
firewall-cmd --get-zones
# Pridať službu do public zóny
firewall-cmd --zone=public --add-service=https --permanent
# Vlastný port
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# Aplikovať zmeny
firewall-cmd --reload
Best Practices
- Default DENY — povoľ len to, čo naozaj potrebuješ
- Principle of least privilege — databáza nepotrebuje byť na 0.0.0.0
- Rate limiting — obmedz počet pripojení na SSH (
-m limit --limit 3/min) - Loguj dropped pakety —
iptables -A INPUT -j LOG --log-prefix "DROPPED: " - Nezabudni na IPv6 — útočníci ho skúšajú, aj keď ho nepoužívaš
- Testuj pred aplikáciou —
iptables -Caleboufw --dry-run - Automatizuj cez Ansible/Terraform — manuálne pravidlá na 50 serveroch = katastrofa
Firewall nie je nice-to-have. Je to must-have. Každý server musí mať nakonfigurovaný firewall ešte pred tým, než sa vystaví do siete.