da fwiffo » mar set 14, 2004 11:29 pm
Spero possa essere d'aiuto a qualcuno, ho usato questo firewall per il routing di casa per LAN + microserver interno, spiego passo passo cosa c'e' scritto.
/etc/firewall.conf
(per caricarlo: iptables-restore </etc/firewall.conf)
---------
si comincia :)
---------
# Generated by iptables-save v1.2.8 on Thu Mar 4 17:39:34 2004
# tavola nat che si occupa di far uscire da un solo o piu' ip esterni
# diversi host con indirizzi interni, o altre funzioni.
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# il sistema manda questi pacchetti provenienti su porta
# --dport a --to-destination indirizzo:porta
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 6110 -j DNAT --to-destination 192.168.1.2:6110
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 6114 -j DNAT --to-destination 192.168.1.2:6114
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 60001 -j DNAT --to-destination 192.168.1.2:60001
# il sistema "mascherera'" (ovvero da' indirizzo esterno a pacchetto
# con indirizzo interno)
# a qualsiasi pacchetto che si instradi su ppp0 dandogli
# l'indirizzo esterno, necessario per far navigare indirizzi interni
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Thu Mar 4 17:39:34 2004
# Generated by iptables-save v1.2.8 on Thu Mar 4 17:39:34 2004
# normale tavola filter usata per filtraggio pacchetti e regole
# del forwarding
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# regola personale che interviene solo se chiamata da un trigger
# che viene impostato da una regola
:syn-flood - [0:0]
# se il pacchetto in questione in entrata su ppp0 da un host
# esterno contiene una flag SYN, RST, ACK SYN (flag usate nella
# gestione delle connessione, inizializzazioni etc)
# allora passa a regola "syn-flood" (ci accertiamo che rispetti
# un minimo di netiquette)
-A INPUT -i ppp0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j syn-flood
# ideale se avete un server accessibile tramite ssh o altro,
# non vogliamo che i tizi da fuori ficchinasino su servizi
# esclusivamente nostri, no? (tra l'altro usavo grsecurity
# quindi non era possibile vedere i servizi interni aperti
# ed in questo modo garantivo anonimato sui MIEI servizi interni)
-A INPUT -s 192.168.1.1 -p tcp -m tcp --dport 4080 -j DROP
-A INPUT -s 192.168.1.1 -p tcp -m tcp --dport 5656 -j DROP
-A INPUT -s 192.168.1.1 -p tcp -m tcp --dport 6882 -j DROP
-A INPUT -s 192.168.1.1 -p udp -m udp --dport 5660 -j DROP
# ovviamente connessione interno-interno escluso quanto sopra
# puo' passare
-A INPUT -s 192.168.1.1 -d 192.168.1.1 -i lo -j ACCEPT
# mmmh, no, gli utenti esterni non posso usare interfaccia "lo"
# per accedere ai servizi SAMBA interni alla LAN privata
-A INPUT -i lo -p tcp -m tcp --dport 139 -j DROP
-A INPUT -i lo -p udp -m udp --dport 137:138 -j DROP
# no, non permetto all'interfaccia eth0, dove e' connesso un modem
# ethernet, di accedere per quasivoglia motivo alla mia LAN
-A INPUT -s 192.168.0.0/255.255.0.0 -i eth0 -j DROP
# eh, no, se i pacchetti non provengono da interfaccia HARDWARE
# eth1 allora non dovrebbero essere con indirizzi interni!
-A INPUT -s 192.168.1.0/255.255.255.0 -i ! eth1 -j DROP
# solo "lo" puo' usare 127.0.0.0/8
-A INPUT -s 127.0.0.0/255.0.0.0 -i ! lo -j DROP
# ridondante ma l'ho ritenuto necessario (blocca icmp per LAN
# se non da eth1)
-A INPUT -s 192.168.1.0/255.255.255.0 -i ! eth1 -p icmp -j DROP
# indirizzi interni e/o broadcast di vario tipo, non se ne dovrebbero
# vedere in una LANnuccia come la nostra :P
-A INPUT -s 10.0.0.0/255.0.0.0 -j DROP
-A INPUT -s 169.254.0.0/255.255.0.0 -j DROP
-A INPUT -s 172.16.0.0/255.240.0.0 -j DROP
-A INPUT -s 198.18.0.0/255.254.0.0 -j DROP
-A INPUT -s 224.0.0.0/224.0.0.0 -j DROP
# se i pacchetti proventono da interfaccia hardware eth1
# e contengono l'indirizzo esatto, che siano i benvenuti
-A INPUT -s 192.168.1.0/255.255.255.0 -i eth1 -j ACCEPT
# indirizzi 127.0.0.0/8 provenienti da "lo" sono sempre accettati
-A INPUT -s 127.0.0.0/255.0.0.0 -i lo -j ACCEPT
# se una connessione e' gia' stata stabilita o e' relazionata
# ad una connessione in corso allora puo' passare
-A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# vogliamo permettere l'accesso a questa porta, perche' si ha
# un servizio o quel che si voglia (notare porta UGUALE a quella
# presente in tabella *nat)
-A INPUT -p tcp -m tcp --dport 5656 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
# e così via con porte ammesse all'interno
-A INPUT -p tcp -m tcp --dport 6882 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p udp -m udp --dport 5660 -j ACCEPT
# OK connettersi a questa porta (date le regole di cui sopra, anche
# esterna e relativa al firewall in questione)
-A INPUT -p tcp -m tcp --dport 25 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
# idem come sopra, ok connettersi qui da qualsiasi posto
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
# niente pacchetti udp da fuori o qualsiasi posto, se non scritto
# esplicitamente sopra
-A INPUT -p udp -m udp -j DROP
# niente pacchetti tcp se non scritto sopra
-A INPUT -p tcp -m tcp -j DROP
# OK il forward di pacchetti di "eth1" su "ppp0" da indirizzi LAN
# interni, e solo da quelli
-A FORWARD -s 192.168.1.0/255.255.255.0 -i eth1 -o ppp0 -j ACCEPT
# mmmh, non voglio che gli estranei che usano ssh per connettersi
# a questa macchina mi scannano per porte dei pc della mia LAN
-A FORWARD -s 192.168.1.1/255.255.255.255 -i eth1 -o eth1 -j DROP
# se i pacchetti provenienti da "ppp0" devono andare su "eth1"
# ed una connessione e' stata precedentemente fatta o stabilita
# allora che passino pure
-A FORWARD -i ppp0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# ok connettersi a questa porta (notare sempre la presenza stessa
# porta in tavola *nat)
-A FORWARD -p tcp -m tcp --dport 6110 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 6114 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 60001 -j ACCEPT
# niente forward di pacchetti non specificati sopra
-A FORWARD -p udp -j DROP
-A FORWARD -p tcp -j DROP
# okok, 192.168.1.1 puo' connettersi a 192.168.1.1 usando "lo"
# richiesto per alcuni servizi
-A OUTPUT -s 192.168.1.1 -d 192.168.1.1 -o lo -j ACCEPT
# non si esce sulla LAN su "eth1" da questa macchina, sorry
-A OUTPUT -s 192.168.1.0/255.255.255.0 -o ! eth1 -j DROP
# I pacchetti su broadcast sono richiesti da samba su "eth1" per LAN
-A OUTPUT -s 192.168.1.1/255.255.255.255 -d 192.168.1.255/255.255.255.255 -o eth1 -j ACCEPT
# connessioni in corso o avvenute devono continuare ad esistere
# pena l'ammutolimento totale macchina
-A OUTPUT -s 192.168.1.1/255.255.255.255 -d 192.168.1.0/255.255.255.0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# non si sendano pacchetti su 127.0.0.0/8 se non esclusivamente da "lo"
-A OUTPUT -s 127.0.0.0/255.0.0.0 -o ! lo -j DROP
# indirizzi di altre classi e broadcast non ci interessano, ovviamente
-A OUTPUT -s 10.0.0.0/255.0.0.0 -j DROP
-A OUTPUT -s 169.254.0.0/255.255.0.0 -j DROP
-A OUTPUT -s 172.16.0.0/255.240.0.0 -j DROP
-A OUTPUT -s 198.18.0.0/255.254.0.0 -j DROP
-A OUTPUT -s 224.0.0.0/224.0.0.0 -j DROP
# regole "syn-floo", se il caro amico che vuole accedere alla nostra
# macchina da Internet mediante "ppp0" invia piu' di 4 pacchetti in
# 1 secondo allora tutto il resto delle richieste vengono droppate
# ed il caro "amico" se ne va' affansedere
-A syn-flood -m limit --limit 1/sec --limit-burst 4 -j RETURN
-A syn-flood -j DROP
# fine
COMMIT
# Completed on Thu Mar 4 17:39:34 2004