-----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-----