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.
smtux
Linux 2.6
Linux 2.6
Messaggi: 977
Iscritto il: gio set 01, 2005 0:00
Slackware: 12.0
Località: somewhere in the time

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:

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

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

smtux
Linux 2.6
Linux 2.6
Messaggi: 977
Iscritto il: gio set 01, 2005 0:00
Slackware: 12.0
Località: somewhere in the time

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!

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

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 " "

smtux
Linux 2.6
Linux 2.6
Messaggi: 977
Iscritto il: gio set 01, 2005 0:00
Slackware: 12.0
Località: somewhere in the time

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: gio set 01, 2005 0:00
Slackware: 12.0
Località: somewhere in the time

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.

Avatar utente
salbutamolo
Linux 2.6
Linux 2.6
Messaggi: 905
Iscritto il: lun gen 12, 2004 0:00
Contatta:

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

miKe
Linux 1.0
Linux 1.0
Messaggi: 2
Iscritto il: lun gen 19, 2004 0:00
Contatta:

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...


Torna a “Sicurezza”

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti