#!/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
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
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