13.3. Configurazione avanzata

Vediamo ora alcuni usi più avanzati di xinetd.

13.3.1. Port binding

Il port binding permette di associare un servizio a un determinato indirizzo IP o a una determinata interfaccia di rete. È evidente che ciò torna utile solo nel caso ci siano almeno 2 interfacce di rete, ad esempio su un gateway con 2 ethernet, o una ethernet per la LAN e una connessione PPP, anche con IP dinamico. Ad esempio di potrebbe allestire un server FTP cui gli utenti locali possano accedere liberamente su un indirizzo IP, mentre gli utenti remoti useranno un altro indirizzo IP. xinetd deve comunque poter distinguere tra i 2 servizi, e questo si fa con l'attributo id, il quale, se avete una sola chiamata per un servizio, è implicito e corrisponde al nome del servizio stesso. Ecco un esempio:

service ftp
{
    id           = ftp-public
    wait         = no
    user         = root
    server       = /usr/sbin/in.ftpd
    server_args  = -l
    instances    = 4
    nice         = 10
    only_from    = 0.0.0.0/0       # accesso a ogni client
    bind         = 212.198.253.142 # indirizzo IP pubblico per questo server
}

service ftp
{
    id           = ftp-internal
    socket_type  = stream
    wait         = no
    user         = root
    server       = /usr/sbin/in.ftpd
    server_args  = -l
    only_from    = 192.168.1.0/24 # solo per uso interno
    bind         = 192.168.1.1    # indirizzo IP locale per questo server
}
       

In questo modo, i client della rete locale dovranno accedere all'indirizzo IP assegnato per avere accesso ai dati di loro competenza. Un problema può sorgere se si usano indirizzi IP dinamici, come quelli delle connessioni PPP. Si può risolvere con uno script come il seguente:

#!/bin/sh 
PUBLIC_ADDRESS=`/sbin/ifconfig $1 | grep "inet addr" | awk '{print $2}'| awk -F: '{print $2}'` 
sed s/PUBLIC_ADDRESS/"$PUBLIC_ADDRESS"/g /etc/xinetd.base > /etc/xinetd.conf
       

Lo script prevede che la configurazione di base di xinetd sia nel file /etc/xinetd.base, con la stringa PUBLIC_ADDRESS al posto dell'IP che dovrà essere sostituito. Richiamando questo script con il nome dell'interfaccia di rete come suo argomento, per esempio nello script "ifup-..." dell'interfaccia di rete, questa stringa viene sostituita con l'indirizzo IP effettivo e viene creato il file /etc/xinetd.conf, per cui basterà riavviare xinetd per avere la configurazione con l'indirizzo IP corretto. Certo che il tutto è molto più pratico e veloce se invece degli indirizzi IP usate i nomi delle interfacce di rete...

13.3.2. Redirezione di porte

xinetd può agire da transparent proxy, tramite la redirezione delle porte, che permette di inviare le richieste per un dato servizio su determinati host e porta, su un'altra porta e anche su un altro host, se necessario.

service telnet
{
    flags       = REUSE
    socket_type = stream
    wait        = no
    user        = root
    server      = /usr/sbin/in.telnetd
    only_from   = 192.168.1.0/24
    redirect    = 192.168.1.15 23
}
       

Siccome il meccanismo può essere utile ma pericoloso, è consigliato fare il log su entrambi i lati della connessione, oltre che usare un firewall.

Suggerimento: Hint! Hint! Chissà se si può redirezionare un possibile contatto di un possibile attacker su una porta qualsiasi (dove non sia in funzione già un server reale) aperta all'uopo, direttamente su una porta dello stesso attacker... (uno squalo bastardo... ;-) )

13.3.3. Servizi interni

xinetd fornisce e gestisce internamente 5 servizi base UNIX: "echo, time, daytime, chargen e discard". Inoltre fornisce altri 3 servizi, che pur essendo interni, se usati vanno contrassegnati anche come UNLISTED, non essendo riportati né in /etc/services né in /etc/rpc: "servers, services e xadmin". Il primo fornisce informazioni sui server in funzione, il secondo sui servizi disponibili, con protocolli e porte, il terzo è un'interfaccia di amministrazione del super-demone. Poiché questi servizi rendono il vostro sistema vulnerabile, si consiglia di usarli solo in fase di configurazione, non essendo protetti in alcun modo, p.e. da password. Poi per sicurezza si consiglia di disabilitarli nella sezione "defaults":

defaults {
    ...
    disabled = servers services xadmin
    ...
}
       

Non mi dilungo oltre, in quanto il mio consiglio è di dimenticare che questi 3 servizi esistono! ;-) Inserite la riga "disabled" nella sezione "defaults" e lasciateli perdere.

13.3.4. Chroot di un servizio

Se avete configurato un servizio (p.e. FTP) in ambiente chroot e volete continuare a usarlo in questo modo, dovrete usare una sintassi simile alla seguente, con il comando chroot come opzione "server" e il server effettivo nell'opzione "server_args":

service ftp
{
    id           = ftp
    socket_type  = stream
    wait         = no
    user         = root
    server       = /usr/sbin/chroot
    server_args  = /var/servers/ftp /usr/sbin/in.ftpd -l
}