Statefull Router Script (iptables)
Posted: 11. Oct 2014 19:27
Hallo, ich baue grad ein Linux home router auf und habe ein IPTables Skript geschrieben.
An die Experten an euch, sind die Regeln für Input output forward soweit sicher?
Habe ich die statefull kette richtig eingebaut und ist es in der output kette sinvoll noch statefull einzubauen und stimmt die Reihenfolge der Regeln?
Bin mir da noch nicht so ganz sicher. Wär nett wenn ihr mir das Skript absegnen und verbessern oder ergänzen könnt. Auf dem Router läuft bis jetzt Debian mit bind9, isc-dhcp, ssh, ntp und ntop. snort und apache soll später noch drauf.
#!/bin/bash
# Variblen Festlegen
I=/sbin/iptables
INT=eth0
EXT=eth1
# Routing aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Firewall wird gestartet ..."
# alte Ketten Löschen
echo "Alte Ketten werden gelöscht..."
$I -F
$I -t nat -F
$I -t nat --delete-chain
$I --delete-chain
# default Regeln
echo "Loopback device erlauben"
$I -P INPUT DROP
$I -P OUTPUT DROP
$I -P FORWARD DROP
# loobback device
$I -A INPUT -i lo -j ACCEPT
$I -A OUTPUT -o lo -j ACCEPT
# Masquieren des WAN
echo "Masquerade $EXT"
# Dynamische IP vom Provider wird Maskiert
$I -t nat -A POSTROUTING -o $EXT -j MASQUERADE
# Statefulll Kette und Regeln
echo "Statefull Kette"
$I -N statefull
$I -F statefull
$I -P statefull DROP
$I -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
$I -A statefull -m state --state NEW,INVALID -m limit -j LOG --log-prefix "Bad traffic to Firewall: "
$I -A statefull -m state --state NEW,INVALID -j DROP
$I -A statefull -p all -j LOG --log-prefix "Default statefull DROP: "
$I -A statefull -p all -j DROP
# INPUT Kette
echo "Input Kette"
$I -A INPUT -i $INT -p tcp --dport 22 -j ACCEPT
$I -A INPUT -i $INT -p icmp --icmp-typ echo-request -j ACCEPT
$I -A INPUT -i $INT -p udp --dport 53 -j ACCEPT
$I -A INPUT -i $INT -p tcp --dport 53 -j ACCEPT
$I -A INPUT -i $INT -p tcp --dport 3000 -j ACCEPT #ntop
$I -A INPUT -i $INT -j statefull
$I -A INPUT -i $EXT -p tcp --dport 113 -j LOG --log-prefix "ident prope:"
$I -A INPUT -i $EXT -p tcp --dport 113 -j REJECT
$I -A INPUT -i $EXT -j statefull
$I -A INPUT -p all -j LOG --log-prefix "ACHTUNG INPUT DROP: "
$I -A INPUT -p all -j DROP
echo "Output Kette"
# OUTPUT KETTE
$I -A OUTPUT -p all -j ACCEPT
$I -A OUTPUT -j statefull
$I -A OUTPUT -p all -j LOG --log-prefix "ACHTUNG OUTPUT DROP: "
$I -A OUTPUT -p all -j DROP
echo forward
# Forward Kette
$I -A FORWARD -i $INT -o $EXT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$I -A FORWARD -i $INT -o $EXT -p all -j ACCEPT
$I -A FORWARD -i $INT -o $EXT -p all -j statefull
$I -A FORWARD -i $EXT -o $INT -p all -j statefull
$I -A FORWARD -p all -j DROP
An die Experten an euch, sind die Regeln für Input output forward soweit sicher?
Habe ich die statefull kette richtig eingebaut und ist es in der output kette sinvoll noch statefull einzubauen und stimmt die Reihenfolge der Regeln?
Bin mir da noch nicht so ganz sicher. Wär nett wenn ihr mir das Skript absegnen und verbessern oder ergänzen könnt. Auf dem Router läuft bis jetzt Debian mit bind9, isc-dhcp, ssh, ntp und ntop. snort und apache soll später noch drauf.
#!/bin/bash
# Variblen Festlegen
I=/sbin/iptables
INT=eth0
EXT=eth1
# Routing aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Firewall wird gestartet ..."
# alte Ketten Löschen
echo "Alte Ketten werden gelöscht..."
$I -F
$I -t nat -F
$I -t nat --delete-chain
$I --delete-chain
# default Regeln
echo "Loopback device erlauben"
$I -P INPUT DROP
$I -P OUTPUT DROP
$I -P FORWARD DROP
# loobback device
$I -A INPUT -i lo -j ACCEPT
$I -A OUTPUT -o lo -j ACCEPT
# Masquieren des WAN
echo "Masquerade $EXT"
# Dynamische IP vom Provider wird Maskiert
$I -t nat -A POSTROUTING -o $EXT -j MASQUERADE
# Statefulll Kette und Regeln
echo "Statefull Kette"
$I -N statefull
$I -F statefull
$I -P statefull DROP
$I -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
$I -A statefull -m state --state NEW,INVALID -m limit -j LOG --log-prefix "Bad traffic to Firewall: "
$I -A statefull -m state --state NEW,INVALID -j DROP
$I -A statefull -p all -j LOG --log-prefix "Default statefull DROP: "
$I -A statefull -p all -j DROP
# INPUT Kette
echo "Input Kette"
$I -A INPUT -i $INT -p tcp --dport 22 -j ACCEPT
$I -A INPUT -i $INT -p icmp --icmp-typ echo-request -j ACCEPT
$I -A INPUT -i $INT -p udp --dport 53 -j ACCEPT
$I -A INPUT -i $INT -p tcp --dport 53 -j ACCEPT
$I -A INPUT -i $INT -p tcp --dport 3000 -j ACCEPT #ntop
$I -A INPUT -i $INT -j statefull
$I -A INPUT -i $EXT -p tcp --dport 113 -j LOG --log-prefix "ident prope:"
$I -A INPUT -i $EXT -p tcp --dport 113 -j REJECT
$I -A INPUT -i $EXT -j statefull
$I -A INPUT -p all -j LOG --log-prefix "ACHTUNG INPUT DROP: "
$I -A INPUT -p all -j DROP
echo "Output Kette"
# OUTPUT KETTE
$I -A OUTPUT -p all -j ACCEPT
$I -A OUTPUT -j statefull
$I -A OUTPUT -p all -j LOG --log-prefix "ACHTUNG OUTPUT DROP: "
$I -A OUTPUT -p all -j DROP
echo forward
# Forward Kette
$I -A FORWARD -i $INT -o $EXT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$I -A FORWARD -i $INT -o $EXT -p all -j ACCEPT
$I -A FORWARD -i $INT -o $EXT -p all -j statefull
$I -A FORWARD -i $EXT -o $INT -p all -j statefull
$I -A FORWARD -p all -j DROP