====== iptables beobachten ====== watch -d iptables -nvL --line-numbers * -L = List (auflisten) * -n = no DNS-lookup * -v = verbose (gesprächig) * --line-numbers = Regeln Nummerieren (einzelne Regeln können anhand der Nummer z.B. gelöscht werden) ====== iptables Regeln zurücksetzen ====== ===== filter ===== iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -X ===== nat ===== iptables -t nat -F iptables -t nat -X ====== iptables Syntax ====== ^ table ^ command ^ chain ^ rule-specification ^^^ target ^^ | -t filter | -A | INPUT | -s | | | -j | ACCEPT | | ::: | -C | OUTPUT | -d | | | :::| DROP | | ::: | -D | FORWARD | -i | | | :::| REJECT | | ::: | -I | ::: | -o | | | :::| LOG | | ::: | -R | ::: | | | | :::| ::: | | -t nat | -L | PREROUTING | -p | udp | ''%%--dport%%'' | -j | SNAT | | ::: | -S | OUTPUT | :::| ::: | ''%%--sport%%'' | :::| DNAT | | ::: | -F | POSTROUTING | :::| tcp | ''%%--dport%%'' | :::| MASQUERADE | | ::: | -Z | ::: | :::| ::: | ''%%--sport%%'' | :::| ::: | | -t mangle | -N | PREROUTING | :::| icmp | ''%%--icmp-type%%'' | :::| ::: | | ::: | -X | OUTPUT | | | | :::| ::: | | ::: | -P | INPUT | -m | conntrack | ''%%--ctstate%%'' | :::| ::: | | ::: | -E | POSTROUTING | | | | :::| ::: | (( inspiriert von: {{:iptables.jpg?direct&900|}} )) ====== Einbindung von iptables in den Bootvorgang ====== ===== CentOS (bis 6) ===== Paket: iptables-services /etc/init.d/iptables save speichert die aktuell aktiven iptables-Regeln in der Datei ''/etc/sysconfig/iptables''. Beim Booten werden sie hier wieder ausgelesen. ===== CentOS (ab 7) ===== wie SuSE, oder ''firewalld'' nutzen ===== SuSE ===== SuSE setzt auf eine eigene, iptables-basierte Firewall. Wer volle Kontrolle über die verwendeten iptables-Regeln haben möchte, deaktiviert sie besser: chkconfig SuSEfirewall2_init off chkconfig SuSEfirewall2_setup off Ein einfaches Beispiel für ein Startskript könnte so aussehen: (( Das Beispiel ist so nicht [[http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html|LSB]] konform, eine Vorlage wie man es besser machen könnte findet sich unter ''/etc/init.d/skel*'' )) ''/etc/init.d/iptables'': #!/bin/bash case $1 in start) iptables-restore /etc/sysconfig/iptables ;; stop) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -X ;; restart) $0 stop $0 start ;; save) iptables-save > /etc/sysconfig/iptables ;; *) echo Hä? ;; esac ===== Debian ===== Bei Debian gibt es mehrere ((siehe /usr/share/doc/iptables/README.Debian.gz)) Möglichkeiten, iptables zu starten. Ein einfaches Beispiel für ein Startskript könnte so aussehen: ''/etc/init.d/iptables'': #!/bin/bash case $1 in start) iptables-restore /etc/defaults/iptables ;; stop) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -X ;; restart) $0 stop $0 start ;; save) iptables-save > /etc/defaults/iptables ;; *) echo usage: $0 [start] [stop] [restart] [save] ;; esac Und so wird es aktiviert: update-rc.d iptables start 40 S . stop 89 0 6 . Alternativ: ''/etc/network/interfaces'' : auto eth0 iface eth0 inet dhcp up sh -c 'iptables-restore < /etc/iptables' ====== Einfacher Paketfilter mit NAT ====== ''/etc/sysctl.conf'': net.ipv4.ip_forward=1 net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 ---- Script: #!/bin/bash ext_dev="eth0" ext_ip="212.202.240.174" int_dev="eth1" int_ip="192.168.1.1" dmz_dev="eth2" http_proxy=10.0.0.4 smpt_proxy=10.0.0.5 webserver=10.0.0.6 modprobe ip_nat_ftp modprobe ip_conntrack_ftp iptables -N proxy iptables -N dmz iptables -N icmp iptables -P FORWARD DROP iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $int_dev -m state --state NEW -j proxy iptables -A FORWARD -i $ext_dev -m state --state NEW -j dmz iptables -A FORWARD -p icmp -j icmp iptables -A FORWARD -m limit -j LOG --log-prefix "FORWARD DROP" iptables -A proxy -p tcp --dport 3128 -d $http_proxy -j ACCEPT iptables -A proxy -p tcp --dport 25 -d $smtp_proxy -j ACCEPT iptables -A proxy -m limit -j LOG --log-prefix "proxy DROP" iptables -A proxy -j REJECT iptables -A dmz -p tcp --dport 80 -d $webserver -j ACCEPT iptables -A dmz -m limit -j LOG --log-prefix "dmz DROP" iptables -A dmz -j REJECT iptables -A icmp -p icmp --type echo-reply -j ACCEPT iptables -A icmp -p icmp --type echo-request -j ACCEPT iptables -t nat -A POSTROUTING -o $ext_dev -j MASQUERADE iptables -t nat -A PREROUTING -i $ext_dev -p tcp --dport 80 -d $ext_ip -j DNAT --to-destination $webserver ====== Doku ====== iptables Kurzanleitung: iptables -h Hilfe zu einem bestimmten Protokoll / Teilbereich: iptables -p icmp -h ====== Links ====== * http://www.netfilter.org * http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO.html * http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html * https://gist.github.com/mcastelino/c38e71eb0809d1427a6650d843c42ac2 ===== iptables und ssh ===== * http://www.debian-administration.org/articles/187 , aber: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=332231