Netfilter ist eine Firewall innerhalb des Linux-Kernels.
Einstellungen ausgeben:
/sbin/iptables -L -n -v
Wenn das Modul ip_conntrack geladen ist (wenn nicht: nachholen mit sudo modprobe ip_conntrack
) kann man die aktuelle Verbindungstabelle mit iptstate ausgeben:
sudo iptstate
(benötigt CONFIG_NF_CT_NETLINK in Kernel Config).
Regeln erstellen, z.B. Port 80 → 8080 und 443 → 8443.
sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 8443
Damit die aktuell gültigen Regeln einen reboot überleben:
Skript ablegen in:
Alternativ gibt es unter Debian/Ubuntu das Paket iptables-persistent
:
apt install iptables-persistent
Regel permanent speichern:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6
Restore sofort:
iptables-restore < /etc/iptables/rules.v4 ip6tables-restore < /etc/iptables/rules.v6
Der folgende systemd-service sorgt für einen restore beim reboot:
systemctl status netfilter-persistent
Auflistung aktuell gültiger Regeln (v4):
iptables -L -n --line-numbers
bzw v6:
ip6tables -L -n --line-numbers
löschen:
iptables -D $CHAIN 1
Blockieren einer einzigen IP-Adresse (hier im Beispiel „1.2.3.4“):
iptables -A INPUT -p all -s 1.2.3.4 -j REJECT
Als Ausgangsbasis für eine umfangreichere Firewall:
#!/bin/bash IPTABLES="/sbin/iptables" function firewall_start() { # echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # default policy = Drop # uncomment #$IPTABLES -P INPUT DROP #$IPTABLES -P OUTPUT DROP #$IPTABLES -P FORWARD DROP # example: Drop all packets from host 120.166.10.211 $IPTABLES -I INPUT -s 120.166.10.211 -j DROP $IPTABLES -I INPUT -s 120.166.10.211 -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT 120.166.10.211 blocked: " } function firewall_stop() { # forwarding off? # echo "0" > /proc/sys/net/ipv4/ip_forward # # reset the default policies in the filter table. # $IPTABLES -P INPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT # # reset the default policies in the nat table. # $IPTABLES -t nat -P PREROUTING ACCEPT $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -P OUTPUT ACCEPT # # reset the default policies in the mangle table. # $IPTABLES -t mangle -P PREROUTING ACCEPT $IPTABLES -t mangle -P OUTPUT ACCEPT # # flush all the rules in the filter and nat tables. # $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -t mangle -F # # erase all chains that's not default in filter and nat table. # $IPTABLES -X $IPTABLES -t nat -X $IPTABLES -t mangle -X } case "$1" in start) echo "starting firewall..." firewall_start ;; stop) echo "stopping firewall..." firewall_stop ;; restart) echo "restarting firewall..." firewall_stop firewall_start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac