#!/bin/bash # chkconfig: 345 09 91 # description: ip filter startup script . /etc/rc.d/init.d/functions PATH=/sbin:$PATH MYIP=10.0.0.81 # Adresa eth0 ERIGONA=10.0.0.1 # Adresa erigony case "$1" in start) echo -n "Setting up IP Filter: " iptables -F iptables -X iptables -t nat -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT ################### Pomocne retezce ###################### # Logovaci retezec iptables -N my-log iptables -A my-log -m limit --limit 4/second -j LOG --log-prefix "IPFW: " iptables -A my-log -j DROP # spoof: proti podvrzeni adresy (na viceportovych fw by tohle # zajistovalo, ze packet dostaneme ze spravneho rozhrani. # Davam to jako zvlastni retezec, aby to pripadne slo volat # i z FORWARD i z INPUT. iptables -N spoof iptables -A spoof -s 127.0.0.0/8 -j my-log iptables -A spoof -s $MYIP -j my-log iptables -A spoof -i eth0 -j RETURN # Jen pro pripad, ze by vzniklo nejake dalsi zarizeni: iptables -A spoof -j my-log # broadcast: retezec, kterym se zpracovavaji broadcasty iptables -N broadcast # chceme jen sambu, zbytek ne iptables -A broadcast -p udp --sport netbios-ns --dport netbios-ns -j ACCEPT iptables -A broadcast -p udp --sport netbios-dgm --dport netbios-dgm -j ACCEPT iptables -A broadcast -j my-log # nebo -j DROP # NFS klient: vetsina by se mela vejit do ESTABLISHED, opacnym # smerem je potreba osetrit snad jen zamykani. Pristup na portmapper # a pristup na statd/lockd, coz jsou neprivilegovane TCP a UDP porty # Pri volani tohoto chainu plati "--state NEW -d $MYIP -s " iptables -N nfs-client iptables -A nfs-client -p tcp --dport sunrpc -j ACCEPT iptables -A nfs-client -p udp --dport sunrpc -j ACCEPT iptables -A nfs-client -p udp --dport 1024: -j ACCEPT iptables -A nfs-client -p tcp --dport 1024: -j ACCEPT ################### INPUT chain ###################### # povolime vse z loopbacku a zavolame anti-spoofing iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -j spoof # Pokud nejsme router, nechceme packety, ktere nejsou pro nas. # Pozor: pro nas mohou byt i broadcasty. Pokud je nechceme # dostavat, je dobre je nelogovat, protoze jich byva hodne # a obvykle neznamenaji bezpecnostni incident. iptables -A INPUT -d 255.255.255.255 -j broadcast iptables -A INPUT -d 10.0.0.255 -j broadcast iptables -A INPUT -d \! $MYIP -j my-log # ... odtud dal tedy zpracovavame packety, ktere maji -d $MYIP, # coz si tim padem muzeme u dalsich pravidel odpustit. # Povolime odchozi sluzby a pribuzne packety iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Zakazeme packety, ktere nevytvareji spojeni, ani neprislusi # existujicimu spojeni: iptables -A INPUT -m state --state INVALID -j my-log # .. odtud dal tedy maji vsechny packety navic --state NEW # ICMP: Povolime jen ping. echo-reply, destination-unreachable # a time-limit-exceeded se vejdou do RELATED (viz vyse). iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp -j my-log # Na lokalnim stroji povolit DNS server odkudkoli. iptables -A INPUT -p tcp --dport domain -j ACCEPT iptables -A INPUT -p tcp --dport domain -j ACCEPT # Na lokalnim stroji povolime samba server, treba jen z lokalni site: iptables -A INPUT -p tcp --dport netbios-ssn -j ACCEPT iptables -A INPUT -p tcp --dport netbios-ns -j ACCEPT iptables -A INPUT -p tcp --dport netbios-dgm -j ACCEPT iptables -A INPUT -p udp --dport netbios-ssn -j ACCEPT iptables -A INPUT -p udp --dport netbios-ns -j ACCEPT iptables -A INPUT -p udp --dport netbios-dgm -j ACCEPT # Ssh podle zadani jen z erigony iptables -A INPUT -p tcp --dport ssh -s $ERIGONA -j ACCEPT # NFS-montujeme svazky z erigony a z FTP serveru iptables -A INPUT -s $ERIGONA -j nfs-client iptables -A INPUT -s 147.251.48.205 -j nfs-client # Sluzbu ident musime _vzdycky_ povolit nebo odmitnout (REJECT), # nikdy zahodit (DROP). iptables -A INPUT -p tcp --dport ident -j REJECT # nebo ... -j ACCEPT # A jeste povolime sluzbu echo/tcp iptables -A INPUT -p tcp --dport echo -j ACCEPT # Vse ostatni zalogujeme iptables -A INPUT -j my-log ################### FORWARD chain ###################### # nejsme router, vsechno zakazeme a zalogujeme iptables -A FORWARD -j my-log ################### NAT (preklad adres) ###################### # chceme jen presmerovat 4000/tcp na echo/tcp iptables -t nat -A PREROUTING -p tcp -d $MYIP --dport 4000 -j REDIRECT --to-ports 7 iptables -t nat -A OUTPUT -p tcp -d $MYIP --dport 4000 -j REDIRECT --to-ports 7 touch /var/lock/subsys/ipfw echo "Done." ;; stop) echo -n "Shutting down IP Filter: " iptables -F iptables -X iptables -t nat -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT rm -f /var/lock/subsys/ipfw echo "Done (all traffic permited)." ;; restart) "$0" stop "$0" start ;; *) echo "Usage: $0 [start|stop|restart]" >&2 exit 1 ;; esac exit 0