Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 952

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Quick&amp;Easy Configuration HOWTO: Firewall</TITLE>
 <LINK HREF="Quick-Easy-Configuration-HOWTO-11.html" REL=next>
 <LINK HREF="Quick-Easy-Configuration-HOWTO-9.html" REL=previous>
 <LINK HREF="Quick-Easy-Configuration-HOWTO.html#toc10" REL=contents>
</HEAD>
<BODY>
<A HREF="Quick-Easy-Configuration-HOWTO-11.html">Avanti</A>
<A HREF="Quick-Easy-Configuration-HOWTO-9.html">Indietro</A>
<A HREF="Quick-Easy-Configuration-HOWTO.html#toc10">Indice</A>
<HR>
<H2><A NAME="s10">10. Firewall</A></H2>

<P>Un firewall &egrave; essenzialmente un dispositivo che permette di gestire come
un filtro il traffico tra due interfacce di rete. In questa sezione vedremo
come impostare un firewall per un sistema Linux, sia per proteggere un singolo
PC, sia una rete locale, in entrambe le situazioni nel caso di collegamento
a internet. Inoltre vedremo come poter consentire la condivisione di una connessione
internet, in modo che un singolo PC possa isolare da possibili attacchi esterni
e allo stesso tempo permetta l'accesso all'esterno alla rete locale. Per accesso
esterno considero solo quello in entrata: tutti i PC della rete potranno inviare
e ricevere tutte le informazioni che vorranno, ma non potranno offrire servizi
all'esterno (infatti per questo servizio serve un demone apposito, rinetd).
Inoltre l'inserimento nella macchina firewall di un server dns e di un cache
proxy permetteranno di sveltire il traffico: il server dns locale permette
infatti di avere una risposta pi&ugrave; immediata alle richieste di risoluzione dei
nomi in indirizzi ip, mentre il cache proxy permette di tenere copie locali
delle pagine web e dei file gi&agrave; scaricati, evitando una nuova richiesta esterna
(questi due tipi di servizi sono trattati nelle sezioni DNS e WWWOFFLE di questo
howto). 
<P>Linux contiene gi&agrave; al suo interno tutto il necessario per implementare
un firewall e il masquerading: si tratta del tool ipchains dei kernel 2.2.x.
I kernel della serie 2.0.x usavano ipfwadm, mentre quelli della futura versione
2.4.x useranno iptables: qui si tratter&agrave; solo la gestione con ipchains e kernel
2.2.x (e in futuro iptables), mentre ipfwadm non verr&agrave; trattato. Per poter
utilizzare ipchains, &egrave; necessario che il kernel sia compilato con le opzioni
di firewalling seguenti impostate a Yes:
<P>
<UL>
<LI>Network firewalls</LI>
<LI>IP: firewalling</LI>
<LI>IP: always defragment</LI>
<LI>IP: transparent proxy support</LI>
<LI>IP: masquerading</LI>
<LI>IP: ICMP masquerading</LI>
</UL>
<P>pi&ugrave; naturalmente tutto quello che vi serve per la rete (networking, ppp,
ethernet, routing, ecc.). Ipchains suddivide il traffico in tre tronconi, fornendo
tre filtri: input, output e forward, gestibili tramite una serie di regole
che stabiliscono il trattamento del pacchetto arrivato. Le regole vengono applicate
nell'ordine in cui sono inserite, e se non &egrave; presente alcuna regola specifica,
si applica la politica di default. In questo howto prendereno in considerazione
solo le cose essenziali e solo quelle trattate nello script, per il resto si
rimanda al Firewall-Howto e all'Ipchains-Howto, oltre all'ottima sezione degli
Appunti Linux. L'impostazione tipica di una regola &egrave; la seguente:
<P>
<HR>
<PRE>
ipchains &lt;opzione-di-comando&gt; &lt;filtro&gt; [&lt;regola&gt;] [&lt;obiettivo&gt;]
</PRE>
<HR>
<P>Le opzioni di comando sono:
<P>
<UL>
<LI>-F o --flush : elimina tutte le regole del filtro specificato</LI>
<LI>-D o --delete : elimina una o pi&ugrave; regole dal filtro specificato</LI>
<LI>-A o --append : aggiunge una regola in coda a quelle del filtro selezionato</LI>
<LI>-I o --insert : inserisce una regola in una posizione stabilita del filtro
selezionato</LI>
<LI>-R o --replace : sostituisce una regola del filtro selezionato</LI>
<LI>-L o --list : elenca le regole di un uno o di tutti i filtri</LI>
<LI>-P o --policy : cambia la politica predefinita per il filtro specificato</LI>
</UL>
<P>I filtri sono (rispettivamente per pacchetti in entrata, uscita e in transito):
<P>
<UL>
<LI>input</LI>
<LI>output</LI>
<LI>forward</LI>
</UL>
<P>Gli obiettivi sono:
<P>
<UL>
<LI>ACCEPT : consente il transito del pacchetto</LI>
<LI>DENY : impedisce il transito del pacchetto, limitandosi a ignorarlo</LI>
<LI>REJECT : impedisce il transito del pacchetto notificando all'origine il
rifiuto (viene inviato un messaggio ICMP specificante che il pacchetto &egrave; stato
rifiutato)</LI>
</UL>
<P>Le regole invece usano le seguenti opzioni (le parentesi [] indicano
qualcosa di opzionale, mentre il ! indica una negazione):
<P>
<UL>
<LI>-p [!] {tcp|udp|icmp|all} : stabilisce il protocollo
cui si applica la regola (default: all)</LI>
<LI>-i [!] interfaccia : stabilisce a quale interfaccia si applica
la regola</LI>
<LI>-j obiettivo : stabilisce cosa fare in caso di corrispondenza della regola</LI>
<LI>-s [!] indirizzo[/maschera] : l'indirizzo sorgente
da cui arriva il pacchetto (default : 0.0.0.0/0, cio&egrave; ogni indirizzo)</LI>
<LI>-d [!] indirizzo[/maschera] : l'indirizzo cui &egrave; diretto
il pacchetto (default : 0.0.0.0/0, cio&egrave; ogni indirizzo)</LI>
<LI>-l : effettua il log di quanto passa attraverso la regola</LI>
<LI>-n : non risolve i nomi di domini (lascia l'ip numerico)</LI>
</UL>
<P>Altre informazioni sono reperibili nei documenti su indicati. Il mascheramento
IP permette di far credere all'esterno che l'origine delle connessioni &egrave; sempre
un solo nodo, anche quando in realt&agrave; si tratta di un nodo interno ad una rete
privata. Naturalmente, il nodo che esegue il mascheramento &egrave; poi in grado di
distinguere quali siano stati i nodi mascherati che hanno originato la connessione,
girando a loro i pacchetti di loro competenza. 
<P>Lo script seguente funziona sia come firewall che da mascheramento di una
rete locale interna verso Internet. E' configurato per l'accesso dialup via
ppp (usa ppp0). Leggete i commenti nel file, modificate dove indicato e andate
in pace. Per sapere come abilitare il supporto per firewall e masquerading,
guardate nella pagina relativa al kernel. Dovrebbe fare la maggior parte dei
controlli su esistenza di file, connessione, parametri, e segnalarvi se qualcosa
non va. 
***Nota*** per il mascheramento di ICQ, dovete scaricare, compilare
e installare "ip_masq_icq", reperibile all'URL 
<A HREF="http://freeshell.org/~djsf/masq-icq/">http://freeshell.org/~djsf/masq-icq/</A> oppure all'URL 
<A HREF="http://djsf.narod.ru/masq-icq/">http://djsf.narod.ru/masq-icq/</A> (un grazie a
Filippo Panessa per il suggerimento!). In ICQ2000 non funziona ancora il trasferimento
file. Nella configurazione dei client che vengono mascherati, dovete impostare
nelle loro opzioni l'uso di un firewall sull'intervallo di porte 2000:4000.
<P>
<HR>
<PRE>
#!/bin/bash
#
#  ==========================================================================
#  ========= Script per la configurazione di un Firewall per Linux ==========
#  ==========================================================================
#
# Da utilizzarsi esclusivamente per una macchina stand-alone connessa
# ad internet tramite connessione dial-up. E' necessario disporre di
# un kernel della serie 2.2.x o 2.3.x compilato con il supporto
# del masquerading, del firewall e l'opzione &quot;always defragment&quot;.
# Viene filtrato cio' che entra e permesso alla rete di uscire
#
# $Revisione: 7.0$
# modificato da MrShark su un lavoro precedente di Maurizio Cimaschi,
# con vari preziosi suggerimenti di Pierluigi De Rosa e Marco d'Itri.
# (Se ci sono errori, fatemeli conoscere a: &lt;mrshark@tiscalinet.it&gt;).
#
# Utilizzo: firewall start|stop|status
#     start = attiva il firewall
#     stop = disattiva il firewall
#     status = impostazioni correnti del firewall
#
# by Antonio Fragola, aka MrShark - The Informaniac
#
 
#------------------------------ verifica che lo script sia avviato da root
if [ $UID !=0 ]; then
    clear
    echo -e &quot;\aATTENZIONE: solo l'utente root puo' avviare il firewall!&quot;
    exit 1
fi

#  ==========================================================================
#  =========== Definizione delle variabili d'ambiente necessarie ============
#  ==========================================================================
 
#------------------------------ variabili utili
    IPCHAINS=&quot;/sbin/ipchains&quot;
    INTERFACES=`/sbin/ifconfig | grep Link | cut -d \  -f 1`
    CURRENT_KERNEL=`uname -r`
    IP_MASQ_MODULES=&quot;ftp irc quake&quot;
    #IP_MASQ_MODULES=&quot;cuseeme ftp irc quake raudio vdolive&quot;
    INTERFACE=&quot;ppp0&quot;
    INTERFACEMASK=&quot;255.255.255.255&quot;
    INTERFACEIP=`/sbin/ifconfig $INTERFACE | grep inet | cut -d : -f 2 | cut -d \  -f 1`
    LOCALIP=&quot;$INTERFACEIP/$INTERFACEMASK&quot;
    LOCALNET=&quot;192.168.0.0/16&quot;
    ANYWHERE=&quot;0.0.0.0/0&quot;
    LOOPBACK=&quot;127.0.0.0/8&quot;
    CLASS_A=&quot;10.0.0.0/8&quot;
    CLASS_B=&quot;172.16.0.0/12&quot;
    CLASS_C=&quot;192.168.0.0/16&quot;
    CLASS_D_MULTICAST=&quot;224.0.0.0/4&quot;
    CLASS_E_RESERVED_NET=&quot;240.0.0.0/5&quot;
    NFS_PORT=&quot;2049&quot;                 # (TCP/UDP) NFS
    SOCKS_PORT=&quot;1080&quot;               # (TCP) Socks
    # X Windows alloca le porte a partire dalla 6000 e incrementa
    # fino alla 6063 per ogni server addizionale in funzione.
    XWINDOW_PORTS=&quot;6000:6063&quot;       # (TCP) X windows
    # traceroute di solito usa -S 32769:65535 -D 33434:33523
    TRACEROUTE_SRC_PORTS=&quot;32769:65535&quot;
    TRACEROUTE_DEST_PORTS=&quot;33434:33523&quot;
    PRIVPORTS=&quot;0:1023&quot;
    UNPRIVPORTS=&quot;1024:65535&quot;
     # SSH incomincia dalla porta 1023 e va a scalare fino alla 513
    SSH_PORTS=&quot;1022:1023&quot;
 
#------------------------------ codici escape colori
    RED=&quot;\\033[1;31m&quot;
    GREEN=&quot;\\033[0;32m&quot;
    WHITE=&quot;\\033[0;39m&quot;
    CYAN=&quot;\\033[0;36m&quot;
    BLUE=&quot;\\033[1;34m&quot;
    ORANGE=&quot;\\033[0;33m&quot;
    YELLOW=&quot;\\033[1;33m&quot;
    MAGENTA=&quot;\\033[1;35m&quot;
 
#  ==========================================================================
#  ================== Definizione dei servizi utilizzabili ==================
#  ============ ON=Servizio attivo    OFF=Servizio non richiesto ============
#  ==========================================================================
 
# masquerading: ON solo se si ha una rete locale che deve accedere a internet
MASQ=&quot;ON&quot;
FTP=&quot;ON&quot;
DNS1=&quot;ON&quot;
DNS2=&quot;ON&quot;
HTTP=&quot;ON&quot;
SMTP=&quot;ON&quot;
NNTP=&quot;ON&quot;
POP3=&quot;ON&quot;
ICMP=&quot;ON&quot;
AUTH=&quot;ON&quot;
IRC=&quot;OFF&quot;
ICQ=&quot;OFF&quot;
SSH="ON"
NAP="OFF"
 
#  ==========================================================================
#  ============== Definizione degli IP dei servizi del provider =============
#  ==========================================================================
 
# de/commentare solo le sezioni d'interesse o aggiungerne altre
#------------------------------ IP di libero
    DNS1_IP=&quot;195.210.91.1&quot;
    DNS2_IP=&quot;195.210.91.2&quot;
    SMTP_IP=&quot;193.70.192.50&quot;
    NNTP_IP=&quot;192.106.1.6&quot;
#------------------------------ IP di iol1055
    #DNS1_IP=&quot;195.210.91.1&quot;
    #DNS2_IP=&quot;195.210.91.2&quot;
    #SMTP_IP=&quot;193.70.192.50&quot;
    #NNTP_IP=&quot;193.70.192.201&quot;
#------------------------------ IP di tiscali
    #DNS1_IP=&quot;195.130.224.18&quot;
    #DNS2_IP=&quot;195.130.225.129"
    #SMTP_IP=&quot;195.130.224.22&quot;
    #NNTP_IP=&quot;195.130.224.123&quot;
#------------------------------ IP di clubnet
    #DNS1_IP=&quot;212.216.112.222&quot;
    #DNS2_IP=&quot;212.216.172.162&quot;
    #attenzione: clubnet usa smtp con piu' IP - cercarli con nslookup
    #SMTP_IP=&quot;212.216.176.50&quot;
    #NNTP_IP=&quot;194.243.154.18&quot;
 
# Attenzione: aggiungere TUTTI gli IP dei server POP3 usati, non solo
# quelli del provider in uso, altrimenti non si potra' scaricare la posta
    #pop3 tiscali
    POP3_1_IP=&quot;195.130.224.23&quot;
    #pop3 iol1055
    POP3_2_IP=&quot;193.70.192.80&quot;
    #pop3 libero
    POP3_3_IP=&quot;193.70.192.70&quot;
    #pop3 clubnet
    #attenzione: clubnet usa pop con piu' IP
    POP3_4_IP=&quot;212.216.176.71&quot;
    POP3_5_IP=&quot;212.216.176.64&quot;
    POP3_6_IP=&quot;212.216.176.65&quot;
    POP3_7_IP=&quot;212.216.176.67&quot;
    POP3_8_IP=&quot;212.216.176.68&quot;
    POP3_9_IP=&quot;212.216.176.69&quot;
    POP3_10_IP=&quot;212.216.176.70&quot;
 
#  ==========================================================================
#  =========== Da qui in poi non toccare niente (al piu' solo la ===========
#  ========== parte del POP3 per aggiungere/rimuovere gli account) ==========
#  ==========================================================================
 
case &quot;$1&quot; in
 
#------------------------------ opzione start dello script
    start)
#------------------------------ verifica esistenza interfaccia
        if [ -z $INTERFACEIP ]; then
#------------------------------ se non esiste, avverti ed esci con errore 1
            clear
            echo -e &quot;${RED}ATTENZIONE: ${YELLOW}l'interfaccia &quot;
            echo -e &quot;${RED}ppp0${YELLOW} NON e' attiva nel sistema.&quot;
            echo -e &quot;Firewall NON attivato. Controllare la connessione Internet.&quot;
            echo -en &quot;${WHITE}Interfacce attualmente attive nel PC: &quot;
            for irf in ${INTERFACES} ; do
                echo -en &quot;${RED}${irf}${WHITE} &quot;
            done
            echo -e &quot;\n\a&quot;
            exit 1
#------------------------------ se l'interfaccia esiste, si procede
        else
            echo
            echo &quot;Attivazione del Firewall in corso...&quot;
            echo -e &quot;Indirizzo IP locale sull'interfaccia ${YELLOW}$INTERFACE&quot;
            echo -e &quot;${WHITE} : ${RED}$LOCALIP${WHITE}&quot;
            echo -n &quot;Flushing delle regole eventualmente presenti : &quot;
            $IPCHAINS -F input
            $IPCHAINS -F output
            $IPCHAINS -F forward
            echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
 
#  ==========================================================================
#  =========================== Regole in ingresso ===========================
#  ==========================================================================
 
#------------------------------ attivazione protezioni varie
            echo -n &quot;Permesso al traffico locale sull'interfaccia di loopback : &quot;
            $IPCHAINS -A input -s $ANYWHERE -i lo -j ACCEPT
            $IPCHAINS -A input -s $LOCALNET -d $ANYWHERE -j ACCEPT
            echo -e &quot;\t[ ${GREEN}OK ${WHITE}]&quot;
            echo -n &quot;Attivazione Source Address Verification : &quot;
            if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
                for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
                    echo 1 &gt; $f
                done
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t[ ${RED}NO ${WHITE}]&quot;
                echo -n &quot;SAV non disponibile, utilizzo di ipchains : &quot;
                $IPCHAINS -A input -s 127.0.0.1 -i lo -j ACCEPT
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            fi
 
            echo -n &quot;Attivazione TCP SYN Cookie Protection : &quot;
            if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
                echo 1 &gt;/proc/sys/net/ipv4/tcp_syncookies
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
            echo -n &quot;Attivazione Always Defragging Protection : &quot;
            if [ -e /proc/sys/net/ipv4/ip_always_defrag ]; then
                echo 1 &gt; /proc/sys/net/ipv4/ip_always_defrag
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
            echo -n &quot;Attivazione Broadcast Echo Protection : &quot;
            if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
                echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
            echo -n &quot;Attivazione Bad Error Message Protection : &quot;
            if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
                echo 1 &gt; /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
            echo -n &quot;Disattivazione ICMP Redirect Acceptance : &quot;
            if [ -e /proc/sys/net/ipv4/conf/all/accept_redirects ]; then
                for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
                    echo 0 &gt; $f
                done
                echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
            echo -n &quot;Disattivazione Source Routed Packets : &quot;
            if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
                for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
                    echo 0 &gt; $f
                done
                echo -e &quot;\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
            echo -e &quot;${YELLOW}Attivazione dei servizi in ingresso richiesti : ${WHITE}&quot;
            echo -n &quot;Impostazione della POLICY di ingresso a DENY : &quot;
            $IPCHAINS -P input DENY
            echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
 
#------------------------------ DNS1 (53)
            echo -n &quot;Server DNS primario : &quot;
            if [ $DNS1 = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $DNS1_IP 53 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p udp -s $DNS1_IP 53 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ DNS2 (53)
            echo -n &quot;Server DNS secondario : &quot;
            if [ $DNS2 = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $DNS2_IP 53 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p udp -s $DNS2_IP 53 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ HTTP (80) e HTTPS (443)
            echo -n &quot;Navigazione WEB : &quot;
            if [ $HTTP = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s 0/0 80 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp ! -y -s 0/0 443 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ SMTP (25)
            echo -n &quot;Invio posta : &quot;
            if [ $SMTP = &quot;ON&quot; ]; then
            $IPCHAINS -A input -p tcp -s $SMTP_IP 25 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
            # $IPCHAINS -A input -p tcp -s $ANYWHERE 25 -d $LOCALIP \
            #        $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ POP3 (110)
            echo -n &quot;Prelievo posta : &quot;
            if [ $POP3 = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp -s $POP3_1_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_2_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_3_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_4_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_5_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_6_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_7_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_8_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_9_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp -s $POP3_10_IP 110 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ NNTP (119)
            echo -n &quot;Newsgroup Usenet : &quot;
            if [ $NNTP = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $NNTP_IP 119 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ FTP (20/21)
            echo -n &quot;File Transfer Protocol : &quot;
            if [ $FTP = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y --source-port 21 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                #FTP Port Mode (normale)
                $IPCHAINS -A input -p tcp --source-port 20 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                #FTP Passive Mode (senza questa i browser non accedono ai siti FTP)
                $IPCHAINS -A input -p tcp ! -y --source-port $UNPRIVPORTS \
                    -d $LOCALIP $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ SSH (22)
            echo -n &quot;Secure Shell : &quot;
            if [ $SSH = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 22 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 22 -d $LOCALIP \
                    $SSH_PORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ ICMP (solo tipi 0/3/11)
            echo -n &quot;Traffico ICMP : &quot;
            if [ $ICMP = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p icmp -s $ANYWHERE 0 -d $LOCALIP -j ACCEPT
                $IPCHAINS -A input -p icmp -s $ANYWHERE 3 -d $LOCALIP -j ACCEPT
                $IPCHAINS -A input -p icmp -s $ANYWHERE 11 -d $LOCALIP -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ AUTH (113)
            echo -n &quot;Richieste di identificazione : &quot;
            if [ $AUTH = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -d $LOCALIP 113 -j ACCEPT
                echo -e &quot;\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ IRC (6667)
            echo -n &quot;Internet Relay Chat : &quot;
            if [ $IRC = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 6667 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ ICQ (2000:4000)
            echo -n &quot;ICQ : &quot;
            if [ $ICQ = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 2000:4000 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                $IPCHAINS -A input -p udp -s $ANYWHERE 2000:4000 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ NAPSTER (6699)
            echo -n &quot;NAPSTER : &quot;
            if [ $NAP = &quot;ON&quot; ]; then
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 6699 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e &quot;\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
            else
                echo -e &quot;\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
 
#------------------------------ blocco e log
            echo -n &quot;Blocco e log di tutto il resto : &quot;
            # Rifiuta pacchetti spoof che simulano di provenire dall'esterno.
            $IPCHAINS -A input -i $INTERFACE -s $LOCALIP -j DENY -l
            # Rifiuta pacchetti che sembrano provenire da una rete privata di Classe A
            $IPCHAINS -A input -i $INTERFACE -s $CLASS_A -j DENY
            $IPCHAINS -A input -i $INTERFACE -d $CLASS_A -j DENY -l
            # Rifiuta pacchetti che sembrano provenire da una rete privata di Classe B
            $IPCHAINS -A input -i $INTERFACE -s $CLASS_B -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -d $CLASS_B -j DENY -l
            # Rifiuta pacchetti che sembrano provenire da una rete privata di Classe C
            $IPCHAINS -A input -i $INTERFACE -s $CLASS_C -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -d $CLASS_C -j DENY -l
            # Rifiuta pacchetti che sembrano provenire dall'interfaccia di Loopback
            $IPCHAINS -A input -i $INTERFACE -s $LOOPBACK -j DENY -l
            # Rifiuta pacchetti broadcast address SOURCE
            $IPCHAINS -A input -i $INTERFACE -s $INTERFACEMASK -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -d $ANYWHERE -j DENY -l
            # Rifiuta pacchetti multicast addresses di Classe D (in.h) (NET-3-HOWTO)
            # Il Multicast e' illegale come indirizzo sorgente, ed usa UDP.
            $IPCHAINS -A input -i $INTERFACE -s $CLASS_D_MULTICAST -j DENY -l
            # Rifiuta pacchetti  da indirizzi IP riservati di Classe E
            $IPCHAINS -A input -i $INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l
            # Rifiuta pacchetti con indirizzi definiti riservati dall'IANA
            # 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.*
            # 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.*
            # 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.*
            $IPCHAINS -A input -i $INTERFACE -s 1.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 2.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 5.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 7.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 23.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 27.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 31.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 37.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 39.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 41.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 42.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 49.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 50.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 58.0.0.0/7 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 60.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 65.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 66.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 67.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 68.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 69.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 70.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 71.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 72.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 73.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 74.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 75.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 76.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 77.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 78.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 79.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 80.0.0.0/4 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 96.0.0.0/4 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 112.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 113.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 114.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 115.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 116.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 117.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 118.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 119.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 120.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 121.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 122.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 123.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 124.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 125.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 126.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 197.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 217.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 218.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 219.0.0.0/8 -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -s 220.0.0.0/6 -j DENY -l
#------------------------------ porte TCP non privilegiate
            # NFS: instauramento connessione TCP
            $IPCHAINS -A input -i $INTERFACE -p tcp -y -d $LOCALIP \
                $NFS_PORT -j DENY -l
            # Xwindow: instauramento connessione
            $IPCHAINS -A input -i $INTERFACE -p tcp -y -d $LOCALIP \
                $XWINDOW_PORTS -j DENY -l
            # SOCKS: instauramento connessione
            $IPCHAINS -A input -i $INTERFACE -p tcp -y -d $LOCALIP \
                $SOCKS_PORT -j DENY -l
#------------------------------ porte UDP non privilegiate
            # NFS: instauramento connessione UDP
            $IPCHAINS -A input -i $INTERFACE -p udp -d $LOCALIP \
                $NFS_PORT -j DENY -l
            # TRACEROUTE UDP in ingresso
            $IPCHAINS -A input -i $INTERFACE -p udp -s $ANYWHERE \
                $TRACEROUTE_SRC_PORTS -d $LOCALIP $TRACEROUTE_DEST_PORTS -j DENY -l
#------------------------------ altri log
            $IPCHAINS -A input -i $INTERFACE -p tcp -d $LOCALIP -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -p udp -d $LOCALIP $PRIVPORTS \
                -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -p udp -d $LOCALIP $UNPRIVPORTS \
                -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -p icmp -s $ANYWHERE 5 -d $LOCALIP \
                -j DENY -l
            $IPCHAINS -A input -i $INTERFACE -p icmp -s $ANYWHERE 13:255 -d $LOCALIP \
                -j DENY -l
            echo -e &quot;\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
 
#  ==========================================================================
#  ======================= Mascheramento all' esterno =======================
#  ==========================================================================
 
#------------------------------ verifica esistenza moduli mascheramento
            if [ $MASQ = &quot;ON&quot; ]; then
                echo -e &quot;${YELLOW}Mascheramento : ${WHITE}&quot;
                echo -n &quot;Controllo presenza moduli necessari : &quot;
                MASQ_PRESENT=&quot;&quot;
                for mod in ${IP_MASQ_MODULES}; do
                    if [ ! -e /lib/modules/$CURRENT_KERNEL/ipv4/ip_masq_${mod}.o ]; then
                        MASQ_PRESENT=&quot;err&quot;
                    fi
                done
#------------------------------ se esistono, attiva mascheramento
                if [ -z ${MASQ_PRESENT} ]; then
                    echo -e &quot;\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
                    echo -n &quot;Installazione dei moduli necessari al Mascheramento : &quot;
                    for mod in ${IP_MASQ_MODULES} ; do
                        /sbin/insmod &quot;ip_masq_${mod}&quot;
                    done
                    echo -e &quot;\t\t[ ${GREEN}OK ${WHITE}]&quot;
                    echo -n &quot;Attivazione IP forwarding : &quot;
                    echo 1 &gt; /proc/sys/net/ipv4/ip_forward
                    echo -e &quot;\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
                    echo -n &quot;Impostazione della POLICY di inoltro a DENY : &quot;
                    $IPCHAINS -P forward DENY
                    $IPCHAINS -A forward -p all -s $LOCALNET -d $ANYWHERE -j MASQ
                    echo -e &quot;\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
                    echo -n &quot;Impostazione Timeout mascheramento connessioni TCP a 10 ore : &quot;
                    $IPCHAINS -M -S 36000 0 0
                    echo -e &quot;\t[ ${GREEN}OK ${WHITE}]&quot;
                    echo -n &quot;Blocco e log di tutto il resto : &quot;
                    $IPCHAINS -A forward -j DENY -s $ANYWHERE -d $ANYWHERE -l
                    echo -e &quot;\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
#------------------------------ se non esistono, avverti e continua senza
                else
                    echo -e &quot;\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
                    echo
                    echo -e &quot;${RED}Errore!!! Moduli per il Mascheramento &quot;
                    echo -e &quot;non presenti nel sistema. Ricompilare il kernel col &quot;
                    echo -e &quot;supporto per firewall e masquerading.${WHITE}&quot;
                    echo
                fi
            else
                echo -en &quot;${YELLOW}Mascheramento : ${WHITE}&quot;
                echo -e &quot;\t\t\t\t\t\t[ ${RED}NO ${WHITE}]&quot;
            fi
        fi
;;
 
#------------------------------ opzione stop dello script
    stop)
        clear
        echo &quot;Disattivazione del Firewall in corso...&quot;
        $IPCHAINS -F
        $IPCHAINS -P input ACCEPT
        $IPCHAINS -P forward ACCEPT
        MASQ_PRESENT=&quot;&quot;
        for mod in ${IP_MASQ_MODULES} ; do
            if [ ! -e /lib/modules/$CURRENT_KERNEL/ipv4/ip_masq_${mod}.o ]; then
                MASQ_PRESENT=&quot;err&quot;
            fi
        done
        if [ -z ${MASQ_PRESENT} ] ; then
            echo -n &quot;Rimozione dei moduli necessari al Mascheramento : &quot;
            for mod in ${IP_MASQ_MODULES} ; do
                /sbin/rmmod &quot;ip_masq_${mod}&quot;
            done
            echo -e &quot;\t\t[ ${GREEN}OK ${WHITE}]&quot;
            echo -n &quot;Disattivazione IP forwarding : &quot;
            echo 0 &gt; /proc/sys/net/ipv4/ip_forward
            echo -e &quot;\t\t\t\t\t[ ${GREEN}OK ${WHITE}]&quot;
        fi
        echo -e &quot;${YELLOW}ATTENZIONE: IL FIREWALL NON E' PIU' OPERATIVO${WHITE}&quot;
;;
 
#------------------------------ opzione status dello script
    status)
        clear
        echo &quot;Impostazioni attuali del firewall : &quot;
        echo -e &quot;Indirizzo IP locale sull'interfaccia ${YELLOW}$INTERFACE${WHITE} : \
            ${RED}$LOCALIP${WHITE}&quot;
        $IPCHAINS -L
;;
 
#------------------------------ nessuna o errata opzione fornita allo script
    *)
        clear
        echo -e &quot;${BLUE}############################################################${WHITE}&quot;
        echo -en &quot;${BLUE}###${YELLOW}         Script di impostazione &quot;
        echo -e &quot;${MAGENTA}FIREWALL ${YELLOW}v7.0         ${BLUE}###${WHITE}&quot;
        echo -e &quot;${BLUE}############################################################${WHITE}&quot;
        echo -e &quot;${YELLOW}Utilizzo:${WHITE} firewall start|stop|status&quot;
        echo -e &quot;\t${CYAN}start${WHITE} = attiva il firewall&quot;
        echo -e &quot;\t${CYAN}stop${WHITE} = disattiva il firewall&quot;
        echo -e &quot;\t${CYAN}status${WHITE} = impostazioni correnti del firewall&quot;
        echo
        echo -e &quot;${RED}ATTENZIONE: ${YELLOW}ricorda che l'interfaccia \
            ${RED}ppp0${YELLOW} e' attiva&quot;
        echo -e &quot;solo DOPO aver effettuato la connessione a Internet.&quot;
        echo -en &quot;${WHITE}Interfacce attualmente attive nel PC: &quot;
        for irf in ${INTERFACES} ; do
            echo -en &quot;${RED}${irf}${WHITE} &quot;
        done
        echo -e &quot;\n\a&quot;
;;
esac
exit 0
 
</PRE>
<HR>
<P>THIS IS THE END, MY ONLY FRIEND (by JIM).
<HR>
<A HREF="Quick-Easy-Configuration-HOWTO-11.html">Avanti</A>
<A HREF="Quick-Easy-Configuration-HOWTO-9.html">Indietro</A>
<A HREF="Quick-Easy-Configuration-HOWTO.html#toc10">Indice</A>
</BODY>
</HTML>