|
|
Riga 1: |
Riga 1: |
| <pre>
| | ==Stable, Testing e Unstable== |
| #!/bin/bash
| |
| ##
| |
| clear
| |
| ##
| |
| ####################
| |
| VERSION="2003.06.11"
| |
| ####################
| |
| ##
| |
| ## Interfaccia interna fidata 'settare la propria'
| |
| IIF="eth0"
| |
| # IIF="eth1"
| |
| ##
| |
| ## Interfaccia esterna da proteggere 'settare la propria'
| |
| ## in genere l'interfaccia esterna e' configurata da un DHCP quindi ha indirizzo dinamico.
| |
| EIF="ppp0"
| |
| # EIF="eth0"
| |
| # EIF="eth1"
| |
| ## Se l'interfaccia esterna ha un IP statico, dichiararlo
| |
| # EIP="xx.xx.xx.xx"
| |
| ##
| |
| ## Indirizzo macchina router (si presume che il firewall giri sulla macchina router
| |
| ## in caso contrario correggere manualmente questo indirizzo)
| |
| ##
| |
| ## Se preferite utilizzare un indirizzo statico, decommentate la linea che indica un IP
| |
| ## altrimenti se utilizzate un DHCP o non conoscete l'indirizzo
| |
| ## usate il riconoscimento tramite ifconfig
| |
| ## controllare comunque che lo script riconosca l'indirizzo IP (potrebbe non andare su macchine che
| |
| ## utilizzano shell particolari o che formattano ifconfig diversamente.
| |
| ##
| |
| SERVER=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' ' -f1`
| |
| # SERVER="192.168.10.2"
| |
| ##
| |
| ## Indirizzo macchina client da inserire a mano, se il server condivide la connessione
| |
| ## internet, questa macchina sar� autorizzata ad accedere al firewall via eth0
| |
| ## al posto di un singolo host e' possibile utilizzare una rete intera usando
| |
| ## la notazione RETE/NETMASK
| |
| ## attenzione alla banda disponibile perch� una rete genera parecchio traffico..;)
| |
| CLIENT="10.22.115.11"
| |
| # CLIENT"192.168.10.0/24"
| |
| ##
| |
| ## Loopback
| |
| LOCALHOST="127.0.0.1"
| |
| ##
| |
| ## Rete interna
| |
| ## controllare che gli script ottengano i valori corretti
| |
| ## o sostituire con valori statici.
| |
| net=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' ' -f1 | cut -d . -f1,2,3`
| |
| mask=` ifconfig $IIF | grep inet | cut -d : -f4 | cut -d ' ' -f1`
| |
| LOCALNET="$net.0/$mask"
| |
| ##
| |
| ## Broadcast
| |
| BROADCAST=` ifconfig $IIF | grep inet | cut -d : -f3 | cut -d ' ' -f1`
| |
| ##
| |
| ## Provider1 DNS 'inserire i propri dns'
| |
| # DNS1="212.216.172.62"
| |
| DNS1="195.130.224.18"
| |
| ##
| |
| ## Provider2 DNS
| |
| #DNS2="195.130.224.18"
| |
| DNS2="192.160.10.31"
| |
| ##
| |
| ## Local DNS
| |
| DNS3="212.245.255.2"
| |
| ## questo potrebbe essere il DNS locale, in seguito sara' prevista la configurazione
| |
| ## per il funzionamento di un dns locale.
| |
| ##
| |
| ## Per qualunque problema...;)
| |
| EMAIL="m.m.asciutti@email.it"
| |
| ##
| |
| ## PATH di iptables 'adattare alla propria macchina, se necessario'
| |
| IPT=` which iptables`
| |
| ##
| |
| ## NOTA:
| |
| ## Dopo aver modificato i parametri base per adattare lo
| |
| ## script alle proprie esigenze, salvarlo e renderlo eseguibile
| |
| ## in particolare adattare l'indirizzo del client o della rete che
| |
| ## verra' nattata
| |
| ## verificare inoltre che lo script che preleva
| |
| ## l'indirizzo IP da ifconfig sia funzionante
| |
| ## sul proprio sistema.
| |
| ##
| |
| ## Decommentare se si desidera aggiungere lo script al PATH di sistema
| |
| # export PATH=$PATH:$NPATH
| |
| ##
| |
| ## Nome dello script e Posizione assoluta
| |
| NFILE="firewall"
| |
| NPATH="/etc/rc.d"
| |
| ##
| |
| ## NOTA:
| |
| ## il percorso predefinito e' "/etc/rc.d/" ed
| |
| ## il nome predefinito e' "firewall"
| |
| ## ma e' possibile utilizzare qualsiasi nome / percorso
| |
| ## avendo cura di modificare le variabili NFILE e NPATH'
| |
| ##
| |
| ## Setto permessi e proprietario
| |
| chown root $NPATH/$NFILE
| |
| chmod 700 $NPATH/$NFILE
| |
| ##
| |
| ## NOTA:
| |
| ## questa funzione viene richiamata solo con
| |
| ## l'opzione stop e serve a rimuovere i moduli
| |
| ## caricati dal firewall
| |
| ##
| |
| #ANSI COLOR
| |
| MAGENTA='\e[35m'
| |
| GREEN='\e[32m'
| |
| YELLOW='\e[33m'
| |
| WHITE='\e[37m'
| |
| BLUE='\e[34m'
| |
| CYAN='\e[36m'
| |
| RED='\e[31m'
| |
| NULL='\e[0m'
| |
| COLOR=$BLUE
| |
| ##
| |
| case "$1" in
| |
| #**************************************************************START
| |
| start)
| |
| clear
| |
| COLOR=$RED
| |
| msg=" Attivo il firewall ..."
| |
| echo -e "$COLOR$msg$NULL\n"
| |
|
| |
|
| ##
| | Debian ha un sistema di sviluppo particolare quanto unico: � infatti la sola ad avere tre rami diversi divisi in base alle caratteristiche di stabilit�: ''Stable'', ''Testing'', ''Unstable'' ed un [[repository]] con pacchetti in fase di sviluppo, ''Experimental''. |
| ## Politica INPUT
| |
| chain="DROP"
| |
| ##
| |
| ## Politica OUTPUT
| |
| outchain="ACCEPT"
| |
| ##
| |
| ## Routing
| |
| fw="ACCEPT"
| |
| CF="1"
| |
| ##
| |
| ## Opzioni diverse dalle standard
| |
| ##
| |
| ## Politica OUTPUT
| |
| ## 'se si attiva, decommentare le regole relative all'uscita dei pacchetti'
| |
| ## outchain="DROP"
| |
| ##
| |
| ## Non funziona da router
| |
| # fw="DROP"
| |
| # CF="0"
| |
| ##
| |
| ## Opzioni kernel
| |
| SC="1"
| |
| ER="1"
| |
| DE="1"
| |
| TW="1"
| |
| SR="0"
| |
| DR="0"
| |
| ASR="0"
| |
| ISR="1"
| |
| SAV="1"
| |
| LOG="1"
| |
| DSR="1"
| |
| ##
| |
| ## Solo cosmetico
| |
| SET="Abilito"
| |
| MSET="Abilito"
| |
| function netfilter()
| |
| {
| |
| exit 0
| |
| }
| |
| ;;
| |
| #*******************************************************************STOP
| |
| stop)
| |
|
| |
|
| clear
| | ==Stable == |
| COLOR=$GREEN
| | ''Stable'' � la [[release]] '''stabile''' di Debian. Nello sviluppo Debian, una release viene dichiarata stabile quando i bug ad essa associati prima del rilascio sono quasi inesistenti. |
| msg=" Disattivo il firewall ..."
| | |
| echo -e "$COLOR$msg$NULL\n"
| | Una volta rilasciata, viene aperto un repository speciale: '''security''', che ha lo scopo di raccogliere gli aggiornamenti dei pacchetti presenti nella ''Stable'' corrente, per quanto riguarda il fattore sicurezza. Questi aggiornamenti, per�, non riguardano la versione del pacchetto: infatti non ci saranno nuove versioni dei programmi disponibili, ma solo aggiornamenti di sicurezza (quindi applicazioni di [[patch[[, in linea di massima). |
| ##
| |
| ## Politica INPUT
| |
| chain="ACCEPT"
| |
| ##
| |
| ## Politica OUTPUT
| |
| outchain="ACCEPT"
| |
| ##
| |
| ## Non funziona da router
| |
| fw="DROP"
| |
| CF="0"
| |
| ##
| |
| ## Opzioni kernel
| |
| SC="0"
| |
| ER="0"
| |
| DE="0"
| |
| TW="0"
| |
| SR="1"
| |
| DR="1"
| |
| ASR="1"
| |
| ISR="0"
| |
| SAV="0"
| |
| LOG="0"
| |
| DSR="0"
| |
| ##
| |
| ## Solo cosmetico
| |
| SET="Disabilito"
| |
| MSET="Disabilito"
| |
| ##
| |
| function netfilter()
| |
| {
| |
| if [ -f /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.o ]; then
| |
| ( rmmod ip_contrackt \
| |
| ip_contrack_ftp \
| |
| ip_nat_ftp \
| |
| ip_queue \
| |
| ip_tables \
| |
| ipt_LOG \
| |
| ipt_MARK \
| |
| ipt_MASQUERADE \
| |
| ipt_MIRROR \
| |
| ipt_REDIRECT \
| |
| ipt_TCPMSS \
| |
| ipt_TOS \
| |
| ipt_limit \
| |
| ipt_mac \
| |
| ipt_mark \
| |
| ipt_multiport \
| |
| ipt_owner \
| |
| ipt_state \
| |
| ipt_tcpmss \
| |
| ipt_tos \
| |
| ipt_unclean \
| |
| iptable_filter \
| |
| iptable_mangle \
| |
| iptable_net
| |
| ) > /dev/null 2> /dev/null
| |
|
| |
|
| ( rmmod ipfwadm; rmmod ipchains; modprobe ip_tables ) > /dev/null 2> /dev/null
| | Anche se la cosa pu� sembrare inutile, non lo �: supponiamo di avere un sistema produttivo, basato su l'ultima ''Stable''... L'aggiornamento di un programma alla versione successiva potrebbe comportare un po' di problemi: <br/> |
| | * la struttura e/o la sintassi dei file di configurazione potrebbe subire dei cambiamenti, creando delle incompatibilit� con le configurazioni valide per versioni precedenti;<br/> |
| | * potrebbero essere presenti dei cambiamenti sostanziali alla struttura del pacchetto o del programma; |
| | * potrebbero presentarsi dei bug non segnalati, a causa della 'giovane et�' del pacchetto. <br/> |
|
| |
|
| fi
| | Anche se i punti sopra citati sembrano banali, non � cos�: una macchina di produzione deve essere solida e stabile, e visto che molto spesso � una ottima pratica avere in cron le operazioni di aggiornamento, la probabilit� che un aggiornamento automatico possa creare situazioni di instabilit� o non funzionamento di un servizio non pu� essere accettato. |
| exit 0
| | Questo � un motivo per cui, nella release Stable, ci sono solo aggiornamenti riguardantii bugfix. |
| }
| | |
| ;; | | ===I Nomi delle Release=== |
| #*************************************************************ROUTER
| | Una domanda diffusa tra gli utenti alle prime armi con Debian riguarda i nomi delle release; a prima vista, infatti, possono sembrare strani, ma la spiegazione � molto semplice: sono tutti nomi dei personaggi del film [http://www.pixar.com/feature/toystory/toystory.html ToyStory].<br> |
| router)
| | Questa simpatica tradizione � stata iniziata da [http://perens.com/ Bruce Perens] con il rilascio di Debian 1.1 nel 1996. Perens, all' epoca [http://www.debian.org/devel/leader Debian Project Leader], lavorava anche per [http://www.pixar.com Pixar]. |
| | Ecco l'elenco dei nomi delle Stable fino ad ora rilasciate: |
|
| |
|
| clear
| | <br/> |
| COLOR=$YELLOW
| | <div align="center"> |
| msg=" Attenzione, disattivo il firewall ed attivo il forwarding..."
| | <table border="1" cellpadding="3" cellspacing="0"> |
| echo -e "$COLOR$msg$NULL\n"
| | <tr><td align="center">Versione</td> |
| | <td align="center">Nome</td> |
| | <td align="center">Anno</td> |
| | <td align="center">Significato</td> |
| | </tr> |
| | <tr><td align="center">1.1</td> |
| | <td align="center">Buzz</td> |
| | <td align="center">1996/06/17</td> |
| | <td align="center">(Buzz Lightyear) l'astronauta</td> |
| | </tr> |
| | <tr><td align="center">1.2</td> |
| | <td align="center">Rex</td> |
| | <td align="center">1996/12/12</td> |
| | <td align="center">Il tirannosauro</td> |
| | </tr> |
| | <tr><td align="center">1.3</td> |
| | <td align="center">Bo</td> |
| | <td align="center">1997/06/05</td> |
| | <td align="center">(Bo Peep) la bambina che si prese cura della |
| | pecorella</td> |
| | </tr> |
| | <tr><td align="center">2.0</td> |
| | <td align="center">Hamm</td> |
| | <td align="center">1998/07/23</td> |
| | <td align="center">il porcellino salvadanaio</td> |
| | </tr> |
| | <tr><td align="center">2.1</td> |
| | <td align="center">Slink</td> |
| | <td align="center">1999/03/09</td> |
| | <td align="center">(Slinky Dog) il cane giocattolo</td> |
| | </tr> |
| | <tr><td align="center">2.2</td> |
| | <td align="center">Potato</td> |
| | <td align="center">2000/08/15</td> |
| | <td align="center">Mr. Potato</td> |
| | </tr> |
| | <tr><td align="center">3.0</td> |
| | <td align="center">Woody</td> |
| | <td align="center">2002/07/19</td> |
| | <td align="center">il cowboy</td> |
| | </tr> |
| | <tr><td align="center">3.1</td> |
| | <td align="center">Sarge</td> |
| | <td align="center">2005/06/06</td> |
| | <td align="center">il |
| | "leader of The Green Plastic Army Men"</td> |
| | </tr> |
| | <tr><td align="center">??</td> |
| | <td align="center">Etch</td> |
| | <td align="center">testing</td> |
| | <td align="center">(Etch-a-Sketch) la lavagna</td> |
| | </tr> |
| | <tr><td align="center">N.D.</td> |
| | <td align="center">Sid</td> |
| | <td align="center">unstable</td> |
| | <td align="center">il bambino della porta accanto che rompeva i giocattoli.</td> |
| | </tr> |
| | </table> |
| | </div> |
|
| |
|
| ##
| | ==Testing == |
| ## Politica INPUT
| | La release Testing � quella pi� utilizzata in ambito Desktop, visto che rappresenta il miglior compromesso tra stabilit� e aggiornamento di pacchetti. |
| chain="ACCEPT"
| |
| ##
| |
| ## Politica OUTPUT
| |
| outchain="ACCEPT"
| |
| ##
| |
| ## Funziona da router
| |
| fw="ACCEPT"
| |
| CF="1"
| |
| ##
| |
| ## Opzioni kernel
| |
| SC="0"
| |
| ER="0"
| |
| DE="0"
| |
| TW="0"
| |
| SR="1"
| |
| DR="1"
| |
| ASR="1"
| |
| ISR="0"
| |
| SAV="0"
| |
| LOG="0"
| |
| DSR="0"
| |
| ##
| |
| ## Solo cosmetico
| |
| SET="Disabilito"
| |
| MSET="Abilito"
| |
| function netfilter()
| |
| {
| |
| exit 0
| |
| }
| |
| ;;
| |
| #**************************************************************HELP
| |
| help)
| |
| clear
| |
| COLOR=$CYAN
| |
| msg=" Help..."
| |
| echo -e "$COLOR$msg"
| |
| echo ""
| |
| echo "$NFILE start "
| |
| echo " Setta il firewall secondo le opzioni"
| |
| echo " indicate, e' possibile modificare "
| |
| echo " gran parte dei parametri predefiniti"
| |
| echo " per utilizzare lo script secondo le"
| |
| echo " proprie esigenze."
| |
| echo ""
| |
| echo "$NFILE stop"
| |
| echo " Resetta il firewall, permette il passaggio"
| |
| echo " di tutti i pacchetti in ingresso su ogni "
| |
| echo " interfaccia disabilitando l'utilizzo "
| |
| echo " del PC come router;"
| |
| echo " navigate usando questa modalita' il meno possibile."
| |
| echo ""
| |
| echo "$NFILE router"
| |
| echo " Abilita il transito dei pacchetti"
| |
| echo " tra $IIF e $EIF senza nessun firewall"
| |
| echo " utilizzare esclusivamente per testare la rete"
| |
| echo " o usare un secondo firewall tra router e rete"
| |
| echo " molti settaggi del kernel non sono pensati per la sicurezza"
| |
| echo " ma solo per testare la rete senza perdita di nessun tipo di pacchetti,"
| |
| echo " e' PERICOLOSO. "
| |
| echo ""
| |
| echo "$NFILE info"
| |
| echo " Mostra il settaggio attuale dei parametri base"
| |
| echo " per controllare le personalizzazioni sullo script."
| |
| echo ""
| |
| echo "$NFILE policy"
| |
| echo " Mostra le politiche impostate con start"
| |
| echo " e le statistiche relative al funzionamento del firewall"
| |
| echo " i pacchetti ricevuti, droppati, loggati ecc."
| |
| echo ""
| |
| echo "$NFILE vsf"
| |
| echo " Verifica se il server e in presenza di "
| |
| echo " attacco Syn Flood."
| |
| echo " E' possibile settare alcuni parametri per diminuire "
| |
| echo " la vulnerabilita' all'attacco (indicati nel corpo dello script)."
| |
| echo " I tentativi di attacco sono comunque tutti loggati."
| |
| echo ""
| |
| echo "$NFILE help"
| |
| echo " Visualizza questo messaggio"
| |
| echo -e "$NULL\n"
| |
| echo "Per ogni suggerimento:$EMAIL"
| |
| echo ""
| |
| exit 0
| |
|
| |
|
| ;;
| | ===Il percorso dei pacchetti=== |
| #***************************************************************INFO
| | I pacchetti, prima di entrare nella release di Testing compiono un tragitto per raggiungere un buon grado di maturit�. Quando vengono creati, possono essere inseriti in Experimental, se hanno bisogno di test approfonditi e non sono considerati completamente stabili dall'autore, oppure possono essere inseriti in Unstable, pronti per essere testati dagli sviluppatori4.7. Il pacchetto viene incluso in Testing (sostituendo eventualmente quello pi� vecchio) se: <br/> |
| info)
| | * Deve essere stato in unstable per 10, 5 o 2 giorni, in funzione dell'urgenza dell'upload; <br/> |
| clear
| | * Deve essere stato compilato e deve essere aggiornato su tutte le architetture su cui sia stato compilato in unstable; <br/> |
| COLOR=$MAGENTA
| | * Deve avere meno bug release-critical, o lo stesso numero, della versione corrente in "testing" (si veda sotto per maggiori informazioni); <br/> |
| msg=" Info ..."
| | * Tutte le sue dipendenze devono o essere soddisfatte dai pacchetti gi� in "testing", o essere soddisfatte dall'insieme di pacchetti che verranno installati nel contempo; <br/> |
| echo -e "$COLOR$msg"
| | * L'operazione di installazione del pacchetto in "testing" non dovr� danneggiare alcun pacchetto che sia gi� in "testing". <br/> |
| echo ""
| |
| ##
| |
| echo ""
| |
| echo " il PATH di questo script e' $NPATH/$NFILE"
| |
| echo " il PATH di iptables e' $IPT"
| |
| echo " l'interfaccia interna e' la $IIF"
| |
| echo " l'interfaccia esterna e' la $EIF"
| |
| echo " l'indirizzo IP del pc server/router e' $SERVER "
| |
| echo " l'indirizzo IP del pc client fidato e' $CLIENT"
| |
| echo " la rete locale e' $LOCALNET"
| |
| echo " l'indirizzo broadcast e' $BROADCAST"
| |
| echo " il DNS primario e' $DNS1"
| |
| echo " il DNS secondario e' $DNS2"
| |
| echo ""
| |
| echo -e "$NULL\n"
| |
|
| |
|
| exit 0
| | ===Da Testing a Stable=== |
| | Quando la versione di Testing raggiunge un buon grado di maturit�, avviene il passaggio da Testing a Stable. Prima di tutto viene dicharata una situazione di freeze, in cui non � pi� possibile inserire nuove versioni di un pacchetto (a meno che non sia fondamentale per la correzione di qualche bug) ma solo correggere i bug riscontrati. Quando la versione di Testing verr� valutata come sufficientemente stabile, verr� rilasciata come Stable. Dopo il rilascio della Stable, la nuova Testing verr� ricreata secondo le normali regole a partire da Unstable. |
|
| |
|
| ;;
| | ==Unstable== |
| #***************************************************************INFO
| | Unstable � la distribuzione per gli sviluppatori, come indicato sul sito ufficiale Debian, e l'uso di questa release in ambito lavorativo (o comunque produttivo) pu� portare a degli inconvenienti o instabilit�. � possibile, infatti, che a causa di qualche aggiornamento vengano introdotti dei bug che possano compromettere il normale funzionamento di qualche applicazione. |
| policy)
| |
| clear
| |
| COLOR=$WHITE
| |
| msg=" Politiche ..."
| |
| echo -e "$COLOR$msg"
| |
| $IPT -nvL
| |
| ##
| |
| ## espande la politica di netfilter
| |
| ## visualizzando le catene e informazioni sulle
| |
| echo -e "$NULL\n"
| |
| ##
| |
|
| |
|
| exit 0
| | E' inoltre possibile che, a causa dell'aggiornamento di alcune librerie o set di programmi, si possano creare delle situazioni di dipendenze non risolte che potrebbero rendere impossibile l'aggiornamento e/o l'instalazione di alcuni pacchetti. Il mio consiglio � di non utilizzarla, a meno di non avere una certa dimestichezza e familiarit� con il sistema Debian.<br> |
|
| |
|
| ;;
| | E' divertente notare che la versione '''unstable''' di Debian mantiene sempre il medesimo nome e cio� Sid, il ragazzaccio! |
|
| |
|
| #*********************************************************Verifica Syn Flood
| | ==Experimental== |
| vsf)
| | Experimental � un repository (e non una release) che contiene i pacchetti che in fase di testing da parte dei Debian Developer e che necessitano di lavoro prima di essere pronti per entrare in Unstable. |
| clear
| |
| COLOR=$YELLOW
| |
| msg=" Syn Flood ..."
| |
| echo -e "$COLOR$msg"
| |
| echo ""
| |
| echo " Verifico se siamo in presenza di Syn Flood"
| |
| echo ""
| |
| echo " Oltre 20-30 tentativi di connessione da uno stesso"
| |
| echo " indirizzo, indicano un tentativo di flood, verificare comunque i Log"
| |
| echo " prima di attivare le contromisure"
| |
| ##
| |
| netstat -npla | grep SYN_RECV
| |
| ##
| |
| echo -e "$NULL\n"
| |
|
| |
|
| exit 0
| |
|
| |
|
| ;;
| | ---- [[User:MaXeR|MaXeR]] |
| | | [[Categoria:Mondo Debian]] |
| #****************************************************************USO
| |
| *)
| |
| ##
| |
| clear
| |
| COLOR=$BLUE
| |
| msg="Firewall ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}"
| |
| echo -e "$COLOR$msg$NULL\n"
| |
| ##
| |
| | |
| exit 0
| |
| ;;
| |
| ##
| |
| esac
| |
| ##
| |
| #*******************************************************BLOCCO COMUNE
| |
| ##
| |
| echo -e "$COLOR"
| |
| ## Caricamento dei moduli necessari nel kernel
| |
| ##
| |
| ## Il vostro kernel potrebbe non avere
| |
| ## tutti questi moduli, e' sufficiente ricompilare se le funzionalita'
| |
| ## sono necessarie.
| |
| ##
| |
| ## NOTA: I seguenti moduli sono elencati solo per informazione
| |
| ## Non e' necessario inserirli manualmente nel kernel
| |
| ## a meno di casi particolari.
| |
| ##
| |
| # echo "Caricamento moduli..."
| |
| ##
| |
| # modulo base
| |
| modprobe ip_tables
| |
| ##
| |
| # modulo necessario alla stateful connection tracking
| |
| modprobe ip_conntrack
| |
| ##
| |
| # modulo filter, permette di droppare rifiutare o loggare i pacchetti
| |
| modprobe iptable_filter
| |
| ##
| |
| # modulo mangle
| |
| # modprobe iptable_mangle
| |
| ##
| |
| # modulo nat
| |
| modprobe iptable_nat
| |
| ##
| |
| # modulo LOG, permette di registrare i pacchetti bloccati in base alle catene
| |
| modprobe ipt_LOG
| |
| ##
| |
| # modulo utilizzato per limitare il numero di pacchetti per sec/min/hr
| |
| ##
| |
| modprobe ipt_limit
| |
| ##
| |
| # modulo masquerade
| |
| modprobe ipt_MASQUERADE
| |
| ##
| |
| # modulo owner
| |
| # modprobe ipt_owner
| |
| ##
| |
| # REJECT respinge il pacchetto restituendo una risposta ICMP
| |
| # configurabile, il default � "connection refused".
| |
| # modprobe ipt_REJECT
| |
| ##
| |
| # modulo mark, permette di marcare pacchetti sulla catena mangle
| |
| # modprobe ipt_mark
| |
| ##
| |
| # questo modulo permette di modificare il TCP MSS
| |
| ##
| |
| modprobe ipt_tcpmss
| |
| ##
| |
| # questo modulo permette di indicare porte multiple
| |
| # modprobe multiport
| |
| ##
| |
| # questo modulo consente controlli sui flags TCP
| |
| # modprobe ipt_state
| |
| ##
| |
| # controlli su flags invalidi
| |
| # modprobe ipt_unclean
| |
| ##
| |
| # supporto ftp non-PASV
| |
| # modprobe ip_nat_ftp
| |
| ##
| |
| # modulo per full ftp connection tracking
| |
| # modprobe ip_conntrack_ftp
| |
| ##
| |
| # modulo per full irc connection tracking
| |
| # modprobe ip_conntrack_irc
| |
| ##
| |
| #################
| |
| ## area kernel ##
| |
| #################
| |
| ##
| |
| echo "$SET forwarding... "
| |
| echo "$CF" >/proc/sys/net/ipv4/ip_forward
| |
| ##
| |
| echo "$SET syn-cookies (protezione syn-flood attacks)..."
| |
| echo "$SC" >/proc/sys/net/ipv4/tcp_syncookies
| |
| ##
| |
| echo "Riduco il numero di possibili SYN Floods..."
| |
| echo "1024" >/proc/sys/net/ipv4/tcp_max_syn_backlog
| |
| ##
| |
| ##
| |
| echo "$SET ICMP echo-request su indirizzi broadcast (Smurf amplifier)..."
| |
| # Questi parametri servono ad ignorare ogni ICMP echo requests
| |
| # inviato da indirizzi broadcast. Serve a prevenire
| |
| # un gran numero di attacchi smurfs e DoS.
| |
| echo "$ER" >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
| |
| ##
| |
| # Contromisure contro attacchi DoS
| |
| # echo "Disabilito ICMP echo-request (usare solo se si � sotto attacco Dos)"
| |
| # echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all
| |
| # #sotto attacco syn incrementare il valore di tcp_max_syn_backlog e decrementare
| |
| # #il valore dei timeout_*
| |
| # echo "100" > /proc/sys/net/ipv4/vs/timeout_synack
| |
| # echo "10" > /proc/sys/net/ipv4/vs/timeout_synrecv
| |
| # echo "128" > /proc/sys/net/ipv4/tcp_max_syn_backlog
| |
| ##
| |
| echo "$SET protezione defrag error... "
| |
| echo "$DE" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
| |
| ##
| |
| echo "$SET time-wait assassination hazards in tcp (RFC 1337)..."
| |
| #echo "$TW" >/proc/sys/net/ipv4/tcp_rfc1337
| |
| ##
| |
| echo "$SET sourcerouting and spoofing protection..."
| |
| for i in /proc/sys/net/ipv4/conf/*; do
| |
| ##
| |
| echo "$SET politica per source-routed packets..."
| |
| # Questa politica e' usata per accettare o rifiutare pacchetti
| |
| # di tipo 'source routed'. E' attiva di default, ma � considerata
| |
| # un rischio per la sicurezza.
| |
| echo "$SR" >$i/accept_source_route
| |
| ##
| |
| echo "$SET politica per ICMP Redirect accept/send..."
| |
| # Questa opzione disabilita la redirezione dei pacchetti ICMP.
| |
| # E' generalmente considerato un rischio per la sicurezza.
| |
| echo "$DR" >$i/accept_redirects
| |
| # Per questo motivo, e' preferibile accettare ICMP solo
| |
| # dal gateway di default (opzione secure_redirects).
| |
| echo "$ASR" >$i/send_redirects
| |
| echo "$SET secure ICMP redirects..."
| |
| echo "$ISR" >$i/secure_redirects
| |
| ##
| |
| # echo "Disabilito Proxy ARP ..."
| |
| # # E' un'opzione utilizzata per la realizzazione di DMZ;
| |
| # # � disabilitata in quanto non rientra negli scopi di questo script.
| |
| # # per maggiorni info: http://www.sjdjweis.com/linux/proxyarp/
| |
| # echo "0" >$i/proxy_arp
| |
| ##
| |
| echo "$SET source-address verification (prevent spoofing)..."
| |
| # Abilita i controlli previsti nel RFC1812.
| |
| # � raccomandato per sistemi basati su interfacce singole
| |
| # Disattivare se si hanno interfacce multiple collegate alla stessa rete.
| |
| # Questo controllo blocca i pacchetti che si presentano ad una interfaccia esterna
| |
| # con indirizzo forgiato per sembrare provenienti da interfaccia interna;
| |
| # il controllo e' comunque ripetuto in seguito.
| |
| echo "$SAV" >$i/rp_filter
| |
| ##
| |
| done
| |
| ##
| |
| echo "Applico settaggi controllo ..."
| |
| if [ -f /proc/sys/net/ipv4/icmp_destunreach_rate ]; then
| |
| echo "5" > /proc/sys/net/ipv4/icmp_destunreach_rate
| |
| fi
| |
| if [ -f /proc/sys/net/ipv4/icmp_echoreply_rate ]; then
| |
| echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate
| |
| fi
| |
| if [ -f /proc/sys/net/ipv4/icmp_paramprob_rate ]; then
| |
| echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate
| |
| fi
| |
| if [ -f /proc/sys/net/ipv4/icmp_timeexceed_rate ]; then
| |
| echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate
| |
| fi
| |
| ##
| |
| echo "$SET il Log su spoofed, source routed e redirect packets..."
| |
| # Questa opzione serve a loggare i pacchetti provenienti da indirizzi impossibili.
| |
| echo "$LOG" >/proc/sys/net/ipv4/conf/all/log_martians
| |
| ##
| |
| echo "$SET dynamic socket address rewriting..."
| |
| # Utile se si utilizza un indirizzo dinamico assegnato da DHCP.
| |
| echo "$DSR" > /proc/sys/net/ipv4/ip_dynaddr
| |
| ##
| |
| echo "Setto porte locali ..."
| |
| echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range
| |
| ##
| |
| ##
| |
| #################################
| |
| ## inizio competenza iptables ##
| |
| #################################
| |
| ##
| |
| echo "Azzero le chain..."
| |
| ##
| |
| for y in filter nat mangle ; do
| |
| $IPT -t $y -F
| |
| $IPT -t $y -X
| |
| done
| |
| ##
| |
| ## politica per la tabella filter
| |
| $IPT -P INPUT $chain
| |
| $IPT -P OUTPUT $outchain
| |
| $IPT -P FORWARD DROP
| |
| #NOTA: FORWARD e' su DROP in quanto il controllo e' lasciato a altre regole
| |
| ##
| |
| ## politica per la tabella mangle
| |
| for m in PREROUTING OUTPUT ; do
| |
| $IPT -t mangle -P $m ACCEPT
| |
| done
| |
| ##
| |
| echo "Genero catene utente ..."
| |
| $IPT -N chain-log
| |
| $IPT -A chain-log -j LOG --log-level info
| |
| # NOTA: Senza --log-level "info", si ha la scrittura dei log in ogni
| |
| # vty. E' un p� troppo ...
| |
| $IPT -A chain-log -j $chain
| |
| ##
| |
| # # Dynamic Address
| |
| # # La richiesta di assegnazione dell'indirizzo � di tipo broadcast
| |
| # # la risposta potrebbe non essere accettata
| |
| # # questa dichiarazione abilita il DHCP
| |
| # $IPT -A INPUT -p UDP --source-port 67 --destination-port 68 -j ACCEPT
| |
| # # DHCPd - abilitare in presenza di DHCP interno
| |
| # #$IPT -A INPUT -i $IIF -p tcp --sport 68 --dport 67 -j ACCEPT
| |
| # #$IPT -A INPUT -i $IIF -p udp --sport 68 --dport 67 -j ACCEPT
| |
| ##
| |
| ##
| |
| echo "Accetto connessioni da $LOCALHOST , $SERVER , $CLIENT ..."
| |
| $IPT -A INPUT -i lo -j ACCEPT
| |
| $IPT -A INPUT -i $IIF -s $CLIENT -j ACCEPT
| |
| $IPT -A INPUT -i $IIF -s $SERVER -j ACCEPT
| |
| # $IPT -A INPUT -i $IIF -s $LOCALNET -j ACCEPT
| |
| # $IPT -A OUTPUT -o lo -s $LOCALHOST -j ACCEPT
| |
| # $IPT -A OUTPUT -o lo -s $SERVER -j ACCEPT
| |
| ##
| |
| echo "Controllo di sanita' dei pacchetti sulla tabella nat-PREROUTING..."
| |
| $IPT -t nat -A PREROUTING -i $EIF -s $LOCALNET -j $chain
| |
| $IPT -t nat -A PREROUTING -i $EIF -s $LOCALHOST -j $chain
| |
| $IPT -t nat -A PREROUTING -i $EIF -s $CLIENT -j $chain
| |
| $IPT -t nat -A PREROUTING -i $EIF -s $SERVER -j $chain
| |
| # # E' anche possibile bloccare e loggare tutti i pacchetti
| |
| # # provenienti da indirizzi privati (chiaramente forgiati per
| |
| # # tentare un'intrusione) e non solo quelli relativi a $LOCALNET
| |
| # # per una lista completa:
| |
| # # http://www.iana.org/assignments/ipv4-address-space
| |
| ##
| |
| # # echo "Rifiuto pacchetti provenienti da indirizzi privati, multicast o riservati..."
| |
| ##
| |
| # # NOTA - le variabili A_r,B_r,C_r,D_r devono essere dimensionate
| |
| # # leggendo le liste degli indirizzi da rifiutare (file esterno)
| |
| # # il metodo e' riportato , ma non e' implementato nessun controllo,
| |
| # # i pacchetti in ingresso sono comunque tutti droppati.
| |
| # # questo controllo potrebbe essere comunque comodo, ma non e'
| |
| # # nelle finalit� di questo script.
| |
| # # non
| |
| # for CL in A_r B_r C_r D_mc E_r ; do
| |
| # $IPT -A INPUT -i $EIF -s $CL -j chain-log
| |
| # done
| |
| ##
| |
| # TCP & UDP
| |
| # Le porte standard sono elencate su:
| |
| # http://www.chebucto.ns.ca/~rakerman/port-table.html
| |
| # http://www.iana.org/assignments/port-numbers
| |
| ##
| |
| echo "Accetto connessioni RELATED/ESTABLISHED..."
| |
| #in input
| |
| $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
| |
| echo "Accetto ICMP type 0,3,11..."
| |
| ## codici ICMP - RFC 792
| |
| ## 0 Echo Reply
| |
| ## 3 Destination Unreachable, il router non ha trovato la destinazione del pacchetto.
| |
| ## 4 Source Quench
| |
| ## 5 Redirect, il router informa l'host che ha spedito il pacchetto di un qualche errore
| |
| ## 8 Echo, messaggio utile per sapere se un host � presente oppure no (utilizzato in Ping)
| |
| ## 11 Time Exceeded
| |
| ## 12 Parameter Problem, campo dell'header non valido
| |
| ## 13 Timestamp
| |
| ## 14 Timestamp Reply
| |
| ## 15 Information Request
| |
| ## 16 Information Reply
| |
| # Visitare: http://www.ee.siue.edu/~rwalden/networking/icmp.html
| |
| # per altre informazioni relative ai tipi ICMP.
| |
| for ic in 0 3 11 ; do
| |
| $IPT -A INPUT -i $EIF -p icmp --icmp-type $ic -j ACCEPT
| |
| done
| |
| ##
| |
| # Decommentare se si desidera che il proprio sistema risponda ai ping
| |
| $IPT -A INPUT -i $EIF -p ICMP --icmp-type 8 -j $chain
| |
| # $IPT -A INPUT -i $EIF -p ICMP --icmp-type 8 -j ACCEPT
| |
| ##
| |
| echo "Accetto ICMP dalla rete locale..."
| |
| $IPT -A INPUT -i $IIF -s $LOCALNET -p icmp -j ACCEPT
| |
| ##
| |
| echo "Accetto DNS replays"
| |
| $IPT -A INPUT -i $EIF -p udp -s $DNS1 --sport 53 -j ACCEPT
| |
| $IPT -A INPUT -i $EIF -p udp -s $DNS2 --sport 53 -j ACCEPT
| |
| # $IPT -A INPUT -i IIF -p tcp -s $DNS3 --sport 53 -j ACCEPT
| |
| $IPT -A INPUT -p udp --sport 53 -j ACCEPT
| |
| # il dns 3 si intende come locale, per questo si accettano le connessioni tcp
| |
| # $IPT -A INPUT -i $EIF -p tcp -s $DNS1 --sport 53 -j ACCEPT
| |
| # $IPT -A INPUT -i $EIF -p tcp -s $DNS2 --sport 53 -j ACCEPT
| |
| ##
| |
| echo "Blocco ogni pacchetto broadcast"
| |
| $IPT -A INPUT -p ALL -d 255.255.255.255 -j $chain
| |
| # $IPT -A INPUT -s 10.128.0.0/255.255.0.0 -j DROP
| |
| ##
| |
| echo "Attivo SYN-FLOODING protection..."
| |
| $IPT -N SYN-FLOOD
| |
| $IPT -A INPUT -p tcp --syn -j SYN-FLOOD
| |
| $IPT -t filter -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j chain-log
| |
| ##
| |
| # echo "Sperimentale..."
| |
| # #NOTA - e' disattivato in quanto potrebbe generare molti falsi positivi.
| |
| # $IPT -t nat -A PREROUTING -i $EIF -m unclean -j chain-log
| |
| ##
| |
| echo "Blocco le scansioni Xmas tree, i pacchetti senza flag, i flag irregolari, le scansioni..."
| |
| ##Blocco le scansioni Xmas tree
| |
| $IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j chain-log
| |
| $IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK -j chain-log
| |
| ##
| |
| ##Blocco i pacchetti senza flags
| |
| $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j chain-log
| |
| ##
| |
| ##Blocco i pacchetti SYN+RST e SYN+FIN
| |
| $IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j chain-log
| |
| $IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j chain-log
| |
| ##
| |
| ##Blocco le scansioni FIN
| |
| $IPT -A INPUT -p tcp --tcp-flags FIN FIN -j chain-log
| |
| ##
| |
| ##Elimino pacchetti broadcast netbios
| |
| $IPT -A INPUT -p udp --dport 135:139 -j $chain
| |
| ##
| |
| echo "Dirotto pacchetti NEW e INVALID verso CHAIN..."
| |
| $IPT -A INPUT -i $EIF -m state --state NEW,INVALID -j chain-log
| |
| $IPT -A INPUT -i $IIF -m state --state NEW,INVALID -j chain-log
| |
| ##
| |
| ##
| |
| ##################################################################
| |
| ## Servizi aperti all'esterno 'decommentare i servizi desiderati, attenzione!!' ##
| |
| ##################################################################
| |
| ##
| |
| # echo "Accetto connessioni su shell criptate dall'esterno..."
| |
| # $IPT -A INPUT -p tcp --dport 22 -j ACCEPT
| |
| ##
| |
| # echo "Accetto connessioni sendmail dall'esterno [pericoloso!!!]..."
| |
| # $IPT -A INPUT -p tcp --dport smtp -j ACCEPT
| |
| ##
| |
| # echo "Accetto http e https dall'esterno [pericoloso!!]... "
| |
| # $IPT -A INPUT -p tcp -m multiport --destination-port 80,443 -j ACCEPT
| |
| ##
| |
| # echo "Accetto POP3 dall'esterno [pericoloso!]..."
| |
| # $IPT -A INPUT -p tcp --sport 110 -j ACCEPT
| |
| ##
| |
| # Questo esempio serve per usare il transparent proxy
| |
| # $IPT -t nat -A PREROUTING -p tcp -s $LOCALNET --destination-port 80 -j RETURN
| |
| # $IPT -t nat -A PREROUTING -p tcp -s $LOCALNET --destination-port 443 -j RETURN
| |
| # Redirezione HTTP
| |
| # $IPT -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 3128
| |
| # Redirezione HTTPS
| |
| # $IPT -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 3128
| |
| | |
| ##
| |
| #######################
| |
| ## regole in uscita ##
| |
| #######################
| |
| ##
| |
| ## abilita servizio DNS per protocolli UDP
| |
| ## (attivare per policy drop su output)
| |
| # $IPT -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
| |
| ##
| |
| ## abilita la navigazione WEB ed il traffico HTTPS
| |
| ## (attivare per policy drop su output)
| |
| # $IPT -t filter -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
| |
| ##
| |
| ## abilita il traffico FTP
| |
| ## (attivare per policy drop su output)
| |
| # $IPT -t filter -A OUTPUT -o $EIF -p tcp --dport ftp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
| |
| ##
| |
| ## abilita le connessioni SMTP e POP3 in uscita
| |
| ## (attivare per policy drop su output)
| |
| # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
| |
| # $IPT -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
| |
| ##
| |
| ## abilita connessioni SSH (SecureShell) con attivazione Log
| |
| ## (attivare per policy drop su output)
| |
| # $IPT -t filter -A OUTPUT -p tcp --syn --dport 22 -m state --state NEW -j LOG --log-level info --log-prefix "---SSH from $EIF---"
| |
| # $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
| |
| ##
| |
| # echo "Impedisco l'uscita di pacchetti netbios..."
| |
| # il traffico di questi pacchetti potrebbe attivare
| |
| # eventuali connessioni 'dial on demand' a internet.
| |
| # $IPT -A OUTPUT -p udp --destination-port 135:139 -j DROP
| |
| ##
| |
| ##
| |
| ####################
| |
| ## regole particolari ##
| |
| ###################
| |
| ##
| |
| ##
| |
| ##
| |
| # echo "Imposto le regole sulla tabella MANGLE..."
| |
| # # Setto il TTL su tutti i pacchetti in uscita a 128.
| |
| # # per nascondere la propria rete dietro al router,
| |
| # # convertire i pacchetti uscenti dalla LAN ad un TTL
| |
| # # uguale a quello dei pacchetti generati dal router.
| |
| # # TTL non e' inserito nelle versioni comunemente
| |
| # # distribuite (senza patch-o-matic)
| |
| # $IPT -t mangle -A FORWARD -o $EIF -j TTL --ttl-inc 1
| |
| ##
| |
| echo "Risolvo il blocco derivante da ICMP fragmentation"
| |
| # Il target TCPMSS risolve i problemi di connessione derivanti da server
| |
| # che bloccano i pacchetti ICMP Fragmentation Needed.
| |
| # Tale blocco spesso blocca il trasferimento dati anche in presenza di connessioni stabilite.
| |
| $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
| |
| | |
| ##
| |
| #############################
| |
| ## regole su FORWARD e nat ##
| |
| #############################
| |
| ##
| |
| ##
| |
| ##
| |
| $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
| |
| $IPT -A FORWARD -i $EIF -m state --state NEW,INVALID -j $chain
| |
| $IPT -A FORWARD -o $EIF -j ACCEPT
| |
| echo "$MSET SNAT (MASQUERADE) su $EIF"
| |
| ##
| |
| #usare su indirizzi dinamici (esempio connessioni dial-up)
| |
| $IPT -t nat -A POSTROUTING -o $EIF -j MASQUERADE
| |
| #usare solo su indirizzi statici
| |
| # $IPT -t nat -A POSTROUTING -o $EIF -j SNAT --to $EIP
| |
| ##
| |
| ##
| |
| ###############
| |
| ## fine del FW ##
| |
| ###############
| |
| ##
| |
| ##
| |
| echo ""
| |
| echo "Da ora la politica per INPUT e' $chain"
| |
| echo "la politica per OUTPUT e' $outchain"
| |
| echo "IP forwarding e' settato su $fw "
| |
| echo ""
| |
| echo -e "$NULL\n"
| |
| ##
| |
| netfilter
| |
| ##
| |
| ##The End..
| |
| </pre>
| |
| | |
| ----
| |
| Autore: debian
| |
| [[Categoria:Firewalling]][[Categoria:Script]]
| |