-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

salve a tutti,
io e  Morpheus abbiamo scritto due righe per iptables,
cercando di fare una cosa il pił possibile generica ed in grado
di coprire gli utilizzi pił comuni di un router-firewall
casalingo.
Dai primi test sembra che vada,
quindi, se volete, provatelo adattatelo e miglioratelo,
fateci sapere come gira ed eventuali problemi,
per il resto, auguri.

***
#!/bin/sh
##
        clear
##
        ###################
        VERSION="2002.12.18"
        ###################
##
## Interfaccia interna fidata  'settare la propria'
        IIF="eth0"
#       IIF="eth1"
##
## Interfaccia esterna  'settare la propria'
        EIF="ppp0"
#       EIF="eth0"
#       EIF="eth1"
##
## Indirizzo macchina router
        SERVER=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' '
- -f1`
##
## Indirizzo macchina client 'inserire a mano, se il server
condivide la connessione'
        CLIENT="192.168.0.2"
##
## Loopback
        LOCALHOST="127.0.0.0/8"
##
## Rete interna
        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"
##
## Provider2 DNS
        DNS2="212.216.112.112"
##
## Provider3 DNS
#       DNS3=" "
        ##
        ##LOCAL = rete interna
        ##EXTERNAL = internet/rete esterna
        ##
## Per qualunque problema...;)
        EMAIL="[EMAIL PROTECTED]"
##
## PATH di iptables 'adattare alla propria macchina, se
necessario'
        IPT="/usr/sbin/iptables"
##
        ## 'Dopo aver modificato i parametri base per adattare lo
        ## script alle proprie esigenze, salvarlo e renderlo eseguibile
        ## -NOTA-
        ## il PATH predefinito  e' "/etc/rc.d/" ed
        ## il nome predefinito  e' "firewall"
        ## ma   e'  possibile utilizzare qualsiasi nome / PATH
        ## avendo cura di modificare le variabili NFILE e NPATH'
##
## 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"
##
## Setto permessi e proprietario
        chown root $NPATH/$NFILE
        chmod 700  $NPATH/$NFILE
##
case "$1" in
#**************************************************************START
 start)
                clear
                echo ""
                echo "Attivo il Firewall..."
                echo ""
        ##
        ## 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'
                ##      export outchain="DROP"
                ##
                ## Non funziona da router
                #       export fw="DROP"
                #       export 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"
 ;;
#*************************************************************************STOP
 stop)
                clear
                echo ""
                echo "Disattivo il Firewall..."
                echo ""
        ##
        ## 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"
 ;;
#*************************************************************ROUTER
 router)
                clear
                ##
                echo ""
                echo "Disattivo il firewall ed attivo il forwarding..."
                echo ""
        ##
        ## Politica INPUT
                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"
 ;;
#**************************************************************HELP
 help)
        clear
        ##
        echo  "Utilizzo..."
        echo  ""
        echo  "$NFILE start "
        echo  "         Setta il firewall secondo le opzioni"
        echo  "         desiderate, 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  ""
        echo  "$NFILE router"
        echo  "         Abilita il transito dei pacchetti"
        echo  "         tra $IIF e $EIF senza nessun firewall"
        echo  "         PERICOLOSO."
        echo  ""
        echo  "$NFILE info"
        echo  "         Mostra il settaggio attuale dei parametri base"
        echo  "         per controllare le personalizzazioni sullo script."
        echo  ""
        echo  "$NFILE help"
        echo  "         Visualizza questo messaggio"
        echo  ""
        echo  "Per ogni suggerimento: $EMAIL"
        echo  ""
        ##
 exit 1
 ;;
#***************************************************************INFO
 info)
        clear
        ##
        echo  ""
        echo  "Info..."
        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  ""
        ##
 exit 1
 ;;
#****************************************************************USO
 *)
        ##
        echo "Firewall  ver. $VERSION"
        echo ""
        echo "Utilizzo: $NFILE {start|stop|router|info|help} "
        echo ""
        ##
 exit 1
 ;;
esac
##
#*******************************************************BLOCCO
COMUNE
##
## carica i moduli necessari nel kernel
        echo "Caricamento moduli..."
        for m in ipt_LOG ip_conntrack ip_conntrack_ftp ipt_MASQUERADE
ipt_REJECT ipt_multiport ipt_limit iptable_filter iptable_nat
ipt_state ; do
            modprobe "$m"
        done
        ##
        #modprobe ip_nat_irc
        #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)..."
        echo "$ER" >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
        ##
        # echo "Disabilito  ICMP echo-request  (use only if DOS'ed)"
        # echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all
        ##
        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..."
            echo "$SR" >$i/accept_source_route
            ##
            echo "$SET politica per ICMP Redirect accept/send..."
            echo "$DR" >$i/accept_redirects
            echo "$ASR" >$i/send_redirects
            ##
            echo "$SET secure ICMP redirects..."
            echo "$ISR" >$i/secure_redirects
            ##
            echo "$SET source-address verification (prevent
spoofing)..."
            echo "$SAV" >$i/rp_filter
            ##
        done
        ##
        echo "$SET il Log su  spoofed, source routed e  redirect
packets..."
        echo "$LOG" >/proc/sys/net/ipv4/conf/all/log_martians
        ##
        echo "$SET dynamic socket address rewriting..."
        echo "$DSR" > /proc/sys/net/ipv4/ip_dynaddr
##
#################################
## inizio competenza iptables  ##
#################################
##
        echo "Azzero le chain..."

        for y in  filter nat ; do
         $IPT -t $y -F
         $IPT -t $y -X
        done
        ##
        echo "Genero  Policy & Chains..."
        for pc in SYN-FLOOD EXTERNAL LOCAL ; do
         $IPT    -N $pc
        done
        ##
        ## politica per la tabella filter
        $IPT -t filter -P INPUT   $chain
        $IPT -t filter -P OUTPUT  $outchain
        $IPT -t filter -P FORWARD $fw
        ##
        ## politica per la tabella nat
        for n in PREROUTING POSTROUTING OUTPUT ; do
         $IPT -t nat -P $n $fw
        done
        ##
        echo "Dirotto pacchetti  NEW e INVALID verso CHAIN..."
        $IPT  -A INPUT -i ! lo  -m state --state NEW,INVALID -j $chain
        ##
        echo "Dirotto il controllo dei pacchetti..."
        $IPT -A INPUT -i $EIF -p tcp --dport 1:1024 -j EXTERNAL
        $IPT -A INPUT -i $EIF -p udp --dport 1:1024 -j EXTERNAL
        $IPT -A INPUT -i $IIF -p tcp --dport 1:1024 -j LOCAL
        $IPT -A INPUT -i $IIF -p udp --dport 1:1024 -j LOCAL
        ##
        echo "Enable Logging..."
        $IPT  -t filter -A EXTERNAL  -m state --state NEW,INVALID -j
LOG --log-level warning --log-prefix "Connessione internet
BLOCCATA"
        ##
        echo "Accetto connessioni da $LOCALHOST , $SERVER , $CLIENT ..."
        $IPT -A INPUT -i lo -s $LOCALHOST -j ACCEPT
        #$IPT -A OUTPUT -o lo -s $LOCALHOST -j ACCEPT
        $IPT -A INPUT  -i lo -s $SERVER -j ACCEPT
        #$IPT -A OUTPUT  -o lo -s $SERVER -j ACCEPT
        $IPT -A LOCAL -s $CLIENT  -j ACCEPT
        ##
        echo "Attivo  SYN-FLOODING protection..."
        $IPT  -A INPUT -p tcp --syn -j SYN-FLOOD
        $IPT  -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j
RETURN
        $IPT  -A SYN-FLOOD -j $chain
        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
        ##
        echo "Sperimentale..."
        $IPT -t nat -A PREROUTING -i $EIF -m unclean -j RETURN
        ##
        echo "Blocco le scansioni Xmas tree, i pacchetti senza flag, i
flag irregolari, le scansioni..."
        ##Blocco le scansioni Xmas tree
        $IPT -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j
$chain
        $IPT -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j $chain
        $IPT -t filter -A INPUT -p tcp --tcp-flags ALL
SYN,RST,ACK,FIN,URG -j $chain
        ##
        ##Blocco i pacchetti senza flags
        $IPT -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j $chain
        ##
        ##Blocco i pacchetti SYN+RST e SYN+FIN
        $IPT -t filter -A INPUT  -p tcp --tcp-flags SYN,RST SYN,RST -j
$chain
        $IPT -t filter -A INPUT  -p tcp --tcp-flags SYN,FIN SYN,FIN -j
$chain
        ##
        ##Blocco le scansioni FIN
        $IPT -t filter -A INPUT  -p tcp --tcp-flags FIN FIN -j $chain
        ##
        ##Elimino pacchetti broadcast netbios
        $IPT -t filter -A INPUT  -i $IIF -d $BROADCAST -p udp --dport
135:139 -j $chain
        ##
        ## Servizi aperti all'esterno 'decommentare i servizi
desiderati, attenzione!!'
        ##
        #echo "Accetto connessioni su shell criptate dall'esterno..."
        #$IPT  -A EXTERNAL -p tcp --dport 22 -j ACCEPT
        ##
        #echo "Accetto connessioni sendmail dall'esterno
[pericoloso!!!]..."
        #$IPT  -A LOCAL -p tcp --dport smtp -j ACCEPT
        ##
        #echo "Accetto http e https dall'esterno [pericoloso!!]... "
        #iptables -t filter  -A LOCAL -p tcp -m multiport --source-port
80,443 -j ACCEPT
        ##
        #echo "Accetto POP3  dall'esterno [pericoloso!]..."
        #iptables -t filter  -A LOCAL -p tcp --sport 110 -j ACCEPT
        ##
        echo "Accetto DNS replays"
        $IPT  -A EXTERNAL -p udp -s $DNS1   --sport 53 -j ACCEPT
        $IPT  -A EXTERNAL -p udp -s $DNS2   --sport 53 -j ACCEPT
        ## Decommentare se il server funziona anche da DNS
        # $IPT  -A EXTERNAL -p tcp -s $DNS3   --sport 53 -j ACCEPT
        # $IPT  -A EXTERNAL -p udp -s $DNS3   --sport 53 -j ACCEPT
        $IPT  -A EXTERNAL -p tcp -s $DNS1   --sport 53 -j ACCEPT
        $IPT  -A EXTERNAL -p tcp -s $DNS2   --sport 53 -j ACCEPT
        #
        ##all'interno accetto tutto#
        ##
        $IPT  -A LOCAL -s $CLIENT  -j ACCEPT
        ##
        echo "Accetto ICMP type 0,3,11,packets..."
                ## codici ICMP - RFC 792
                ## 0  Echo Reply
                ## 3  Destination Unreachable
                ## 4  Source Quench
                ## 5  Redirect
                ## 8  Echo
                ## 11  Time Exceeded
                ## 12  Parameter Problem
                ## 13  Timestamp
                ## 14  Timestamp Reply
                ## 15  Information Request
                ## 16  Information Reply
        for ic in 0 3 11 ; do
         $IPT -A EXTERNAL -p icmp --icmp-type $ic -j ACCEPT
        done
        $IPT -A LOCAL -p icmp -s $CLIENT -j ACCEPT
##
#######################
## 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,ESTABLESHED,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
##
########################
## /regole in uscita  ##
########################
##
## per proibire il traffico esterno sostituire INPUT con LOCAL
##
        echo "Accetto connessioni RELATED/ESTABLISHED..."
        $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##
##
        echo "$MSET masquerading..."
        $IPT -t nat -A POSTROUTING -o $EIF -j MASQUERADE
        ##
        echo "Done."
        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  ""
##
exit 1
##
##The End..

***


bye

miKe

- --
________________________________________
Slackware 8.1 GNU/Linux 2.4.20 @ hp  Xe3
R.U.#219755 -- S.R.U.#705 -- R.M.#110932

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE+B4+DF/9fksDJ4y0RAjWpAJ4q6UF/7dDwNZpH/jK2NJlI1q60swCfcHjG
8xktBgtWl7nB39NEwf766GA=
=yv1h
-----END PGP SIGNATURE-----


Rispondere a