Firewall Builder

Lun, 20/09/2004 - 11:57

Firewall Builder

Inviato da Anonimo 3 commenti

Per chi non digerisce bene netfilter iptables ed affini ecco lo script che permette di settare un firewall rispondendo a delle semplici domande ( ps settate bene le vostre interfaccie da proteggere)

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





Commenti

Ritratto di kripsio
#1

Inviato da kripsio il Mer, 22/09/2004 - 02:16.

Note sullo script di firewalling

Provato e funzionalissimo Smile

Note: L'installazione di debian di base da sarge installa il supporto ipv6 (credo, correggetemi se sbaglio) e ci sono, di conseguenza, due righe inet.
La riga 48 che definisce la maschera va quindi cambiata aggiungendo una pipe ad head -1 cosi:

mask=` ifconfig $IIF | grep inet | cut -d : -f4 | cut -d ' ' -f1 | head -1`

Le righe 723 e 724 se attivate mi inibiscono qualsiasi accesso da remoto:

722 #echo "Dirotto pacchetti NEW e INVALID verso CHAIN..."
723 #$IPT -A INPUT -i $EIF -m state --state NEW,INVALID -j chain-log
724 #$IPT -A INPUT -i $IIF -m state --state NEW,INVALID -j chain-log

non mi sono ancora documentato in merito, lo faro' quanto prima Smile

ciau



Ritratto di kripsio
#2

Inviato da kripsio il Sab, 16/10/2004 - 12:43.

Re: Note sullo script di firewalling

Altro giochino da aggiungervi.

Se usate un "modem" dlink dsl-300t (diffuso in quanto molto economico) avrete inibite diverse funzioni. Il modem in oggetto contiene una minidistro linux con uno script iptables.

Aggiornando il firmware si risolve qualche problema (il firewall divenata meno invadente) ma non e' possibile ancora connettersi via ssh a macchine remote (per me molto male).

Seguendo i consigli che trovate qua: http://www.magwag.plus.com/jim/tips-300t.html
potete scoprire come segare il firewall del router (molto utile per avere il controllo pieno della politica di firewalling sulla vostra macchina).

Per rendere possibile l'ssh remoto dovete aggiungere allo script di sopra qte righe:

824 $IPT --table mangle --append OUTPUT --jump DSCP --set-dscp 0x0

841 $IPT --table mangle --append PREROUTING --jump DSCP --set-dscp 0x0

ciao