Newsgroup: it.comp.os.linux.iniziare
Titolo: va bene questo firewall (+ verie domande)?

Potete controllarmi questo firewall? Uso RedHat 6.1, kernel 2.2.14.
Io ho una rete locale di 2 pc pinguini, sul pc che va su internet ho
disattivato quasi tutto, attivando dns, nntp e smtp, + poco altro.
Guardate in particolare la parte del masquerading che spero vada bene!
Vorrei anche sapere come modificarlo per eliminare smtp e nntp esterni
e usare quelli locali, visto che ho postfix e leafnode (Maurizio
Cimaschi mi aveva detto che comunque prima o poi un smtp o nntp
esterni devo comunque contattarli, ad esempio per scaricare le news, e
quindi di lasciarli, pero' poi non mi ha detto come impostare quelli
interni, che col firewall alzato non vanno). Ho anche installato squid
(per il browsing da rete locale, ma presto lo sostituisco con
wwwoffle) e junkbuster: devo aggiungere qualcosa, o essendo locali
vanno bene cosi' (il traffico locale e' completamente libero e
mascherato per  l'esterno)? Grazie mille!
P.S.: Chi vuole copi pure, e chi vuole suggerire, benvenga!
#/bin/sh
#
#  ===================================================================
#  ====== Script per la configurazione di un Firewall per Linux ======
#  ===================================================================
#
# Da utilizzarsi esclusivamente per una macchina stand-alone connessa
# ad internet tramite connessione dial-up. E' necessario disporre di
# un kernel della serie 2.2.x o 2.3.x compilato con il supporto
# del masquerading, del firewall e l' opzione "always defragment".
# Viene filtrato cio' che entra e permesso alla rete di uscire
#
# $Revisione: 1.3 $ 
# modified by MrShark on a previous work of Maurizio Cimaschi
#
# Operazioni sul Firewall:
#       - up = accensione del firewall
#       - down = ritorno alle imposizioni di default
#       - status = stampa a video la configurazione del firewall
#
#               NOTA: E' RICHIESTA L'INDICAZIONE DELL' INTERFACCIA
#               DI RETE, SE NESSUNA E' ATTIVA INDICARE lo
#
#  ===================================================================
#  ======== Definizione delle variabili d'ambiente necessarie ========
#  ===================================================================
IPCHAINS="/sbin/ipchains"
LOCALIP=`/sbin/ifconfig $2 | grep inet | cut -d : -f 2 | cut -d \  -f
1`
#  ===================================================================
#  =============== Definizione dei servizi utilizzabili ==============
#  ========= ON=Servizio attivo    OFF=Servizio non richiesto ========
#  ===================================================================
#masquerading - ON solo se si ha una rete locale che deve accedere a
internet
MASQ="ON"
FTP="ON"
DNS1="ON"
DNS2="ON"
HTTP="ON"
SMTP="ON"
FTP="ON"
NNTP="ON"
POP3="ON"
ICMP="ON"
AUTH="ON"
#  ===================================================================
#  ========== Definizione degli IP dei servizi del provider ==========
#  ===================================================================
DNS1_IP="195.210.91.1"
DNS2_IP="195.210.91.2"
SMTP_IP="195.210.91.154"
NNTP_IP="195.210.91.217"
#pop3 tiscali
POP3_1_IP="195.130.224.23"
#pop3 iol
POP3_2_IP="193.70.192.80"
#pop3 libero
POP3_3_IP="193.70.192.70"
#pop3 clubnet
POP3_4_IP="212.216.176.68"
#rete locale
LOCALNET="
192.168.0.0/24
"
ANYWHERE="
0.0.0.0/0
"
#  ===================================================================
#  ======= Da qui' in poi non toccare niente (al piu' solo la ========
#  ====== parte del POP3 per aggiungere/rimuovere gli account) =======
#  ===================================================================
case "$1" in
        up)
echo "Attivazione del Firewall in corso"
echo "IP locale: $LOCALIP"
echo "Flushing delle regole eventualmente presenti"
$IPCHAINS -F
#  ===================================================================
#  ======================= Regole in entrata =========================
#  ===================================================================
echo "Impostazione della POLICY di entrata a DENY"
$IPCHAINS -P input DENY
echo "Permesso al traffico locale"
$IPCHAINS -A input -s $ANYWHERE -i lo -j ACCEPT
$IPCHAINS -A input -s $LOCALNET -d $ANYWHERE -j ACCEPT
echo -n "Attivazione del Source Addres Verification: "
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
        echo "Fatto !!!"
        else
        echo "SAV non disponibile, utilizzo di ipchains."
        $IPCHAINS -A input -s 127.0.0.1 -i lo -j ACCEPT
fi
echo "Attivazione dei servizi in entrata richiesti"
echo -n "Risoluzione dei nomi di dominio - server primario - : "
if [ $DNS1 = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s $DNS1_IP 53 -d $LOCALIP 1024: -j
ACCEPT
        $IPCHAINS -A input -p udp -s $DNS1_IP 53 -d $LOCALIP 1024: -j
ACCEPT
        echo "FATTO !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Risoluzione dei nomi di dominio - server secondario -: "
if [ $DNS2 = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s $DNS2_IP 53 -d $LOCALIP 1024: -j
ACCEPT
        $IPCHAINS -A input -p udp -s $DNS2_IP 53 -d $LOCALIP 1024: -j
ACCEPT
        echo "FATTO !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Navigazione WEB : "
if [ $HTTP = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s 0/0 80 -d $LOCALIP 1024: -j
ACCEPT
        echo "FATTO !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Invio posta : "
if [ $SMTP = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s $SMTP_IP 25 -d $LOCALIP 1024: -j
ACCEPT
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Ritiro posta : "
if [ $POP3 = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s $POP3_1_IP 110 -d $LOCALIP 1024:
-j ACCEPT
        $IPCHAINS -A input -p tcp -s $POP3_2_IP 110 -d $LOCALIP 1024:
-j ACCEPT
        $IPCHAINS -A input -p tcp -s $POP3_3_IP 110 -d $LOCALIP 1024:
-j ACCEPT
        $IPCHAINS -A input -p tcp -s $POP3_4_IP 110 -d $LOCALIP 1024:
-j ACCEPT
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Usenet : "
if [ $NNTP = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s $NNTP_IP 119 -d $LOCALIP 1024: -j
ACCEPT
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "File Transfer Protocol : "
if [ $FTP = "ON" ]
        then
        $IPCHAINS -A input -p tcp -s 0/0 21 -d $LOCALIP 1024: -j
ACCEPT -t 0x01 0x10
        $IPCHAINS -A input -p tcp -s 0/0 20 -d $LOCALIP 1024: -j
ACCEPT -t 0x01 0x08
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Traffico ICMP : "
if [ $ICMP = "ON" ]
        then
        $IPCHAINS -A input -p icmp -s 0/0 0 -d $LOCALIP -j ACCEPT
        $IPCHAINS -A input -p icmp -s 0/0 3 -d $LOCALIP -j ACCEPT
        $IPCHAINS -A input -p icmp -s 0/0 11 -d $LOCALIP -j ACCEPT
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
echo -n "Richieste di identificazione : "
if [ $AUTH = "ON" ]
        then
        $IPCHAINS -A input -p tcp -d $LOCALIP 113 -j ACCEPT
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
# log di tutto il resto
$IPCHAINS -A input -j DENY -s $ANYWHERE -d $ANYWHERE -l
#  ===================================================================
#  =================== Mascheramento all' esterno ====================
#  ===================================================================
echo "Impostazione della POLICY di inoltro a DENY"
$IPCHAINS -P forward DENY
echo -n "Mascheramento : "
if [ $MASQ = "ON" ]
        then
        $IPCHAINS -A forward -p tcp -s $LOCALNET -d $ANYWHERE -j MASQ
        $IPCHAINS -A forward -p udp -s $LOCALNET -d $ANYWHERE -j MASQ
        $IPCHAINS -A forward -p icmp -s $LOCALNET -d $ANYWHERE -j MASQ
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
# log di tutto il resto
$IPCHAINS -A forward -j DENY -s $ANYWHERE -d $ANYWHERE -l
        ;;
        down)
echo "ATTENZIONE IL FIREWALL NON E' PIU' OPERATIVO"
$IPCHAINS -F
$IPCHAINS -P input ACCEPT
$IPCHAINS -P forward ACCEPT
        ;;
        status)
echo "Ecco le attuali impostazioni per il firewall"
echo "IP locale : $LOCALIP"
$IPCHAINS -L input
        ;;
        *)
        echo "Utilizzo: firewall up|down|status interfaccia"
        echo "  up = attivazione del firewall"
        echo "  down = disabilitazione"
        echo "  status = stampa le impostazioni correnti del firewall"
        echo "  interfaccia = indicare l' interfaccia attiva,
altrimenti lo"
        ;;
esac
--------------------------------------------------
When a packet hits a pocket on a socket on a port,
And the buss is interrupted as a very last resort,
And the address of the memory makes your floppy disk abort,
Then the socket packet pocket has an error to report

 #  =================== Mascheramento all' esterno ====================
Buio completo per quanto mi riguarda.
-- 
Se non sai cos'e', probabilmente c'e' un RFC che puo' spiegartelo.

Se non sai cos'e', probabilmente c'e' un RFC che puo' spiegartelo.
preferisco gli howto (il prof di assembler dice di leggere i sorgenti
del kernel di linux prima di andare a dormire, a mo' di bibbia! ;-) )



il telnet l'ho abbattuto da inetd, perche' non lo uso, ma lo ritiro su
domani, nel caso



io devo scaricare qualche file ogni tanto (da quando uso linux
qualcuno in piu'...) e inviare pagine html con annessi a vari siti ftp
di siti che gestisco, molti dei quali non so se usano PASV (come si
verifica?). ch'aggio da fa'?


 domani, nel caso
Stai confondendo "telnet" con "telnetd", sono due cose correlate ma diverse.


 del kernel di linux prima di andare a dormire, a mo' di bibbia! ;-) )
Aggiungerei anche quelli di FreeBSD........;-))))


 verifica?). ch'aggio da fa'?
Setta il client in "passive mode" e prova..........;-)))))


ora va tutto bene, invio e ricevo tutto cio' che mi serve, l'errore
era che inserivo 127.0.0.1 al posti degli ip del provider, avendo
postfix e leafnode locali, mentre invece basta lasciarli, tanto le
policy di output sono libere! Rimane il problema che mi hai detto del
NOPASV, come risolvo???
questo e' l'output di "fire.sh status ppp0"
Ecco le attuali impostazioni per il firewall
IP locale : 151.21.73.118
Chain input (policy DENY):
target     prot opt     source                destination
ports
ACCEPT     all  ------  anywhere             anywhere              n/a
ACCEPT     all  ------  
mrshark.it/16
        anywhere              n/a
ACCEPT     tcp  ------  
dns1.iol.it
 
ppp-21-73-118.libero.it
domain ->   1024:65535
ACCEPT     udp  ------  
dns1.iol.it
 
ppp-21-73-118.libero.it
domain ->   1024:65535
ACCEPT     tcp  ------  
dns2.iol.it
 
ppp-21-73-118.libero.it
domain ->   1024:65535
ACCEPT     udp  ------  
dns2.iol.it
 
ppp-21-73-118.libero.it
domain ->   1024:65535
ACCEPT     tcp  ------  anywhere             
ppp-21-73-118.libero.it
www ->   1024:65535
ACCEPT     tcp  ------  
smtp.libero.it
 
ppp-21-73-118.libero.it
smtp ->   1024:65535
ACCEPT     tcp  ------  
pop.tiscalinet.it
 
ppp-21-73-118.libero.it
pop-3 ->   1024:65535
ACCEPT     tcp  ------  
pop.iol.it
 
ppp-21-73-118.libero.it
pop-3 ->   1024:65535
ACCEPT     tcp  ------  
pop.libero.it
 
ppp-21-73-118.libero.it
pop-3 ->   1024:65535
ACCEPT     tcp  ------  
pop05-acc.tin.it
 
ppp-21-73-118.libero.it
pop-3 ->   1024:65535
ACCEPT     tcp  ------  
news.libero.it
 
ppp-21-73-118.libero.it
nntp ->   1024:65535
ACCEPT     tcp  ------  anywhere             
ppp-21-73-118.libero.it
ftp ->   1024:65535
ACCEPT     tcp  ------  anywhere             
ppp-21-73-118.libero.it
ftp-data ->   1024:65535
ACCEPT     icmp ------  anywhere             
ppp-21-73-118.libero.it
echo-reply
ACCEPT     icmp ------  anywhere             
ppp-21-73-118.libero.it
destination-unreachable
ACCEPT     icmp ------  anywhere             
ppp-21-73-118.libero.it
time-exceeded
ACCEPT     tcp  ------  anywhere             
ppp-21-73-118.libero.it
any ->   auth
DENY       all  ----l-  anywhere             anywhere              n/a
queste le parti che ho cambiato rispetto al primo post:
[...]
# $Revisione: 1.4 $ 
# modificato da MrShark su un lavoro precedente di Maurizio Cimaschi,
# con vari preziosi suggerimenti di Pierluigi De Rosa e Marco d'Itri.
[...]
#  ===================================================================
#  =========== Definizione degli IP dei servizi del provider =========
#  ===================================================================
# IP di libero
DNS1_IP="195.210.91.1"
DNS2_IP="195.210.91.2"
SMTP_IP="193.70.192.50"
NNTP_IP="193.70.192.200"
# IP di iol1055
#DNS1_IP="195.210.91.1"
#DNS2_IP="195.210.91.2"
#SMTP_IP="193.70.192.50"
#NNTP_IP="193.70.192.201"
# IP di tiscali
#DNS1_IP="195.130.224.18"
#DNS2_IP="195.130.225.129
#SMTP_IP="195.130.224.22"
#NNTP_IP="195.130.224.123"
# IP di clubnet
#DNS1_IP="212.216.112.222"
#DNS2_IP="212.216.172.162"
#SMTP_IP="212.216.176.50"
#NNTP_IP="194.243.154.18"
#pop3 tiscali
POP3_1_IP="195.130.224.23"
#pop3 iol1055
POP3_2_IP="193.70.192.80"
#pop3 libero
POP3_3_IP="193.70.192.70"
#pop3 clubnet
POP3_4_IP="212.216.176.68"
#rete locale
LOCALNET="
192.168.0.0/16
"
ANYWHERE="
0.0.0.0/0
"
[...]
echo "Permesso al traffico locale"
$IPCHAINS -A input -i lo -j ACCEPT
$IPCHAINS -A input -i eth0 -j ACCEPT
[...]
echo "Impostazione della POLICY di inoltro a DENY"
$IPCHAINS -P forward DENY
echo 1 > /proc/sys/net/ipv4/ip_forward



vista la generalita' dello script di cui sopra, ho messo /16



azz, infatti telnet funziona, ho detto una cazzata (comunque spero che
questo thread serva a qualcuno oltre a me per i firewall ;-) )





 detto di renderlo pubblico, 'sto firewall ;-)
 
Non usare un relay esterno e' un "sovrainsieme" di usarlo, percio' se lo
script e' sistemato in maniera da non utilizzare relay esterni ma il prog.
di posta lo usa, si lasciano inutilmente aperti buchi.


 echo 1 > /proc/sys/net/ipv4/ip_forward
A occhio ti stai giocando il "masquerading". A parte tutto e' inutile
inserire righe come queste se poi non hai "policy di routing" impostate.
L'aggiunta della catena di FWD serve per impostare regoe piu' selettive
di quanto non sia possibile fare a colpi di "route".


 
quindi? Non ho ben capito cosa fare, lascio com'era, ora che funziona,
o aggiungo la riga che mi hai detto?


Salvatore Sanfilippo su it.comp.sicurezza.varie consiglia quello che
segue, lo dobbiamo aggiungere (in particolare il -y)?
[...]
ad esempio:
ipchains -A input -y -p tcp -s 0/0 -j DENY
il -y fa in check per il SYN flag nei paccheti TCP, questo e' utile
altrimenti blocchi qualunque cosa che arriva verso le tue porte TCP,
anche le connessioni che hai iniziato tu verso altri hosts. Non so
se ho scritto bene, non ho provato le regole, comunque una alternativa
per un grado di sicurezza piu' alto e' quella di aggiungere una regola
che blocca completamente le porte nel range 0:1023, ovvero le porte
privilegiate che possono bindare solo i processi con i privilegi di
root.


 o aggiungo la riga che mi hai detto?
Se con la riga aggiunta non hai problemi, dovresti lasciarla.


 segue, lo dobbiamo aggiungere (in particolare il -y)?
Letto, ma parlava di una situazione differente dalla tua.


Mi e' risultata gradevole invece la parte finale, sul masquerading.
la spieghi anche a me, 'sta storia delle porte >1024? Non e' che
abbiamo (hai, io ho solo copiato ;-) ) lasciato buchi?
per la parte dei pop3 nessun problema, li ho messi per semplificare un
po' la vita, con gli ip gia' trovati, se cambio provider devo solo
de/commentare le relative parti. Quasi quasi metto un case anche li',
e indico da qualche parte quale usare (tranne per i pop, quelli li
devo scaricare comunque tutti).
riguardo al mascheramento, dopo il tuo post ho modificato cosi':
echo -n "Mascheramento : "
if [ $MASQ = "ON" ]
        then
	echo "Impostazione della POLICY di inoltro a DENY"
	$IPCHAINS -P forward DENY
	echo 1 > /proc/sys/net/ipv4/ip_forward
        $IPCHAINS -A forward -p tcp -s $LOCALNET -d $ANYWHERE -j MASQ
        $IPCHAINS -A forward -p udp -s $LOCALNET -d $ANYWHERE -j MASQ
        $IPCHAINS -A forward -p icmp -s $LOCALNET -d $ANYWHERE -j MASQ
	# log di tutto il resto
	$IPCHAINS -A forward -j DENY -s $ANYWHERE -d $ANYWHERE -l
        echo "Fatto !!!"
        else
        echo "Servizio non richiesto."
fi
riguardo al fatto del routing, se uno vuole condividere una
connessione internet, credo che la rete l'abbia gia' su (d'altronde
non abbiamo mica spiegato come configurare il kernel per tutto quello
che serve, forse ci penso pomeriggio...)


 che serve, forse ci penso pomeriggio...)
Be' si', lack of ducumentation........


 server ed una locale che deve essere >=1024 ma non predeterminata.
Se non dico un boiata, il flag tcp e 16bit quindi le porte possibili sono 65535,
giusto?
Quelle piu' conosciute/usate sono 1024 e sono lencate in questo sito:
http://www.key.ne.jp/RFC/Assigned_Numbers/well-known.html
Bye,
--
*************************************************
* Danilo Marcucci                               *
* University of Florence                        *
* Department of Physics                         *
* Via S.Marta 3                                 *
* 50139 Florence                                *
* E-mail mailto:
marc...@dffs.unifi.it
          *
* 
http://biz-a.dffs.unifi.it/~marcucci
          *
*************************************************

 
http://www.key.ne.jp/RFC/Assigned_Numbers/well-known.html
Quelli sono gli "assigned numbers", trovi tutto sul sito della iana
http://www.iana.org/
 
che e' responsabile per l'allocazione. Cmq si superano le prime 1024 porte
che sono indicate come "WKS,Well Knonw Service".
