-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
salve a tutti,
io e Morpheus abbiamo scritto due righe per iptables,
cercando di fare una cosa il pi� possibile generica ed in grado
di coprire gli utilizzi pi� comuni di un router-firewall
casalingo.
Dai primi test sembra che vada,
quindi, se volete, provatelo adattatelo e miglioratelo,
fateci sapere come gira ed eventuali problemi,
per il resto, auguri.
***
#!/bin/sh
##
clear
##
###################
VERSION="2002.12.18"
###################
##
## Interfaccia interna fidata 'settare la propria'
IIF="eth0"
# IIF="eth1"
##
## Interfaccia esterna 'settare la propria'
EIF="ppp0"
# EIF="eth0"
# EIF="eth1"
##
## Indirizzo macchina router
SERVER=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' '
- -f1`
##
## Indirizzo macchina client 'inserire a mano, se il server
condivide la connessione'
CLIENT="192.168.0.2"
##
## Loopback
LOCALHOST="127.0.0.0/8"
##
## Rete interna
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"
##
## Provider2 DNS
DNS2="212.216.112.112"
##
## Provider3 DNS
# DNS3=" "
##
##LOCAL = rete interna
##EXTERNAL = internet/rete esterna
##
## Per qualunque problema...;)
EMAIL="[EMAIL PROTECTED]"
##
## PATH di iptables 'adattare alla propria macchina, se
necessario'
IPT="/usr/sbin/iptables"
##
## 'Dopo aver modificato i parametri base per adattare lo
## script alle proprie esigenze, salvarlo e renderlo eseguibile
## -NOTA-
## il PATH predefinito e' "/etc/rc.d/" ed
## il nome predefinito e' "firewall"
## ma e' possibile utilizzare qualsiasi nome / PATH
## avendo cura di modificare le variabili NFILE e NPATH'
##
## 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"
##
## Setto permessi e proprietario
chown root $NPATH/$NFILE
chmod 700 $NPATH/$NFILE
##
case "$1" in
#**************************************************************START
start)
clear
echo ""
echo "Attivo il Firewall..."
echo ""
##
## 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'
## export outchain="DROP"
##
## Non funziona da router
# export fw="DROP"
# export 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"
;;
#*************************************************************************STOP
stop)
clear
echo ""
echo "Disattivo il Firewall..."
echo ""
##
## 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"
;;
#*************************************************************ROUTER
router)
clear
##
echo ""
echo "Disattivo il firewall ed attivo il forwarding..."
echo ""
##
## 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"
;;
#**************************************************************HELP
help)
clear
##
echo "Utilizzo..."
echo ""
echo "$NFILE start "
echo " Setta il firewall secondo le opzioni"
echo " desiderate, 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 ""
echo "$NFILE router"
echo " Abilita il transito dei pacchetti"
echo " tra $IIF e $EIF senza nessun firewall"
echo " PERICOLOSO."
echo ""
echo "$NFILE info"
echo " Mostra il settaggio attuale dei parametri base"
echo " per controllare le personalizzazioni sullo script."
echo ""
echo "$NFILE help"
echo " Visualizza questo messaggio"
echo ""
echo "Per ogni suggerimento: $EMAIL"
echo ""
##
exit 1
;;
#***************************************************************INFO
info)
clear
##
echo ""
echo "Info..."
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 ""
##
exit 1
;;
#****************************************************************USO
*)
##
echo "Firewall ver. $VERSION"
echo ""
echo "Utilizzo: $NFILE {start|stop|router|info|help} "
echo ""
##
exit 1
;;
esac
##
#*******************************************************BLOCCO
COMUNE
##
## carica i moduli necessari nel kernel
echo "Caricamento moduli..."
for m in ipt_LOG ip_conntrack ip_conntrack_ftp ipt_MASQUERADE
ipt_REJECT ipt_multiport ipt_limit iptable_filter iptable_nat
ipt_state ; do
modprobe "$m"
done
##
#modprobe ip_nat_irc
#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)..."
echo "$ER" >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
##
# echo "Disabilito ICMP echo-request (use only if DOS'ed)"
# echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all
##
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..."
echo "$SR" >$i/accept_source_route
##
echo "$SET politica per ICMP Redirect accept/send..."
echo "$DR" >$i/accept_redirects
echo "$ASR" >$i/send_redirects
##
echo "$SET secure ICMP redirects..."
echo "$ISR" >$i/secure_redirects
##
echo "$SET source-address verification (prevent
spoofing)..."
echo "$SAV" >$i/rp_filter
##
done
##
echo "$SET il Log su spoofed, source routed e redirect
packets..."
echo "$LOG" >/proc/sys/net/ipv4/conf/all/log_martians
##
echo "$SET dynamic socket address rewriting..."
echo "$DSR" > /proc/sys/net/ipv4/ip_dynaddr
##
#################################
## inizio competenza iptables ##
#################################
##
echo "Azzero le chain..."
for y in filter nat ; do
$IPT -t $y -F
$IPT -t $y -X
done
##
echo "Genero Policy & Chains..."
for pc in SYN-FLOOD EXTERNAL LOCAL ; do
$IPT -N $pc
done
##
## politica per la tabella filter
$IPT -t filter -P INPUT $chain
$IPT -t filter -P OUTPUT $outchain
$IPT -t filter -P FORWARD $fw
##
## politica per la tabella nat
for n in PREROUTING POSTROUTING OUTPUT ; do
$IPT -t nat -P $n $fw
done
##
echo "Dirotto pacchetti NEW e INVALID verso CHAIN..."
$IPT -A INPUT -i ! lo -m state --state NEW,INVALID -j $chain
##
echo "Dirotto il controllo dei pacchetti..."
$IPT -A INPUT -i $EIF -p tcp --dport 1:1024 -j EXTERNAL
$IPT -A INPUT -i $EIF -p udp --dport 1:1024 -j EXTERNAL
$IPT -A INPUT -i $IIF -p tcp --dport 1:1024 -j LOCAL
$IPT -A INPUT -i $IIF -p udp --dport 1:1024 -j LOCAL
##
echo "Enable Logging..."
$IPT -t filter -A EXTERNAL -m state --state NEW,INVALID -j
LOG --log-level warning --log-prefix "Connessione internet
BLOCCATA"
##
echo "Accetto connessioni da $LOCALHOST , $SERVER , $CLIENT ..."
$IPT -A INPUT -i lo -s $LOCALHOST -j ACCEPT
#$IPT -A OUTPUT -o lo -s $LOCALHOST -j ACCEPT
$IPT -A INPUT -i lo -s $SERVER -j ACCEPT
#$IPT -A OUTPUT -o lo -s $SERVER -j ACCEPT
$IPT -A LOCAL -s $CLIENT -j ACCEPT
##
echo "Attivo SYN-FLOODING protection..."
$IPT -A INPUT -p tcp --syn -j SYN-FLOOD
$IPT -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j
RETURN
$IPT -A SYN-FLOOD -j $chain
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
##
echo "Sperimentale..."
$IPT -t nat -A PREROUTING -i $EIF -m unclean -j RETURN
##
echo "Blocco le scansioni Xmas tree, i pacchetti senza flag, i
flag irregolari, le scansioni..."
##Blocco le scansioni Xmas tree
$IPT -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j
$chain
$IPT -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j $chain
$IPT -t filter -A INPUT -p tcp --tcp-flags ALL
SYN,RST,ACK,FIN,URG -j $chain
##
##Blocco i pacchetti senza flags
$IPT -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j $chain
##
##Blocco i pacchetti SYN+RST e SYN+FIN
$IPT -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j
$chain
$IPT -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j
$chain
##
##Blocco le scansioni FIN
$IPT -t filter -A INPUT -p tcp --tcp-flags FIN FIN -j $chain
##
##Elimino pacchetti broadcast netbios
$IPT -t filter -A INPUT -i $IIF -d $BROADCAST -p udp --dport
135:139 -j $chain
##
## Servizi aperti all'esterno 'decommentare i servizi
desiderati, attenzione!!'
##
#echo "Accetto connessioni su shell criptate dall'esterno..."
#$IPT -A EXTERNAL -p tcp --dport 22 -j ACCEPT
##
#echo "Accetto connessioni sendmail dall'esterno
[pericoloso!!!]..."
#$IPT -A LOCAL -p tcp --dport smtp -j ACCEPT
##
#echo "Accetto http e https dall'esterno [pericoloso!!]... "
#iptables -t filter -A LOCAL -p tcp -m multiport --source-port
80,443 -j ACCEPT
##
#echo "Accetto POP3 dall'esterno [pericoloso!]..."
#iptables -t filter -A LOCAL -p tcp --sport 110 -j ACCEPT
##
echo "Accetto DNS replays"
$IPT -A EXTERNAL -p udp -s $DNS1 --sport 53 -j ACCEPT
$IPT -A EXTERNAL -p udp -s $DNS2 --sport 53 -j ACCEPT
## Decommentare se il server funziona anche da DNS
# $IPT -A EXTERNAL -p tcp -s $DNS3 --sport 53 -j ACCEPT
# $IPT -A EXTERNAL -p udp -s $DNS3 --sport 53 -j ACCEPT
$IPT -A EXTERNAL -p tcp -s $DNS1 --sport 53 -j ACCEPT
$IPT -A EXTERNAL -p tcp -s $DNS2 --sport 53 -j ACCEPT
#
##all'interno accetto tutto#
##
$IPT -A LOCAL -s $CLIENT -j ACCEPT
##
echo "Accetto ICMP type 0,3,11,packets..."
## codici ICMP - RFC 792
## 0 Echo Reply
## 3 Destination Unreachable
## 4 Source Quench
## 5 Redirect
## 8 Echo
## 11 Time Exceeded
## 12 Parameter Problem
## 13 Timestamp
## 14 Timestamp Reply
## 15 Information Request
## 16 Information Reply
for ic in 0 3 11 ; do
$IPT -A EXTERNAL -p icmp --icmp-type $ic -j ACCEPT
done
$IPT -A LOCAL -p icmp -s $CLIENT -j ACCEPT
##
#######################
## 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,ESTABLESHED,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
##
########################
## /regole in uscita ##
########################
##
## per proibire il traffico esterno sostituire INPUT con LOCAL
##
echo "Accetto connessioni RELATED/ESTABLISHED..."
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##
##
echo "$MSET masquerading..."
$IPT -t nat -A POSTROUTING -o $EIF -j MASQUERADE
##
echo "Done."
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 ""
##
exit 1
##
##The End..
***
bye
miKe
- --
________________________________________
Slackware 8.1 GNU/Linux 2.4.20 @ hp Xe3
R.U.#219755 -- S.R.U.#705 -- R.M.#110932
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iD8DBQE+B4+DF/9fksDJ4y0RAjWpAJ4q6UF/7dDwNZpH/jK2NJlI1q60swCfcHjG
8xktBgtWl7nB39NEwf766GA=
=yv1h
-----END PGP SIGNATURE-----