Firewall Builder: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
==Xorg su Debian Sid==
<pre>
#!/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 è 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 è 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 sarà 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
## verrà 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 è "/etc/rc.d/" ed
## il nome predefinito è "firewall"
## ma è 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"


===Descrizione===
##
Questa guida tenter� di illustrare i passi base necessari a chi volesse cimentarsi nella compilazione ed installazione di xorg su sid.<br>
## Politica INPUT
Il nostro obiettivo � creare una serie di pacchetti .deb adattando quelli presenti nei repository dei sorgenti ubuntu e personalizzandoli per sid.<br>
chain="DROP"
Tutto questo lavoro di compilazione serve ad evitare di dover installare ulteriori pacchetti dal repository ubuntu, le cui versioni sono spesso presenti soltanto in quel particolare repository (molti pacchetti vengono personalizzati e modificati dal team di sviluppo) e che renderebbero il nostro sistema un misto tra ubuntu e debian.<br>
##
Tenuta presente comunque la buona compatibilit� dei sorgenti dei pacchetti ubuntu rispetto ai .deb prelevati da debian.org (specialmente in relazione alle dipendenze di ciascun pacchetto), � possibile ricostruire l'intero xorg sfruttando le librerie necessarie prelevandole  per�, direttamente da sid.<br>
## Politica OUTPUT
Faccio notare come la durata di tutta l'operazione sia un fattore importante da valutare: sulla mia macchina (Athlon xp 2000+, 256Mb), ad esempio, sono necessari oltre '''100 minuti''' per portare a termine tutto il processo di compilazione.<br>
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)


===Configurazione sistema===
clear
Innanzitutto dobbiamo aggiungere ad i repository dei pacchetti che usiamo abitualmente, anche quello di ubuntu (NB: abbiamo bisogno solo dei sorgenti, quindi basta la sola riga con deb-src), commentando temporaneamente le altre righe deb-src presenti nel nostro '''sources.list'''.<br>
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


<pre>deb-src http://us.archive.ubuntu.com/ubuntu hoary universe main restricted</pre>
( rmmod ipfwadm; rmmod ipchains; modprobe ip_tables ) > /dev/null 2> /dev/null


Dopo aver aggiunto tale riga, provvediamo ad aggiornare le liste di apt con il solito '''apt-get update'''.<br>
fi
Durante l'operazione, possiamo controllare se viene scaricata anche la lista appena inserita per i pacchetti di ubuntu.
exit 0
}
;;
#*************************************************************ROUTER
router)


Prepariamo adesso una directory di nome '''xorg''', con il comando <pre>mkdir xorg</pre> questa accoglier� i sorgenti prelevati dalla rete, i file oggetto prodotti dalla compilazione ed infine i pacchetti .deb.<br>
clear
Per esperienza personale, consiglio di creare la cartella all'interno di una partizione con '''almeno 4.5 gb di spazio libero'''.
COLOR=$YELLOW
msg=" Attenzione, disattivo il firewall ed attivo il forwarding..."
echo -e "$COLOR$msg$NULL\n"


===Modifica degli script di compilazione===
##
Posizionamoci nella directory appena creata, e con <pre>apt-get source xorg</pre> procediamo al download dei sorgenti e alla scompattazione dei sorgenti di xorg.<br>
## Politica INPUT
Attualmente, (versione '''6.8.2-10'''), il download consiste di circa '''51 MB''' di archivi.<br>
chain="ACCEPT"
Alla fine del download, notiamo che sono stati creati all'interno della directory xorg, alcuni file ed una directory.
##
## 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, è 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 modalità 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 " è 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 è in presenza di "
echo " attacco Syn Flood."
echo " È possibile settare alcuni parametri per diminuire "
echo " la vulnerabilità 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


* situazione del nostro filesystem
;;
<pre>[xorg]
#***************************************************************INFO
|
info)
|_ [xorg-6.8.2]
clear
|  |
COLOR=$MAGENTA
|  |_ [debian]
msg=" Info ..."
|  |_ ALTRI_FILES
echo -e "$COLOR$msg"
|
echo ""
|_ xorg_6.8.2-10.diff.gz
##
|_ xorg_6.8.2-10.dsc
echo ""
|_ xorg_6.8.2.orig.tar.gz</pre>
echo " il PATH di questo script è $NPATH/$NFILE"
echo " il PATH di iptables è $IPT"
echo " l'interfaccia interna è la $IIF"
echo " l'interfaccia esterna è la $EIF"
echo " l'indirizzo IP del pc server/router è $SERVER "
echo " l'indirizzo IP del pc client fidato è $CLIENT"
echo " la rete locale è $LOCALNET"
echo " l'indirizzo broadcast è $BROADCAST"
echo " il DNS primario è $DNS1"
echo " il DNS secondario è $DNS2"
echo ""
echo -e "$NULL\n"


La directory '''xorg-6.8.2''' raccoglie i sorgenti scompattati dell'archivio orginale di xorg (oltre ai file necessari alla compilazione di un sorgente debian), a cui non sono ancora state applicate le varie patch apportate dali sviluppatori ubuntu.<br>
exit 0
I file, invece, rappresentano l'archivio con il sorgente originale, il file con le patch approntate dal team di ubuntu e quello con la descrizione del pacchetto debian.<br>
Posizionamoci pertanto nella sottodirectory '''debian''' di xorg-6.8.2.


Affinch� si possano adattare i sorgenti a sid, dobbiamo modificare 2 file: nel primo caso la modifica � pi� che altro cosmetica, nel secondo caso invece � una scelta obbligata.
;;
#***************************************************************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"
##


Con il nostro editor preferito, apriamo pertanto il file '''changelog'''.<br>
exit 0
Questo file mantiene lo storico delle modifiche fatte dagli sviluppatori ubuntu a partire dalla versione stable rilasciata dal team di xorg: tale file viene regolato da una sintassi ben precisa, in cui anche gli spazi hanno una loro funzione e pertanto vanno tenuti in considerazione per la buona riuscita della compilazione.<br>
E' necessario pertanto, prestare molta attenzione alla disposizione dei vari campi e al numero degli spazi che li delimitano.<br>
La entry pi� recente presente nella versione attuale del file changelog ci appare cos�:
<pre>xorg (6.8.2-10) hoary; urgency=low


  * Include patch from Ben Herrenschmidt to fix assertion of DDC GPIO lines
;;
    after a DDC probe had finished, which would render Apple Studio Displays
    useless.
  * Don't reset all templates when migrating from xserver-xfree86; this will
    render the template migration useless.  Don't mess with $RECONFIGURE when
    migrating from xfree86.  Set use_sync_ranges true when upgrading from
    xfree86 (closes: Ubuntu#8562, Ubuntu#8626).
  * Use debug_echo liberally in xserver-xorg.postinst.in to tell us why we're
    writing out sync ranges.


-- Daniel Stone <daniel.stone@ubuntu.com>  Tue,  5 Apr 2005 08:38:20 +1000</pre>
#*********************************************************Verifica Syn Flood
vsf)
Affinch� possiamo ottenere una nostra versione personalizzata dei pacchetti, dobbiamo aggiungere precendetemente al gruppo di linee appena descritto (quindi all'inizio del file), qualcosa del genere:
clear
COLOR=$YELLOW
<pre>xorg (6.8.2-10-ld10) sid; urgency=low
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"


  * [Ld-xorg] packages for Debian Sid, based on Ubuntu sources.
exit 0


-- Mario "Ldonesty" Di Nitto <ldonesty@debianizzati.org>  Sun, 15 May 2005 10:25:32 +0100</pre>
;;


mantenendo uno spazio di separazione con il gruppo successivo.
#****************************************************************USO
*)
##
clear
COLOR=$BLUE
msg="Firewall ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}"
echo -e "$COLOR$msg$NULL\n"
##


Queste righe possono essere personalizzate secondo i propri gusti tenendo presente che '''6.8.2-10-ld10''' sar� la versione che comparir� nel nome di ogni pacchetto, dove -ld indica la nostra estensione personale, la quale *dovr�* essere seguita da un numero a scelta: es -myExt1.<br>
exit 0
Infatti la mancanza di tale valore pregiudica irreparabilmente la compilazione e creazione dei pacchetti (lo script preposto all'operazione, si rifiuter� di assemblare i .deb)
;;
##
esac
##
#*******************************************************BLOCCO COMUNE
##
echo -e "$COLOR"
## Caricamento dei moduli necessari nel kernel
##
## Il vostro kernel potrebbe non avere
## tutti questi moduli, è sufficiente ricompilare se le funzionalità
## sono necessarie.
##
## NOTA: I seguenti moduli sono elencati solo per informazione
## Non è 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. Servono 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 è usata per accettare o rifiutare pacchetti
# di tipo 'source routed'. È 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.
# È generalmente considerato un rischio per la sicurezza.
echo "$DR" >$i/accept_redirects
# Per questo motivo, è 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 ..."
# # È 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 è 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 è su DROP in quanto il controllo è lasciato ad 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. È un po' 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 integrità 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
# # È 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 è riportato , ma non è implementato nessun controllo,
# # i pacchetti in ingresso sono comunque tutti droppati.
# # questo controllo potrebbe essere comunque comodo, ma non è
# # 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 di aver inoltrato il pacchetto ad un diverso router
## 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 replies"
$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 - è 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


A questo punto salviamo il file changelog e dedichiamoci invece a '''control'''.<br>
##
La struttura del file control si puo riassumere in una sequenza di "blocchi" all'interno dei quali sono contenute tutte le informazioni proprie di un pacchetto debian raccolte per riga (ad esempio: la descrizione, le dipendenze, i conflitti, etc etc). <br>
#######################
Dato che la versione di xorg su cui stiamo lavorando proviene dal repository ubuntu, � possibile che siano presenti alcune dipendenze relative a pacchetti contenuti solamente in tale repository.<br>
## regole in uscita ##
Pertanto questi pacchetti risulterebbero non disponibili all'atto dell'installazione sulla nostra sid, pregiudicando cos� tutta l'operazione.<br>
#######################
Possiamo evitare questa situazione ricercando nelle sole righe Depends del file control, i riferimenti ai pacchetti di ubuntu (presentano la segnatura "ubuntu" all'interno del numero di versione).<br>
##
Nel nostro caso, scorrendo il file (possiamo usare la funzione di ricerca del nostro editor) notiamo che alla riga 1895 � presente una referenza al pacchetto '''lsb-base''' nella versione ('''1.3-9ubuntu2''').
## 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 è 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


Dopo aver controllato che in sid esista tale pacchetto in una versione per lo meno uguale (meglio se superiore) a quella citata dal file control (possiamo usare '''apt-cache show lsb-base | grep Version''' per questo scopo), cancelliamo la parola "ubuntu" ed ogni eventuale numero postposto, lasciando quindi solo il numero della versione del pacchetto, infine salviamo.<br>
##
Quindi la versione di lsb-base nella riga Depends ci apparir� come ('''1.3-9''').<br>
#############################
Relativamente a questa versione di xorg, non ci sono altre referenze da modificare; nel caso in cui, invece, fossimo in presenza di parecchie dipendenze da sistemare dobbiamo valutare ciascun caso separatamente, ripetendo tutta la procedura di controllo e modifica.
## 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 è $chain"
echo "la politica per OUTPUT è $outchain"
echo "IP forwarding è settato su $fw "
echo ""
echo -e "$NULL\n"
##
netfilter
##
##The End..
</pre>


===Controllo dipendenze e avvio compilazione===
----
A questo punto siamo in grado di avviare la compilazione/creazione dei pacchetti di xorg usando il comando '''dpkg-buildpackage''' dopo esserci posizionati nella cartella xorg-6.8.2 ed aver ottenuto i privilegi di root.
Autore: debian
 
[[Categoria:Server]][[Categoria:Firewalling]][[Categoria:Script]]
Molto probabilmente ci verr� notificato che alcune dipendenze non sono soddisfatte per portare a termine la compilazione:
 
es.
 
<pre>dpkg-checkbuilddeps: Unmet build dependencies: flex bison groff zlib1g-dev |
libz-dev libpam0g-dev | libpam-dev libfreetype6-dev rman lynx
libglide2-dev (>> 2001.01.26) libglide3-dev (>= 2002.04.10-7) libpng12-dev |
libpng-dev libexpat1-dev libfontconfig1-dev libxft-dev (>= 2.1.2) libxcursor-dev
dbs m4 libxrender-dev (>= 0.9.0) sharutils</pre>
 
Per ovviare a questo problema possiamo installare i pacchetti suggeriti usando il comando (ricomporre su una riga).
 
<pre>apt-get install flex bison groff zlib1g-dev libpam0g-dev libfreetype6-dev
rman lynx libglide2-dev libglide3-dev libpng12-dev libexpat1-dev libfontconfig1-dev
libxft-dev libxcursor-dev dbs m4 libxrender-dev sharutils</pre>
 
A questo punto possiamo rilanciare il comando '''dpkg-buildpackage''' (a cui potremo preporre il comando '''time''', per visualizzare la durata effettiva di tutta l'operazione) ed attendere che i pacchetti vengano creati.
 
===Installazione===
Posizionamoci innanzitutto nella cartella dove sono contenuti i file .deb di xorg.
 
Possiamo avere 3 situazioni:
*  Macchina pulita: nessun xfree/xorg precedentemente installato
*  Xorg in una versione precedente
*  Xfree preso da sid
 
<br>La prima situazione pu� essere risolta (NB, si potrebbe fare anche con un repository locale) con <pre>dpkg -i x-window-system-core*.deb </pre> aggiungendo volta per volta i pacchetti che vengono richiesti come mancanti in coda a dpkg -i, ovvero
<pre>dpkg -i PKT1 PKT2 PKT3 PKT4</pre> dove i vari PKT corrispondono al nome del pacchetto '''completo di estensione'''.
 
DA COMPLETARE
 
[[Utente:Ldonesty|Ldonesty]]

Versione delle 01:38, 3 gen 2010

#!/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 è 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 è 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 sarà 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
## verrà 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 è "/etc/rc.d/" ed
## il nome predefinito è "firewall"
## ma è 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, è 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 modalità 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 " è 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 è in presenza di "
echo " attacco Syn Flood."
echo " È possibile settare alcuni parametri per diminuire "
echo " la vulnerabilità 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 è $NPATH/$NFILE"
echo " il PATH di iptables è $IPT"
echo " l'interfaccia interna è la $IIF"
echo " l'interfaccia esterna è la $EIF"
echo " l'indirizzo IP del pc server/router è $SERVER "
echo " l'indirizzo IP del pc client fidato è $CLIENT"
echo " la rete locale è $LOCALNET"
echo " l'indirizzo broadcast è $BROADCAST"
echo " il DNS primario è $DNS1"
echo " il DNS secondario è $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, è sufficiente ricompilare se le funzionalità
## sono necessarie.
##
## NOTA: I seguenti moduli sono elencati solo per informazione
## Non è 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. Servono 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 è usata per accettare o rifiutare pacchetti
# di tipo 'source routed'. È 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.
# È generalmente considerato un rischio per la sicurezza.
echo "$DR" >$i/accept_redirects
# Per questo motivo, è 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 ..."
# # È 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 è 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 è su DROP in quanto il controllo è lasciato ad 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. È un po' 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 integrità 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
# # È 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 è riportato , ma non è implementato nessun controllo,
# # i pacchetti in ingresso sono comunque tutti droppati.
# # questo controllo potrebbe essere comunque comodo, ma non è
# # 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 di aver inoltrato il pacchetto ad un diverso router
## 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 replies"
$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 - è 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 è 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 è $chain"
echo "la politica per OUTPUT è $outchain"
echo "IP forwarding è settato su $fw "
echo ""
echo -e "$NULL\n"
##
netfilter
##
##The End..

Autore: debian