Un firewall è essenzialmente un dispositivo che permette di gestire come un filtro il traffico tra due interfacce di rete. In questa sezione vedremo come impostare un firewall per un sistema Linux, sia per proteggere un singolo PC, sia una rete locale, in entrambe le situazioni nel caso di collegamento a internet. Inoltre vedremo come poter consentire la condivisione di una connessione internet, in modo che un singolo PC possa isolare da possibili attacchi esterni e allo stesso tempo permetta l'accesso all'esterno alla rete locale. Per accesso esterno considero solo quello in entrata: tutti i PC della rete potranno inviare e ricevere tutte le informazioni che vorranno, ma non potranno offrire servizi all'esterno (infatti per questo servizio serve un demone apposito, rinetd). Inoltre l'inserimento nella macchina firewall di un server dns e di un cache proxy permetteranno di sveltire il traffico: il server dns locale permette infatti di avere una risposta più immediata alle richieste di risoluzione dei nomi in indirizzi ip, mentre il cache proxy permette di tenere copie locali delle pagine web e dei file già scaricati, evitando una nuova richiesta esterna (questi due tipi di servizi sono trattati nelle sezioni DNS e WWWOFFLE di questo howto).
Linux contiene già al suo interno tutto il necessario per implementare un firewall e il masquerading: si tratta del tool ipchains dei kernel 2.2.x. I kernel della serie 2.0.x usavano ipfwadm, mentre quelli della futura versione 2.4.x useranno iptables: qui si tratterà solo la gestione con ipchains e kernel 2.2.x (e in futuro iptables), mentre ipfwadm non verrà trattato. Per poter utilizzare ipchains, è necessario che il kernel sia compilato con le opzioni di firewalling seguenti impostate a Yes:
più naturalmente tutto quello che vi serve per la rete (networking, ppp, ethernet, routing, ecc.). Ipchains suddivide il traffico in tre tronconi, fornendo tre filtri: input, output e forward, gestibili tramite una serie di regole che stabiliscono il trattamento del pacchetto arrivato. Le regole vengono applicate nell'ordine in cui sono inserite, e se non è presente alcuna regola specifica, si applica la politica di default. In questo howto prendereno in considerazione solo le cose essenziali e solo quelle trattate nello script, per il resto si rimanda al Firewall-Howto e all'Ipchains-Howto, oltre all'ottima sezione degli Appunti Linux. L'impostazione tipica di una regola è la seguente:
ipchains <opzione-di-comando> <filtro> [<regola>] [<obiettivo>]
Le opzioni di comando sono:
I filtri sono (rispettivamente per pacchetti in entrata, uscita e in transito):
Gli obiettivi sono:
Le regole invece usano le seguenti opzioni (le parentesi [] indicano qualcosa di opzionale, mentre il ! indica una negazione):
Altre informazioni sono reperibili nei documenti su indicati. Il mascheramento IP permette di far credere all'esterno che l'origine delle connessioni è sempre un solo nodo, anche quando in realtà si tratta di un nodo interno ad una rete privata. Naturalmente, il nodo che esegue il mascheramento è poi in grado di distinguere quali siano stati i nodi mascherati che hanno originato la connessione, girando a loro i pacchetti di loro competenza.
Lo script seguente funziona sia come firewall che da mascheramento di una rete locale interna verso Internet. E' configurato per l'accesso dialup via ppp (usa ppp0). Leggete i commenti nel file, modificate dove indicato e andate in pace. Per sapere come abilitare il supporto per firewall e masquerading, guardate nella pagina relativa al kernel. Dovrebbe fare la maggior parte dei controlli su esistenza di file, connessione, parametri, e segnalarvi se qualcosa non va. ***Nota*** per il mascheramento di ICQ, dovete scaricare, compilare e installare "ip_masq_icq", reperibile all'URL http://freeshell.org/~djsf/masq-icq/ oppure all'URL http://djsf.narod.ru/masq-icq/ (un grazie a Filippo Panessa per il suggerimento!). In ICQ2000 non funziona ancora il trasferimento file. Nella configurazione dei client che vengono mascherati, dovete impostare nelle loro opzioni l'uso di un firewall sull'intervallo di porte 2000:4000.
#!/bin/bash # # ========================================================================== # ========= Script per la configurazione di un Firewall per Linux ========== # ========================================================================== # # Da utilizzarsi esclusivamente per una macchina stand-alone connessa # ad internet tramite connessione dial-up. E' necessario disporre di # un kernel della serie 2.2.x o 2.3.x compilato con il supporto # del masquerading, del firewall e l'opzione "always defragment". # Viene filtrato cio' che entra e permesso alla rete di uscire # # $Revisione: 7.0$ # modificato da MrShark su un lavoro precedente di Maurizio Cimaschi, # con vari preziosi suggerimenti di Pierluigi De Rosa e Marco d'Itri. # (Se ci sono errori, fatemeli conoscere a: <mrshark@tiscalinet.it>). # # Utilizzo: firewall start|stop|status # start = attiva il firewall # stop = disattiva il firewall # status = impostazioni correnti del firewall # # by Antonio Fragola, aka MrShark - The Informaniac # #------------------------------ verifica che lo script sia avviato da root if [ $UID !=0 ]; then clear echo -e "\aATTENZIONE: solo l'utente root puo' avviare il firewall!" exit 1 fi # ========================================================================== # =========== Definizione delle variabili d'ambiente necessarie ============ # ========================================================================== #------------------------------ variabili utili IPCHAINS="/sbin/ipchains" INTERFACES=`/sbin/ifconfig | grep Link | cut -d \ -f 1` CURRENT_KERNEL=`uname -r` IP_MASQ_MODULES="ftp irc quake" #IP_MASQ_MODULES="cuseeme ftp irc quake raudio vdolive" INTERFACE="ppp0" INTERFACEMASK="255.255.255.255" INTERFACEIP=`/sbin/ifconfig $INTERFACE | grep inet | cut -d : -f 2 | cut -d \ -f 1` LOCALIP="$INTERFACEIP/$INTERFACEMASK" LOCALNET="192.168.0.0/16" ANYWHERE="0.0.0.0/0" LOOPBACK="127.0.0.0/8" CLASS_A="10.0.0.0/8" CLASS_B="172.16.0.0/12" CLASS_C="192.168.0.0/16" CLASS_D_MULTICAST="224.0.0.0/4" CLASS_E_RESERVED_NET="240.0.0.0/5" NFS_PORT="2049" # (TCP/UDP) NFS SOCKS_PORT="1080" # (TCP) Socks # X Windows alloca le porte a partire dalla 6000 e incrementa # fino alla 6063 per ogni server addizionale in funzione. XWINDOW_PORTS="6000:6063" # (TCP) X windows # traceroute di solito usa -S 32769:65535 -D 33434:33523 TRACEROUTE_SRC_PORTS="32769:65535" TRACEROUTE_DEST_PORTS="33434:33523" PRIVPORTS="0:1023" UNPRIVPORTS="1024:65535" # SSH incomincia dalla porta 1023 e va a scalare fino alla 513 SSH_PORTS="1022:1023" #------------------------------ codici escape colori RED="\\033[1;31m" GREEN="\\033[0;32m" WHITE="\\033[0;39m" CYAN="\\033[0;36m" BLUE="\\033[1;34m" ORANGE="\\033[0;33m" YELLOW="\\033[1;33m" MAGENTA="\\033[1;35m" # ========================================================================== # ================== Definizione dei servizi utilizzabili ================== # ============ ON=Servizio attivo OFF=Servizio non richiesto ============ # ========================================================================== # masquerading: ON solo se si ha una rete locale che deve accedere a internet MASQ="ON" FTP="ON" DNS1="ON" DNS2="ON" HTTP="ON" SMTP="ON" NNTP="ON" POP3="ON" ICMP="ON" AUTH="ON" IRC="OFF" ICQ="OFF" SSH="ON" NAP="OFF" # ========================================================================== # ============== Definizione degli IP dei servizi del provider ============= # ========================================================================== # de/commentare solo le sezioni d'interesse o aggiungerne altre #------------------------------ IP di libero DNS1_IP="195.210.91.1" DNS2_IP="195.210.91.2" SMTP_IP="193.70.192.50" NNTP_IP="192.106.1.6" #------------------------------ IP di iol1055 #DNS1_IP="195.210.91.1" #DNS2_IP="195.210.91.2" #SMTP_IP="193.70.192.50" #NNTP_IP="193.70.192.201" #------------------------------ IP di tiscali #DNS1_IP="195.130.224.18" #DNS2_IP="195.130.225.129" #SMTP_IP="195.130.224.22" #NNTP_IP="195.130.224.123" #------------------------------ IP di clubnet #DNS1_IP="212.216.112.222" #DNS2_IP="212.216.172.162" #attenzione: clubnet usa smtp con piu' IP - cercarli con nslookup #SMTP_IP="212.216.176.50" #NNTP_IP="194.243.154.18" # Attenzione: aggiungere TUTTI gli IP dei server POP3 usati, non solo # quelli del provider in uso, altrimenti non si potra' scaricare la posta #pop3 tiscali POP3_1_IP="195.130.224.23" #pop3 iol1055 POP3_2_IP="193.70.192.80" #pop3 libero POP3_3_IP="193.70.192.70" #pop3 clubnet #attenzione: clubnet usa pop con piu' IP POP3_4_IP="212.216.176.71" POP3_5_IP="212.216.176.64" POP3_6_IP="212.216.176.65" POP3_7_IP="212.216.176.67" POP3_8_IP="212.216.176.68" POP3_9_IP="212.216.176.69" POP3_10_IP="212.216.176.70" # ========================================================================== # =========== Da qui in poi non toccare niente (al piu' solo la =========== # ========== parte del POP3 per aggiungere/rimuovere gli account) ========== # ========================================================================== case "$1" in #------------------------------ opzione start dello script start) #------------------------------ verifica esistenza interfaccia if [ -z $INTERFACEIP ]; then #------------------------------ se non esiste, avverti ed esci con errore 1 clear echo -e "${RED}ATTENZIONE: ${YELLOW}l'interfaccia " echo -e "${RED}ppp0${YELLOW} NON e' attiva nel sistema." echo -e "Firewall NON attivato. Controllare la connessione Internet." echo -en "${WHITE}Interfacce attualmente attive nel PC: " for irf in ${INTERFACES} ; do echo -en "${RED}${irf}${WHITE} " done echo -e "\n\a" exit 1 #------------------------------ se l'interfaccia esiste, si procede else echo echo "Attivazione del Firewall in corso..." echo -e "Indirizzo IP locale sull'interfaccia ${YELLOW}$INTERFACE" echo -e "${WHITE} : ${RED}$LOCALIP${WHITE}" echo -n "Flushing delle regole eventualmente presenti : " $IPCHAINS -F input $IPCHAINS -F output $IPCHAINS -F forward echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" # ========================================================================== # =========================== Regole in ingresso =========================== # ========================================================================== #------------------------------ attivazione protezioni varie echo -n "Permesso al traffico locale sull'interfaccia di loopback : " $IPCHAINS -A input -s $ANYWHERE -i lo -j ACCEPT $IPCHAINS -A input -s $LOCALNET -d $ANYWHERE -j ACCEPT echo -e "\t[ ${GREEN}OK ${WHITE}]" echo -n "Attivazione Source Address Verification : " 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 echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t[ ${RED}NO ${WHITE}]" echo -n "SAV non disponibile, utilizzo di ipchains : " $IPCHAINS -A input -s 127.0.0.1 -i lo -j ACCEPT echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" fi echo -n "Attivazione TCP SYN Cookie Protection : " if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then echo 1 >/proc/sys/net/ipv4/tcp_syncookies echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t[ ${RED}NO ${WHITE}]" fi echo -n "Attivazione Always Defragging Protection : " if [ -e /proc/sys/net/ipv4/ip_always_defrag ]; then echo 1 > /proc/sys/net/ipv4/ip_always_defrag echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t[ ${RED}NO ${WHITE}]" fi echo -n "Attivazione Broadcast Echo Protection : " if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t[ ${RED}NO ${WHITE}]" fi echo -n "Attivazione Bad Error Message Protection : " if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t[ ${RED}NO ${WHITE}]" fi echo -n "Disattivazione ICMP Redirect Acceptance : " if [ -e /proc/sys/net/ipv4/conf/all/accept_redirects ]; then for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $f done echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t[ ${RED}NO ${WHITE}]" fi echo -n "Disattivazione Source Routed Packets : " if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $f done echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t[ ${RED}NO ${WHITE}]" fi echo -e "${YELLOW}Attivazione dei servizi in ingresso richiesti : ${WHITE}" echo -n "Impostazione della POLICY di ingresso a DENY : " $IPCHAINS -P input DENY echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" #------------------------------ DNS1 (53) echo -n "Server DNS primario : " if [ $DNS1 = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $DNS1_IP 53 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p udp -s $DNS1_IP 53 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ DNS2 (53) echo -n "Server DNS secondario : " if [ $DNS2 = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $DNS2_IP 53 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p udp -s $DNS2_IP 53 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ HTTP (80) e HTTPS (443) echo -n "Navigazione WEB : " if [ $HTTP = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s 0/0 80 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp ! -y -s 0/0 443 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ SMTP (25) echo -n "Invio posta : " if [ $SMTP = "ON" ]; then $IPCHAINS -A input -p tcp -s $SMTP_IP 25 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT # $IPCHAINS -A input -p tcp -s $ANYWHERE 25 -d $LOCALIP \ # $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ POP3 (110) echo -n "Prelievo posta : " if [ $POP3 = "ON" ]; then $IPCHAINS -A input -p tcp -s $POP3_1_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_2_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_3_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_4_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_5_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_6_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_7_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_8_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_9_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp -s $POP3_10_IP 110 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ NNTP (119) echo -n "Newsgroup Usenet : " if [ $NNTP = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $NNTP_IP 119 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ FTP (20/21) echo -n "File Transfer Protocol : " if [ $FTP = "ON" ]; then $IPCHAINS -A input -p tcp ! -y --source-port 21 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT #FTP Port Mode (normale) $IPCHAINS -A input -p tcp --source-port 20 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT #FTP Passive Mode (senza questa i browser non accedono ai siti FTP) $IPCHAINS -A input -p tcp ! -y --source-port $UNPRIVPORTS \ -d $LOCALIP $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ SSH (22) echo -n "Secure Shell : " if [ $SSH = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 22 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 22 -d $LOCALIP \ $SSH_PORTS -j ACCEPT echo -e "\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ ICMP (solo tipi 0/3/11) echo -n "Traffico ICMP : " if [ $ICMP = "ON" ]; then $IPCHAINS -A input -p icmp -s $ANYWHERE 0 -d $LOCALIP -j ACCEPT $IPCHAINS -A input -p icmp -s $ANYWHERE 3 -d $LOCALIP -j ACCEPT $IPCHAINS -A input -p icmp -s $ANYWHERE 11 -d $LOCALIP -j ACCEPT echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ AUTH (113) echo -n "Richieste di identificazione : " if [ $AUTH = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -d $LOCALIP 113 -j ACCEPT echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ IRC (6667) echo -n "Internet Relay Chat : " if [ $IRC = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 6667 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ ICQ (2000:4000) echo -n "ICQ : " if [ $ICQ = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 2000:4000 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT $IPCHAINS -A input -p udp -s $ANYWHERE 2000:4000 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ NAPSTER (6699) echo -n "NAPSTER : " if [ $NAP = "ON" ]; then $IPCHAINS -A input -p tcp ! -y -s $ANYWHERE 6699 -d $LOCALIP \ $UNPRIVPORTS -j ACCEPT echo -e "\t\t\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" else echo -e "\t\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi #------------------------------ blocco e log echo -n "Blocco e log di tutto il resto : " # Rifiuta pacchetti spoof che simulano di provenire dall'esterno. $IPCHAINS -A input -i $INTERFACE -s $LOCALIP -j DENY -l # Rifiuta pacchetti che sembrano provenire da una rete privata di Classe A $IPCHAINS -A input -i $INTERFACE -s $CLASS_A -j DENY $IPCHAINS -A input -i $INTERFACE -d $CLASS_A -j DENY -l # Rifiuta pacchetti che sembrano provenire da una rete privata di Classe B $IPCHAINS -A input -i $INTERFACE -s $CLASS_B -j DENY -l $IPCHAINS -A input -i $INTERFACE -d $CLASS_B -j DENY -l # Rifiuta pacchetti che sembrano provenire da una rete privata di Classe C $IPCHAINS -A input -i $INTERFACE -s $CLASS_C -j DENY -l $IPCHAINS -A input -i $INTERFACE -d $CLASS_C -j DENY -l # Rifiuta pacchetti che sembrano provenire dall'interfaccia di Loopback $IPCHAINS -A input -i $INTERFACE -s $LOOPBACK -j DENY -l # Rifiuta pacchetti broadcast address SOURCE $IPCHAINS -A input -i $INTERFACE -s $INTERFACEMASK -j DENY -l $IPCHAINS -A input -i $INTERFACE -d $ANYWHERE -j DENY -l # Rifiuta pacchetti multicast addresses di Classe D (in.h) (NET-3-HOWTO) # Il Multicast e' illegale come indirizzo sorgente, ed usa UDP. $IPCHAINS -A input -i $INTERFACE -s $CLASS_D_MULTICAST -j DENY -l # Rifiuta pacchetti da indirizzi IP riservati di Classe E $IPCHAINS -A input -i $INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l # Rifiuta pacchetti con indirizzi definiti riservati dall'IANA # 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.* # 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.* # 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.* $IPCHAINS -A input -i $INTERFACE -s 1.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 2.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 5.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 7.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 23.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 27.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 31.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 37.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 39.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 41.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 42.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 49.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 50.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 58.0.0.0/7 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 60.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 65.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 66.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 67.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 68.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 69.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 70.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 71.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 72.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 73.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 74.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 75.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 76.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 77.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 78.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 79.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 80.0.0.0/4 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 96.0.0.0/4 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 112.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 113.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 114.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 115.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 116.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 117.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 118.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 119.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 120.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 121.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 122.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 123.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 124.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 125.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 126.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 197.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 217.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 218.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 219.0.0.0/8 -j DENY -l $IPCHAINS -A input -i $INTERFACE -s 220.0.0.0/6 -j DENY -l #------------------------------ porte TCP non privilegiate # NFS: instauramento connessione TCP $IPCHAINS -A input -i $INTERFACE -p tcp -y -d $LOCALIP \ $NFS_PORT -j DENY -l # Xwindow: instauramento connessione $IPCHAINS -A input -i $INTERFACE -p tcp -y -d $LOCALIP \ $XWINDOW_PORTS -j DENY -l # SOCKS: instauramento connessione $IPCHAINS -A input -i $INTERFACE -p tcp -y -d $LOCALIP \ $SOCKS_PORT -j DENY -l #------------------------------ porte UDP non privilegiate # NFS: instauramento connessione UDP $IPCHAINS -A input -i $INTERFACE -p udp -d $LOCALIP \ $NFS_PORT -j DENY -l # TRACEROUTE UDP in ingresso $IPCHAINS -A input -i $INTERFACE -p udp -s $ANYWHERE \ $TRACEROUTE_SRC_PORTS -d $LOCALIP $TRACEROUTE_DEST_PORTS -j DENY -l #------------------------------ altri log $IPCHAINS -A input -i $INTERFACE -p tcp -d $LOCALIP -j DENY -l $IPCHAINS -A input -i $INTERFACE -p udp -d $LOCALIP $PRIVPORTS \ -j DENY -l $IPCHAINS -A input -i $INTERFACE -p udp -d $LOCALIP $UNPRIVPORTS \ -j DENY -l $IPCHAINS -A input -i $INTERFACE -p icmp -s $ANYWHERE 5 -d $LOCALIP \ -j DENY -l $IPCHAINS -A input -i $INTERFACE -p icmp -s $ANYWHERE 13:255 -d $LOCALIP \ -j DENY -l echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]" # ========================================================================== # ======================= Mascheramento all' esterno ======================= # ========================================================================== #------------------------------ verifica esistenza moduli mascheramento if [ $MASQ = "ON" ]; then echo -e "${YELLOW}Mascheramento : ${WHITE}" echo -n "Controllo presenza moduli necessari : " MASQ_PRESENT="" for mod in ${IP_MASQ_MODULES}; do if [ ! -e /lib/modules/$CURRENT_KERNEL/ipv4/ip_masq_${mod}.o ]; then MASQ_PRESENT="err" fi done #------------------------------ se esistono, attiva mascheramento if [ -z ${MASQ_PRESENT} ]; then echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]" echo -n "Installazione dei moduli necessari al Mascheramento : " for mod in ${IP_MASQ_MODULES} ; do /sbin/insmod "ip_masq_${mod}" done echo -e "\t\t[ ${GREEN}OK ${WHITE}]" echo -n "Attivazione IP forwarding : " echo 1 > /proc/sys/net/ipv4/ip_forward echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" echo -n "Impostazione della POLICY di inoltro a DENY : " $IPCHAINS -P forward DENY $IPCHAINS -A forward -p all -s $LOCALNET -d $ANYWHERE -j MASQ echo -e "\t\t\t[ ${GREEN}OK ${WHITE}]" echo -n "Impostazione Timeout mascheramento connessioni TCP a 10 ore : " $IPCHAINS -M -S 36000 0 0 echo -e "\t[ ${GREEN}OK ${WHITE}]" echo -n "Blocco e log di tutto il resto : " $IPCHAINS -A forward -j DENY -s $ANYWHERE -d $ANYWHERE -l echo -e "\t\t\t\t[ ${GREEN}OK ${WHITE}]" #------------------------------ se non esistono, avverti e continua senza else echo -e "\t\t\t\t[ ${RED}NO ${WHITE}]" echo echo -e "${RED}Errore!!! Moduli per il Mascheramento " echo -e "non presenti nel sistema. Ricompilare il kernel col " echo -e "supporto per firewall e masquerading.${WHITE}" echo fi else echo -en "${YELLOW}Mascheramento : ${WHITE}" echo -e "\t\t\t\t\t\t[ ${RED}NO ${WHITE}]" fi fi ;; #------------------------------ opzione stop dello script stop) clear echo "Disattivazione del Firewall in corso..." $IPCHAINS -F $IPCHAINS -P input ACCEPT $IPCHAINS -P forward ACCEPT MASQ_PRESENT="" for mod in ${IP_MASQ_MODULES} ; do if [ ! -e /lib/modules/$CURRENT_KERNEL/ipv4/ip_masq_${mod}.o ]; then MASQ_PRESENT="err" fi done if [ -z ${MASQ_PRESENT} ] ; then echo -n "Rimozione dei moduli necessari al Mascheramento : " for mod in ${IP_MASQ_MODULES} ; do /sbin/rmmod "ip_masq_${mod}" done echo -e "\t\t[ ${GREEN}OK ${WHITE}]" echo -n "Disattivazione IP forwarding : " echo 0 > /proc/sys/net/ipv4/ip_forward echo -e "\t\t\t\t\t[ ${GREEN}OK ${WHITE}]" fi echo -e "${YELLOW}ATTENZIONE: IL FIREWALL NON E' PIU' OPERATIVO${WHITE}" ;; #------------------------------ opzione status dello script status) clear echo "Impostazioni attuali del firewall : " echo -e "Indirizzo IP locale sull'interfaccia ${YELLOW}$INTERFACE${WHITE} : \ ${RED}$LOCALIP${WHITE}" $IPCHAINS -L ;; #------------------------------ nessuna o errata opzione fornita allo script *) clear echo -e "${BLUE}############################################################${WHITE}" echo -en "${BLUE}###${YELLOW} Script di impostazione " echo -e "${MAGENTA}FIREWALL ${YELLOW}v7.0 ${BLUE}###${WHITE}" echo -e "${BLUE}############################################################${WHITE}" echo -e "${YELLOW}Utilizzo:${WHITE} firewall start|stop|status" echo -e "\t${CYAN}start${WHITE} = attiva il firewall" echo -e "\t${CYAN}stop${WHITE} = disattiva il firewall" echo -e "\t${CYAN}status${WHITE} = impostazioni correnti del firewall" echo echo -e "${RED}ATTENZIONE: ${YELLOW}ricorda che l'interfaccia \ ${RED}ppp0${YELLOW} e' attiva" echo -e "solo DOPO aver effettuato la connessione a Internet." echo -en "${WHITE}Interfacce attualmente attive nel PC: " for irf in ${INTERFACES} ; do echo -en "${RED}${irf}${WHITE} " done echo -e "\n\a" ;; esac exit 0
THIS IS THE END, MY ONLY FRIEND (by JIM).