Newsgroup: it.comp.sicurezza.unix
Titolo: In cerca di consigli e correzioni - iptables script (lunghino)

Ciao a tutti.
E` la prima volta che mi trovo a lavorare su un firewall di rete, indi 
per cui sono convinto di aver scritto qualche idiozia e di aver 
dimenticato altre cose...
Se qualche anima pia ha voglia di spulciarsi tutto lo script (in fondo 
e` semplice...) e darmi dei consigli glie ne sarei immensamente grato...
La rete e` cosi` composta:
       INTERNET
           |
           |
ROUTER/MODEM ADSL (NAT)
           |
           |
   MACCHINA FIREWALL
           |
           |
        SWITCH
           |
          /|\
   MACCHINE INTERNE
Le macchine interne sono (per ora) tutte windows. Vorrei anche inibire 
p2p e simili, e l'idea migliore mi pare sia sfruttare il router per 
aprire un virtual server per ogni servizio fondamentale (tipo posta, 
ssh, web e poco altro). Il port forwarding totale lo eviterei. Sbaglio?
E questo e` lo script:
#!/bin/sh
# Some definitions
IPT="/sbin/iptables"
IF_EXT="eth0"
IF_INT="eth1"
# Echo something cool to feel more geek
echo Loading iptables scripts...
/sbin/modprobe iptables || exit 1
# Flush standard tables
$IPT --flush INPUT
$IPT --flush OUTPUT
$IPT --flush FORWARD
# Defining standard behaviour until config is done
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# Delete non-standard chains
CHAINS=`iptables -n -L |perl -n -e '/Chain\s+(\S+)/ && !($1 =~ 
/^(INPUT|FORWARD|OUTPUT)$/) && print "$1 "'`
echo Removing non-standard chains:
echo   $CHAINS
for chain in $CHAINS; do
   $IPT -F $chain
done
for chain in $CHAINS; do
   $IPT -X $chain
done
# Block new and invalid connections from outside to inside
$IPT -A FORWARD -i $IF_EXT -m state --state NEW,INVALID -j DROP
# Firewall chain definition, log limit
$IPT -N firewall
$IPT -A firewall -m limit --limit 15/minute -j LOG --log-prefix Firewall:
$IPT -A firewall -j DROP
# Badflags chain definition, log limit
$IPT -N badflags
$IPT -A badflags -m limit --limit 15/minute -j LOG --log-prefix Badflags:
$IPT -A badflags -j DROP
# Silent logging chain definition, no limit
$IPT -N silent
$IPT -A silent -j DROP
# Accept connections from local machines
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $IF_INT -p all -j ACCEPT
# Badflags means badguys: send to appropriate chain
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j badflags
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j badflags
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j badflags
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j badflags
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j badflags
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j badflags
# Drop icmp, but only after letting certain types through
$IPT -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
$IPT -A INPUT -p icmp -j firewall
# Accept related/established connection's packets
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow all output
$IPT -P OUTPUT ACCEPT
# Accept SSh external connections to this machine (don't need internal, 
by now)
$IPT -A INPUT -i $IF_EXT -p tcp --dport 22 -j ACCEPT
# Log, then drop NetBios packets coming from outside
$IPT -A INPUT -i $IF_EXT -p udp --sport 137 --dport 137 -j silent

 $IPT -A INPUT -i $IF_EXT -p udp --sport 137 --dport 137 -j silent
questo imho è inutile. Perché tu sul firewall non fai girare samba, vero? 
E allora la porta è chiusa.

 E allora la porta č chiusa.
Per quello che vedo lo fa per evitare quei noiosissimi log che ogni
stracaX di macchina windows fa sputare a chiunque..
Detto questo, preciso che non ho studiato lo script e che non ho troppa
voglia di farlo (senza offesa alcuna per l'OP...)
-- 
cat: .signature: No such file or directory

Ottavio Campana ha scritto:

Uhm... in effetti hai ragione. Oltretutto, come dicevo prima, mi basta 
evitare di fare la traslazione totale delle porte e aprire solo i 
servizi base. Certamente non andro` ad aprire la 137 :P
Cerca di capirmi, era un po' tardi quando ho aggiunto quella regola :)
bARDO.

 servizi base. 
scusa, è tutto il giorno che programmo e forse sono un po' mona. Che vuol
dire "la traslazione totale delle porte"? Le porte non vanno chiuse coi
firewall, vanno chiuse fermando i servizi inutili o bindandoli solo sulle
interfacce desiderate.

 interfacce desiderate.
Mi riferisco al router che c'e` tra il firewall e internet e che NATta. 
In effetti il termine corretto era "port forwarding". Il router mi 
permette di scegliere se farlo su tutte le porte o aprire dei virtual 
server che agiscono ognuno su una singola porta. Se non lo apro sulla 
137 sono certo che le richieste che arrivano ci pensa il router a 
scartarle, no?
Un bARDO stanco e confuso.

 scartarle, no?
scartarle? no, se non c'è il servizio non devi scartare nulla.
il che basta, avanza, e funziona meglio dei drop del firewall.

 il che basta, avanza, e funziona meglio dei drop del firewall.
Si`, ci siamo capiti, insomma... :)
Bussa quanto vuoi, ma la porta e` chiusa (a.k.a. non esiste).
bARDO.