a skriptu forum_iptables.sh (upavený, co jsme taky už řešily, takže jede v poho):
#!/bin/sh
# ------------------------------------------------------------------------------
# nastaveni
# ------------------------------------------------------------------------------
# lokalni loopback rozhrani
LO_IP="127.0.0.1/32"
# vnejsi rozhrani (eth0, eth1)
INET_IFACE="eth1"
# cesta k programu iptables
IPTABLES="/sbin/iptables"
# logovani datagramu, ktere nejsou propusteny
LOGGING=1
# ------------------------------------------------------------------------------
# zakladni akce
# ------------------------------------------------------------------------------
# odstraneni pravidel
$IPTABLES -F
$IPTABLES -X
# implicitne jsou zakazany vsechny pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
# zakazani routovani paketu
echo "0" > /proc/sys/net/ipv4/ip_forward
# ------------------------------------------------------------------------------
# INPUT - prichozi pakety
# ------------------------------------------------------------------------------
# spojeni na lokalnim pocitaci
$IPTABLES -A INPUT -p ALL -s $LO_IP -j ACCEPT
# servisni pakety
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type destination-unreachable -j ACCEPT
# ochrana proti ping of death, odfiltrovat pokusy o zahlceni icmp
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT
# pakety od navazanych spojeni jsou v poradku
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# odmitnuti auth serveru
$IPTABLES -A INPUT -p TCP --dport 113 -j REJECT --reject-with tcp-reset
# paket navazuje spojeni, ale nema nastaveny priznak SYN, pryc s nim
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# ochrana pred ip spoofingem
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > ${interface}
done
$IPTABLES -N spoofing
$IPTABLES -A spoofing -s 192.168.0.0/16 -j DROP
$IPTABLES -A spoofing -s 172.16.0.0/12 -j DROP
$IPTABLES -A spoofing -s 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -j spoofing
# ochrana proti syn flooding, DoS utoku
$IPTABLES -N syn_flood
$IPTABLES -A INPUT -i $INET_IFACE -p tcp --syn -j syn_flood
$IPTABLES -A syn_flood -m limit --limit 1/s --limit-burst 5 -j RETURN
$IPTABLES -A syn_flood -j DROP
# ------------------------------------------------------------------------------
# logovani
# ------------------------------------------------------------------------------
if [ "$LOGGING" ]
then
$IPTABLES -A INPUT -m limit --limit 12/h --limit-burst 5 -j LOG --log-prefix "INPUT DROP: " --log-level 6
$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "
fi
# ------------------------------------------------------------------------------
# OUTPUT - odchozi pakety
# ------------------------------------------------------------------------------
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 80 -j ACCEPT #http
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 443 -j ACCEPT #https
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 22 -j ACCEPT #ssh
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 53 -j ACCEPT #dns
$IPTABLES -A OUTPUT -o $INET_IFACE -p udp --dport 53 -j ACCEPT #dns
$IPTABLES -A OUTPUT -o $INET_IFACE -p icmp -j ACCEPT #icmp