====== Netfilter / Iptables ====== Netfilter ist eine [[security:Firewall]] innerhalb des [[wpde>Linux-Kernel|Linux-Kernels]]. Einstellungen ausgeben: /sbin/iptables -L -n -v ===== Konfigurationswerkzeuge ===== [[http://www.fwbuilder.org/|Firewallbuilder]] | [[http://kris.koehntopp.de/artikel/fwbuilder/|Anleitung]] [[software:bastille]] ===== Links ===== * [[http://www.netadmintools.com/art216.html|Block IP Addresses With IPtables]] * [[http://www.hermann-uwe.de/files/fw_laptop|A firewall script intended to be used on workstations / laptops]] * [[http://www.linuxguruz.com/iptables/|IPTABLES Firewall]]: Regeln und Skripts für Iptables * [[http://www.netfilter.org/documentation/HOWTO/de/packet-filtering-HOWTO-7.html]] * [[http://www.linux-magazin.de/Artikel/ausgabe/2000/06/IPTables/iptables.html]] * [[http://www.fz-juelich.de/zam/docs/printable/tki/tki-0402.pdf]] * [[http://www.linuxfaqs.de/howto/iptableshowto.php]] * [[http://cipherdyne.org/blog/2007/07/oscon-2007-talk-slides-iptables-attack-visualization.html|Iptables Attack Visualization]] * [[http://www.64-bit.de/dokumentationen/netzwerk/e/002/DE-IPTABLES-HOWTO-3.html|Linux IPTABLES HOWTO: iptables-Grundlagen]] ===== Tools ===== Wenn das Modul ip_conntrack geladen ist (wenn nicht: nachholen mit ''sudo modprobe ip_conntrack'' ) kann man die aktuelle Verbindungstabelle mit [[http://www.phildev.net/iptstate/|iptstate]] ausgeben: sudo iptstate (benötigt CONFIG_NF_CT_NETLINK in [[linux:Kernel]] Config). ===== Portumleitung auf Standardports ===== 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 ===== Iptables-Regeln dauerhaft sichern ===== Damit die aktuell gültigen Regeln einen reboot überleben: Skript ablegen in: * /etc/network/if-up.d * /etc/network/if-down.d 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 [[https://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern|Alternative Doku und Anleitung für Redhat-basiertes Systeme]] ===== Iptables-Regeln auflisten und löschen ===== Auflistung aktuell gültiger Regeln (v4): iptables -L -n --line-numbers bzw v6: ip6tables -L -n --line-numbers löschen: iptables -D $CHAIN 1 ===== Simples Firewallscript ===== 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