In questo articolo descriveremo una configurazione del firewall di ArgoLinux alla base della sicurezza dall'intrusione e del controllo del traffico verso internet in una intranet scolastica strutturata secondo il
modello ISI. In breve
- una sottorete di staff (tutte le macchine a disposizione dei non-studenti)
- tante sottoreti quante sono le reti dei laboratori
- la sottorete delle segreteria
Le macchine attestate sulle varie sottoreti sono organizzate in due classi: quelle a indirizzo statico, apparati di rete, stampanti e pc
amministrativi, quelle a indirizzo dinamico (dhcp). Questa suddivisione consente di implementare molto facilmente acl di Squid o eccezioni di firewalling.
Il software coinvolto nell'implementazione dei servizi di sicurezza e'
netfilter/iptables per quanto riguarda il filtraggio dei pacchetti e le fondamentali operazione di redirezione del traffico (MASQUERADING, SNAT/DNAT),
Squid per quanto riguarda il servizio proxy e
DansGuardian per quanto riguarda il filtraggio dei contenuti della navigazione. La configurazione di Squid e
DansGuardian è descritta altrove. Qui ci occuperemo di come configurare
netfilter/iptables affinchè si abbiano le funzionalità seguenti.
La macchina firewall (
FW)
- protegge tutte le sottoreti (nel caso d'esempio si tratta di 5 vlan: vlans 1=staff 2,3,4=laboratori 5=segreteria)
- ridirige il traffico in ingresso sulla porta 80 al server web principale e quello sulla porta 81 a un server web secondario
- ridirige il traffico ssh in ingresso sulla porta 22 a se stesso e quello sulla porta 24 al servizio ssh in ascolto sul server
- consente connessioni VPN attraverso la porta 5000
- vieta in generale l'uscita diretta su internet attraverso la porta 80,i browser dovranno essere obbligatoriamente configurati per utilizzare un servizio proxy sulla porta 8128 (DansGuardian) o 3128 (Squid) NOTA: DG ascolta di default sulla porta 8080, la ridefinizione è resa necessaria per evitare possibili conflitti con le fonti apt bee.side).
- ridirige in generale tutte le richieste internet sulla porta 8128 a cui è attestato DG anche se il browser è configurato per sfruttare il servizio proxy di squid alla porta 3128. In questo modo resta garantito il meccanismo di autenticazione dell'utente svolto da Squid e il controllo sui contenuti del traffico web.
- impedisce/consente il traffico tra le vlan (ad esempio isola la vlan5, segreteria, dal resto della rete per quanto riguarda il traffico in ingresso ma consente l'accesso a internet alle macchine della segreteria.
A quanto appena detto si aggiunge la gestione di alcune importanti eccezioni.
- ai server (_FIREWALL, _SERVER, _SRV2, _SRV3) viene garantito l´accesso diretto a internet sulla porta 80 bypassando tutti i servizi proxy, questo facilita tutte le operazione di aggiornamento automatico via apt-get e argoupdater (la procedura sistematica di aggiornamento di Argo)
- ad alcune macchine qualificate viene garantito il bypass di DG
- ad alcune macchine qualificate viene consentito l´accesso alla vlan5 (segreteria), ad es. si vuole che il dirigente scolastico possa scambiare dati direttamente con gli uffici.
Naturalmente il modo in cui avviene l'autenticazione dell'utente e il controllo della navigazione dipende dalle configurazione di Squid e DG che aggiungono due ulteriori strati di controllo.
In ArgoLinux la configurazione del firewall è tutta contenuta nei due file
/etc/argo/fw.conf e
/etc/argo/fw.add . Eccone il contenuto necessario per realizzare lo scenario sopra descritto.
/etc/argo/fw.conf
### ------VARIABILI---------------
# abilitazione log dei pacchetti scartati
LOG=
"1"
INT=
"vlan1 vlan2 vlan3 vlan4 vlan5"
EXT=
"ext0"
LAN=
"192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 192.168.4.0/24 192.168.5.0/24"
TCP_DPORTS=
"22 80 20 21 24 5000"
UDP_DPORTS=
""
# Input chains w/ 'tnl' in the name (expr match $name tnl -eq 3) will not
# be considered by 'firewall' script
INPUT_CHAINS=
"int ext log"
FWD_CHAINS=
"fwd flog"
FORWARD=
"1"
# masquerading
IP_MODE=static
# ip dell'interfaccia connessa al router adsl
IP_EXT= 192.168.200.2
# DMZ_ARP=
# EXT_ARP=
# scommentare la riga seguente per il proxy trasparente
# attenzione: il proxy trasparente è incompatibile con
# l'autenticazione via proxy e quindi non viene utilizzato
# PROXY_REDIR_PORT=3128
ICMP_TYPES=
" 0 , 3 , 8 , 11 "
# 0 = echo reply
# 3 = dest unreachable
# 8 = echo request
# 11 = time exceeded for datagram
### ------fine----------
Quanto contenuto in fw.conf consente la protezione delle sottoreti e la condivisione dell´accesso internet. Il resto delle regole di firewalling è contenuto nel file
/etc/argo/fw.add. Eccone il contenuto (si noti l'organizzazione della configurazione: la definizione di tutte le variabili necessarie, l'implementazione delle regole. In questo modo risulta semplice estendere le funzionalità desiderate):
/etc/argo/fw.add
#### ---------VARIABILI---------
# protocolli
PROTO=
"tcp udp"
# porte
PORTS=
"20 21 25 80 110"
P_HTTP=
"80"
P_HTTP_APT=
"80 8080"
P_SSH=
"22"
P_SSH_EXTRA=
"24"
P_DNS=
"53"
P_SARG=
" 81"
P_CUPS=
"631"
P_SWAT=
"901"
# porte squid e dansguardian
P_SQUID=
"3128"
P_DG=
"8128"
P_PROXY=
"3128 8128"
#### server e bypass proxy
LH=
"127.0.0.1"
_FIREWALL=
"192.168.1.1"
_SERVER=
"192.168.1.2"
_SRV2=
"192.168.1.3"
_SRV3=
"192.168.1.4"
SERVER_DNS=
"$_FIREWALL"
NOPROXY1=
"$_FIREWALL"
NOPROXY2=
"$_SERVER"
NOPROXY3=
"$_SRV2"
NOPROXY4=
"$_SRV3"
# accesso diretto a squid per macchine particolari
# attenzione non e'la stessa cosa di evitare il filtraggio dell'ip
# pc a cui è permesso l'accesso alla vlan della segreteria
NODG01=
"x.x.x.x"
# ip di pc amministrativi/
ADMIN01=
"x.x.x.x"
# ip interfaccia esterna
EXT0=
"192.168.200.2"
# ip interfacce interne (vlans)
_VLAN1=
"192.168.1.0/24"
_VLAN2=
"192.168.2.0/24"
_VLAN3=
"192.168.3.0/24"
_VLAN4=
"192.168.4.0/24"
_VLAN5=
"192.168.5.0/24"
# lista delle vlan che possono comunicare tra loro
OK_LANS=
"vlan1 vlan2 vlan3 vlan4"
#### target ridirezione porte
SRV_SSH=
"$_SERVER:22"
FW_HTTP=
"$_FIREWALL:80"
####----------REGOLE------------------
# nat spostato qui da fw.conf per attivazione 2adsl
#iptb -A fwd -o $EXT0 -j ACCEPT
#iptb -t nat -A POSTROUTING -o ext0 -j SNAT --to $EXT0
#iptb -t nat -A POSTROUTING -o ext1 -j SNAT --to $EXT1
# 1 Blocco uscita diretta internet (navigazione solo via proxy)
iptb -I fwd 1 -o $EXT -p tcp --dport $P_HTTP -j bad
# 2 Passaggio libero attraverso la porta 80 per il traffico proveniente dai
# server - necessario per semplificare le operazioni apt
iptb -I fwd 1 -s $NOPROXY1 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
iptb -I fwd 1 -s $NOPROXY2 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
iptb -I fwd 1 -s $NOPROXY3 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
iptb -I fwd 1 -s $NOPROXY4 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
# 3 nessuna redirezione trasparente su DansGuardian per la segreteria e per
# pc speciali
iptb -t nat -A PREROUTING -s $_VLAN5 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_SQUID
iptb -t nat -A PREROUTING -s $NODG01 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_SQUID
# 4 redirezione trasparente su DansGuardian di tutto il resto del traffico
iptb -t nat -A PREROUTING -s !$NOPROXY1 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
iptb -t nat -A PREROUTING -s !$NOPROXY2 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
iptb -t nat -A PREROUTING -s !$NOPROXY3 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
iptb -t nat -A PREROUTING -s !$NOPROXY4 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
# 5 Configurazione per ridirigere su firewall richiesta SARG
iptb -t nat -A PREROUTING -d $EXT0 -p tcp --dport $P_SARG -j DNAT --to $FW_HTTP
#iptb -A fwd -d $_SERVER -p tcp --dport $PORTS -j ACCEPT
# 6 Configurazione per ridirigere pop3,smtp e http (adsl1)
iptb -t nat -A PREROUTING -d $EXT0 -p tcp --dport $PORTS -j DNAT --to $_SERVER
iptb -A fwd -d $_SERVER -p tcp --dport $PORTS -j ACCEPT
# 7 Configurazione per redirigere bind
iptb -t nat -A PREROUTING -s ! $SERVER_DNS -p $PROTO --dport $P_DNS -j DNAT --to $SERVER_DNS
iptb -A fwd -p $PROTO --dport $P_DNS -j ACCEPT
# 8 Configurazione per ssh diretto su srv-nec
iptb -t nat -A PREROUTING -d $EXT0 -p tcp --dport $P_SSH_EXTRA -j DNAT --to $SRV_SSH
iptb -A fwd -d $_SERVER -p tcp --dport $P_SSH -j ACCEPT
# 9 Configurazione per accesso a PDC
iptb -A fwd -d $_SERVER -j ACCEPT
# 10 Configurazione per traffico tra vlan
iptb -A fwd -i $OK_LANS -o $OK_LANS -j ACCEPT
# 11 autorizzazione traffico macchine qualificate-segreteria
iptb -A fwd -s $ADMIN01 -o vlan5 -j ACCEPT
#--------------------fine--------------------------------