[Pluto-journal] Re: FIREWALL

Tom dido a sicurweb.com
Lun 18 Feb 2002 10:16:58 CET


Ciao Giuseppe, io sono Tommaso (in lista, più noto come Tommy o Dido).

At 09.03 17/02/2002 +0100, you wrote:
>Ciao!
>Mi chiamo Giuseppe.
>Pochi giorni fa ho postato sulla maillist del PLUTO
>una mail chiedendo cortesemente di dare un'occhiata
>ad un piccolo script di configurazione di un Firewall
>per il mio PC.

Va benissimo! Ci guardo volentieri!


>dicendomi oltretutto che nel prossimo numero del PLUTO-JURNAL
>dovrebbe comparire un'articolo tuo proprio sui Firwall.

Per la verità, nel piano editoriale si era detto di parlarne + avanti... 
Pero' sentireno a questo punto dal direttore, visto che

>Ora qui sotto c'è il mio script, se per te non è troppo disturbo
>potresti dargli un'occhiata e segnalarmi se puo' andar bene???

Ma certo, + che volentieri! Comunque, ti anticipo il mio parere: iptables è 
un firewall molto potente, a mio avviso... Proprio per questo, sono 
possibili configurazioni differenti, anche per realizzare la stessa cosa. 
Quindi, ognuno prediligerà un approccio differente. Io se vuoi provo a 
correggere il tuo, e farti vedere anche come lo avrei realizzato io (se 
puo' interessarti, ovvio...)

>Tieni presente solamente che il pc che uso deve essere usato per:
>visualizzazione siti, utilizzo del account di posta elettronica, alcune
>connessioni ssh (insomma un pc casalingo),

Vediamo se ho capito: tu vuoi poter effettuare (o ricevere?) connessioni 
ssh, connetterti a un server POP per leggere la posta, a un server SMTP per 
inviarla, navigare, fare ftp, ecc. Giusto? Non hai nessun servizio server, 
sei solamente tu che ti colleghi ad altri, se ho ben capito...

-----------------------------------------------------------------------------
>###############################
>#!/bin/sh
># mio script per il settaggio di iptables
>IPTABLES="/sbin/iptables"
>LOOPACK="127.0.0.1"
>
>echo 0 > /proc/sys/net/ipv4/ip_forward

Perfetto. nello script di un firewall è comunque buona norma anche settare 
alcuni parametri del kernel per la sicurezza del traffico IP. Questo non 
c'entra propriamente con iptables, ma vale la pena...

echo '1' > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#questi due bloccano il ping verso la tua macchina (una volta era un 
attacco DoS)

echo '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo '1' > /proc/sys/net/ipv4/tcp_syncookies
echo '1' > /proc/sys/net/ipv4/conf/all/rp_filter
#quest'ultimo è importantissimo! Evita attacchi tipo Spoofing

echo '1' > /proc/sys/net/ipv4/conf/all/log_martians
#logga in /var/log/messages i pacchetti malformati o "strani"

echo '0' > /proc/sys/net/ipv4/conf/all/accept_source_route
echo '0' > /proc/sys/net/ipv4/conf/all/accept_redirects

Se ti interessano dettagli ulteriori, puoi vedere nel kernel-howto, e 
comunque ne parlerò nell'articolo.

>#####################################################################
>#      SCELTA E RIPRISTINO REGOLE DI DEFAULT                                 #
>#####################################################################
>echo "Effettuo l'azzeramento delle regole attuali e"
>echo "setto le regole di base"
>echo "-----"
>#
># configurazione politica di default per la tabella filter
>#
>iptables -t filter -P INPUT DROP
>iptables -t filter -P OUTPUT ACCEPT
>iptables -t filter -P FORWARD DROP
>
>#
># scarta pacchetti malformati
>#
>iptables -A INPUT -m unclean -j DROP

Questo dovrebbe essere già fatto dalle regole del kernel messe sopra, ma 
cmq va benissimo!

>##############################################################
>#            CONFIGURAZIONE SERVIZI UTILIZZATI                               #
>##############################################################
>#
># connessioni web
>#

Iptables è un firewall statefull, per cui sarebbe molto furbo inserire 
_come_prima_regola_ di accettare tutte le connessioni correlate a quella da 
te già iniziata
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


>iptables -t filter -A INPUT -p tcp --sport 80 -j ACCEPT
Aggiungi il traffico https:
iptables -t filter -A INPUT -p tcp -m multiport --sports 80,443 -j ACCEPT

>#
># connessioni per l'utilizzo account di posta
>#
>iptables -t filter -A INPUT -p tcp --sport 25 -j ACCEPT
>iptables -t filter -A INPUT -p tcp --sport 100 -j ACCEPT

Sicuro che non parli di connessioni POP, e quindi la porta è la 110?



># abilito servizio DNS per protocolli TCP - UDP
>#
>iptables -t filter -A INPUT -p tcp --sport 53 -j ACCEPT

Qui non sono d'accordo. Il traffico dns è su protocollo udp, e non tcp (a 
parte i zone transfer, ma questi non c'entrano niente, a meno che tu non 
abbia un server DNS)

>#
># abilito il servizio ssh solamente da qui
>#
>iptables -A INPUT -i ppp0 -p tcp --syn --dport 22 -m state --state NEW -j LOG
>--log-level info --log-prefix "---SSH from ppp0---"
>iptables -A INPUT -i ppp0 -p tcp -m multiport --dport 22 -j ACCEPT

Questa non l'ho capita... Tu stai accettando le connessioni via internet, 
sulla porta 22. Quindi, per prima cosa non serve il multiport, secondo non 
stai abilitando questo traffico in uscita....



># accetto le richieste di ping provenienti da 127.0.0.1
>#
>iptables -t filter -A INPUT -s 127.0.0.1 -p icmp -j ACCEPT
>iptables -t filter -A INPUT -p icmp --icmp-type 0   -j ACCEPT
>#
># nego tutte le altre richieste di ping
>#
>iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j DROP

Io li negherei tutti....


>#
># port scanner starni
>#
>iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit
>1/s -j ACCEPT

Benissimo!

Io avrei fatto cosi': innanzi tutto, avrei definito il traffico in base 
alla porta di destinazione, e non alla sorgente. Poi avrei giocato tutto 
sulle connessioni correlate:

modprobe ip_conntrack
modprobe ip_conntrack_ftp

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 21,80,443 -j ACCEPT
#consento traffico ftp, http, https
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #se voglio fare connessioni ssh
<poi aggiungi la sezione dei log e del masq.>
iptables -A INPUT -j DROP #Questo lo aggiungo sempre, nel caso ci siano 
problemi con il settaggio del default


Io avrei fatto cosi', ma come ti ho detto si tratta di scelte personali... 
Fammi sapere se hai dubbi!

Ciao
Tom





Maggiori informazioni sulla lista pluto-journal