78
contributi
Riga 1: | Riga 1: | ||
== | <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 e' configurata da un DHCP quindi ha indirizzo dinamico. | |||
EIF="ppp0" | |||
# EIF="eth0" | |||
# EIF="eth1" | |||
## Se l'interfaccia esterna ha un IP statico, dichiararlo | |||
# EIP="xx.xx.xx.xx" | |||
## | |||
## Indirizzo macchina router (si presume che il firewall giri sulla macchina router | |||
## in caso contrario correggere manualmente questo indirizzo) | |||
## | |||
## Se preferite utilizzare un indirizzo statico, decommentate la linea che indica un IP | |||
## altrimenti se utilizzate un DHCP o non conoscete l'indirizzo | |||
## usate il riconoscimento tramite ifconfig | |||
## controllare comunque che lo script riconosca l'indirizzo IP (potrebbe non andare su macchine che | |||
## utilizzano shell particolari o che formattano ifconfig diversamente. | |||
## | |||
SERVER=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' ' -f1` | |||
# SERVER="192.168.10.2" | |||
## | |||
## Indirizzo macchina client da inserire a mano, se il server condivide la connessione | |||
## internet, questa macchina sar� autorizzata ad accedere al firewall via eth0 | |||
## al posto di un singolo host e' possibile utilizzare una rete intera usando | |||
## la notazione RETE/NETMASK | |||
## attenzione alla banda disponibile perch� una rete genera parecchio traffico..;) | |||
CLIENT="10.22.115.11" | |||
# CLIENT"192.168.10.0/24" | |||
## | |||
## Loopback | |||
LOCALHOST="127.0.0.1" | |||
## | |||
## Rete interna | |||
## controllare che gli script ottengano i valori corretti | |||
## o sostituire con valori statici. | |||
net=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' ' -f1 | cut -d . -f1,2,3` | |||
mask=` ifconfig $IIF | grep inet | cut -d : -f4 | cut -d ' ' -f1` | |||
LOCALNET="$net.0/$mask" | |||
## | |||
## Broadcast | |||
BROADCAST=` ifconfig $IIF | grep inet | cut -d : -f3 | cut -d ' ' -f1` | |||
## | |||
## Provider1 DNS 'inserire i propri dns' | |||
# DNS1="212.216.172.62" | |||
DNS1="195.130.224.18" | |||
## | |||
## Provider2 DNS | |||
#DNS2="195.130.224.18" | |||
DNS2="192.160.10.31" | |||
## | |||
## Local DNS | |||
DNS3="212.245.255.2" | |||
## questo potrebbe essere il DNS locale, in seguito sara' prevista la configurazione | |||
## per il funzionamento di un dns locale. | |||
## | |||
## Per qualunque problema...;) | |||
EMAIL="m.m.asciutti@email.it" | |||
## | |||
## PATH di iptables 'adattare alla propria macchina, se necessario' | |||
IPT=` which iptables` | |||
## | |||
## NOTA: | |||
## Dopo aver modificato i parametri base per adattare lo | |||
## script alle proprie esigenze, salvarlo e renderlo eseguibile | |||
## in particolare adattare l'indirizzo del client o della rete che | |||
## verra' nattata | |||
## verificare inoltre che lo script che preleva | |||
## l'indirizzo IP da ifconfig sia funzionante | |||
## sul proprio sistema. | |||
## | |||
## Decommentare se si desidera aggiungere lo script al PATH di sistema | |||
# export PATH=$PATH:$NPATH | |||
## | |||
## Nome dello script e Posizione assoluta | |||
NFILE="firewall" | |||
NPATH="/etc/rc.d" | |||
## | |||
## NOTA: | |||
## il percorso predefinito e' "/etc/rc.d/" ed | |||
## il nome predefinito e' "firewall" | |||
## ma e' possibile utilizzare qualsiasi nome / percorso | |||
## avendo cura di modificare le variabili NFILE e NPATH' | |||
## | |||
## Setto permessi e proprietario | |||
chown root $NPATH/$NFILE | |||
chmod 700 $NPATH/$NFILE | |||
## | |||
## NOTA: | |||
## questa funzione viene richiamata solo con | |||
## l'opzione stop e serve a rimuovere i moduli | |||
## caricati dal firewall | |||
## | |||
#ANSI COLOR | |||
MAGENTA='\e[35m' | |||
GREEN='\e[32m' | |||
YELLOW='\e[33m' | |||
WHITE='\e[37m' | |||
BLUE='\e[34m' | |||
CYAN='\e[36m' | |||
RED='\e[31m' | |||
NULL='\e[0m' | |||
COLOR=$BLUE | |||
## | |||
case "$1" in | |||
#**************************************************************START | |||
start) | |||
clear | |||
COLOR=$RED | |||
msg=" Attivo il firewall ..." | |||
echo -e "$COLOR$msg$NULL\n" | |||
## | |||
## Politica INPUT | |||
chain="DROP" | |||
## | |||
## Politica OUTPUT | |||
outchain="ACCEPT" | |||
## | |||
## Routing | |||
fw="ACCEPT" | |||
CF="1" | |||
## | |||
## Opzioni diverse dalle standard | |||
## | |||
## Politica OUTPUT | |||
## 'se si attiva, decommentare le regole relative all'uscita dei pacchetti' | |||
## outchain="DROP" | |||
## | |||
## Non funziona da router | |||
# fw="DROP" | |||
# CF="0" | |||
## | |||
## Opzioni kernel | |||
SC="1" | |||
ER="1" | |||
DE="1" | |||
TW="1" | |||
SR="0" | |||
DR="0" | |||
ASR="0" | |||
ISR="1" | |||
SAV="1" | |||
LOG="1" | |||
DSR="1" | |||
## | |||
## Solo cosmetico | |||
SET="Abilito" | |||
MSET="Abilito" | |||
function netfilter() | |||
{ | |||
exit 0 | |||
} | |||
;; | |||
#*******************************************************************STOP | |||
stop) | |||
clear | |||
COLOR=$GREEN | |||
msg=" Disattivo il firewall ..." | |||
echo -e "$COLOR$msg$NULL\n" | |||
## | |||
## Politica INPUT | |||
chain="ACCEPT" | |||
## | |||
## Politica OUTPUT | |||
outchain="ACCEPT" | |||
## | |||
## Non funziona da router | |||
fw="DROP" | |||
CF="0" | |||
## | |||
## Opzioni kernel | |||
SC="0" | |||
ER="0" | |||
DE="0" | |||
TW="0" | |||
SR="1" | |||
DR="1" | |||
ASR="1" | |||
ISR="0" | |||
SAV="0" | |||
LOG="0" | |||
DSR="0" | |||
## | |||
## Solo cosmetico | |||
SET="Disabilito" | |||
MSET="Disabilito" | |||
## | |||
function netfilter() | |||
{ | |||
if [ -f /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.o ]; then | |||
( rmmod ip_contrackt \ | |||
ip_contrack_ftp \ | |||
ip_nat_ftp \ | |||
ip_queue \ | |||
ip_tables \ | |||
ipt_LOG \ | |||
ipt_MARK \ | |||
ipt_MASQUERADE \ | |||
ipt_MIRROR \ | |||
ipt_REDIRECT \ | |||
ipt_TCPMSS \ | |||
ipt_TOS \ | |||
ipt_limit \ | |||
ipt_mac \ | |||
ipt_mark \ | |||
ipt_multiport \ | |||
ipt_owner \ | |||
ipt_state \ | |||
ipt_tcpmss \ | |||
ipt_tos \ | |||
ipt_unclean \ | |||
iptable_filter \ | |||
iptable_mangle \ | |||
iptable_net | |||
) > /dev/null 2> /dev/null | |||
( rmmod ipfwadm; rmmod ipchains; modprobe ip_tables ) > /dev/null 2> /dev/null | |||
fi | |||
exit 0 | |||
} | |||
;; | |||
#*************************************************************ROUTER | |||
router) | |||
clear | |||
COLOR=$YELLOW | |||
msg=" Attenzione, disattivo il firewall ed attivo il forwarding..." | |||
echo -e "$COLOR$msg$NULL\n" | |||
## | |||
## Politica INPUT | |||
chain="ACCEPT" | |||
## | |||
## Politica OUTPUT | |||
outchain="ACCEPT" | |||
## | |||
## Funziona da router | |||
fw="ACCEPT" | |||
CF="1" | |||
## | |||
## Opzioni kernel | |||
SC="0" | |||
ER="0" | |||
DE="0" | |||
TW="0" | |||
SR="1" | |||
DR="1" | |||
ASR="1" | |||
ISR="0" | |||
SAV="0" | |||
LOG="0" | |||
DSR="0" | |||
## | |||
## Solo cosmetico | |||
SET="Disabilito" | |||
MSET="Abilito" | |||
function netfilter() | |||
{ | |||
exit 0 | |||
} | |||
;; | |||
#**************************************************************HELP | |||
help) | |||
clear | |||
COLOR=$CYAN | |||
msg=" Help..." | |||
echo -e "$COLOR$msg" | |||
echo "" | |||
echo "$NFILE start " | |||
echo " Setta il firewall secondo le opzioni" | |||
echo " indicate, e' possibile modificare " | |||
echo " gran parte dei parametri predefiniti" | |||
echo " per utilizzare lo script secondo le" | |||
echo " proprie esigenze." | |||
echo "" | |||
echo "$NFILE stop" | |||
echo " Resetta il firewall, permette il passaggio" | |||
echo " di tutti i pacchetti in ingresso su ogni " | |||
echo " interfaccia disabilitando l'utilizzo " | |||
echo " del PC come router;" | |||
echo " navigate usando questa modalita' il meno possibile." | |||
echo "" | |||
echo "$NFILE router" | |||
echo " Abilita il transito dei pacchetti" | |||
echo " tra $IIF e $EIF senza nessun firewall" | |||
echo " utilizzare esclusivamente per testare la rete" | |||
echo " o usare un secondo firewall tra router e rete" | |||
echo " molti settaggi del kernel non sono pensati per la sicurezza" | |||
echo " ma solo per testare la rete senza perdita di nessun tipo di pacchetti," | |||
echo " e' PERICOLOSO. " | |||
echo "" | |||
echo "$NFILE info" | |||
echo " Mostra il settaggio attuale dei parametri base" | |||
echo " per controllare le personalizzazioni sullo script." | |||
echo "" | |||
echo "$NFILE policy" | |||
echo " Mostra le politiche impostate con start" | |||
echo " e le statistiche relative al funzionamento del firewall" | |||
echo " i pacchetti ricevuti, droppati, loggati ecc." | |||
echo "" | |||
echo "$NFILE vsf" | |||
echo " Verifica se il server e in presenza di " | |||
echo " attacco Syn Flood." | |||
echo " E' possibile settare alcuni parametri per diminuire " | |||
echo " la vulnerabilita' all'attacco (indicati nel corpo dello script)." | |||
echo " I tentativi di attacco sono comunque tutti loggati." | |||
echo "" | |||
echo "$NFILE help" | |||
echo " Visualizza questo messaggio" | |||
echo -e "$NULL\n" | |||
echo "Per ogni suggerimento:$EMAIL" | |||
echo "" | |||
exit 0 | |||
;; | |||
#***************************************************************INFO | |||
info) | |||
clear | |||
COLOR=$MAGENTA | |||
msg=" Info ..." | |||
echo -e "$COLOR$msg" | |||
echo "" | |||
## | |||
echo "" | |||
echo " il PATH di questo script e' $NPATH/$NFILE" | |||
echo " il PATH di iptables e' $IPT" | |||
echo " l'interfaccia interna e' la $IIF" | |||
echo " l'interfaccia esterna e' la $EIF" | |||
echo " l'indirizzo IP del pc server/router e' $SERVER " | |||
echo " l'indirizzo IP del pc client fidato e' $CLIENT" | |||
echo " la rete locale e' $LOCALNET" | |||
echo " l'indirizzo broadcast e' $BROADCAST" | |||
echo " il DNS primario e' $DNS1" | |||
echo " il DNS secondario e' $DNS2" | |||
echo "" | |||
echo -e "$NULL\n" | |||
exit 0 | |||
* | ;; | ||
#***************************************************************INFO | |||
policy) | |||
clear | |||
COLOR=$WHITE | |||
msg=" Politiche ..." | |||
echo -e "$COLOR$msg" | |||
$IPT -nvL | |||
## | |||
## espande la politica di netfilter | |||
## visualizzando le catene e informazioni sulle | |||
echo -e "$NULL\n" | |||
## | |||
exit 0 | |||
;; | |||
#*********************************************************Verifica Syn Flood | |||
vsf) | |||
clear | |||
COLOR=$YELLOW | |||
msg=" Syn Flood ..." | |||
echo -e "$COLOR$msg" | |||
echo "" | |||
echo " Verifico se siamo in presenza di Syn Flood" | |||
echo "" | |||
echo " Oltre 20-30 tentativi di connessione da uno stesso" | |||
echo " indirizzo, indicano un tentativo di flood, verificare comunque i Log" | |||
echo " prima di attivare le contromisure" | |||
## | |||
netstat -npla | grep SYN_RECV | |||
## | |||
echo -e "$NULL\n" | |||
exit 0 | |||
;; | |||
#****************************************************************USO | |||
*) | |||
## | |||
clear | |||
COLOR=$BLUE | |||
msg="Firewall ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}" | |||
echo -e "$COLOR$msg$NULL\n" | |||
## | |||
exit 0 | |||
;; | |||
## | |||
esac | |||
## | |||
#*******************************************************BLOCCO COMUNE | |||
## | |||
echo -e "$COLOR" | |||
## Caricamento dei moduli necessari nel kernel | |||
## | |||
## Il vostro kernel potrebbe non avere | |||
## tutti questi moduli, e' sufficiente ricompilare se le funzionalita' | |||
## sono necessarie. | |||
## | |||
## NOTA: I seguenti moduli sono elencati solo per informazione | |||
## Non e' necessario inserirli manualmente nel kernel | |||
## a meno di casi particolari. | |||
## | |||
# echo "Caricamento moduli..." | |||
## | |||
# modulo base | |||
modprobe ip_tables | |||
## | |||
# modulo necessario alla stateful connection tracking | |||
modprobe ip_conntrack | |||
## | |||
# modulo filter, permette di droppare rifiutare o loggare i pacchetti | |||
modprobe iptable_filter | |||
## | |||
# modulo mangle | |||
# modprobe iptable_mangle | |||
## | |||
# modulo nat | |||
modprobe iptable_nat | |||
## | |||
# modulo LOG, permette di registrare i pacchetti bloccati in base alle catene | |||
modprobe ipt_LOG | |||
## | |||
# modulo utilizzato per limitare il numero di pacchetti per sec/min/hr | |||
## | |||
modprobe ipt_limit | |||
## | |||
# modulo masquerade | |||
modprobe ipt_MASQUERADE | |||
## | |||
# modulo owner | |||
# modprobe ipt_owner | |||
## | |||
# REJECT respinge il pacchetto restituendo una risposta ICMP | |||
# configurabile, il default � "connection refused". | |||
# modprobe ipt_REJECT | |||
## | |||
# modulo mark, permette di marcare pacchetti sulla catena mangle | |||
# modprobe ipt_mark | |||
## | |||
# questo modulo permette di modificare il TCP MSS | |||
## | |||
modprobe ipt_tcpmss | |||
## | |||
# questo modulo permette di indicare porte multiple | |||
# modprobe multiport | |||
## | |||
# questo modulo consente controlli sui flags TCP | |||
# modprobe ipt_state | |||
## | |||
# controlli su flags invalidi | |||
# modprobe ipt_unclean | |||
## | |||
# supporto ftp non-PASV | |||
# modprobe ip_nat_ftp | |||
## | |||
# modulo per full ftp connection tracking | |||
# modprobe ip_conntrack_ftp | |||
## | |||
# modulo per full irc connection tracking | |||
# modprobe ip_conntrack_irc | |||
## | |||
################# | |||
## area kernel ## | |||
################# | |||
## | |||
echo "$SET forwarding... " | |||
echo "$CF" >/proc/sys/net/ipv4/ip_forward | |||
## | |||
echo "$SET syn-cookies (protezione syn-flood attacks)..." | |||
echo "$SC" >/proc/sys/net/ipv4/tcp_syncookies | |||
## | |||
echo "Riduco il numero di possibili SYN Floods..." | |||
echo "1024" >/proc/sys/net/ipv4/tcp_max_syn_backlog | |||
## | |||
## | |||
echo "$SET ICMP echo-request su indirizzi broadcast (Smurf amplifier)..." | |||
# Questi parametri servono ad ignorare ogni ICMP echo requests | |||
# inviato da indirizzi broadcast. Serve a prevenire | |||
# un gran numero di attacchi smurfs e DoS. | |||
echo "$ER" >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts | |||
## | |||
# Contromisure contro attacchi DoS | |||
# echo "Disabilito ICMP echo-request (usare solo se si � sotto attacco Dos)" | |||
# echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all | |||
# #sotto attacco syn incrementare il valore di tcp_max_syn_backlog e decrementare | |||
# #il valore dei timeout_* | |||
# echo "100" > /proc/sys/net/ipv4/vs/timeout_synack | |||
# echo "10" > /proc/sys/net/ipv4/vs/timeout_synrecv | |||
# echo "128" > /proc/sys/net/ipv4/tcp_max_syn_backlog | |||
## | |||
echo "$SET protezione defrag error... " | |||
echo "$DE" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses | |||
## | |||
echo "$SET time-wait assassination hazards in tcp (RFC 1337)..." | |||
#echo "$TW" >/proc/sys/net/ipv4/tcp_rfc1337 | |||
## | |||
echo "$SET sourcerouting and spoofing protection..." | |||
for i in /proc/sys/net/ipv4/conf/*; do | |||
## | |||
echo "$SET politica per source-routed packets..." | |||
# Questa politica e' usata per accettare o rifiutare pacchetti | |||
# di tipo 'source routed'. E' attiva di default, ma � considerata | |||
# un rischio per la sicurezza. | |||
echo "$SR" >$i/accept_source_route | |||
## | |||
echo "$SET politica per ICMP Redirect accept/send..." | |||
# Questa opzione disabilita la redirezione dei pacchetti ICMP. | |||
# E' generalmente considerato un rischio per la sicurezza. | |||
echo "$DR" >$i/accept_redirects | |||
# Per questo motivo, e' preferibile accettare ICMP solo | |||
# dal gateway di default (opzione secure_redirects). | |||
echo "$ASR" >$i/send_redirects | |||
echo "$SET secure ICMP redirects..." | |||
echo "$ISR" >$i/secure_redirects | |||
## | |||
# echo "Disabilito Proxy ARP ..." | |||
# # E' un'opzione utilizzata per la realizzazione di DMZ; | |||
# # � disabilitata in quanto non rientra negli scopi di questo script. | |||
# # per maggiorni info: http://www.sjdjweis.com/linux/proxyarp/ | |||
# echo "0" >$i/proxy_arp | |||
## | |||
echo "$SET source-address verification (prevent spoofing)..." | |||
# Abilita i controlli previsti nel RFC1812. | |||
# � raccomandato per sistemi basati su interfacce singole | |||
# Disattivare se si hanno interfacce multiple collegate alla stessa rete. | |||
# Questo controllo blocca i pacchetti che si presentano ad una interfaccia esterna | |||
# con indirizzo forgiato per sembrare provenienti da interfaccia interna; | |||
# il controllo e' comunque ripetuto in seguito. | |||
echo "$SAV" >$i/rp_filter | |||
## | |||
done | |||
## | |||
echo "Applico settaggi controllo ..." | |||
if [ -f /proc/sys/net/ipv4/icmp_destunreach_rate ]; then | |||
echo "5" > /proc/sys/net/ipv4/icmp_destunreach_rate | |||
fi | |||
if [ -f /proc/sys/net/ipv4/icmp_echoreply_rate ]; then | |||
echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate | |||
fi | |||
if [ -f /proc/sys/net/ipv4/icmp_paramprob_rate ]; then | |||
echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate | |||
fi | |||
if [ -f /proc/sys/net/ipv4/icmp_timeexceed_rate ]; then | |||
echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate | |||
fi | |||
## | |||
echo "$SET il Log su spoofed, source routed e redirect packets..." | |||
# Questa opzione serve a loggare i pacchetti provenienti da indirizzi impossibili. | |||
echo "$LOG" >/proc/sys/net/ipv4/conf/all/log_martians | |||
## | |||
echo "$SET dynamic socket address rewriting..." | |||
# Utile se si utilizza un indirizzo dinamico assegnato da DHCP. | |||
echo "$DSR" > /proc/sys/net/ipv4/ip_dynaddr | |||
## | |||
echo "Setto porte locali ..." | |||
echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range | |||
## | |||
## | |||
################################# | |||
## inizio competenza iptables ## | |||
################################# | |||
## | |||
echo "Azzero le chain..." | |||
## | |||
for y in filter nat mangle ; do | |||
$IPT -t $y -F | |||
$IPT -t $y -X | |||
done | |||
## | |||
## politica per la tabella filter | |||
$IPT -P INPUT $chain | |||
$IPT -P OUTPUT $outchain | |||
$IPT -P FORWARD DROP | |||
#NOTA: FORWARD e' su DROP in quanto il controllo e' lasciato a altre regole | |||
## | |||
## politica per la tabella mangle | |||
for m in PREROUTING OUTPUT ; do | |||
$IPT -t mangle -P $m ACCEPT | |||
done | |||
## | |||
echo "Genero catene utente ..." | |||
$IPT -N chain-log | |||
$IPT -A chain-log -j LOG --log-level info | |||
# NOTA: Senza --log-level "info", si ha la scrittura dei log in ogni | |||
# vty. E' un p� troppo ... | |||
$IPT -A chain-log -j $chain | |||
## | |||
# # Dynamic Address | |||
# # La richiesta di assegnazione dell'indirizzo � di tipo broadcast | |||
# # la risposta potrebbe non essere accettata | |||
# # questa dichiarazione abilita il DHCP | |||
# $IPT -A INPUT -p UDP --source-port 67 --destination-port 68 -j ACCEPT | |||
# # DHCPd - abilitare in presenza di DHCP interno | |||
# #$IPT -A INPUT -i $IIF -p tcp --sport 68 --dport 67 -j ACCEPT | |||
# #$IPT -A INPUT -i $IIF -p udp --sport 68 --dport 67 -j ACCEPT | |||
## | |||
## | |||
echo "Accetto connessioni da $LOCALHOST , $SERVER , $CLIENT ..." | |||
$IPT -A INPUT -i lo -j ACCEPT | |||
$IPT -A INPUT -i $IIF -s $CLIENT -j ACCEPT | |||
$IPT -A INPUT -i $IIF -s $SERVER -j ACCEPT | |||
# $IPT -A INPUT -i $IIF -s $LOCALNET -j ACCEPT | |||
# $IPT -A OUTPUT -o lo -s $LOCALHOST -j ACCEPT | |||
# $IPT -A OUTPUT -o lo -s $SERVER -j ACCEPT | |||
## | |||
echo "Controllo di sanita' dei pacchetti sulla tabella nat-PREROUTING..." | |||
$IPT -t nat -A PREROUTING -i $EIF -s $LOCALNET -j $chain | |||
$IPT -t nat -A PREROUTING -i $EIF -s $LOCALHOST -j $chain | |||
$IPT -t nat -A PREROUTING -i $EIF -s $CLIENT -j $chain | |||
$IPT -t nat -A PREROUTING -i $EIF -s $SERVER -j $chain | |||
# # E' anche possibile bloccare e loggare tutti i pacchetti | |||
# # provenienti da indirizzi privati (chiaramente forgiati per | |||
# # tentare un'intrusione) e non solo quelli relativi a $LOCALNET | |||
# # per una lista completa: | |||
# # http://www.iana.org/assignments/ipv4-address-space | |||
## | |||
# # echo "Rifiuto pacchetti provenienti da indirizzi privati, multicast o riservati..." | |||
## | |||
# # NOTA - le variabili A_r,B_r,C_r,D_r devono essere dimensionate | |||
# # leggendo le liste degli indirizzi da rifiutare (file esterno) | |||
# # il metodo e' riportato , ma non e' implementato nessun controllo, | |||
# # i pacchetti in ingresso sono comunque tutti droppati. | |||
# # questo controllo potrebbe essere comunque comodo, ma non e' | |||
# # nelle finalit� di questo script. | |||
# # non | |||
# for CL in A_r B_r C_r D_mc E_r ; do | |||
# $IPT -A INPUT -i $EIF -s $CL -j chain-log | |||
# done | |||
## | |||
# TCP & UDP | |||
# Le porte standard sono elencate su: | |||
# http://www.chebucto.ns.ca/~rakerman/port-table.html | |||
# http://www.iana.org/assignments/port-numbers | |||
## | |||
echo "Accetto connessioni RELATED/ESTABLISHED..." | |||
#in input | |||
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
echo "Accetto ICMP type 0,3,11..." | |||
## codici ICMP - RFC 792 | |||
## 0 Echo Reply | |||
## 3 Destination Unreachable, il router non ha trovato la destinazione del pacchetto. | |||
## 4 Source Quench | |||
## 5 Redirect, il router informa l'host che ha spedito il pacchetto di un qualche errore | |||
## 8 Echo, messaggio utile per sapere se un host � presente oppure no (utilizzato in Ping) | |||
## 11 Time Exceeded | |||
## 12 Parameter Problem, campo dell'header non valido | |||
## 13 Timestamp | |||
## 14 Timestamp Reply | |||
## 15 Information Request | |||
## 16 Information Reply | |||
# Visitare: http://www.ee.siue.edu/~rwalden/networking/icmp.html | |||
# per altre informazioni relative ai tipi ICMP. | |||
for ic in 0 3 11 ; do | |||
$IPT -A INPUT -i $EIF -p icmp --icmp-type $ic -j ACCEPT | |||
done | |||
## | |||
# Decommentare se si desidera che il proprio sistema risponda ai ping | |||
$IPT -A INPUT -i $EIF -p ICMP --icmp-type 8 -j $chain | |||
# $IPT -A INPUT -i $EIF -p ICMP --icmp-type 8 -j ACCEPT | |||
## | |||
echo "Accetto ICMP dalla rete locale..." | |||
$IPT -A INPUT -i $IIF -s $LOCALNET -p icmp -j ACCEPT | |||
## | |||
echo "Accetto DNS replays" | |||
$IPT -A INPUT -i $EIF -p udp -s $DNS1 --sport 53 -j ACCEPT | |||
$IPT -A INPUT -i $EIF -p udp -s $DNS2 --sport 53 -j ACCEPT | |||
# $IPT -A INPUT -i IIF -p tcp -s $DNS3 --sport 53 -j ACCEPT | |||
$IPT -A INPUT -p udp --sport 53 -j ACCEPT | |||
# il dns 3 si intende come locale, per questo si accettano le connessioni tcp | |||
# $IPT -A INPUT -i $EIF -p tcp -s $DNS1 --sport 53 -j ACCEPT | |||
# $IPT -A INPUT -i $EIF -p tcp -s $DNS2 --sport 53 -j ACCEPT | |||
## | |||
echo "Blocco ogni pacchetto broadcast" | |||
$IPT -A INPUT -p ALL -d 255.255.255.255 -j $chain | |||
# $IPT -A INPUT -s 10.128.0.0/255.255.0.0 -j DROP | |||
## | |||
echo "Attivo SYN-FLOODING protection..." | |||
$IPT -N SYN-FLOOD | |||
$IPT -A INPUT -p tcp --syn -j SYN-FLOOD | |||
$IPT -t filter -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j chain-log | |||
## | |||
# echo "Sperimentale..." | |||
# #NOTA - e' disattivato in quanto potrebbe generare molti falsi positivi. | |||
# $IPT -t nat -A PREROUTING -i $EIF -m unclean -j chain-log | |||
## | |||
echo "Blocco le scansioni Xmas tree, i pacchetti senza flag, i flag irregolari, le scansioni..." | |||
##Blocco le scansioni Xmas tree | |||
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j chain-log | |||
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK -j chain-log | |||
## | |||
##Blocco i pacchetti senza flags | |||
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j chain-log | |||
## | |||
##Blocco i pacchetti SYN+RST e SYN+FIN | |||
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j chain-log | |||
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j chain-log | |||
## | |||
##Blocco le scansioni FIN | |||
$IPT -A INPUT -p tcp --tcp-flags FIN FIN -j chain-log | |||
## | |||
##Elimino pacchetti broadcast netbios | |||
$IPT -A INPUT -p udp --dport 135:139 -j $chain | |||
## | |||
echo "Dirotto pacchetti NEW e INVALID verso CHAIN..." | |||
$IPT -A INPUT -i $EIF -m state --state NEW,INVALID -j chain-log | |||
$IPT -A INPUT -i $IIF -m state --state NEW,INVALID -j chain-log | |||
## | |||
## | |||
################################################################## | |||
## Servizi aperti all'esterno 'decommentare i servizi desiderati, attenzione!!' ## | |||
################################################################## | |||
## | |||
# echo "Accetto connessioni su shell criptate dall'esterno..." | |||
# $IPT -A INPUT -p tcp --dport 22 -j ACCEPT | |||
## | |||
# echo "Accetto connessioni sendmail dall'esterno [pericoloso!!!]..." | |||
# $IPT -A INPUT -p tcp --dport smtp -j ACCEPT | |||
## | |||
# echo "Accetto http e https dall'esterno [pericoloso!!]... " | |||
# $IPT -A INPUT -p tcp -m multiport --destination-port 80,443 -j ACCEPT | |||
## | |||
# echo "Accetto POP3 dall'esterno [pericoloso!]..." | |||
# $IPT -A INPUT -p tcp --sport 110 -j ACCEPT | |||
## | |||
# Questo esempio serve per usare il transparent proxy | |||
# $IPT -t nat -A PREROUTING -p tcp -s $LOCALNET --destination-port 80 -j RETURN | |||
# $IPT -t nat -A PREROUTING -p tcp -s $LOCALNET --destination-port 443 -j RETURN | |||
# Redirezione HTTP | |||
# $IPT -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 3128 | |||
# Redirezione HTTPS | |||
# $IPT -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 3128 | |||
## | |||
####################### | |||
## regole in uscita ## | |||
####################### | |||
## | |||
## abilita servizio DNS per protocolli UDP | |||
## (attivare per policy drop su output) | |||
# $IPT -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT | |||
## | |||
## abilita la navigazione WEB ed il traffico HTTPS | |||
## (attivare per policy drop su output) | |||
# $IPT -t filter -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT | |||
## | |||
## abilita il traffico FTP | |||
## (attivare per policy drop su output) | |||
# $IPT -t filter -A OUTPUT -o $EIF -p tcp --dport ftp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | |||
## | |||
## abilita le connessioni SMTP e POP3 in uscita | |||
## (attivare per policy drop su output) | |||
# $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT | |||
# $IPT -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT | |||
## | |||
## abilita connessioni SSH (SecureShell) con attivazione Log | |||
## (attivare per policy drop su output) | |||
# $IPT -t filter -A OUTPUT -p tcp --syn --dport 22 -m state --state NEW -j LOG --log-level info --log-prefix "---SSH from $EIF---" | |||
# $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT | |||
## | |||
# echo "Impedisco l'uscita di pacchetti netbios..." | |||
# il traffico di questi pacchetti potrebbe attivare | |||
# eventuali connessioni 'dial on demand' a internet. | |||
# $IPT -A OUTPUT -p udp --destination-port 135:139 -j DROP | |||
## | |||
## | |||
#################### | |||
## regole particolari ## | |||
################### | |||
## | |||
## | |||
## | |||
# echo "Imposto le regole sulla tabella MANGLE..." | |||
# # Setto il TTL su tutti i pacchetti in uscita a 128. | |||
# # per nascondere la propria rete dietro al router, | |||
# # convertire i pacchetti uscenti dalla LAN ad un TTL | |||
# # uguale a quello dei pacchetti generati dal router. | |||
# # TTL non e' inserito nelle versioni comunemente | |||
# # distribuite (senza patch-o-matic) | |||
# $IPT -t mangle -A FORWARD -o $EIF -j TTL --ttl-inc 1 | |||
## | |||
echo "Risolvo il blocco derivante da ICMP fragmentation" | |||
# Il target TCPMSS risolve i problemi di connessione derivanti da server | |||
# che bloccano i pacchetti ICMP Fragmentation Needed. | |||
# Tale blocco spesso blocca il trasferimento dati anche in presenza di connessioni stabilite. | |||
$IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu | |||
## | |||
############################# | |||
## regole su FORWARD e nat ## | |||
############################# | |||
## | |||
## | |||
## | |||
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
$IPT -A FORWARD -i $EIF -m state --state NEW,INVALID -j $chain | |||
$IPT -A FORWARD -o $EIF -j ACCEPT | |||
echo "$MSET SNAT (MASQUERADE) su $EIF" | |||
## | |||
#usare su indirizzi dinamici (esempio connessioni dial-up) | |||
$IPT -t nat -A POSTROUTING -o $EIF -j MASQUERADE | |||
#usare solo su indirizzi statici | |||
# $IPT -t nat -A POSTROUTING -o $EIF -j SNAT --to $EIP | |||
## | |||
## | |||
############### | |||
## fine del FW ## | |||
############### | |||
## | |||
## | |||
echo "" | |||
echo "Da ora la politica per INPUT e' $chain" | |||
echo "la politica per OUTPUT e' $outchain" | |||
echo "IP forwarding e' settato su $fw " | |||
echo "" | |||
echo -e "$NULL\n" | |||
## | |||
netfilter | |||
## | |||
##The End.. | |||
</pre> | |||
---- | |||
Autore: debian | |||
contributi