Hmmm, ik zag nog niet de fantastische toevoeging van statefull designed iptables firewall. Dit is het uitontwikkelde broertje van --syn alleen dan veel beter.
voorbeeldje onder van een firewalletje die ik een keer gemaakt heb.
in pricipe maak je 1 filter aan die al het verkeer opvangt nadat het door de input filters is geweest. Hierin laat je zowieso al het verkeer toe dat al goedgekeurd is. en je dropt de rest. De filter myfilter is handig als je meerdere interfaces heb.
verder heb ik nog wat loopjes erin gezet aan het einde. Voor de rest zou het commentaar van de echo's voldoende moeten zijn.
#!/bin/sh
IPT="/sbin/iptables"
ALWAYSOPEN="http smtp"
FTPSSH="1.2.3.4 5.6.7.8"
FTP="9.0.1.2"
echo "flushing tables"
$IPT -F
$IPT -X
$IPT -Z
$IPT -X -t mangle
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
echo "setting proc settings"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
echo "setting default drop on input and forward"
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
echo "creating myfilter chain"
$IPT -N myfilter
$IPT -A myfilter -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A myfilter -p tcp -j REJECT --reject-with tcp-reset
$IPT -A myfilter -j REJECT --reject-with icmp-port-unreachable
echo "creating rules to allow all on local interface"
$IPT -A INPUT -i lo -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i lo -m state --state INVALID -j LOG --log-prefix "INVALID PACKET on int LO:" --log-level warning
echo "creating rules with ALWAYSOPEN loop"
for x in ${ALWAYSOPEN}; do
$IPT -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
done
echo "creating rules with FTPSSH loop"
for y in ${FTPSSH}; do
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s ${y} -j ACCEPT
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW -s ${y} -j ACCEPT
done
echo "creating rules with FTP loop"
for z in ${FTP}; do
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW -s ${z} -j ACCEPT
done
echo "redirecting all other traffic to myfilter for further handling"
$IPT -A INPUT -j myfilter