Repository 32bit  Forum
Repository 64bit  Wiki

Firewall by miKe

Da Slacky.eu.

Descrizione

Questo script shell altamente configurabile vi aiuterà a impostare il vostro firewall, numerose le opzioni un help vi mostrerà tutto il menù ben commentato e dettagliato, provatelo merita :)

Script

#!/bin/bash
##
clear
##
####################
VERSION="2003.06.11"
####################
##
## Interfaccia interna fidata  'settare la propria'
IIF="eth0"
#	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="xx.xx.xx.xx"
##
## 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="195.130.224.18"
##
## Provider2 DNS
#DNS2="195.130.224.18"
DNS2="192.160.10.31"
##
## 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="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
		msg=" Attivo il firewall ..."
		echo -e "$COLOR$msg$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
		msg=" Disattivo il firewall ..."
		echo -e "$COLOR$msg$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
		msg=" Attenzione, disattivo il firewall ed attivo il forwarding..."
		echo -e "$COLOR$msg$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
		msg=" Help..."
		echo -e "$COLOR$msg"
		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
		msg=" Info ..."
		echo -e "$COLOR$msg"
		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
		msg=" Politiche ..."
		echo -e "$COLOR$msg"
	$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
		msg=" Syn Flood ..."
		echo -e "$COLOR$msg"
		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
	msg="Firewall  ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}"
		echo -e "$COLOR$msg$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 ##
#################
##
	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
	##
##
#################################
## inizio competenza iptables  ##
#################################
##
	echo "Azzero le chain..."
	##
	for y in  filter nat mangle ; do
	 $IPT -t $y -F
	 $IPT -t $y -X
	done
	##
	## politica per la tabella filter
	$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 $EIF -s $LOCALNET -j $chain
	$IPT -t nat -A PREROUTING -i $EIF -s $LOCALHOST -j $chain
	$IPT -t nat -A PREROUTING -i $EIF -s $CLIENT -j $chain
	$IPT -t nat -A PREROUTING -i $EIF -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 $EIF -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 $EIF -p udp -s $DNS1   --sport 53 -j ACCEPT
	$IPT  -A INPUT -i $EIF -p udp -s $DNS2   --sport 53 -j ACCEPT
#	$IPT  -A INPUT -i IIF -p tcp -s $DNS3   --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  $EIF  -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

##
#######################
## 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 $EIF -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 $EIF  -m state --state NEW,INVALID -j $chain
$IPT -A FORWARD  -o $EIF -j ACCEPT
echo "$MSET   SNAT (MASQUERADE) su $EIF"
##
#usare su indirizzi dinamici (esempio connessioni dial-up)
$IPT -t nat -A POSTROUTING -o $EIF -j MASQUERADE
#usare solo su indirizzi statici
#	$IPT -t nat -A POSTROUTING -o $EIF -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..


  • Data: 03 Jun 2006
  • Autore: Mike
Strumenti personali
Namespace

Varianti