!!! ACHTUNG - evtl. veraltet - ACHTUNG !!!

Diese Seite wurde zuletzt am 8. Juli 2014 um 17:02 Uhr geändert.

Grundsätzlich sollte man alles in ein Shell-Skript packen.

Darüber hinaus dann natürlich die Umgebungsvariable „PATH“ anpassen, das ausführbare Binary nebst Pfad und die Netzwerkschnittstellen in eine Variable schreiben, z. B. so:

 #!/bin/bash
 export PATH="$PATH:/sbin"
 IPTABLES="/sbin/iptables"
 RED="eth0"
 GREEN="dummy0"
 [[...]]

Bevor die eigentlichen Regeln dran sind, können noch ein paar grundlegende Einstellungen gemacht werden, z. B. so:

 [[...]]
 if [[|-e /proc/sys/net/ipv4/conf/all/rp_filter ]]; then
   for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
     echo 1 > $f
   done
 fi
 echo 0 > /proc/sys/net/ipv4/tcp_ecn
 modprobe ip_conntrack
 modprobe ip_conntrack_ftp
 modprobe ip_nat_ftp
 [[...]]

Da man die Regeln bestimmt nicht nur aktivieren, sondern auch deaktivieren möchte, packt man sich das ganze am Besten gleich per „case“ in die Alternativen „start“, „stop“, „restart“ und „reset“.

Start könnte z. B. so aussehen:

 # routing (off) + DROP all + cleanup
 echo 0 > /proc/sys/net/ipv4/ip_forward
 $IPTABLES -P INPUT DROP
 $IPTABLES -P OUTPUT DROP
 $IPTABLES -P FORWARD DROP
 $IPTABLES -t nat -F
 $IPTABLES -t nat -X
 $IPTABLES -F
 $IPTABLES -X
 # input
 $IPTABLES -N RED-INPUT
 $IPTABLES -A INPUT -i lo -j ACCEPT
 $IPTABLES -A INPUT -i $GREEN -j ACCEPT
 $IPTABLES -A INPUT -i $RED -j RED-INPUT
 $IPTABLES -A RED-INPUT -p tcp --dport 22 -j ACCEPT
 # output
 $IPTABLES -N RED-OUTPUT
 $IPTABLES -A OUTPUT -o lo -j ACCEPT
 $IPTABLES -A OUTPUT -o $GREEN -j ACCEPT
 $IPTABLES -A OUTPUT -o $RED -j RED-OUTPUT
 $IPTABLES -A RED-OUTPUT -p tcp --dport 21 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -p tcp --dport 53 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -p udp --dport 53 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -p tcp --dport 80 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -p tcp --dport 123 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -p udp --dport 123 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -p tcp --dport 443 -j ACCEPT
 $IPTABLES -A RED-OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPTABLES -A RED-OUTPUT -j REJECT
 # forward
 $IPTABLES -N FORWARD-GREEN
 $IPTABLES -N FORWARD-RED
 $IPTABLES -A FORWARD -i $GREEN -j FORWARD-GREEN
 $IPTABLES -A FORWARD -i $RED -j FORWARD-RED
 $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPTABLES -A FORWARD -j DROP
 $IPTABLES -A FORWARD-GREEN -o $GREEN -j ACCEPT
 $IPTABLES -A FORWARD-GREEN -o $RED -j ACCEPT
 $IPTABLES -A FORWARD-GREEN -j REJECT
 $IPTABLES -A FORWARD-RED -j DROP
 # dnat
 $IPTABLES -t nat -A PREROUTING -i $RED -p tcp --dport 25 -j DNAT --to-destination 192.168.0.25:25
 # snat
 $IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -d ! 192.168.0.0/255.255.255.0 -j SNAT --to-source <IP_ADRESSE_DES_HOSTS>
 # routing (on)
 echo 1 > /proc/sys/net/ipv4/ip_forward
 # tws => 64k (max)
 echo 0 > /proc/sys/net/ipv4/tcp_window_scaling

Stop könnte z. B. so aussehen:

 # ACCEPT all + cleanup
 $IPTABLES -P INPUT ACCEPT
 $IPTABLES -P OUTPUT ACCEPT
 $IPTABLES -P FORWARD ACCEPT
 $IPTABLES -t nat -F
 $IPTABLES -t nat -X
 $IPTABLES -F
 $IPTABLES -X

Ein Restart ruft nacheinander „stop“ und „start“ auf.

Um die Counter (hilfreich zum auffinden von fehlenden Regeln per „iptables -n -L -v“) resetten zu können, könnte „reset“ z. B. so aussehen:

 # reset counters
 $IPTABLES -t nat -Z
 $IPTABLES -Z

Hier und da fehlen viell. noch ein paar Informationen, aber für den Anfang sollte es das hier erstmal tun.