Newsgroup: it.comp.os.linux.iniziare
Titolo: Firewall, chi mi aiuta a personalizzarlo?

Sto usando lo script base di kronoz (
http://kronoz.cjb.net
) che si basa
su iptables, tra l'altro č uno dei pochi siti che da spiegazioni in
italiano su questo sistema. Perň per un novello come me č ancora molto
complicato e allora ho preso lo script base e l'ho applicato alla mia
configurazione. Io uso un pc stand-alone e credo che lo script č
impostato su una configurazione di rete, in piů ho il problema che non
posso accedere a siti ftp://.
Non sparatemi ma per facilitare la vostra riflessione vi ho messo lo
script.
Ciao e grazie
#!/bin/bash
IPTAB=/usr/local/bin/iptables
#verifico se lo script gira con i privilegi di root
if [ $UID != 0 ]; then
	echo -e "\aLo script necessita di privilegi di root"
	exit
fi
IP=`ifconfig ppp0| grep inet | cut -d : -f 2 | cut -d\  -f 1`
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
	for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
		echo 1 > $f
	done
fi
#Attivazione TCP SYN cookie
echo 1 >/proc/sys/net/ipv4/tcp_syncookies
#Attivazione Allways defragment
#decommentare se non compilato nel kernel
#echo 1 > /proc/sys/net/ipv4/ip_always_defrag
#Disattivazione Source Routed Packets
if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
	for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
		echo 0 > $f
	done
fi
#Azzero tutto
$IPTAB -F
$IPTAB -X
$IPTAB -t nat -F
$IPTAB -t nat -X
#Policy di default
$IPTAB -P INPUT DROP
$IPTAB -P FORWARD DROP
$IPTAB -P OUTPUT ACCEPT
#Cotrollo di sanita' dei pacchetti sulla tabella nat-PREROUTING
$IPTAB -t nat -A PREROUTING -i ppp0 -s 
127.0.0.0/8
 -j DROP
$IPTAB -t nat -A PREROUTING -i ppp0 -s 
192.168.0.0/16
 -j DROP
$IPTAB -t nat -A PREROUTING -i ppp0 -d ! $IP -j DROP
### SPERIMENTALE ###
#$IPTAB -t nat -A PREROUTING -i ppp0 -m unclean -j DROP
#mangle dei pacchetti in uscita
###TODO###
#Filtraggio pacchetti in entrata
#Creazione tabelle ausiliarie
$IPTAB -N ppp_in
$IPTAB -N services
#Accetto tutti i pacchetti lo-to-lo
$IPTAB -A INPUT -i lo -j ACCEPT
#Dirotto il controllo dei pacchetti in entrata da ppp0 su ppp_in
$IPTAB -A INPUT -i ppp0 -j ppp_in
### ppp_in ###
#Scarto i pacchetti che puntano alla porte X11
$IPTAB -A ppp_in -p tcp --dport 6000:6010 -j DROP
$IPTAB -A ppp_in -p udp --dport 6000:6010 -j DROP
#Dirotto il controllo dei pacchetti diretti verso i servizi su services
$IPTAB -A ppp_in -p tcp --dport 1:1024 -j services
$IPTAB -A ppp_in -p udp --dport 1:1024 -j services
### Services ###
#Accetto connessioni telnet
$IPTAB -A services -p tcp --dport 23 -j ACCEPT
#Accetto connessioni su shell criptate
$IPTAB -A services -p tcp --dport 22 -j ACCEPT
#Accetto connessioni sendmail
#$IPTAB -A services -p tcp --dport smtp -j ACCEPT
#Accetto connessioni talk
$IPTAB -A services -p udp --dport 517 -j ACCEPT
$IPTAB -A services -p udp --dport 518 -j ACCEPT
#Accetto connessioni verso apache
$IPTAB -A services -p tcp --dport 80 -j ACCEPT
#Elimino tutto il resto
$IPTAB -A services -j DROP
### Fine ###
#Faccio passare pacchetti provenienti dai servizi voluti
#accetto tutti i tipi icmp tranne ping
$IPTAB -A ppp_in -p icmp --icmp-type ! echo-request -j ACCEPT
#dns
$IPTAB -A ppp_in -p udp --sport 53 -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 53 -j ACCEPT
#irc
$IPTAB -A ppp_in -p tcp --dport 6667 -j ACCEPT
$IPTAB -A ppp_in -p udp --dport 6667 -j ACCEPT
#smtp
$IPTAB -A ppp_in -p tcp --sport 25 -j ACCEPT
#nntp
$IPTAB -A ppp_in -p tcp --sport 119 -j ACCEPT
#telnet e ssh
$IPTAB -A ppp_in -p tcp --sport 23 -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 22 -j ACCEPT
#ftp (dati e linea di controllo)
$IPTAB -A ppp_in -p tcp --sport 20 -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 21 -j ACCEPT
#irc
$IPTAB -A ppp_in -p tcp --sport 6666:7000 -j ACCEPT
$IPTAB -A ppp_in -p udp --sport 6666:7000 -j ACCEPT
#napster
$IPTAB -A ppp_in -p tcp --sport 6699 -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 7777 -j ACCEPT
$IPTAB -A ppp_in -p tcp -s 
64.124.41.18/24
 -j ACCEPT
$IPTAB -A ppp_in -p tcp --dport 6699 -j ACCEPT
#talk
$IPTAB -A ppp_in -p tcp --sport 518:519 -j ACCEPT
$IPTAB -A ppp_in -p udp --sport 518:519 -j ACCEPT
#http e https
$IPTAB -A ppp_in -p tcp -m multiport --source-port 80,443 -j ACCEPT
#pop3
$IPTAB -A ppp_in -p tcp --sport 110 -j ACCEPT
#imap
$IPTAB -A ppp_in -p tcp -m multiport --source-port 143,220 -j ACCEPT
#icq
$IPTAB -A ppp_in -p udp -s 
205.188.153.98/24
 --source-port 4000 -j ACCEPT

 a siti ftp://.
Hmmm... meta` di questa roba non ti serve, e meta` potrebbe
crearti dei problemi.
IMHO fai prima a decidere cosa ti serve (e.g.: hai un name server
locale?  vuoi fornire qualche servizio all'esterno?) e poi con
un netstat -natu vedi un po' che cosa hai aperto, e decidi cos'altro
bloccare.
Ed ora pubblicita` regresso: usa DAXFi!  abusa DAXFi!  fai saltare per
aria il tuo PC con DAXFi!  
http://daxfi.sf.net
  (no, davvero: NON
scaricarlo neppure, se non hai Python 2.0 o superiore installato e
non hai una minima idea di cio` che andrai a fare :-)
-- 
Chiusura di Windows in corso.  Sto dando fuoco al computer... _/Davide\_
Ora si puo` spegnere il computer!  Se ci riuscite...          \Alberani/
Per contattarmi: 
http://digilander.iol.it/alberanid/


Ho un solo pc che voglio usarlo per collegarmi ad internet con una buona
sicurezza anche perchč faccio qualche operazione bancaria on line.
Quindi non offro servizi, con nestat -natu:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 
0.0.0.0:515
             0.0.0.0:*               LISTEN
tcp        0      0 
0.0.0.0:6000
            0.0.0.0:*               LISTEN
tcp       24      0 
62.98.174.187:32824
 
194.29.204.111:443
      CLOSE_WAIT
tcp       24      0 
62.98.174.187:32821
 
194.29.204.111:443
      CLOSE_WAIT
tcp        0      0 
62.98.174.187:32814
 
212.141.84.62:119
       TIME_WAIT
tcp        0      0 
62.98.174.187:32806
 
212.141.84.62:119
       TIME_WAIT
tcp        0      0 
62.98.174.187:32808
 
212.141.84.61:119
TIME_WAIT
Cosa mi consigli?

 buona sicurezza
Sono in seria carenza di ore di sonno, quindi puo` darsi abbia
scordato qualcosa (si accettano consigli, domande, torte al
cioccolato.  Soprattutto torte al cioccolato <g>):
Di seguito suppongo che ppp0 sia l'interfaccia con cui ti connetti e
1.2.3.4 sia l'ip che ti viene assegnato dal provider.
Se metti lo script in /etc/ppp/ip-up.d/ puoi sostituirli con
le variabili "$PPP_IFACE" e "$PPP_LOCAL"
# tiriam nel cesso le regole precedenti.
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# consenti ogni sorta di porcata in locale.
# da NON loggare.
iptables -A INPUT -j ACCEPT --destination 0/0 --source 0/0 --in-interface lo
iptables -A OUTPUT -j ACCEPT --destination 0/0 --source 0/0 --out-interface lo
# per non avere timeout con servizi che richiedono identd.
# ha senso farla precedere da una regola che logghi le richieste.
iptables -A INPUT -p tcp -j REJECT --destination 1.2.3.4 --source 0/0 --destination-port 113
# blocca la porta dell'X server.
# pero` discutiamone... e` decisamente meglio far partire X con
# l'opzione "-nolisten tcp" (vedi in /etc/X11, da qualche parte ci sara`
# l'invocazione per X, forse in /etc/X11/xinit/xserverrc)
# se la lasci, o apri altre porte, ha senso farne il log.
iptables -A INPUT -p tcp -j DROP --destination 1.2.3.4 --source 0/0 --destination-port 6000
# blocchiamo un po' di marziani (btw, e` facile che ci pensi gia` il kernel)
# ha senso loggarli.
iptables -A INPUT -j DROP --destination 0/0 --source 
127.0.0.0/8
 --in-interface ppp0
iptables -A INPUT -j DROP --source 1.2.3.4 --destination 0/0 --in-interface ppp0
# blocca i tentativi di aprire dall'esterno nuove connessioni TCP
# e i pacchetti non appartententi a connessioni aperte dall'interno.
# loggabili.
iptables -A INPUT -p tcp -m state -j DROP --destination 1.2.3.4 --source 0/0 --state NEW,INVALID 
# accetta i pacchetti TCP sulle porte alte facenti parti di connessioni
# parte dall'interno.
# da NON loggare.
iptables -A INPUT -p tcp -m state -j ACCEPT --destination 1.2.3.4 --source 0/0 --state RELATED --destination-port 1024:65535
# accetta i pacchetti UDP sulle porte alte.
# da NON loggare.
iptables -A INPUT -p udp -j ACCEPT --destination 1.2.3.4 --source 0/0 --destination-port 1024:65535
# accetta i pacchetti icmp.
# niente log.
iptables -A INPUT -p icmp -j ACCEPT --destination 0/0 --source 0/0
iptables -A OUTPUT -p icmp -j ACCEPT --destination 0/0 --source 0/0
# setta le policy di default.
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Note sparse:
Per le regole di logging puo` aver senso inserire qualcosa come:
  -m limit --limit-burst 10 --limit 1/s
Si puo` discutere l'assenza di regole circa cio` che esce: sicurezza
prevede che esca solo ed esclusivamente traffico autorizzato; cio`
ha (IMO) relativamente poco senso per una macchina singola dial-up.
Sarebbe carino bloccare alcuni tipi di pacchetti icmp (echo-reply,
echo-request, redirect, router-advertisement e router-solicitation),
ma non e` che sia fondamentale.
La regola che blocca gli --state NEW,INVALID dovrebbe proteggerti
anche nel caso tu apra nuove porte TCP in listen e ti dimenticassi
di aggiornare il firewall (cosa *mai* successa a memoria d'uomo... <g>)
Certo potrebbe essere simpatico quanto meno loggare quelle richieste;
si puo` avere in automatico un elendo di porte TCP (e UDP) in LISTEN
sia dall'output di netstat sia andando direttamente a leggere
/proc/net/tcp e /proc/net/udp
In DAXFi ci sono un paio di script (tcplisten.py e udplisten.py) che
seguono il secondo approcio; se qualcuno se li vuole tradurre in
bash e/o farne degli script standalone, liberissimo.
Tra le cose da mettere negli script di init:
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 0 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


, "Davide Alberani"
<albe...@vene.togliquesto.dave.it.invalid> ha scritto:
Grazie mi studierò tutto.
Ciao

cioccolato.  Soprattutto torte al cioccolato <g>):
]zac[
Non c'entro con il thread, ma grazie!.
Se la torta fosse pachettizzabile te la manderei anche subito, a costo di
aprire  (!!!!!) una torteria.
Salve
            Dbg

Nell'articolo <20010822.195804...@localhost.localdomain>,
"amedeo" <inte...@localhost.localdomain> ha scritto:

Dunque ho cercato di applicarlo ma non navigo più, per adesso ho
abilitato il kernel con ipchain ed uso il firewall di serie che red-hat
ha inserito nella distro fino a quando non sarò in grado di creare uno
script adatto alle esigente di un computer casalingo. Forse è anche più
che sufficiente quello che hanno messo di serie sulla red-hat, ma l'unico
inghippo è che posso mettere il livello solo su medio perchè su alto non
si naviga e rimane tutto bloccato (non c'è passaggi di dati).
Ciao

 (non c'č passaggi di dati).
Prova, in entrambi i casi, a postare un output di iptables -L -n
Sono curioso di vedere le regole che usano.
