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
Dans Guardian per quanto riguarda il filtraggio dei contenuti della navigazione. La configurazione di Squid e Dans Guardian e' descritta altrove. Qui ci occuperemo di come configurare
netfilter/iptables affinchè si abbiano le funzionalità seguenti.
La macchina firewall (
FW)
- protegge 5 sottoreti (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 (Dans Guardian) o 3128 (Squid) NOTA: Dans Guardian 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 Dans Guardian 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 internet alle macchine della segreteria.
a quanto appena detto si aggiunge la gestione di alcune importanti eccezioni.
- ai server viene garantito l´accesso diretto 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 Dans Guardian
- 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 Dans Guardian 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.add
### DEFINIZIONE DELLE VARIABILI
LOG="1" #viene attivato il logging
INT="vlan1 vlan2 vlan3 vlan4 vlan5" #interfacce interne definite in /etc/network/interfaces
EXT="ext0" #interfaccia verso il router ADSL
# ip di tyutte le VLANs
LAN="x.x.x.0/24 y.y.y.0/24 z.z.z.0/24 w.w.w.0/24 u.u.u.0/24"
TCP_DPORTS="22 80 20 21 24 5000" # porte con servizi in ascolto
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"
IP_MODE=static # masquerading
IP_EXT=x.x.x.x # ip della scheda connessa col router ADSL
# uncomment this for transparent proxy # il proxy trasparente è incompatibile con
# PROXY_REDIR_PORT=3128 # l´autenticazione dell´utente, quindi non
# viene utilizzata
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 = "x.x.x.x" # ip di FW sulla vlan1
_SERVER1 = "x.x.x.x" # ip del server principale (ldap/samba con funzioni di PDC)
_SERVER2 = "x.x.x.x" # ip di un server secondario
_SERVER3 = "x.x.x.x"
SERVER_DNS="$_FIREWALL" # si dichiara quale macchina ospita il server dns
NOPROXY1="$_FIREWALL" # lista delle macchine che bypasseranno (per se stesse) i
NOPROXY2="$_SERVER1" # servizi proxy
NOPROXY3="$_SERVER2"
NOPROXY4="$_SERVER3"
# BYPASS DANS GUARDIAN
# accesso diretto a squid per macchine particolari
# attenzione non e'la stessa cosa di evitare il
# filtraggio dell'ip da parte di DansGuardian
NODG01 ="x.x.x.x"
# PC _amministrativi_ a cui viene consentito l'accesso alla vlan5 (segreteria)
ADMIN01="x.x.x.x" # potrebbe essere l'ip statico del pc del Dirigente Scolastico
# ip interfaccia esterna (quella connessa al router ADSL)
EXT0="x.x.x.x"
# ip interfacce interne (vlans)
_VLAN1="x.x.x.0/24"
_VLAN2="y.y.y.0/24"
_VLAN3="z.z.z.0/24"
_VLAN4="w.w.w.0/24"
_VLAN5="u.u.u.0/24"
# lista delle vlan che possono comunicare tra loro
OK_LANS="vlan1 vlan2 vlan3 vlan4"
# target ridirezione porte
SRV_SSH="$_SERVER:22" # ssh sulla porta 24 rediretto su $_SERVER
FW_HTTP="$_FIREWALL:80" # http sulla porta 81 rediretto su $_FIREWALL
####----------REGOLE------------------
# 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
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 $_SERVER via porta 24 del firewall
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 di tutti i client windows sulla intranet
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