perchè questo firewall mi blocca la connessione?

Postate qui per tutte le discussioni legate alla sicurezza di Linux/Slackware

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

perchè questo firewall mi blocca la connessione?

Messaggio da smtux »

salve a tutti,
sono partito a farmi il firewall da uno script che ho trovato su questo sito, il problema è che quando lo faccio girare mi blocca la connessione... uff! Mi sono letto varie cose su iptables ma la magagna proprio non la vedo... non è che mi date una mano?

Codice: Seleziona tutto

#########################################################################
##
	clear
##
	####################
	VERSION="2005.07.11"
	####################
	##
	## Interfaccia interna fidata  'settare la propria'
        IIF="wlan0"
#	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="192.168.1.10"
	##
	## 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="193.70.192.25"
	##
	## Provider2 DNS
	#DNS2="195.130.224.18"
	DNS2="192.70.152.25"
	##
	## 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="rc.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
		messaggio=" Attivo il firewall ..."
		echo -e "$COLOR$messaggio$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
		messaggio=" Disattivo il firewall ..."
		echo -e "$COLOR$messaggio$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
		messaggio=" Attenzione, disattivo il firewall ed attivo il forwarding..."
		echo -e "$COLOR$messaggio$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
		messaggio=" Help..."
		echo -e "$COLOR$messaggio"
		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
		messaggio=" Info ..."
		echo -e "$COLOR$messaggio"
		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
		messaggio=" Politiche ..."
		echo -e "$COLOR$messaggio"
	$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
		messaggio=" Syn Flood ..."
		echo -e "$COLOR$messaggio"
		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
	messaggio="Firewall  ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}"
		echo -e "$COLOR$messaggio$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 ##
#################
##


# Abilito rp_filter su tutte le interfacce
# Antispoofing protection
# Abilito il sorce route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1


	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
	##
	# Non rispondo a broadcast ping
	#echo "Non rispondo a broadcast ping"	
	#net.ipv4.conf.all.log_martians = 1
	##
	# Disabilito ecn
	#echo "Disabilito ecn"
	#net.ipv4.tcp_ecn = 0
	##
##
#################################
## inizio competenza iptables  ##
#################################
##
	echo "Azzero le chain..."
	##
	for y in  filter nat mangle ; do
	 $IPT -t $y -F
	 $IPT -t $y -X
	 $IPT -t nat -F
	done
	##
	## politica per la tabella filter
	
	# Nel caso di start abbiamo 
	#
# 	iptables -P INPUT DROP
# 	iptables -P FORWARD DROP
# 	iptables -P OUTPUT ACCEPT	

	$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 $EIP -s $LOCALNET -j $chain
	$IPT -t nat -A PREROUTING -i $EIP -s $LOCALHOST -j $chain
#	$IPT -t nat -A PREROUTING -i $EIF -s $CLIENT -j $chain
#	$IPT -t nat -A PREROUTING -i $EIP -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 $EIP -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 $EIP -p udp -s $DNS1   --sport 53 -j ACCEPT
	$IPT  -A INPUT -i $EIP -p udp -s $DNS2   --sport 53 -j ACCEPT
	$IPT  -A INPUT -i $IIF -p tcp -s $DNS1   --sport 53 -j ACCEPT
	$IPT  -A INPUT -i $IIF -p tcp -s $DNS2   --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  $EIP  -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

	# Amule
	$IPT -t filter -A INPUT -p tcp --dport 4662 -j ACCEPT
	$IPT -t filter -A INPUT -p udp --dport 4672 -j ACCEPT
	
	# Samba
	$IPT -t filter -A INPUT -p tcp --dport 139 -j ACCEPT
	$IPT -t filter -A INPUT -p tcp --dport 445 -j ACCEPT
	$IPT -t filter -A INPUT -p udp --dport 137 -j ACCEPT
	$IPT -t filter -A INPUT -p udp --dport 138 -j ACCEPT
	
	#Skpye
	# Non c'è bisogno di settare niente.

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


:cry:

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

questo firewall gira per internet e non vale na cicca, ben poco si salva come il SYN-FLOOD e il settaggio dei icmp....non usarlo che ha parecchi problemi, sopratutto a livello di configurazione di ipv4. Piuttosto dai una occhiata ai post su questo forum, dovrei aver postato un firewall molto efficacie che utilizzo

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio da smtux »

si va di nulla....

ho provato a cercare il tuo firewall ma non lo trovo non è che me lo potresti postare?
grazie!

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

Codice: Seleziona tutto

#!/bin/bash
# Firewall by OhiOhiOhi
# AVVIATE QUESTO FIREWALL DA ROOT


# Settare i seguenti valori in base alle proprie esigenze

INT=eth0
LOCALHOST="127.0.0.1"
DNS1="130.244.127.161"  # In questi due punti inserite i DNS del vostro 
DNS2="130.244.127.169"  # provider. In default ho messo quelli tele2
ETH="192.168.1.1"
LANGW="192.168.0.0/24"

IPT=iptables

echo "Firewall by OhiOhiOhi"
echo " "

case $1 in

## START

start)
echo "Sto attivando il firewall..."

# Politiche

	input=DROP
	output=ACCEPT
	fw=DROP

## Inizio bash scripting per iptables

echo "Setto contromisure contro attacchi"
## Contromisure contro attacchi DoS: da usare solo sotto attacco
#	echo "1" >    /proc/sys/net/ipv4/icmp_echo_ignore_all
#       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

# Questo comando ignora tutti i ping alla vostra macchina, abilitandolo 
# potreste avere problemi di rete
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Riduce il numero di SYN-FLOOD
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog

# Protezione contro SYS-FLOOD attack
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# Ignora i pacchetti indirizzati a broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# serve per abilitare il trasferimento di pacchetti tra interfacce
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Protezione contro spoofing e sourcerouting
echo "1" > /proc/sys/net/ipv4/tcp_rfc1337

# Una protezione in più anche se utilizzata in combinazione con router
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

# Da disabilitare solo  se non si usa un Router
echo "1" > /proc/sys/net/ipv4/conf/all/accept_redirects

# non logga i pacchetti con difetti
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects

# Effettua controlli sui pacchetti ICMP
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects

# Protezione da proxy ARP
echo "0" > /proc/sys/net/ipv4/conf/all/proxy_arp

# Controlla il routing: Serve per prevenire in piccola parte un 
# ip_spoofing al computer
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Questo comando logga i pacchetti martirians ovvero i pacchetti senza 
# tragitto certo
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Abilita il dynamic socket address rewriting
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# IP Forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Setta le porte locali
echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range

# Torsmo :D
# echo "Firewall ON" > /documenti/.torsmo_firez

## IPTABLES

echo "Setto iptables"
# Preparo le chain

$IPT -F
$IPT -P INPUT   $input
$IPT -P OUTPUT  $output
$IPT -P FORWARD $fw
$IPT -N CHAIN-SCAN
$IPT -N SYN-FLOOD

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Utile comando per accettare solo alcuni tipi di icmp
	for ic in 0 3 11 ; do
	$IPT -A INPUT -i $INT -p icmp --icmp-type $ic -j ACCEPT
	done

# Abilita i DNS replays
$IPT  -A INPUT -i $INT -p udp -s $DNS1   --dport 53 -j ACCEPT
$IPT  -A INPUT -i $INT -p udp -s $DNS2   --dport 53 -j ACCEPT
$IPT  -A INPUT -i $INT -p udp -s $DNS1   --sport 53 -j ACCEPT
$IPT  -A INPUT -i $INT -p udp -s $DNS2   --sport 53 -j ACCEPT

# Blocca pacchetti broadcast
$IPT -A INPUT -p ALL -d 255.255.255.255 -j $input
$IPT -A INPUT -s 10.128.0.0/255.255.0.0  -j $input

# Sezione Gateway
iptables -t nat -A POSTROUTING -d ! $LANGW -j MASQUERADE
$IPT -A FORWARD -s $LANGW -j ACCEPT
$IPT -A FORWARD -d $LANGW -j ACCEPT
$IPT -A FORWARD -j DROP
$IPT -A INPUT -s $LANGW -j ACCEPT

# Crea catene 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-SCAN

# Protezione contro Xmas scan
$IPT -A INPUT -p tcp --tcp-flags  ALL FIN,URG,PSH -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags  ALL SYN,RST,ACK -j CHAIN-SCAN

# Blocccare scansioni senza flag
$IPT -A INPUT -p tcp --tcp-flags  ALL NONE -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j CHAIN-SCAN

# Bloccare pacchetti SYN+RST e SYN+FIN
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j CHAIN-SCAN

# Bloccare scansioni FIN
$IPT -A INPUT -p tcp --tcp-flags FIN FIN -j CHAIN-SCAN

# Sicurezze alternative 
$IPT -A INPUT -p udp --dport 135:139 -j DROP
$IPT -A INPUT -p tcp --dport 6000 -j DROP

# Abilito localhost
$IPT -A INPUT -s $LOCALHOST -j ACCEPT

# Usare questi parametri per abilitare aMule
	$IPT -A INPUT -p tcp --dport 4662 -j ACCEPT
	$IPT -A INPUT -p udp --dport 4665 -j ACCEPT

# Torrent
	$IPT -A INPUT -p tcp --dport 6881 -j ACCEPT
	$IPT -A INPUT -p udp --dport 6881 -j ACCEPT
	$IPT -A INPUT -p udp --dport 4444 -j ACCEPT

# Usare per abilitare scambio file in aMsn
	$IPT -A INPUT -p tcp --dport 6891:6895 -j ACCEPT

# Usare per abilitare DCC
	$IPT -A INPUT -p tcp --dport 3333 -j ACCEPT

# NetCat
#       $IPT -A INPUT -p tcp --dport 1234 -j ACCEPT
#       $IPT -A INPUT -p udp --dport 1234 -j ACCEPT
echo " "
echo "Firewall attivato " 

;;

## STOP

stop)
echo "Risistemo tutto come era prima"

# Politiche

        input=ACCEPT
        output=ACCEPT
        fw=ACCEPT

# Risetto i valori di kernel
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "0" > /proc/sys/net/ipv4/tcp_rfc1337
echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
echo "0" > /proc/sys/net/ipv4/ip_dynaddr
echo "Firewall OFF" > /documenti/.torsmo_firez

# Risetto le politiche di default

$IPT -F
$IPT -X CHAIN-SCAN
$IPT -X SYN-FLOOD
$IPT -P INPUT     $input
$IPT -P OUTPUT    $output
$IPT -P FORWARD   $fw

echo " "
echo "Firewall disattivato...ora prova a pararti your butt :P"

;;

*)
echo "firez [start|stop]"
echo "Nel caso attiviate il firewall due volte consecutive"
echo "potrebbero esserci degli errori di esistenza di chain"
echo "Ignorateli pure :)"
echo "Eventualmente se riscontrate errori di altro tipo"
echo "verificate la correttezza dei parametri..."
echo " "
echo "Mi raccomando leggete con attenzione il firewall e"
echo "settate i parametri prima di dare start ... ENJOY!"

;;

esac

echo " "

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio da smtux »

Per OhiOhiOhi:

grazie mille stasera lo provo subito.
Premetto che l'ho letto velocemente ma ho visto che c'è da aggiungere il controllo delle porte per Samba, corretto?

ciao e grazie ancora!
:D

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio da smtux »

un'ultima domanda poi non ti rompo più...
cosa vuol dire "IP Exposed"?
questo messaggio l'ottengo se vado sul sito http://www.testmyfirewall.com/
con il firewall attivo.

Avatar utente
salbutamolo
Linux 3.x
Linux 3.x
Messaggi: 905
Iscritto il: lun 12 gen 2004, 0:00
Contatta:

Messaggio da salbutamolo »

Ciao a tutti,
tempo fa insieme c'è stata una discussione nella sezione sicurezza e tra vari suggerimenti e letture varie avevo messo insieme questo firewall...ditemi un po' cosa ne pensate :-)

Codice: Seleziona tutto

#!/bin/bash

modprobe ip_conntrack_ftp

CONNECTION_TRACKING="1"
ACCEPT_AUTH="0"
SSH_SERVER="0"
FTP_SERVER="0"
WEB_SERVER="0"
SSL_SERVER="0"
DHCP_CLIENT="1"

INTERNET="eth0"                               # Internet-connected interface 
LOOPBACK_INTERFACE="lo"                       # however your system names it
IPADDR="192.168.1.2/24"                          # your IP address
SUBNET_BASE="192.168.1.0"                     # ISP network segment base address
SUBNET_BROADCAST="192.168.1.255"              # network segment broadcast address
MY_ISP="192.168.1.1"                          # ISP server & NOC address range

NAMESERVER="212.216.112.112"       # address of a remote name server
POP_SERVER="any/0"                 # address of a remote pop server
MAIL_SERVER="62.211.72.21"         # address of a remote mail gateway
NEWS_SERVER="195.31.190.131"       # address of a remote news server
TIME_SERVER="66.206.11.192"        # address of a remote time server
DHCP_SERVER="192.168.1.1"          # address of your ISP dhcp server

LOOPBACK="127.0.0.0/8"               # reserved loopback address range
CLASS_A="10.0.0.0/8"                 # class A private networks
CLASS_B="172.16.0.0/12"              # class B private networks
CLASS_C="192.168.0.0/16"             # class C private networks
CLASS_D_MULTICAST="224.0.0.0/4"      # class D multicast addresses
CLASS_E_RESERVED_NET="240.0.0.0/5"   # class E reserved addresses
BROADCAST_SRC="0.0.0.0"              # broadcast source address
BROADCAST_DEST="255.255.255.255"     # broadcast destination address

PRIVPORTS="0:1023"                   # well-known, privileged port range
UNPRIVPORTS="1024:65535"             # unprivileged port range

SSH_PORTS="1024:65535"

NFS_PORT="2049"
LOCKD_PORT="4045"
SOCKS_PORT="1080"
OPENWINDOWS_PORT="2000"
XWINDOW_PORTS="6000:6063"
SQUID_PORT="3128"

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

# WARNING:

# The following section is written for dhclient.
# This section demonstrates what needs to be done
# to dynamically modify the IP address and name servers.

# See the "dhclient-script" man page
# and the "dhclient.conf" man page for details.

if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || [ x$reason = xREBIND ]; then

    IPADDR=$new_ip_address

    # Some ISPs use more than one DHCP server.
    # In that case, you can leave DHCP_SERVER set to any/0,
    # or you can hard-code duplicate DHCP rules that
    # reference the specific server IP addresses.

    DHCP_SERVER=$new_dhcp_server_identifier

elif [ x$reason = xPREINIT ] || \
     [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xTIMEOUT ]; then

    IPADDR="any/0"
    DHCP_SERVER="any/0"

fi

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

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
done

# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f
done

# Don¹t send Redirect Messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f
done

# Drop Spoofed Packets coming in on an interface, which if replied to, 
# would result in the reply going out a different interface.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done

# Log packets with impossible addresses.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
done

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

# Remove any existing rules from all chains
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush

# Unlimited traffic on the loopback interface
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Set the default policy to drop
iptables --policy INPUT   DROP
iptables --policy OUTPUT  DROP
iptables --policy FORWARD DROP

# A bug that showed up as of the Red Hat 7.2 release results
# in the following 5 default policies breaking the firewall
# initialization:

# iptables -t nat --policy PREROUTING  DROP
# iptables -t nat --policy OUTPUT DROP
# iptables -t nat --policy POSTROUTING DROP

# iptables -t mangle --policy PREROUTING DROP
# iptables -t mangle --policy OUTPUT DROP

# Remove any pre-existing user-defined chains
iptables --delete-chain
iptables -t nat --delete-chain
iptables -t mangle --delete-chain

###############################################################
# Stealth Scans and TCP State Flags

# All of the bits are cleared
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP 

# SYN and FIN are both set
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP 

# SYN and RST are both set
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 

# FIN and RST are both set
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP 

# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP 

# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP 

# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP 

###############################################################
# Using Connection State to By-pass Rule Checking

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Using the state module alone, INVALID will break protocols that use
    # bi-directional connections or multiple connections or exchanges,
    # unless an ALG is provided for the protocol. At this time, FTP and is 
    # IRC are the only protocols with ALG support.

    iptables -A INPUT -m state --state INVALID -j LOG \
             --log-prefix "INVALID input: "
    iptables -A INPUT -m state --state INVALID -j DROP 

    iptables -A OUTPUT -m state --state INVALID -j LOG \
             --log-prefix "INVALID ouput: "
    iptables -A OUTPUT -m state --state INVALID -j DROP 
fi

###############################################################
# Source Address Spoofing and Other Bad Addresses

# Refuse spoofed packets pretending to be from 
# the external interface's IP address
iptables -A INPUT  -i $INTERNET -s $IPADDR -j DROP

# Refuse packets claiming to be from a Class A private network
iptables -A INPUT  -i $INTERNET -s $CLASS_A -j DROP

# Refuse packets claiming to be from a Class B private network
iptables -A INPUT  -i $INTERNET -s $CLASS_B -j DROP

# Refuse packets claiming to be from a Class C private network
iptables -A INPUT  -i $INTERNET -s $CLASS_C -j DROP

# Refuse packets claiming to be from the loopback interface
iptables -A INPUT  -i $INTERNET -s $LOOPBACK -j DROP

# Refuse malformed broadcast packets
iptables -A INPUT  -i $INTERNET -s $BROADCAST_DEST -j LOG 
iptables -A INPUT  -i $INTERNET -s $BROADCAST_DEST -j DROP
 
iptables -A INPUT  -i $INTERNET -d $BROADCAST_SRC  -j LOG 
iptables -A INPUT  -i $INTERNET -d $BROADCAST_SRC  -j DROP  

#if [ "$DHCP_CLIENT" = "0" ]; then
    # Refuse directed broadcasts
    # Used to map networks and in Denial of Service attacks
   # iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP 
    #iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP 

    # Refuse limited broadcasts
    iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP 
#fi

# Refuse Class D multicast addresses
# illegal as a source address
iptables -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP 

iptables -A INPUT -i $INTERNET -p ! udp -d $CLASS_D_MULTICAST -j DROP

iptables -A INPUT  -i $INTERNET -p udp -d $CLASS_D_MULTICAST -j ACCEPT

# Refuse Class E reserved IP addresses
iptables -A INPUT  -i $INTERNET -s $CLASS_E_RESERVED_NET -j DROP

# refuse addresses defined as reserved by the IANA
# 0.*.*.*          - Can¹t be blocked unilaterally with DHCP
# 169.254.0.0/16   - Link Local Networks
# 192.0.2.0/24     - TEST-NET

if [ "$DHCP_CLIENT" = "1" ]; then
    iptables -A INPUT  -i $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT
fi

iptables -A INPUT -i $INTERNET -s 0.0.0.0/8 -j DROP
iptables -A INPUT -i $INTERNET -s 169.254.0.0/16 -j DROP
iptables -A INPUT -i $INTERNET -s 192.0.2.0/24 -j DROP

###############################################################
# Disallowing Connections to Common TCP Unprivileged Server Ports

# X Window connection establishment
iptables -A OUTPUT -o $INTERNET -p tcp --syn \
         --destination-port $XWINDOW_PORTS -j REJECT

# X Window: incoming connection attempt
iptables -A INPUT -i $INTERNET -p tcp --syn \
         --destination-port $XWINDOW_PORTS -j DROP

# Establishing a connection over TCP to NFS, OpenWindows, SOCKS or squid
iptables -A OUTPUT -o $INTERNET -p tcp \
         -m multiport --destination-port \
         $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_PORT \
         --syn -j REJECT

iptables -A INPUT -i $INTERNET -p tcp \
         -m multiport --destination-port \
         $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_PORT \
         --syn -j DROP

###############################################################
# Disallowing Connections to Common UDP Unprivileged Server Ports

# NFS and lockd

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -m state --state NEW -j REJECT

    iptables -A INPUT -i $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -m state --state NEW -j DROP
else
    iptables -A OUTPUT -o $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -j REJECT

    iptables -A INPUT -i $INTERNET -p udp \
             -m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
             -j DROP
fi

###############################################################
# DNS Name Server

# DNS Fowarding Name Server or client requests

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NAMESERVER --dport 53 -j ACCEPT

iptables -A INPUT  -i $INTERNET -p udp \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# TCP is used for large responses

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NAMESERVER --dport 53 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# DNS Caching Name Server (local server to primary server)

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport 53 \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport 53 \
         -d $NAMESERVER --dport 53 -j ACCEPT

iptables -A INPUT  -i $INTERNET -p udp \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport 53 -j ACCEPT

###############################################################
# Filtering the AUTH User Identification Service (TCP Port 113)

# Outgoing Local Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 113 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 113 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 113 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 \
             -m state --state NEW -j ACCEPT
fi

if [ "$ACCEPT_AUTH" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 113 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 113 \
             --dport $UNPRIVPORTS -j ACCEPT
else
    iptables -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 -j REJECT --reject-with tcp-reset
fi

###############################################################
# Sending Mail to Any External Mail Server
# Use "-d $MAIL_SERVER" if an ISP mail gateway is used instead

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 25 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 25 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 25 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Retrieving Mail as a POP Client (TCP Port 110)

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $POP_SERVER --dport 110 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $POP_SERVER --dport 110 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $POP_SERVER --sport 110 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Accessing Usenet News Services (TCP NNTP Port 119)

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NEWS_SERVER --dport 119 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NEWS_SERVER --dport 119 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $NEWS_SERVER --sport 119 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# ssh (TCP Port 22)

# Outgoing Local  Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $SSH_PORTS \
             --dport 22 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $SSH_PORTS \
         --dport 22 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --source-port 22 \
         -d $IPADDR --dport $SSH_PORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$SSH_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $SSH_PORTS \
                 -d $IPADDR --dport 22 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $SSH_PORTS \
             -d $IPADDR --dport 22 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 22 \
             --dport $SSH_PORTS -j ACCEPT
fi

###############################################################
# ftp (TCP Ports 21, 20)

# Outgoing Local Client Requests to Remote Servers

# Outgoing Control Connection to Port 21
if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 21 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 21 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 21 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

# Incoming Port Mode Data Channel Connection from Port 20
if [ "$CONNECTION_TRACKING" = "1" ]; then
    # This rule is not necessary if the ip_conntrack_ftp
    # module is used.
    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport 20 \
             -d $IPADDR --dport $UNPRIVPORTS \
             -m state --state NEW -j ACCEPT
fi

iptables -A INPUT  -i $INTERNET -p tcp \
         --sport 20 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 20 -j ACCEPT

# Outgoing Passive Mode Data Channel Connection Between Unprivileveg Ports
if [ "$CONNECTION_TRACKING" = "1" ]; then
    # This rule is not necessary if the ip_conntrack_ftp
    # module is used.
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport $UNPRIVPORTS -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$FTP_SERVER" = "1" ]; then

    # Incoming Control Connection to Port 21
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 21 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 21 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 21 \
             --dport $UNPRIVPORTS -j ACCEPT

    # Outgoing Port Mode Data Channel Connection to Port 20
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A OUTPUT -o $INTERNET -p tcp \
                 -s $IPADDR --sport 20\
                 --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
    fi

    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport 20 \
             --dport $UNPRIVPORTS -j ACCEPT

    iptables -A INPUT -i $INTERNET -p tcp ! --syn \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 20 -j ACCEPT

    # Incoming Passive Mode Data Channel Connection Between Unprivileved Ports
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport $UNPRIVPORTS \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport $UNPRIVPORTS -j ACCEPT
fi
###############################################################
# HTTP Web Traffic (TCP Port 80)

# Outgoing Local Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 80 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 80 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 80 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$WEB_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 80 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 80 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 80 \
             --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# SSL Web Traffic (TCP Port 443)

# Outgoing Local  Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 443 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 443 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 443 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Incoming Remote Client Requests to Local Servers

if [ "$SSL_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
        iptables -A INPUT  -i $INTERNET -p tcp \
                 --sport $UNPRIVPORTS \
                 -d $IPADDR --dport 443 \
                 -m state --state NEW -j ACCEPT
    fi

    iptables -A INPUT  -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 443 -j ACCEPT

    iptables -A OUTPUT -o $INTERNET -p tcp ! --syn \
             -s $IPADDR --sport 443 \
             --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# whois (TCP Port 43)

# Outgoing Local  Client Requests to Remote Servers

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 43 -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 43 -j ACCEPT

iptables -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 43 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Accessing Remote Network Time Servers (UDP 123)
# Note: some client and servers use source port 123
# when querying a remote server on destination port 123.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $TIME_SERVER --dport 123 \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $TIME_SERVER --dport 123 -j ACCEPT

iptables -A INPUT  -i $INTERNET -p udp \
         -s $TIME_SERVER --sport 123 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Accessing Your ISP's DHCP Server (UDP Ports 67, 68)

# Some broadcast packets are explicitly ignored by the firewall.
# Others are dopped by the default policy.
# DHCP tests must precede broadcast-related rules, as DHCP relies
# on broadcast traffic initially.

if [ "$DHCP_CLIENT" = "1" ]; then
    # Initialization or rebinding: No lease or Lease time expired.

    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 68 \
             -d $BROADCAST_DEST --dport 67 -j ACCEPT

    # Incoming DHCPOFFER from available DHCP servers

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT

    # Fall back to initialization
    # The client knows its server, but has either lost its lease,
    # or else needs to reconfirm the IP address after rebooting.

    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 68 \
             -d $DHCP_SERVER --dport 67 -j ACCEPT

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $DHCP_SERVER --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT

    # As a result of the above, we're supposed to change our IP
    # address with this message, which is addressed to our new
    # address before the dhcp client has received the update.
    # Depending on the server implementation, the destination address
    # can be the new IP address, the subnet address, or the limited
    # broadcast address.

    # If the network subnet address is used as the destination,
    # the next rule must allow incoming packets destined to the
    # subnet address, and the rule must preceed any general rules 
    # that block such incoming broadcast packets.

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $DHCP_SERVER --sport 67 \
             --dport 68 -j ACCEPT

    # Lease renewal 

    iptables -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport 68 \
             -d $DHCP_SERVER --dport 67 -j ACCEPT

    iptables -A INPUT  -i $INTERNET -p udp \
             -s $DHCP_SERVER --sport 67 \
             -d $IPADDR --dport 68 -j ACCEPT

    # Refuse directed broadcasts
    # Used to map networks and in Denial of Service attacks
    #iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP 
    #iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP 

    # Refuse limited broadcasts
    iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP 

fi
###############################################################
# ICMP Control and Status Messages

# Log and drop initial ICMP fragments
iptables -A INPUT  -i $INTERNET --fragment -p icmp -j LOG \
         --log-prefix "Fragmented incoming ICMP: " 
iptables -A INPUT  -i $INTERNET --fragment -p icmp -j DROP

iptables -A OUTPUT  -o $INTERNET --fragment -p icmp -j LOG \
         --log-prefix "Fragmented outgoing ICMP: " 
iptables -A OUTPUT  -o $INTERNET --fragment -p icmp -j DROP

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type source-quench -d $IPADDR -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type source-quench -j ACCEPT

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type parameter-problem -d $IPADDR -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type parameter-problem -j ACCEPT

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type destination-unreachable -d $IPADDR -j ACCEPT

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type fragmentation-needed -j ACCEPT

# Don¹t log dropped outgoing ICMP error messages
iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type destination-unreachable -j DROP

# Intermediate traceroute responses
iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type time-exceeded -d $IPADDR -j ACCEPT

# allow outgoing pings to anywhere
if [ "$CONNECTION_TRACKING" = "1" ]; then
    iptables -A OUTPUT -o $INTERNET -p icmp \
             -s $IPADDR --icmp-type echo-request \
             -m state --state NEW -j ACCEPT
fi

iptables -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type echo-request -j ACCEPT

iptables -A INPUT  -i $INTERNET -p icmp \
         --icmp-type echo-reply -d $IPADDR -j ACCEPT

# allow incoming pings from trusted hosts
#if [ "$CONNECTION_TRACKING" = "1" ]; then
    #iptables -A INPUT  -i $INTERNET -p icmp \
             #-s $MY_ISP --icmp-type echo-request -d $IPADDR \
             #-m state --state NEW -j ACCEPT
#fi
 
#iptables -A INPUT  -i $INTERNET -p icmp \
         #-s $MY_ISP --icmp-type echo-request -d $IPADDR -j ACCEPT

#iptables -A OUTPUT -o $INTERNET -p icmp \
         #-s $IPADDR --icmp-type echo-reply -d $MY_ISP -j ACCEPT

###############################################################
# Logging Dropped Packets

# Don't log dropped incoming echo-requests
iptables -A INPUT -i $INTERNET -p icmp \
         --icmp-type ! 8 -d $IPADDR -j LOG

iptables -A INPUT -i $INTERNET -p tcp \
         -d $IPADDR -j LOG

iptables -A OUTPUT -o $INTERNET -j LOG
 
exit 0
Nel frattempo:
cosa vuol dire "IP Exposed"?
Vuol dire che il tuo IP interno risulta identificabile dall'"esterno"...ovvero da internet....capita anche a me :-(
mi sa che il mio firewall ha bisogno di una revisione :-(
have a nice day

miKe
Linux 0.x
Linux 0.x
Messaggi: 2
Iscritto il: lun 19 gen 2004, 0:00
Contatta:

Messaggio da miKe »

Sawk ha scritto:questo firewall gira per internet e non vale na cicca, ben poco si salva come il SYN-FLOOD e il settaggio dei icmp....non usarlo che ha parecchi problemi, sopratutto a livello di configurazione di ipv4.
quali sarebbero i problemi?
che lo usi con un kernel 2.6 e una versione di iptables moolto diversa da quella con il quale è stato scritto?

prima di parlare, e di sparare a zero, sarebbe il caso di fare 2 controlli 2
poi mi pare sia scritto in modo esplicito, quello script serve a far capire alcune cose che le interfaccine colorate nascondono, e deve essere adattato alle proprie esigenze,
e se serve, migliorato, visto che il codice e i comandi di iptables di oggi non sono quelli del 2003 !

visto che sei in grado di migliorarlo, fallo e aggiungi il tuo nome,
evita di copiare dove puoi e spacciar per tuo il lavoro degli altri, grazie

[quote="Sawk"
Piuttosto dai una occhiata ai post su questo forum, dovrei aver postato un firewall molto efficacie che utilizzo[/quote]

che copia pare pare il 90% delle impostazioni del mio...

Rispondi