Repository 32bit  Forum
Repository 64bit  Wiki

perchè questo firewall mi blocca la connessione?

Postate qui per tutte le discussioni legate alla sicurezza di Linux/Slackware

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

perchè questo firewall mi blocca la connessione?

Messaggioda smtux » mer nov 16, 2005 18:58

salve a tutti,
sono partito a farmi il firewall da uno script che ho trovato su questo sito, il problema è che quando lo faccio girare mi blocca la connessione... uff! Mi sono letto varie cose su iptables ma la magagna proprio non la vedo... non è che mi date una mano?

Codice: Seleziona tutto
#########################################################################
##
   clear
##
   ####################
   VERSION="2005.07.11"
   ####################
   ##
   ## Interfaccia interna fidata  'settare la propria'
        IIF="wlan0"
#   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="192.168.1.10"
   ##
   ## 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="193.70.192.25"
   ##
   ## Provider2 DNS
   #DNS2="195.130.224.18"
   DNS2="192.70.152.25"
   ##
   ## 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="rc.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
      messaggio=" Attivo il firewall ..."
      echo -e "$COLOR$messaggio$NULL\n"
      
   ##
   ## 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
      COLOR=$GREEN
      messaggio=" Disattivo il firewall ..."
      echo -e "$COLOR$messaggio$NULL\n"
   ##
   ## 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

          fi
         exit 0
   }
 ;;
#*************************************************************ROUTER
 router)

      clear
      COLOR=$YELLOW
      messaggio=" Attenzione, disattivo il firewall ed attivo il forwarding..."
      echo -e "$COLOR$messaggio$NULL\n"

   ##
   ## 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"
   function netfilter()
    {
    exit 0
    }
 ;;
#**************************************************************HELP
 help)
      clear
      COLOR=$CYAN
      messaggio=" Help..."
      echo -e "$COLOR$messaggio"
      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

 ;;
#***************************************************************INFO
 info)
      clear
      COLOR=$MAGENTA
      messaggio=" Info ..."
      echo -e "$COLOR$messaggio"
      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

  ;;
#***************************************************************INFO
 policy)
           clear
      COLOR=$WHITE
      messaggio=" Politiche ..."
      echo -e "$COLOR$messaggio"
   $IPT -nvL
   ##
   ## espande la politica di netfilter
   ## visualizzando le catene e informazioni sulle
      echo -e "$NULL\n"
   ##

    exit 0

 ;;

#*********************************************************Verifica Syn Flood
vsf)
      clear
      COLOR=$YELLOW
      messaggio=" Syn Flood ..."
      echo -e "$COLOR$messaggio"
      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

;;

#****************************************************************USO
 *)
    ##
      clear
      COLOR=$BLUE
   messaggio="Firewall  ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}"
      echo -e "$COLOR$messaggio$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 ##
#################
##


# Abilito rp_filter su tutte le interfacce
# Antispoofing protection
# Abilito il sorce route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1


   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
   ##
   # Non rispondo a broadcast ping
   #echo "Non rispondo a broadcast ping"   
   #net.ipv4.conf.all.log_martians = 1
   ##
   # Disabilito ecn
   #echo "Disabilito ecn"
   #net.ipv4.tcp_ecn = 0
   ##
##
#################################
## inizio competenza iptables  ##
#################################
##
   echo "Azzero le chain..."
   ##
   for y in  filter nat mangle ; do
    $IPT -t $y -F
    $IPT -t $y -X
    $IPT -t nat -F
   done
   ##
   ## politica per la tabella filter
   
   # Nel caso di start abbiamo
   #
#    iptables -P INPUT DROP
#    iptables -P FORWARD DROP
#    iptables -P OUTPUT ACCEPT   

   $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 $EIP -s $LOCALNET -j $chain
   $IPT -t nat -A PREROUTING -i $EIP -s $LOCALHOST -j $chain
#   $IPT -t nat -A PREROUTING -i $EIF -s $CLIENT -j $chain
#   $IPT -t nat -A PREROUTING -i $EIP -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 $EIP -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 $EIP -p udp -s $DNS1   --sport 53 -j ACCEPT
   $IPT  -A INPUT -i $EIP -p udp -s $DNS2   --sport 53 -j ACCEPT
   $IPT  -A INPUT -i $IIF -p tcp -s $DNS1   --sport 53 -j ACCEPT
   $IPT  -A INPUT -i $IIF -p tcp -s $DNS2   --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  $EIP  -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

   # Amule
   $IPT -t filter -A INPUT -p tcp --dport 4662 -j ACCEPT
   $IPT -t filter -A INPUT -p udp --dport 4672 -j ACCEPT
   
   # Samba
   $IPT -t filter -A INPUT -p tcp --dport 139 -j ACCEPT
   $IPT -t filter -A INPUT -p tcp --dport 445 -j ACCEPT
   $IPT -t filter -A INPUT -p udp --dport 137 -j ACCEPT
   $IPT -t filter -A INPUT -p udp --dport 138 -j ACCEPT
   
   #Skpye
   # Non c'è bisogno di settare niente.

##
#######################
## 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 $EIP -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 $EIP  -m state --state NEW,INVALID -j $chain
   $IPT -A FORWARD  -o $EIP -j ACCEPT
   echo "$MSET   SNAT (MASQUERADE) su $EIP"
   ##
   #usare su indirizzi dinamici (esempio connessioni dial-up)
#   $IPT -t nat -A POSTROUTING -o $EIP -j MASQUERADE
   #usare solo su indirizzi statici
#   $IPT -t nat -A POSTROUTING -o $EIP -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..




:cry:
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Messaggioda Sawk » mer nov 16, 2005 22:57

questo firewall gira per internet e non vale na cicca, ben poco si salva come il SYN-FLOOD e il settaggio dei icmp....non usarlo che ha parecchi problemi, sopratutto a livello di configurazione di ipv4. Piuttosto dai una occhiata ai post su questo forum, dovrei aver postato un firewall molto efficacie che utilizzo
Avatar utente
Sawk
Linux 2.6
Linux 2.6
 
Messaggi: 584
Iscritto il: dom feb 06, 2005 0:00
Località: Pordenone, Italy

Messaggioda smtux » gio nov 17, 2005 1:00

si va di nulla....

ho provato a cercare il tuo firewall ma non lo trovo non è che me lo potresti postare?
grazie!
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Messaggioda Sawk » gio nov 17, 2005 10:24

Codice: Seleziona tutto
#!/bin/bash
# Firewall by OhiOhiOhi
# AVVIATE QUESTO FIREWALL DA ROOT


# Settare i seguenti valori in base alle proprie esigenze

INT=eth0
LOCALHOST="127.0.0.1"
DNS1="130.244.127.161"  # In questi due punti inserite i DNS del vostro
DNS2="130.244.127.169"  # provider. In default ho messo quelli tele2
ETH="192.168.1.1"
LANGW="192.168.0.0/24"

IPT=iptables

echo "Firewall by OhiOhiOhi"
echo " "

case $1 in

## START

start)
echo "Sto attivando il firewall..."

# Politiche

   input=DROP
   output=ACCEPT
   fw=DROP

## Inizio bash scripting per iptables

echo "Setto contromisure contro attacchi"
## Contromisure contro attacchi DoS: da usare solo sotto attacco
#   echo "1" >    /proc/sys/net/ipv4/icmp_echo_ignore_all
#       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

# Questo comando ignora tutti i ping alla vostra macchina, abilitandolo
# potreste avere problemi di rete
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Riduce il numero di SYN-FLOOD
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog

# Protezione contro SYS-FLOOD attack
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# Ignora i pacchetti indirizzati a broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# serve per abilitare il trasferimento di pacchetti tra interfacce
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Protezione contro spoofing e sourcerouting
echo "1" > /proc/sys/net/ipv4/tcp_rfc1337

# Una protezione in più anche se utilizzata in combinazione con router
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

# Da disabilitare solo  se non si usa un Router
echo "1" > /proc/sys/net/ipv4/conf/all/accept_redirects

# non logga i pacchetti con difetti
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects

# Effettua controlli sui pacchetti ICMP
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects

# Protezione da proxy ARP
echo "0" > /proc/sys/net/ipv4/conf/all/proxy_arp

# Controlla il routing: Serve per prevenire in piccola parte un
# ip_spoofing al computer
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Questo comando logga i pacchetti martirians ovvero i pacchetti senza
# tragitto certo
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Abilita il dynamic socket address rewriting
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# IP Forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Setta le porte locali
echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range

# Torsmo :D
# echo "Firewall ON" > /documenti/.torsmo_firez

## IPTABLES

echo "Setto iptables"
# Preparo le chain

$IPT -F
$IPT -P INPUT   $input
$IPT -P OUTPUT  $output
$IPT -P FORWARD $fw
$IPT -N CHAIN-SCAN
$IPT -N SYN-FLOOD

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Utile comando per accettare solo alcuni tipi di icmp
   for ic in 0 3 11 ; do
   $IPT -A INPUT -i $INT -p icmp --icmp-type $ic -j ACCEPT
   done

# Abilita i DNS replays
$IPT  -A INPUT -i $INT -p udp -s $DNS1   --dport 53 -j ACCEPT
$IPT  -A INPUT -i $INT -p udp -s $DNS2   --dport 53 -j ACCEPT
$IPT  -A INPUT -i $INT -p udp -s $DNS1   --sport 53 -j ACCEPT
$IPT  -A INPUT -i $INT -p udp -s $DNS2   --sport 53 -j ACCEPT

# Blocca pacchetti broadcast
$IPT -A INPUT -p ALL -d 255.255.255.255 -j $input
$IPT -A INPUT -s 10.128.0.0/255.255.0.0  -j $input

# Sezione Gateway
iptables -t nat -A POSTROUTING -d ! $LANGW -j MASQUERADE
$IPT -A FORWARD -s $LANGW -j ACCEPT
$IPT -A FORWARD -d $LANGW -j ACCEPT
$IPT -A FORWARD -j DROP
$IPT -A INPUT -s $LANGW -j ACCEPT

# Crea catene 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-SCAN

# Protezione contro Xmas scan
$IPT -A INPUT -p tcp --tcp-flags  ALL FIN,URG,PSH -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags  ALL SYN,RST,ACK -j CHAIN-SCAN

# Blocccare scansioni senza flag
$IPT -A INPUT -p tcp --tcp-flags  ALL NONE -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j CHAIN-SCAN

# Bloccare pacchetti SYN+RST e SYN+FIN
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j CHAIN-SCAN

# Bloccare scansioni FIN
$IPT -A INPUT -p tcp --tcp-flags FIN FIN -j CHAIN-SCAN

# Sicurezze alternative
$IPT -A INPUT -p udp --dport 135:139 -j DROP
$IPT -A INPUT -p tcp --dport 6000 -j DROP

# Abilito localhost
$IPT -A INPUT -s $LOCALHOST -j ACCEPT

# Usare questi parametri per abilitare aMule
   $IPT -A INPUT -p tcp --dport 4662 -j ACCEPT
   $IPT -A INPUT -p udp --dport 4665 -j ACCEPT

# Torrent
   $IPT -A INPUT -p tcp --dport 6881 -j ACCEPT
   $IPT -A INPUT -p udp --dport 6881 -j ACCEPT
   $IPT -A INPUT -p udp --dport 4444 -j ACCEPT

# Usare per abilitare scambio file in aMsn
   $IPT -A INPUT -p tcp --dport 6891:6895 -j ACCEPT

# Usare per abilitare DCC
   $IPT -A INPUT -p tcp --dport 3333 -j ACCEPT

# NetCat
#       $IPT -A INPUT -p tcp --dport 1234 -j ACCEPT
#       $IPT -A INPUT -p udp --dport 1234 -j ACCEPT
echo " "
echo "Firewall attivato "

;;

## STOP

stop)
echo "Risistemo tutto come era prima"

# Politiche

        input=ACCEPT
        output=ACCEPT
        fw=ACCEPT

# Risetto i valori di kernel
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "0" > /proc/sys/net/ipv4/tcp_rfc1337
echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
echo "0" > /proc/sys/net/ipv4/ip_dynaddr
echo "Firewall OFF" > /documenti/.torsmo_firez

# Risetto le politiche di default

$IPT -F
$IPT -X CHAIN-SCAN
$IPT -X SYN-FLOOD
$IPT -P INPUT     $input
$IPT -P OUTPUT    $output
$IPT -P FORWARD   $fw

echo " "
echo "Firewall disattivato...ora prova a pararti your butt :P"

;;

*)
echo "firez [start|stop]"
echo "Nel caso attiviate il firewall due volte consecutive"
echo "potrebbero esserci degli errori di esistenza di chain"
echo "Ignorateli pure :)"
echo "Eventualmente se riscontrate errori di altro tipo"
echo "verificate la correttezza dei parametri..."
echo " "
echo "Mi raccomando leggete con attenzione il firewall e"
echo "settate i parametri prima di dare start ... ENJOY!"

;;

esac

echo " "
Avatar utente
Sawk
Linux 2.6
Linux 2.6
 
Messaggi: 584
Iscritto il: dom feb 06, 2005 0:00
Località: Pordenone, Italy

Messaggioda smtux » gio nov 17, 2005 11:51

Per OhiOhiOhi:

grazie mille stasera lo provo subito.
Premetto che l'ho letto velocemente ma ho visto che c'è da aggiungere il controllo delle porte per Samba, corretto?

ciao e grazie ancora!
:D
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Messaggioda smtux » gio nov 17, 2005 18:04

un'ultima domanda poi non ti rompo più...
cosa vuol dire "IP Exposed"?
questo messaggio l'ottengo se vado sul sito http://www.testmyfirewall.com/
con il firewall attivo.
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Messaggioda salbutamolo » ven nov 18, 2005 14:19

Ciao a tutti,
tempo fa insieme c'è stata una discussione nella sezione sicurezza e tra vari suggerimenti e letture varie avevo messo insieme questo firewall...ditemi un po' cosa ne pensate :-)
Codice: Seleziona tutto
#!/bin/bash

modprobe ip_conntrack_ftp

CONNECTION_TRACKING="1"
ACCEPT_AUTH="0"
SSH_SERVER="0"
FTP_SERVER="0"
WEB_SERVER="0"
SSL_SERVER="0"
DHCP_CLIENT="1"

INTERNET="eth0"                               # Internet-connected interface
LOOPBACK_INTERFACE="lo"                       # however your system names it
IPADDR="192.168.1.2/24"                          # your IP address
SUBNET_BASE="192.168.1.0"                     # ISP network segment base address
SUBNET_BROADCAST="192.168.1.255"              # network segment broadcast address
MY_ISP="192.168.1.1"                          # ISP server & NOC address range

NAMESERVER="212.216.112.112"       # address of a remote name server
POP_SERVER="any/0"                 # address of a remote pop server
MAIL_SERVER="62.211.72.21"         # address of a remote mail gateway
NEWS_SERVER="195.31.190.131"       # address of a remote news server
TIME_SERVER="66.206.11.192"        # address of a remote time server
DHCP_SERVER="192.168.1.1"          # address of your ISP dhcp server

LOOPBACK="127.0.0.0/8"               # reserved loopback address range
CLASS_A="10.0.0.0/8"                 # class A private networks
CLASS_B="172.16.0.0/12"              # class B private networks
CLASS_C="192.168.0.0/16"             # class C private networks
CLASS_D_MULTICAST="224.0.0.0/4"      # class D multicast addresses
CLASS_E_RESERVED_NET="240.0.0.0/5"   # class E reserved addresses
BROADCAST_SRC="0.0.0.0"              # broadcast source address
BROADCAST_DEST="255.255.255.255"     # broadcast destination address

PRIVPORTS="0:1023"                   # well-known, privileged port range
UNPRIVPORTS="1024:65535"             # unprivileged port range

SSH_PORTS="1024:65535"

NFS_PORT="2049"
LOCKD_PORT="4045"
SOCKS_PORT="1080"
OPENWINDOWS_PORT="2000"
XWINDOW_PORTS="6000:6063"
SQUID_PORT="3128"

###############################################################

# WARNING:

# The following section is written for dhclient.
# This section demonstrates what needs to be done
# to dynamically modify the IP address and name servers.

# See the "dhclient-script" man page
# and the "dhclient.conf" man page for details.

if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || [ x$reason = xREBIND ]; then

    IPADDR=$new_ip_address

    # Some ISPs use more than one DHCP server.
    # In that case, you can leave DHCP_SERVER set to any/0,
    # or you can hard-code duplicate DHCP rules that
    # reference the specific server IP addresses.

    DHCP_SERVER=$new_dhcp_server_identifier

elif [ x$reason = xPREINIT ] || \
     [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xTIMEOUT ]; then

    IPADDR="any/0"
    DHCP_SERVER="any/0"

fi

###############################################################

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
done

# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f
done

# Don¹t send Redirect Messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f
done

# Drop Spoofed Packets coming in on an interface, which if replied to,
# would result in the reply going out a different interface.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done

# Log packets with impossible addresses.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
done

###############################################################

# Remove any existing rules from all chains
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush

# Unlimited traffic on the loopback interface
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Set the default policy to drop
iptables --policy INPUT   DROP
iptables --policy OUTPUT  DROP
iptables --policy FORWARD DROP

# A bug that showed up as of the Red Hat 7.2 release results
# in the following 5 default policies breaking the firewall
# initialization:

# iptables -t nat --policy PREROUTING  DROP
# iptables -t nat --policy OUTPUT DROP
# iptables -t nat --policy POSTROUTING DROP

# iptables -t mangle --policy PREROUTING DROP
# iptables -t mangle --policy OUTPUT DROP

# Remove any pre-existing user-defined chains
iptables --delete-chain
iptables -t nat --delete-chain
iptables -t mangle --delete-chain

###############################################################
# Stealth Scans and TCP State Flags

# All of the bits are cleared
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# SYN and FIN are both set
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN and RST are both set
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN and RST are both set
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

###############################################################
# Using Connection State to By-pass Rule Checking

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Using the state module alone, INVALID will break protocols that use
    # bi-directional connections or multiple connections or exchanges,
    # unless an ALG is provided for the protocol. At this time, FTP and is
    # IRC are the only protocols with ALG support.

    iptables -A INPUT -m state --state INVALID -j LOG \
             --log-prefix "INVALID input: "
    iptables -A INPUT -m state --state INVALID -j DROP

    iptables -A OUTPUT -m state --state INVALID -j LOG \
             --log-prefix "INVALID ouput: "
    iptables -A OUTPUT -m state --state INVALID -j DROP
fi

###############################################################
# Source Address Spoofing and Other Bad Addresses

# Refuse spoofed packets pretending to be from
# the external interface's IP address
iptables -A INPUT  -i $INTERNET -s $IPADDR -j DROP

# Refuse packets claiming to be from a Class A private network
iptables -A INPUT  -i $INTERNET -s $CLASS_A -j DROP

# Refuse packets claiming to be from a Class B private network
iptables -A INPUT  -i $INTERNET -s $CLASS_B -j DROP

# Refuse packets claiming to be from a Class C private network
iptables -A INPUT  -i $INTERNET -s $CLASS_C -j DROP

# Refuse packets claiming to be from the loopback interface
iptables -A INPUT  -i $INTERNET -s $LOOPBACK -j DROP

# Refuse malformed broadcast packets
iptables -A INPUT  -i $INTERNET -s $BROADCAST_DEST -j LOG
iptables -A INPUT  -i $INTERNET -s $BROADCAST_DEST -j DROP
 
iptables -A INPUT  -i $INTERNET -d $BROADCAST_SRC  -j LOG
iptables -A INPUT  -i $INTERNET -d $BROADCAST_SRC  -j DROP 

#if [ "$DHCP_CLIENT" = "0" ]; then
    # Refuse directed broadcasts
    # Used to map networks and in Denial of Service attacks
   # iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP
    #iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP

    # Refuse limited broadcasts
    iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP
#fi

# Refuse Class D multicast addresses
# illegal as a source address
iptables -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP

iptables -A INPUT -i $INTERNET -p ! udp -d $CLASS_D_MULTICAST -j DROP

iptables -A INPUT  -i $INTERNET -p udp -d $CLASS_D_MULTICAST -j ACCEPT

# Refuse Class E reserved IP addresses
iptables -A INPUT  -i $INTERNET -s $CLASS_E_RESERVED_NET -j DROP

# refuse addresses defined as reserved by the IANA
# 0.*.*.*          - Can¹t be blocked unilaterally with DHCP
# 169.254.0.0/16   - Link Local Networks
# 192.0.2.0/24     - TEST-NET

if [ "$DHCP_CLIENT" = "1" ]; then
    iptables -A INPUT  -i $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT
fi

iptables -A INPUT -i $INTERNET -s 0.0.0.0/8 -j DROP
iptables -A INPUT -i $INTERNET -s 169.254.0.0/16 -j DROP
iptables -A INPUT -i $INTERNET -s 192.0.2.0/24 -j DROP

###############################################################
# Disallowing Connections to Common TCP Unprivileged Server Ports

# X Window connection establishment
iptables -A OUTPUT -o $INTERNET -p tcp --syn \
         --destination-port $XWINDOW_PORTS -j REJECT

# X Window: incoming connection attempt
iptables -A INPUT -i $INTERNET -p tcp --syn \
         --destination-port $XWINDOW_PORTS -j DROP

# Establishing a connection over TCP to NFS, OpenWindows, SOCKS or squid
iptables -A OUTPUT -o $INTERNET -p tcp \
         -m multiport --destination-port \
         $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_PORT \
         --syn -j REJECT

iptables -A INPUT -i $INTERNET -p tcp \
         -m multiport --destination-port \
         $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_PORT \
         --syn -j DROP

###############################################################
# Disallowing Connections to Common UDP Unprivileged Server Ports

# NFS and lockd

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -m state --state NEW -j REJECT

    iptables -A INPUT -i $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -m state --state NEW -j DROP
else
    iptables -A OUTPUT -o $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -j REJECT

    iptables -A INPUT -i $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -j DROP
fi

###############################################################
# DNS Name Server

# DNS Fowarding Name Server or client requests

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NAMESERVER --dport 53 -j ACCEPT

iptables -A INPUT  -i $INTERNET -p udp \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# TCP is used for large responses

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NAMESERVER --dport 53 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# DNS Caching Name Server (local server to primary server)

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport 53 \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport 53 \
         -d $NAMESERVER --dport 53 -j ACCEPT

iptables -A INPUT  -i $INTERNET -p udp \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport 53 -j ACCEPT

###############################################################
# Filtering the AUTH User Identification Service (TCP Port 113)

# Outgoing Local Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 113 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 113 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 113 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 \
             -m state --state NEW -j ACCEPT
fi

if [ "$ACCEPT_AUTH" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 113 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 113 \
             --dport $UNPRIVPORTS -j ACCEPT
else
    iptables -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 -j REJECT --reject-with tcp-reset
fi

###############################################################
# Sending Mail to Any External Mail Server
# Use "-d $MAIL_SERVER" if an ISP mail gateway is used instead

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 25 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 25 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 25 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Retrieving Mail as a POP Client (TCP Port 110)

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $POP_SERVER --dport 110 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $POP_SERVER --dport 110 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $POP_SERVER --sport 110 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Accessing Usenet News Services (TCP NNTP Port 119)

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NEWS_SERVER --dport 119 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NEWS_SERVER --dport 119 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $NEWS_SERVER --sport 119 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# ssh (TCP Port 22)

# Outgoing Local  Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $SSH_PORTS \
             --dport 22 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $SSH_PORTS \
         --dport 22 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --source-port 22 \
         -d $IPADDR --dport $SSH_PORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$SSH_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $SSH_PORTS \
                 -d $IPADDR --dport 22 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $SSH_PORTS \
             -d $IPADDR --dport 22 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 22 \
             --dport $SSH_PORTS -j ACCEPT
fi

###############################################################
# ftp (TCP Ports 21, 20)

# Outgoing Local Client Requests to Remote Servers

# Outgoing Control Connection to Port 21
if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 21 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 21 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 21 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

# Incoming Port Mode Data Channel Connection from Port 20
if [ "$CONNECTION_TRACKING" = "1" ]; then
    # This rule is not necessary if the ip_conntrack_ftp
    # module is used.
    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport 20 \
             -d $IPADDR --dport $UNPRIVPORTS \
             -m state --state NEW -j ACCEPT
fi

iptables -A INPUT  -i $INTERNET -p tcp \
         --sport 20 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 20 -j ACCEPT

# Outgoing Passive Mode Data Channel Connection Between Unprivileveg Ports
if [ "$CONNECTION_TRACKING" = "1" ]; then
    # This rule is not necessary if the ip_conntrack_ftp
    # module is used.
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport $UNPRIVPORTS -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$FTP_SERVER" = "1" ]; then

    # Incoming Control Connection to Port 21
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 21 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 21 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 21 \
             --dport $UNPRIVPORTS -j ACCEPT

    # Outgoing Port Mode Data Channel Connection to Port 20
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A OUTPUT -o $INTERNET -p tcp \
                 -s $IPADDR --sport 20\
                 --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
    fi

    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport 20 \
             --dport $UNPRIVPORTS -j ACCEPT

    iptables -A INPUT -i $INTERNET -p tcp ! --syn \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 20 -j ACCEPT

    # Incoming Passive Mode Data Channel Connection Between Unprivileved Ports
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport $UNPRIVPORTS \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport $UNPRIVPORTS -j ACCEPT
fi
###############################################################
# HTTP Web Traffic (TCP Port 80)

# Outgoing Local Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 80 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 80 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 80 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$WEB_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 80 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 80 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 80 \
             --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# SSL Web Traffic (TCP Port 443)

# Outgoing Local  Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 443 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 443 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 443 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$SSL_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 443 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 443 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 443 \
             --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# whois (TCP Port 43)

# Outgoing Local  Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 43 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 43 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 43 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Accessing Remote Network Time Servers (UDP 123)
# Note: some client and servers use source port 123
# when querying a remote server on destination port 123.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $TIME_SERVER --dport 123 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $TIME_SERVER --dport 123 -j ACCEPT

iptables -A INPUT  -i $INTERNET -p udp \
         -s $TIME_SERVER --sport 123 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Accessing Your ISP's DHCP Server (UDP Ports 67, 68)

# Some broadcast packets are explicitly ignored by the firewall.
# Others are dopped by the default policy.
# DHCP tests must precede broadcast-related rules, as DHCP relies
# on broadcast traffic initially.

if [ "$DHCP_CLIENT" = "1" ]; then
    # Initialization or rebinding: No lease or Lease time expired.

    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 68 \
             -d $BROADCAST_DEST --dport 67 -j ACCEPT

    # Incoming DHCPOFFER from available DHCP servers

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT

    # Fall back to initialization
    # The client knows its server, but has either lost its lease,
    # or else needs to reconfirm the IP address after rebooting.

    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 68 \
             -d $DHCP_SERVER --dport 67 -j ACCEPT

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $DHCP_SERVER --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT

    # As a result of the above, we're supposed to change our IP
    # address with this message, which is addressed to our new
    # address before the dhcp client has received the update.
    # Depending on the server implementation, the destination address
    # can be the new IP address, the subnet address, or the limited
    # broadcast address.

    # If the network subnet address is used as the destination,
    # the next rule must allow incoming packets destined to the
    # subnet address, and the rule must preceed any general rules
    # that block such incoming broadcast packets.

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $DHCP_SERVER --sport 67 \
             --dport 68 -j ACCEPT

    # Lease renewal

    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport 68 \
             -d $DHCP_SERVER --dport 67 -j ACCEPT

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $DHCP_SERVER --sport 67 \
             -d $IPADDR --dport 68 -j ACCEPT

    # Refuse directed broadcasts
    # Used to map networks and in Denial of Service attacks
    #iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP
    #iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP

    # Refuse limited broadcasts
    iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP

fi
###############################################################
# ICMP Control and Status Messages

# Log and drop initial ICMP fragments
iptables -A INPUT  -i $INTERNET --fragment -p icmp -j LOG \
         --log-prefix "Fragmented incoming ICMP: "
iptables -A INPUT  -i $INTERNET --fragment -p icmp -j DROP

iptables -A OUTPUT  -o $INTERNET --fragment -p icmp -j LOG \
         --log-prefix "Fragmented outgoing ICMP: "
iptables -A OUTPUT  -o $INTERNET --fragment -p icmp -j DROP

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type source-quench -d $IPADDR -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type source-quench -j ACCEPT

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type parameter-problem -d $IPADDR -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type parameter-problem -j ACCEPT

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type destination-unreachable -d $IPADDR -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type fragmentation-needed -j ACCEPT

# Don¹t log dropped outgoing ICMP error messages
iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type destination-unreachable -j DROP

# Intermediate traceroute responses
iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type time-exceeded -d $IPADDR -j ACCEPT

# allow outgoing pings to anywhere
if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p icmp \
             -s $IPADDR --icmp-type echo-request \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type echo-request -j ACCEPT

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type echo-reply -d $IPADDR -j ACCEPT

# allow incoming pings from trusted hosts
#if [ "$CONNECTION_TRACKING" = "1" ]; then
    #iptables -A INPUT  -i $INTERNET -p icmp \
             #-s $MY_ISP --icmp-type echo-request -d $IPADDR \
             #-m state --state NEW -j ACCEPT
#fi
 
#iptables -A INPUT  -i $INTERNET -p icmp \
         #-s $MY_ISP --icmp-type echo-request -d $IPADDR -j ACCEPT

#iptables -A OUTPUT -o $INTERNET -p icmp \
         #-s $IPADDR --icmp-type echo-reply -d $MY_ISP -j ACCEPT

###############################################################
# Logging Dropped Packets

# Don't log dropped incoming echo-requests
iptables -A INPUT -i $INTERNET -p icmp \
         --icmp-type ! 8 -d $IPADDR -j LOG

iptables -A INPUT -i $INTERNET -p tcp \
         -d $IPADDR -j LOG

iptables -A OUTPUT -o $INTERNET -j LOG
 
exit 0


Nel frattempo:
cosa vuol dire "IP Exposed"?

Vuol dire che il tuo IP interno risulta identificabile dall'"esterno"...ovvero da internet....capita anche a me :-(
mi sa che il mio firewall ha bisogno di una revisione :-(
have a nice day
Avatar utente
salbutamolo
Linux 2.6
Linux 2.6
 
Messaggi: 905
Iscritto il: lun gen 12, 2004 0:00

Messaggioda miKe » dom mar 05, 2006 15:00

Sawk ha scritto:questo firewall gira per internet e non vale na cicca, ben poco si salva come il SYN-FLOOD e il settaggio dei icmp....non usarlo che ha parecchi problemi, sopratutto a livello di configurazione di ipv4.



quali sarebbero i problemi?
che lo usi con un kernel 2.6 e una versione di iptables moolto diversa da quella con il quale è stato scritto?

prima di parlare, e di sparare a zero, sarebbe il caso di fare 2 controlli 2
poi mi pare sia scritto in modo esplicito, quello script serve a far capire alcune cose che le interfaccine colorate nascondono, e deve essere adattato alle proprie esigenze,
e se serve, migliorato, visto che il codice e i comandi di iptables di oggi non sono quelli del 2003 !

visto che sei in grado di migliorarlo, fallo e aggiungi il tuo nome,
evita di copiare dove puoi e spacciar per tuo il lavoro degli altri, grazie

[quote="Sawk"
Piuttosto dai una occhiata ai post su questo forum, dovrei aver postato un firewall molto efficacie che utilizzo[/quote]

che copia pare pare il 90% delle impostazioni del mio...
miKe
Linux 1.0
Linux 1.0
 
Messaggi: 2
Iscritto il: lun gen 19, 2004 0:00


Torna a Sicurezza

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite