Avanti Indietro Indice

15. APPENDICE A - Script di esempio

15.1 Script RC usando GFCC

#!/bin/bash
#
# Firewall Script - Versione 0.9.1
#
# chkconfig: 2345 09 99
# description: script firewall per i kernel 2.2.x

# Da impostare per i test:
# set -x
#
# NOTE:
#
#  Questo script è stato scritto per la RedHat 6.1 o più recente.
#
#  Prestare attenzione per quanto riguarda l'offerta di servizi pubblici quali web o ftp server.
#
# INSTALLAZIONE:
#  1. si collochi questo file nella directory /etc/rc.d/init.d  (si deve essere root..)
#     lo si chiami con qualcosa come "firewall"    :-)
#     lo si renda di proprietà del root -->  "chown root.root (filename)"
#     lo si renda eseguibile -->  "chmod 755 (filename)"
#  2. si utilizzi GFCC per creare le regole per il firewall ed esportale in un file
#     con nome /etc/gfcc/rules/firewall.rule.sh
#
#  3. si aggiunga il firewall alla struttura init della RH --> "chkconfig --add (filename)"
#     Al successivo boot del router, tutto dovrebbe sistemarsi automagicamente!
#     si dorma pure tranquilli la notte sapendo di essere *MENO* vulnerabile di prima...
#
# NOTE SULLE VERSIONI:
#   30 Jan, 2000 - Modificato per lo script GFCC 
#   11 Dec, 1999 - aggiornamento di Mark Grennan <mark@grennan.com>
#   20 July, 1999 - scrittura iniziale - Anthony Ball <tony@LinuxSIG.org>

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

# Libreria funzioni.
. /etc/rc.d/init.d/functions

# Configurazione rete.
. /etc/sysconfig/network

# Controlla che la rete sia presente.
[ ${NETWORKING} = "no" ] && exit 0

# Controlla cosa è stato richiesto
case "$1" in

  start)
        # Inizia a fornire gli accessi 
        action "Starting firewall: " /bin/true
        /etc/gfcc/rules/firewall.rule.sh
        echo
        ;;

  stop)
        action "Stoping firewall: " /bin/true
        echo 0 > /proc/sys/net/ipv4/ip_forward
        /sbin/ipchains -F input
        /sbin/ipchains -F output
        /sbin/ipchains -F forward

        echo
        ;;

  restart)
        action "Restarting firewall: " /bin/true
        $0 stop
        $0 start

        echo
        ;;

  status)
        # Visualizza elenco di tutte le regole
        /sbin/ipchains -L
        ;;

  test)
        action "Test Mode firewall: " /bin/true
        /sbin/ipchains -F input
        /sbin/ipchains -F output
        /sbin/ipchains -F forward
        echo 1 > /proc/sys/net/ipv4/ip_forward
        /sbin/ipchains -A input -j ACCEPT
        /sbin/ipchains -A output -j ACCEPT
        /sbin/ipchains -P forward DENY
        /sbin/ipchains -A forward -i $PUBLIC -j MASQ

        echo
        ;;

  *)
        echo "Usage: $0 {start|stop|restart|status|test}"
        exit 1

esac

15.2 GFCC script

Questo script è stato generato da Graphical Firewall program (GFCC). Questo non è l'insieme delle regole in funzione, è l'insieme delle regole esportate.


#!/bin/sh
# Generato da Gtk+ firewall control center

IPCHAINS=/sbin/ipchains


localnet="192.168.1.0/24"
firewallhost="192.168.1.1/32"
localhost="172.0.0.0/8"
DNS1="24.94.163.119/32"
DNS2="24.94.163.124/32"
Broadcast="255.255.255.255/32"
Multicast="224.0.0.0/8"
Any="0.0.0.0/0"
mail_grennan_com="192.168.1.1/32"
mark_grennan_com="192.168.1.3/32"

$IPCHAINS -P input DENY
$IPCHAINS -P forward ACCEPT
$IPCHAINS -P output ACCEPT

$IPCHAINS -F
$IPCHAINS -X

# regole catena input
$IPCHAINS -A input -s $Any -d $Broadcast -j DENY 
$IPCHAINS -A input -p udp -s $Any -d $Any netbios-ns -j DENY 
$IPCHAINS -A input -p tcp -s $Any -d $Any netbios-ns -j DENY 
$IPCHAINS -A input -p udp -s $Any -d $Any netbios-dgm -j DENY 
$IPCHAINS -A input -p tcp -s $Any -d $Any netbios-dgm -j DENY 
$IPCHAINS -A input -p udp -s $Any -d $Any bootps -j DENY 
$IPCHAINS -A input -p udp -s $Any -d $Any bootpc -j DENY 
$IPCHAINS -A input -s $Multicast -d $Any -j DENY 
$IPCHAINS -A input -s $localhost -d $Any -i lo -j ACCEPT 
$IPCHAINS -A input -s $localnet -d $Any -i eth1 -j ACCEPT 
$IPCHAINS -A input -s $localnet -d $Broadcast -i eth1 -j ACCEPT 
$IPCHAINS -A input -p icmp -s $Any -d $Any -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any -j ACCEPT ! -y 
$IPCHAINS -A input -p udp -s $DNS1 domain -d $Any 1023:65535 -j ACCEPT 
$IPCHAINS -A input -p udp -s $DNS2 domain -d $Any 1023:65535 -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any ssh -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any telnet -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any smtp -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any pop-3 -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any auth -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any www -j ACCEPT 
$IPCHAINS -A input -p tcp -s $Any -d $Any ftp -j ACCEPT 
$IPCHAINS -A input -s $Any -d $Any -j DENY -l 

# regole catena forward
$IPCHAINS -A forward -s $localnet -d $Any -j MASQ 

# regole catena output

15.3 Script RC senza GFCC

Questo è l'insieme delle regole scritte di mio pugno per il firewall. Non si è utilizzato GFCC.


  #!/bin/bash
  #
  # Firewall Script - Versione 0.9.0

  # chkconfig: 2345 09 99
  # description: script firewall per kernel 2.2.x

  # Da impostare per i test: 
  # set -x

  #
  # NOTE:
  #
  #  Questo script è stato realizzato per essere utilizzato con la RedHat 6.0 o versioni più recenti.
  #
  #  Questo script dovrebbe funzionare con la maggior parte dei router, dial-up e modem. 
  #  E' stato scritto per le distribuzioni RedHat.
  #
  #  Prestare attenzione nel caso si desideri offrire servizi pubblici come web o ftp server.
  #
  # INSTALLAZIONE:
  #  1. Questo file è pensato per un sistema RedHat. Dovrebbe 
  #     funzionare, forse senza apportare modifiche, anche su altre distro, ma 
  #     ancora...chi lo sa ?!!? Queste istruzioni riguardano i sistemi RedHat.
  #
  #  2. si collochi questo file in /etc/rc.d/init.d  (si dovrà essere l'utente root..)
  #     e lo si denomini con qualcosa come "firewall"    :-)
  #     lo si renda di proprietà del root -->  "chown root.root <filename>"
  #     lo si renda eseguibile -->  "chmod 755 <filename>"
  #
  #  3. Si impostino i valori in base alla propria rete, alle interfacce interne, e 
  #     ai server DNS.
  #     Si rimuovano i commenti alle linee presenti più avanti per abilitare 
  #     i servizi opzionali verso l'interno, 
  #     ci si assicuri che il proprio NIC interno sia "eth0" (altrimenti si cambi il valore 
  #     presente più avanti).
  #     lo si provi -->  "/etc/rc.d/init.d/<filename> start"
  #     si visualizzi un elenco delle regole -->  "ipchains -L -n"
  #     si sistemi tutto ciò che non va...  :-)
  #
  #  4. Si aggiunga il firewall alla struttura init della RH --> "chkconfig --add <filename>"
  #     Al boot successivo del root tutto dovrebbe impostarsi automagicamente!
  #     si dorma pure tranquilli la notte sapendo di essere *MENO* vulnerabile di prima...
  #
  # NOTE SULLE VERSIONI:
  #   20 July, 1999 - scrittura iniziale - Anthony Ball <tony@LinuxSIG.org>
  #   11 Dec, 1999 - aggiornamenti di Mark Grennan <mark@grennan.com>
  #

  ################################################
  #  Sostituire i valori sottostanti con quelli
  #  della propria rete locale.

  PRIVATENET=xxx.xxx.xxx.xxx/xx

  PUBLIC=ppp0
  PRIVATE=eth0

  # i propri server dns
  DNS1=xxx.xxx.xxx.xxx
  DNS2=xxx.xxx.xxx.xxx

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

  # alcuni pratici valori generici da usare 
  ANY=0.0.0.0/0
  ALLONES=255.255.255.255

  # Libreria funzioni.
  . /etc/rc.d/init.d/functions

  # Configurazione rete.
  . /etc/sysconfig/network

  # Controlliamo che la rete sia presente.
  [ ${NETWORKING} = "no" ] && exit 0

  # Vediamo cosa è stato richiesto.
  case "$1" in

    start)
          # Inizia a fornire gli accessi 
          action "Starting firewall: " /bin/true

          ##
          ## Setup 
          ##
          # Ripulisci tutte le liste
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward

          # Blocca qualsiasi cosa
          /sbin/ipchains -I input 1 -j DENY

          # imposta la tattica a deny (per default è ACCEPT)
          /sbin/ipchains -P input DENY
          /sbin/ipchains -P output ACCEPT
          /sbin/ipchains -P forward ACCEPT

          # Abilitiamo il packet forwarding
          echo 1 > /proc/sys/net/ipv4/ip_forward

          ##
          ## Installazione dei moduli
          ##
          # Inserire il modulo ftp attivo. Questo permetterà ftp non-passivo verso 
          # le macchine della rete locale (ma non verso il router in quanto non mascherato).
          if ! ( /sbin/lsmod | /bin/grep masq_ftp > /dev/null ); then
              /sbin/insmod ip_masq_ftp
          fi

          ##
          ## Alcune caratteristiche riguardanti la sicurezza
          ##
          # Abilitare il Source Address Verification su tutte le interfacce 
          # presenti e future per ottenere la protezione dallo spoof.
          if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
              for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
                  echo 1 > $f
              done
          else
              echo
                  echo "PROBLEMI NELL'ABILITARE LA PROTEZIONE DALL'IP SPOOFING.  FARE ATTENZIONE. "
              echo
          fi

          # scarta bcasts sulle interfacce restanti
          /sbin/ipchains -A input -d 0.0.0.0 -j DENY
          /sbin/ipchains -A input -d 255.255.255.255 -j DENY

          # scarta i seguenti senza loggarli in quanto tendono ad essere molti...
          /sbin/ipchains -A input -p udp -d $ANY 137 -j DENY   # NetBIOS su IP
          /sbin/ipchains -A input -p tcp -d $ANY 137 -j DENY   #   ""
          /sbin/ipchains -A input -p udp -d $ANY 138 -j DENY   #   ""
          /sbin/ipchains -A input -p tcp -d $ANY 138 -j DENY   #   ""
          /sbin/ipchains -A input -p udp -d $ANY 67 -j DENY    # bootp
          /sbin/ipchains -A input -p udp -d $ANY 68 -j DENY    #   ""
          /sbin/ipchains -A input -s 224.0.0.0/8 -j DENY       # indirizzi Multicast

          ##
          ## Permetti alla rete locale di uscire
          ##
          # accetta tutti i pacchetti sull'interfaccia loopback
          /sbin/ipchains -A input -i lo -j ACCEPT

          # accetta tutti i pacchetti provenienti dalle interfacce interne "fidate"
          /sbin/ipchains -A input -i $PRIVATE -s $PRIVATENET -d $ANY -j ACCEPT
          /sbin/ipchains -A input -i $PRIVATE -d $ALLONES -j ACCEPT

          ##
          ## Permetti accessi dall'esterno ai servizi del firewall (se si vuole osare)
          ##
          # accetta pacchetti ICMP
          /sbin/ipchains -A input -p icmp -j ACCEPT
          # accetta pacchetti TCP
          /sbin/ipchains -A input -p tcp ! -y -j ACCEPT

          # permetti richieste DNS (al firewall)
          /sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY 1023: -j ACCEPT
          /sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY 1023: -j ACCEPT
          # o (IDEA MIGLIORE) esegui un server DNS caching sul router e usa le 
          # seguenti due linee al loro posto ...
          # /sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY domain -j ACCEPT
          # /sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY domain -j ACCEPT

          # rimuovi il commento dalla seguente linea per accettare richieste ssh 
          /sbin/ipchains -A input -p tcp -d $ANY 22 -j ACCEPT

          # rimuovi il commento dalla seguente linea per accettare richieste telnet (PESSIMA IDEA!!) 
          /sbin/ipchains -A input -p tcp -d $ANY telnet -j ACCEPT

          # rimuovi il commento dalla seguente linea per permettere NTP (network time protocol) verso il router
          # /sbin/ipchains -A input -p udp -d $ANY ntp -j ACCEPT

          # rimuovi il commento dalla seguente linea per permettere SMTP (non per i client mail - solo server)
          /sbin/ipchains -A input -p tcp -d $ANY smtp -j ACCEPT

          # rimuovi il commento per permettere POP3 (per client mail)
          /sbin/ipchains -A input -p tcp -d $ANY 110 -j ACCEPT

          # rimuovi il commento dalla seguente linea per inviare mail o effettuare ftp 
          /sbin/ipchains -A input -p tcp -d $ANY auth -j ACCEPT

          # rimuovi il commento alla seguente linea per permettere HTTP (solo se si sta eseguendo un web server sul router)
          /sbin/ipchains -A input -p tcp -d $ANY http -j ACCEPT

          # rimuovi il commento alla seguente linea per accettare richieste FTP
          /sbin/ipchains -A input -p tcp -d $ANY ftp -j ACCEPT

          ##
          ## Masquerading 
          ##
          # maschera i pacchetti provenienti dalla rete locale 
          /sbin/ipchains -A forward -s $PRIVATENET -d $ANY -j MASQ

          ##
          ## scarta QUALSIASI altra cosa e registrala in /var/log/messages
          ##
          /sbin/ipchains -A input -l -j DENY

          # Rimuovi il blocco
          /sbin/ipchains -D input 1

          ;;

    stop)
          action "Stoping firewall: " /bin/true
          echo 0 > /proc/sys/net/ipv4/ip_forward
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward

          echo
          ;;

    restart)
          action "Restarting firewall: " /bin/true
          $0 stop
          $0 start

          echo
          ;;

    status)
          # Elenca le impostazioni
          /sbin/ipchains -L
          ;;

    test)
          ##
          ##     E' alquanto semplice  
          ##    (Non è AFFATTO sicuro)
          action "WARNING Test Firewall: " /bin/true
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward
          echo 1 > /proc/sys/net/ipv4/ip_forward
          /sbin/ipchains -A input -j ACCEPT
          /sbin/ipchains -A output -j ACCEPT
          /sbin/ipchains -P forward DENY
          /sbin/ipchains -A forward -i $PUBLIC -j MASQ

          echo
          ;;

    *)
          echo "Usage: $0 {start|stop|restart|status|test}"
          exit 1

  esac


esac


Avanti Indietro Indice