Capitolo successivo Capitolo precedente Indice

50. Organizzazione e controllo dei servizi di rete

I servizi di rete vengono attivati all'avviamento di Linux attraverso la procedura di inizializzazione (init), dopo che sono state assegnati gli indirizzi alle interfaccie di rete e che gli instradamenti sono stati definiti.

50.1 Avvio

I daemon in grado di fornire servizi di rete, ricadono in due possibili categorie:

Nel primo caso, si tratta di programmi avviati normalmente che si occupano si ``ascoltare'' su una certa porta e di provvedere da soli ai controlli necessari contro gli accessi indesiderati.

Nel secondo, si tratta di programmi che vengono avviati nel momento in cui ne esiste effettivamente l'esigenza, e questo attraverso inetd che è il programma che si occupa di ``ascoltare'' su tutte le porte dei servizi che controlla.

Il primo modo è preferibile quando non è possibile attendere l'avvio di un programma ogni volta che si presenta una richiesta: il tipico caso è dato dal sistema di condivisione dei filesystem in rete, o NFS.

La gestione da parte di inetd permette di ridurre il carico del sistema, avviando solo i servizi necessari nel momento in cui ne viene fatta richiesta, e di introdurre un ulteriore sistema di controllo attraverso un altro programma: tcpd

50.2 Supervisione dei servizi di rete

Il daemon inetd è il supervisore dei servizi di rete. La ``supervisione'' si articola in due parti:

La presenza di questo meccanismo che si applica alla maggior parte dei servizi di rete (cioè tutti quelli che non sono standalone) permette di inserire un ulteriore controllo attraverso il programma tcpd, il quale si occupa di verificare che le richieste dei servizi provengano da indirizzi autorizzati.

# inetd

inetd [-d] [<file-di-configurazione>]

Si tratta del daemon principale per la gestione dei servizi server da offrire all'esterno. Di solito viene avviato automaticamente dalla procedura di inizializzazione del sistema. Quando è in funzione, si mette in ascolto di un determinato gruppo di porte e quando rivela una comunicazione in una di queste, determina qual'è il servizio corrispondente e lo avvia. In sostanza, inetd, demanda ad altri daemon la gestione dei servizi specificatamente richiesti. inetd, una volta avviato, legge il contenuto del suo file di configurazione che, se non viene espressamente nominato, è /etc/inetd.conf. inetd rilegge la configurazione quando riceve un segnale di SIGHUP:

kill -HUP <numero-del-PID-di-inetd>

L'opzione -d attiva la modalità diagnostica (debug).

/etc/inetd.conf

Si tratta del file di configurazione utilizzato dal daemon inetd. In particolare sono indicati i daemon per la gestione di servizi di rete specifici. In molti casi, l'avvio di questi daemon è controllato da tcpd. Se si effettuano modifiche a questo file e si vuole che abbiano effetto, è necessario inviare a inetd un segnale SIGHUP:

kill -HUP <PID-di-inetd>.

#
# inetd.conf    This file describes the services that will be available
#               through the INETD TCP/IP super server.  To re-configure
#               the running INETD process, edit this file, then send the
#               INETD process a SIGHUP signal.
#
# Version:      @(#)/etc/inetd.conf     3.10    05/27/93
#
# Authors:      Original taken from BSD UNIX 4.3/TAHOE.
#               Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
# Modified for Debian Linux by Ian A. Murdock <imurdock@shell.portal.com>
#
# Modified for RHS Linux by Marc Ewing <marc@redhat.com>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
# To re-read this file after changes, just do a 'killall -HUP inetd'
#
#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
#
# These are standard services.
#
ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
gopher  stream  tcp     nowait  root    /usr/sbin/tcpd  gn

# do not uncomment smtp unless you *really* know what you are doing.
# smtp is handled by the sendmail daemon now, not smtpd.  It does NOT
# run from here, it is started at boot time from /etc/rc.d/rc#.d.
#smtp   stream  tcp     nowait  root    /usr/bin/smtpd  smtpd
#nntp   stream  tcp     nowait  root    /usr/sbin/tcpd  in.nntpd
#
# Shell, login, exec and talk are BSD protocols.
#
shell   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd

talk    dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  in.ntalkd
#dtalk  stream  tcp     waut    nobody  /usr/sbin/tcpd  in.dtalkd
#
# Pop and imap mail services et al
#
pop-2   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop2d
pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop3d
imap    stream  tcp     nowait  root    /usr/sbin/tcpd  imapd
#
# The Internet UUCP service.
#
#uucp   stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico    -l
#
# Tftp service is provided primarily for booting.  Most sites
# run this only on machines acting as "boot servers." Do not uncomment
# this unless you *need* it.  
#
#tftp   dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd
#bootps dgram   udp     wait    root    /usr/sbin/tcpd  bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers."  Many sites choose to disable 
# some or all of these services to improve security.
#
# cfinger is for GNU finger, which is currently not in use in RHS Linux
#
finger  stream  tcp     nowait  root    /usr/sbin/tcpd  in.fingerd
#cfinger stream tcp     nowait  root    /usr/sbin/tcpd  in.cfingerd
#systat stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/ps -auwwx
#netstat        stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/netstat    -f inet
#
# Time service is used for clock syncronization.
#
time    stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.timed
time    dgram   udp     wait    nobody  /usr/sbin/tcpd  in.timed
#
# Authentication
#
auth   stream  tcp     nowait    nobody    /usr/sbin/in.identd in.identd -l -e -o
#
# End of inetd.conf

# tcpd

Si tratta di un programma intermedio per il controllo dei servizi TCP/IP, di solito quelli che si trovano già sotto la supervisione di inetd. In pratica, esegue alcuni controlli, si occupa di registrare attraverso il log di sistema le richieste di esecuzione di questi servizi, e infine avvia i programmi daemon competenti.

Lo scopo più importante di questo daemon è quello di controllare che le richieste di utilizzo dei vari servizi offerti attraverso la rete provengano da host autorizzati. Questa selezione avviene attraverso l'analisi della coppia di file /etc/hosts.allow e /etc/hosts.deny. In pratica, quando tcpd rileva un tentativo di accesso, verifica che l'indirizzo del chiamante sia incluso nell'elenco di /etc/hosts.allow. Se è così non esegue altri controlli e permette l'accesso, altrimenti verifica che questo non sia incluso nell'elenco di /etc/hosts.deny.

/etc/hosts.allow

Viene utilizzato da tcpd per determinare se il computer host che richiede uno dei servizi di rete del computer locale ha diritto di accedere. La struttura dei record di questo file ha la sintassi seguente.

<elenco-di-daemon> : <elenco-di-client>

Alla sinistra dei due punti si elencano i programmi daemon il cui utilizzo si vuole concedere ai computer host elencati alla destra. Gli elementi appartenenti a un elenco possono essere separati con una virgola o uno spazio.

È consentito l'uso di speciali nomi jolly e altri simboli che facilitano l'indicazione di gruppi di nomi.

Elementi

.<indirizzo>

L'indirizzo di un host che inizia con un punto indica in realtà tutti gli indirizzi che finiscono con quel suffisso. Se si utilizzano nomi di dominio invece di indirizzi numerici, si fa riferimento a un intero dominio. Per esempio, .paperopoli.com rappresenta tutti gli host del dominio paperopoli.com.

<indirizzo>.

L'indirizzo di un host che finisce con un punto indica in realtà tutti gli indirizzi che iniziano con quel prefisso. Se si utilizzano indirizzi IP numerici, si fa riferimento a una rete intera. Per esempio, 192.168. rappresenta tutti gli host della rete 192.168.0.0.

<indirizzo-IP>/<maschera-IP>

Rappresenta gli indirizzi che si ottengono eseguendo l'AND tra indirizzo e maschera. Per esempio, 192.168.72.0/255.255.254 rappresenta tutti gli indirizzi a partire da 192.168.72.0 a 192.168.73.255.

ALL

Rappresenta ``tutto''. Se si trova alla sinistra dei due punti rappresenta tutti i servizi daemon; se si trova alla destra, tutti gli host.

LOCAL

Rappresenta tutti i computer locali, intendendosi con questo, quelli rappresentabili senza alcun punto.

EXCEPT

Può essere utilizzato all'interno di un elenco di nomi per escluderne i successivi.

<!>   Per maggiori dettagli conviene consultare hosts_access(5).

Esempi

ALL : ALL

Consente l'utilizzo di qualsiasi servizio da parte di qualsiasi host.

ALL : ALL EXCEPT .topolinia.com

Consente l'utilizzo di qualsiasi servizio da parte di qualsiasi host a eccezione di quelli il cui dominio è topolinia.com.

ALL : .zigozago.dg

Consente l'utilizzo di qualsiasi servizio da parte degli host appartenenti al dominio zigozago.dg.

ALL : .zigozago.dg EXCEPT caino.zigozago.dg

Consente l'utilizzo di qualsiasi servizio da parte degli host appartenenti al dominio zigozago.dg, a esclusione del computer caino.zigozago.dg.

ALL : 192.168.

Consente l'utilizzo di qualsiasi servizio da parte degli host appartenenti alla sottorete 192.168.0.0.

<!>   Per un più facile controllo degli accessi, conviene indicare all'interno del file /etc/hosts.deny soltanto ALL : ALL in modo da impedire tutti gli accessi che non siano esplicitamente consentiti da /etc/hosts.allow.

/etc/hosts.deny

Viene utilizzato da tcpd per determinare quali host non possono accedere ad alcuni o a tutti i servizi di rete del computer locale. La struttura dei record di questo file ha la sintassi seguente.

<elenco-di-daemon> : <elenco-di-client>

Alla sinistra dei due punti si elencano i programmi daemon il cui utilizzo si vuole impedire ai computer host elencati alla destra. Gli elementi appartenenti a un elenco possono essere separati con una virgola o uno spazio. Il funzionamento di questo file è analogo a quello di /etc/hosts.allow.

Per questioni di sicurezza, è conveniente indicare all'interno di questo file solo la riga seguente:

ALL : ALL

in modo da impedire qualsiasi accesso che non sia stato espressamente concesso da parte di /etc/hosts.allow.

Per maggiori dettagli conviene consultare hosts_access(5)

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice