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