Linux/ Un firewall per amico (III)

Questa settimana vediamo come configurare porte e servizi della nostra Linux box e restringere gli accessi alla macchina per mezzo del TCP wrapper

Se la macchina che utilizzeremo come firewall avrà compiti specifici, come ad esempio quello di Web o FTP server, potremo configurare il sistema per i soli servizi essenziali eliminando tutti quelli che potrebbero essere superflui: questo lo renderà più performante e meno vulnerabile a possibili attacchi esterni.

Andiamo dunque a vedere come configurare porte e servizi in Linux.
Al compito di ascoltare sulle porte e rendere, successivamente, attivo il servizio richiesto è adibito il demone inetd chiamato anche ?super server?. Questo è un processo servente che, ricevuta l?opportuna richiesta sulla specifica porta (socket), richiama il servizio predefinito attraverso la generazione di un processo figlio che esegue, con gli opportuni parametri, l?attivazione del servizio.
In parole più semplici il demone inetd è una sorta di centralinista, interposto tra il chiamante e il chiamato, che smista le telefonate ricevute. Potete, quindi, immaginare che con inetd è possibile scegliere quale sarà il programma che risponderà a un prestabilito servizio. Ecco uno scorcio del file inetd.conf, presente nella directory /etc/ di un tipico sistema Linux:

echo stream tcp nowait root internal
echo dgram udp wait root internal
discard stream tcp nowait root internal
discard dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
chargen stream tcp nowait root internal
chargen dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
ftp stream tcp nowait root /usr/sbin/tcpd wu.ftpd -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/leafnode
smtp stream tcp nowait root /usr/sbin/sendmail sendmail -bs
printer stream tcp nowait root /usr/sbin/tcpd /usr/bin/lpd ?i
All?interno del file di configurazione in ogni riga sono presenti sette campi: il nome del servizio, il tipo di socket, il protocollo (tcp o udp), i flag (wait o nowait), lo user con cui si vuole lanciare il processo, il programma da eseguire (con il relativo path) e eventuali parametri da passare. I flag wait e nowait specificano al super server se deve operare in modalità single-threaded o multi-threaded. I nowait server utilizzano come protocollo di trasporto il tcp.

Se vogliamo disattivare un servizio, per esempio l'FTP anonimo, basta commentare la relativa riga con un #: ricordiamoci però di riavviare il demone inetd per rendere effettive le modifiche con il comando : kill ?HUP pid_di_inetd (il PID di un processo è ricavabile con il comando PS). Nel caso in cui non conosciate il pid del super server potete digitare: kill -HUP `ps aux | grep inetd | grep -v -e grep | awk '{print $2}'`
Nella configurazione del nostro firewall risulta importante disattivare tutti i servizi che non utilizzeremo, soprattutto i seguenti:

- echo
- discard
- chargen
- daytime
- time
- shell
- login
- exec
- comsat
- talk
- ntalk
- dtalk
- pop2
- uucp
- tftp
- bootps
- cfingerd
- systat
- netstat
- auth
- linuxconf
- swat

Quando non utilizzati, è sempre meglio disattivare anche i server non necessari come...

- ftp
- telnet
- pop3
- imap
- finger