Pagina 1 di 1

Script firewall semplice e completo

MessaggioInviato: ven ago 27, 2004 4:42 pm
da neoviruz
Volevo segnalare questa risorsa.
L'arno's script e' composto essenzialmente da un file di configurazione (iptables-firewall.conf) e uno script di inizializzazione (rc.iptables).
Il file di configurazione comprende innumerevoli opzioni che possono soddisfare quasi tutte le esigenze ed e' commentato molto bene, anche i newbie non dovrebbero avere difficolta'.
Io lo uso da parecchio tempo e non mi ha mai deluso.

http://rocky.eld.leidenuniv.nl/

MessaggioInviato: sab ago 28, 2004 3:41 pm
da Erik
Non lo conoscevo, ottimo spunto, che ne dici di farne un articolo, anche piccolo che descrive passo-passo come configurarlo o il significato delle sue opzioni? Anche con qualche screen, specificando su quale distribuzione lo hai testato. E' una mia proposta, se ne hai voglia e tempo, è ben accolta [^]

MessaggioInviato: sab ago 28, 2004 11:55 pm
da neoviruz
Guarda, e' tutto testuale, quindi gli screenshot servirebbero a poco [:-H].

Per quanto riguarda lo scriverci un articolo, ci si potrebbe anche pensare, ma piu' che altro per descriverne le
potenzialita'/funzionalita' (se riesco butto giu' qualcosa domani) perche' ti giuro che e' davvero commentato fino all'eccesso, tuttalpiu' posso fornire supporto in questo thread del forum per chi dovesse aver qualche difficolta' (tempo permettendo mi piace lo spirito di questo genere di forum, usenet e' diventata un carnaio ormai [:D]).

MessaggioInviato: mar set 14, 2004 11:29 pm
da fwiffo
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