Navigace

IPTables

#!/bin/sh
# 1. Co jde do retezce INPUT , jde JEN_NA_TEN_STROJ do lokalniho procesu.
# 2. Co jde do retezce FORWARD je urceno jinam a nekam preposlano.
# 3. Co jde do retezce OUTPUT jde z LOKALNIHO_PROCESU masiny ven.
# 4. FORWARD i OUTPUT jdou nakonec do POSTROUTING
# Zakladni traverse packetu retezci je:
# Ethx -> PREROUTING -> FORWARD (nebo INPUT -> OUTPUT) -> POSTROUTING -> Ethx
 
# loopback
LO_IP="127.0.0.1/32"

# vnejsi rozhrani (eth0, eth1)
INET_IFACE="eth0"
LAN_IFACE="eth1"

# cesta k programu iptables
IPTABLES="/sbin/iptables"

# logovani datagramu, ktere nejsou propusteny
LOGGING=1

##################################################
# Základní akce
##################################################
# odstraneni pravidel
$IPTABLES -F
$IPTABLES -X

# implicitne jsou zakazany vsechny pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# povoleni routovani paketu
echo "1" > /proc/sys/net/ipv4/ip_forward

# NAT
$IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE

##################################################
# INPUT - prichozi pakety
##################################################

# spojeni na lokalnim pocitaci
$IPTABLES -A INPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -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
$IPTABLES -A FORWARD -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

##################################################
# FORWARD - smerovane pakety
##################################################

$IPTABLES -A FORWARD -p tcp --dport 80 -j ACCEPT #http
$IPTABLES -A FORWARD -p tcp --dport 443 -j ACCEPT #https
$IPTABLES -A FORWARD -p tcp --dport 53 -j ACCEPT #dns
$IPTABLES -A FORWARD -p udp --dport 53 -j ACCEPT #dns
$IPTABLES -A FORWARD -p icmp -j ACCEPT #icmp

##################################################
# OUTPUT - odchozi pakety
##################################################

$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

$IPTABLES -A INPUT -i $LAN_IFACE -p ALL -j ACCEPT #vse na LAN
$IPTABLES -A OUTPUT -o $LAN_IFACE -p ALL -j ACCEPT #vse na LAN