Avanti Indietro Indice

10. Firewall

Un firewall è 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ù 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à scaricati, evitando una nuova richiesta esterna (questi due tipi di servizi sono trattati nelle sezioni DNS e WWWOFFLE di questo howto).

Linux contiene già 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à solo la gestione con ipchains e kernel 2.2.x (e in futuro iptables), mentre ipfwadm non verrà trattato. Per poter utilizzare ipchains, è necessario che il kernel sia compilato con le opzioni di firewalling seguenti impostate a Yes:

più 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 è 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 è la seguente:


ipchains <opzione-di-comando> <filtro> [<regola>] [<obiettivo>]

Le opzioni di comando sono:

I filtri sono (rispettivamente per pacchetti in entrata, uscita e in transito):

Gli obiettivi sono:

Le regole invece usano le seguenti opzioni (le parentesi [] indicano qualcosa di opzionale, mentre il ! indica una negazione):

Altre informazioni sono reperibili nei documenti su indicati. Il mascheramento IP permette di far credere all'esterno che l'origine delle connessioni è sempre un solo nodo, anche quando in realtà si tratta di un nodo interno ad una rete privata. Naturalmente, il nodo che esegue il mascheramento è poi in grado di distinguere quali siano stati i nodi mascherati che hanno originato la connessione, girando a loro i pacchetti di loro competenza.

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 http://freeshell.org/~djsf/masq-icq/ oppure all'URL http://djsf.narod.ru/masq-icq/ (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.


#!/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 "always defragment".
# 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: <mrshark@tiscalinet.it>).
#
# 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 "\aATTENZIONE: solo l'utente root puo' avviare il firewall!"
    exit 1
fi

#  ==========================================================================
#  =========== Definizione delle variabili d'ambiente necessarie ============
#  ==========================================================================
 
#------------------------------ variabili utili
    IPCHAINS="/sbin/ipchains"
    INTERFACES=`/sbin/ifconfig | grep Link | cut -d \  -f 1`
    CURRENT_KERNEL=`uname -r`
    IP_MASQ_MODULES="ftp irc quake"
    #IP_MASQ_MODULES="cuseeme ftp irc quake raudio vdolive"
    INTERFACE="ppp0"
    INTERFACEMASK="255.255.255.255"
    INTERFACEIP=`/sbin/ifconfig $INTERFACE | grep inet | cut -d : -f 2 | cut -d \  -f 1`
    LOCALIP="$INTERFACEIP/$INTERFACEMASK"
    LOCALNET="192.168.0.0/16"
    ANYWHERE="0.0.0.0/0"
    LOOPBACK="127.0.0.0/8"
    CLASS_A="10.0.0.0/8"
    CLASS_B="172.16.0.0/12"
    CLASS_C="192.168.0.0/16"
    CLASS_D_MULTICAST="224.0.0.0/4"
    CLASS_E_RESERVED_NET="240.0.0.0/5"
    NFS_PORT="2049"                 # (TCP/UDP) NFS
    SOCKS_PORT="1080"               # (TCP) Socks
    # X Windows alloca le porte a partire dalla 6000 e incrementa
    # fino alla 6063 per ogni server addizionale in funzione.
    XWINDOW_PORTS="6000:6063"       # (TCP) X windows
    # traceroute di solito usa -S 32769:65535 -D 33434:33523
    TRACEROUTE_SRC_PORTS="32769:65535"
    TRACEROUTE_DEST_PORTS="33434:33523"
    PRIVPORTS="0:1023"
    UNPRIVPORTS="1024:65535"
     # SSH incomincia dalla porta 1023 e va a scalare fino alla 513
    SSH_PORTS="1022:1023"
 
#------------------------------ codici escape colori
    RED="\\033[1;31m"
    GREEN="\\033[0;32m"
    WHITE="\\033[0;39m"
    CYAN="\\033[0;36m"
    BLUE="\\033[1;34m"
    ORANGE="\\033[0;33m"
    YELLOW="\\033[1;33m"
    MAGENTA="\\033[1;35m"
 
#  ==========================================================================
#  ================== 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="ON"
FTP="ON"
DNS1="ON"
DNS2="ON"
HTTP="ON"
SMTP="ON"
NNTP="ON"
POP3="ON"
ICMP="ON"
AUTH="ON"
IRC="OFF"
ICQ="OFF"
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="195.210.91.1"
    DNS2_IP="195.210.91.2"
    SMTP_IP="193.70.192.50"
    NNTP_IP="192.106.1.6"
#------------------------------ IP di iol1055
    #DNS1_IP="195.210.91.1"
    #DNS2_IP="195.210.91.2"
    #SMTP_IP="193.70.192.50"
    #NNTP_IP="193.70.192.201"
#------------------------------ IP di tiscali
    #DNS1_IP="195.130.224.18"
    #DNS2_IP="195.130.225.129"
    #SMTP_IP="195.130.224.22"
    #NNTP_IP="195.130.224.123"
#------------------------------ IP di clubnet
    #DNS1_IP="212.216.112.222"
    #DNS2_IP="212.216.172.162"
    #attenzione: clubnet usa smtp con piu' IP - cercarli con nslookup
    #SMTP_IP="212.216.176.50"
    #NNTP_IP="194.243.154.18"
 
# 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="195.130.224.23"
    #pop3 iol1055
    POP3_2_IP="193.70.192.80"
    #pop3 libero
    POP3_3_IP="193.70.192.70"
    #pop3 clubnet
    #attenzione: clubnet usa pop con piu' IP
    POP3_4_IP="212.216.176.71"
    POP3_5_IP="212.216.176.64"
    POP3_6_IP="212.216.176.65"
    POP3_7_IP="212.216.176.67"
    POP3_8_IP="212.216.176.68"
    POP3_9_IP="212.216.176.69"
    POP3_10_IP="212.216.176.70"
 
#  ==========================================================================
#  =========== Da qui in poi non toccare niente (al piu' solo la ===========
#  ========== parte del POP3 per aggiungere/rimuovere gli account) ==========
#  ==========================================================================
 
case "$1" 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 "${RED}ATTENZIONE: ${YELLOW}l'interfaccia "
            echo -e "${RED}ppp0${YELLOW} NON e' attiva nel sistema."
            echo -e "Firewall NON attivato. Controllare la connessione Internet."
            echo -en "${WHITE}Interfacce attualmente attive nel PC: "
            for irf in ${INTERFACES} ; do
                echo -en "${RED}${irf}${WHITE} "
            done
            echo -e "\n\a"
            exit 1
#------------------------------ se l'interfaccia esiste, si procede
        else
            echo
            echo "Attivazione del Firewall in corso..."
            echo -e "Indirizzo IP locale sull'interfaccia ${YELLOW}$INTERFACE"
            echo -e "${WHITE} : ${RED}$LOCALIP${WHITE}"
            echo -n "Flushing delle regole eventualmente presenti : "
            $IPCHAINS -F input
            $IPCHAINS -F output
            $IPCHAINS -F forward
            echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
 
#  ==========================================================================
#  =========================== Regole in ingresso ===========================
#  ==========================================================================
 
#------------------------------ attivazione protezioni varie
            echo -n "Permesso al traffico locale sull'interfaccia di loopback : "
            $IPCHAINS -A input -s $ANYWHERE -i lo -j ACCEPT
            $IPCHAINS -A input -s $LOCALNET -d $ANYWHERE -j ACCEPT
            echo -e "\t[ ${GREEN}OK ${WHITE}]"
            echo -n "Attivazione Source Address Verification : "
            if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
                for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
                    echo 1 > $f
                done
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t[ ${RED}NO ${WHITE}]"
                echo -n "SAV non disponibile, utilizzo di ipchains : "
                $IPCHAINS -A input -s 127.0.0.1 -i lo -j ACCEPT
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            fi
 
            echo -n "Attivazione TCP SYN Cookie Protection : "
            if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
                echo 1 >/proc/sys/net/ipv4/tcp_syncookies
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
            echo -n "Attivazione Always Defragging Protection : "
            if [ -e /proc/sys/net/ipv4/ip_always_defrag ]; then
                echo 1 > /proc/sys/net/ipv4/ip_always_defrag
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
            echo -n "Attivazione Broadcast Echo Protection : "
            if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
                echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
            echo -n "Attivazione Bad Error Message Protection : "
            if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
                echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
            echo -n "Disattivazione ICMP Redirect Acceptance : "
            if [ -e /proc/sys/net/ipv4/conf/all/accept_redirects ]; then
                for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
                    echo 0 > $f
                done
                echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
            echo -n "Disattivazione Source Routed Packets : "
            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 > $f
                done
                echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
            echo -e "${YELLOW}Attivazione dei servizi in ingresso richiesti : ${WHITE}"
            echo -n "Impostazione della POLICY di ingresso a DENY : "
            $IPCHAINS -P input DENY
            echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
 
#------------------------------ DNS1 (53)
            echo -n "Server DNS primario : "
            if [ $DNS1 = "ON" ]; 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 "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ DNS2 (53)
            echo -n "Server DNS secondario : "
            if [ $DNS2 = "ON" ]; 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 "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ HTTP (80) e HTTPS (443)
            echo -n "Navigazione WEB : "
            if [ $HTTP = "ON" ]; 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 "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ SMTP (25)
            echo -n "Invio posta : "
            if [ $SMTP = "ON" ]; 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 "\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ POP3 (110)
            echo -n "Prelievo posta : "
            if [ $POP3 = "ON" ]; 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 "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ NNTP (119)
            echo -n "Newsgroup Usenet : "
            if [ $NNTP = "ON" ]; then
                $IPCHAINS -A input -p tcp ! -y -s $NNTP_IP 119 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ FTP (20/21)
            echo -n "File Transfer Protocol : "
            if [ $FTP = "ON" ]; 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 "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ SSH (22)
            echo -n "Secure Shell : "
            if [ $SSH = "ON" ]; 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 "\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ ICMP (solo tipi 0/3/11)
            echo -n "Traffico ICMP : "
            if [ $ICMP = "ON" ]; 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 "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ AUTH (113)
            echo -n "Richieste di identificazione : "
            if [ $AUTH = "ON" ]; then
                $IPCHAINS -A input -p tcp ! -y -d $LOCALIP 113 -j ACCEPT
                echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ IRC (6667)
            echo -n "Internet Relay Chat : "
            if [ $IRC = "ON" ]; then
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 6667 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ ICQ (2000:4000)
            echo -n "ICQ : "
            if [ $ICQ = "ON" ]; 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 "\t\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ NAPSTER (6699)
            echo -n "NAPSTER : "
            if [ $NAP = "ON" ]; then
                $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 6699 -d $LOCALIP \
                    $UNPRIVPORTS -j ACCEPT
                echo -e "\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
            else
                echo -e "\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
 
#------------------------------ blocco e log
            echo -n "Blocco e log di tutto il resto : "
            # 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 "\t\t\t\t[ ${GREEN}OK ${WHITE}]"
 
#  ==========================================================================
#  ======================= Mascheramento all' esterno =======================
#  ==========================================================================
 
#------------------------------ verifica esistenza moduli mascheramento
            if [ $MASQ = "ON" ]; then
                echo -e "${YELLOW}Mascheramento : ${WHITE}"
                echo -n "Controllo presenza moduli necessari : "
                MASQ_PRESENT=""
                for mod in ${IP_MASQ_MODULES}; do
                    if [ ! -e /lib/modules/$CURRENT_KERNEL/ipv4/ip_masq_${mod}.o ]; then
                        MASQ_PRESENT="err"
                    fi
                done
#------------------------------ se esistono, attiva mascheramento
                if [ -z ${MASQ_PRESENT} ]; then
                    echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]"
                    echo -n "Installazione dei moduli necessari al Mascheramento : "
                    for mod in ${IP_MASQ_MODULES} ; do
                        /sbin/insmod "ip_masq_${mod}"
                    done
                    echo -e "\t\t[ ${GREEN}OK ${WHITE}]"
                    echo -n "Attivazione IP forwarding : "
                    echo 1 > /proc/sys/net/ipv4/ip_forward
                    echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
                    echo -n "Impostazione della POLICY di inoltro a DENY : "
                    $IPCHAINS -P forward DENY
                    $IPCHAINS -A forward -p all -s $LOCALNET -d $ANYWHERE -j MASQ
                    echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]"
                    echo -n "Impostazione Timeout mascheramento connessioni TCP a 10 ore : "
                    $IPCHAINS -M -S 36000 0 0
                    echo -e "\t[ ${GREEN}OK ${WHITE}]"
                    echo -n "Blocco e log di tutto il resto : "
                    $IPCHAINS -A forward -j DENY -s $ANYWHERE -d $ANYWHERE -l
                    echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]"
#------------------------------ se non esistono, avverti e continua senza
                else
                    echo -e "\t\t\t\t[ ${RED}NO ${WHITE}]"
                    echo
                    echo -e "${RED}Errore!!! Moduli per il Mascheramento "
                    echo -e "non presenti nel sistema. Ricompilare il kernel col "
                    echo -e "supporto per firewall e masquerading.${WHITE}"
                    echo
                fi
            else
                echo -en "${YELLOW}Mascheramento : ${WHITE}"
                echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]"
            fi
        fi
;;
 
#------------------------------ opzione stop dello script
    stop)
        clear
        echo "Disattivazione del Firewall in corso..."
        $IPCHAINS -F
        $IPCHAINS -P input ACCEPT
        $IPCHAINS -P forward ACCEPT
        MASQ_PRESENT=""
        for mod in ${IP_MASQ_MODULES} ; do
            if [ ! -e /lib/modules/$CURRENT_KERNEL/ipv4/ip_masq_${mod}.o ]; then
                MASQ_PRESENT="err"
            fi
        done
        if [ -z ${MASQ_PRESENT} ] ; then
            echo -n "Rimozione dei moduli necessari al Mascheramento : "
            for mod in ${IP_MASQ_MODULES} ; do
                /sbin/rmmod "ip_masq_${mod}"
            done
            echo -e "\t\t[ ${GREEN}OK ${WHITE}]"
            echo -n "Disattivazione IP forwarding : "
            echo 0 > /proc/sys/net/ipv4/ip_forward
            echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]"
        fi
        echo -e "${YELLOW}ATTENZIONE: IL FIREWALL NON E' PIU' OPERATIVO${WHITE}"
;;
 
#------------------------------ opzione status dello script
    status)
        clear
        echo "Impostazioni attuali del firewall : "
        echo -e "Indirizzo IP locale sull'interfaccia ${YELLOW}$INTERFACE${WHITE} : \
            ${RED}$LOCALIP${WHITE}"
        $IPCHAINS -L
;;
 
#------------------------------ nessuna o errata opzione fornita allo script
    *)
        clear
        echo -e "${BLUE}############################################################${WHITE}"
        echo -en "${BLUE}###${YELLOW}         Script di impostazione "
        echo -e "${MAGENTA}FIREWALL ${YELLOW}v7.0         ${BLUE}###${WHITE}"
        echo -e "${BLUE}############################################################${WHITE}"
        echo -e "${YELLOW}Utilizzo:${WHITE} firewall start|stop|status"
        echo -e "\t${CYAN}start${WHITE} = attiva il firewall"
        echo -e "\t${CYAN}stop${WHITE} = disattiva il firewall"
        echo -e "\t${CYAN}status${WHITE} = impostazioni correnti del firewall"
        echo
        echo -e "${RED}ATTENZIONE: ${YELLOW}ricorda che l'interfaccia \
            ${RED}ppp0${YELLOW} e' attiva"
        echo -e "solo DOPO aver effettuato la connessione a Internet."
        echo -en "${WHITE}Interfacce attualmente attive nel PC: "
        for irf in ${INTERFACES} ; do
            echo -en "${RED}${irf}${WHITE} "
        done
        echo -e "\n\a"
;;
esac
exit 0
 

THIS IS THE END, MY ONLY FRIEND (by JIM).


Avanti Indietro Indice