Il superdemone inetd

Introduzione

Inetd (Internet Super-Server) è un demone che ascolta sulle porte specificate nel suo file di configurazione e fa avviare il relativo servizio nel momento in cui viene fatta una richiesta. Esso controlla tramite dei wrappers i file /etc/hosts.allow e /etc/hosts.deny per verificare che la connessione sia consentita.

Viene chiamato superdemone proprio per questa sua funzione di controllo di altri demoni.

Il vantaggio di usarlo è di ottimizzare le risorse del sistema, avviando il demone che gestisce un determinato servizio solo quando ci sono effettive richieste.

Sebbene possa essere usato per gestire quasi tutti i servizi è consigliabile farlo solo per quelli a basso e occasionale traffico.

Installazione

Se per qualche motivo il demone inetd non dovrebbe essere installato è sufficiente installarlo tramite APT. Inoltre consiglio l'installazione dei TCP wrappers:

$: apt-get install netkit-inetd tcpd

Configurazine

Per prima cosa è necessario modificare i permessi al file /etc/inetd.conf in modo che solo root abbia accesso:

$: chmod 600 /etc/inet.conf

Ogni riga di /etc/inetd.conf corrisponde ad un servizio che viene gestito da inetd. Se è commentata con un # il servizio non viene avviato e inetd non mette la relativa porta in listening. Esempio:

# 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 
# 
# Shell, login, exec, comsat 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  
#comsat dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat  
#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

Il formato tipico di ogni riga è il seguente:

service type protocol wait user server cmdline


Un esempio pratico di una riga presente in /etc/inetd.conf:

ftp stream tcp nowait root /usr/sbin/in.ftpd –l

ftp:	nome del servizio
stream:	indica il tipo
tcp:	indica il protocollo
nowait:	indica se deve attendere
user:	indica l’utente che ha il privilegio di accesso
server:	indica dove si trova il programma
cmdline:indica il nome dell’eseguibile e eventuali flag

Inoltre inetd si appoggia su un altro file di configurazione dei servizi:

/etc/services
File che assegna un nome di servizio alla relativa porta. Viene usato anche da altri programmi come file di riferimento.

Se si vogliono utilizzare i tcpwrapper per limitare l'accesso al servizio la riga sopra diventa:

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd –l

Nelle distribuzioni Linux, solitamente inetd è già configurato per supportare i tcp wrappers.

TCP wrappers

I tcp wrapper TCPD, sviluppati dall'olandese Wietse Venema, sono un layer software che permette il controllo e il filtro degli accessi a servizi del sistema, tipicamente gestiti con inetd.

In pratica da una configurazione:

client -----> inetd -----> servizio

Si passa ad una configurazione:

client -----> inetd -----> TCPD -----> servizio

Nella nuova configurazione i tcpwrappers possono limitare l'accesso al servizio secondo criteri configurabili ed hanno funzionalità anti-spoofing e anti tcp seguence guessing. La configurazione dei tcp wrappers si fa essenzialmente in due file.

Questo file permette di specificare quali servizi abilitare e da quali indirizzi IP:

/etc/hosts.allow

Questo file permette di specificare come limitare l'accesso a specifici servizi:

/etc/hosts.deny

Comandi utili

Per avviare, riavviare, fermare il servizio inetd:

$: /etc/rc.d/init.d/inetd start/stop/restart

Configurazioni utili

Nega l'accesso a tutti i client e controlla che ip - nome.host corrispondano:

File da applicare: /etc/hosts.deny
ALL:ALL@ALL,PARANOID

Consente l'accesso a tutti i client e controlla che ip - nome.host corrispondano:

File da applicare: /etc/hosts.allow
ALL: LOCAL 192.168.1.0/255.255.255.0

Permette l'accesso SSH all'host prova.it corrispondente all'IP 10.0.0.1

File da applicare: /etc/hosts.allow
sshd: 10.0.0.1 prova.it

Manda una mail all'indirizzo specificato admin_mail ogni qualvolta qualcuno si connette attraverso il servizio telnet, indicando l'indirizzo del client (%a) e l'utente (%u), la lista di questi parametri è contenuta nella man page hosts_access.

File da applicare: /etc/hosts.allow
in.telnetd : ALL@ALL : spawn ( /bin/mail -s "Connessione telnet da: %a %u" admin_mail ) & 

Da inetd a Xinetd

Differenze

A differenza del precedessore, xinetd (extended inetd):

  • Limita o regola l'accesso a determinati servizi senza ricorrere al Tcp Wrapper;
  • Offre un sistema di logging indipendente da syslog;
  • Permette di limitare l'accesso ai servizi in determinate ore della giornata;
  • Supporta il protocollo Ipv6;
  • Utilizza vari meccanismi che mitigano l'impatto di un attacco DOS.

File di configurazione

La configurazione del demone e dei servizi può essere suddivisa in più file non compatibili con i vecchi file di configurazione del demone inetd. Le directory contenenti i file di configurazione sono leggermente cambiate:

/etc/xinetd.conf
File di configurazione del demone

/etc/xinetd.d/*
Directory che contiene i singoli file dei servizi offerti da xinetd

Il file di configurazione di xinetd è un file di testo che indica i servizi gestiti da xinetd. Contiene delle sezioni, ognuna delle quali identifica un servizio, con la seguente sintassi:

service service_name
{
    attribute assign_op [value] [value] [...]
    [...]
}

Dove i seguenti attributi indicano:

  • service_name è l’indicazione di un servizio gestito da xinetd;
  • attribute indica un attributo relativo al servizio service_name;
  • assign_op è un operatore di assegnamento, e può essere = (specifica l’unico valore dell’attributo), += (aggiunge un valore all’attributo) o -= (rimuove un valore dall’attributo).

Esempi di configurazione di Xinetd

Di seguito sono riportati alcuni esempi pratici e semplici di un file di configurazione /etc/xinetd.conf:

service shell
          {
                socket_type         = stream
                wait                = no
                user                = root
                instances           = UNLIMITED
                server              = /usr/etc/in.rshd
                log_on_success      += HOST RECORD
          }

service ftp                                                              
          {
                socket_type         = stream
                wait                = no
                nice                = 10
                user                = root
                server              = /usr/etc/in.ftpd
                server_args         = -l
                instances           = 4
                log_on_success      += DURATION HOST USERID
                access_times        = 2:00-9:00 12:00-24:00
          }

Per una guida dettagliata di ogni singolo parametro è possibile consultare il man una volta installato xinetd. Xinetd è un demone molto flessibile e tramite il suo file di configurazione è possibile specificare decine e decine di opzioni.

Opzioni di Xinetd

Le opzioni che possono essere utilizzate per la modalità di funzionamento di xinetd sono le seguenti:

  • -d abilita la modalità di debug;
  • -syslog syslog_facility imposta la facility relativa al system log44 secondo quanto specificato da syslog_facility;
  • -filelog logfile' indica di redirigere il log degli eventi di xinetd nel file logfile;
  • -f config_file indica il file di configurazione da considerare secondo quanto specificato da config_file (default /etc/xinetd.conf);
  • -pidfile pid_file indica di scrivere nel file pid_file il PID del processo lanciato;
  • -stayalive indica di rimanere in esecuzione anche se nel file di configurazione non è stato specificato nessun servizio;
  • -limit proc_limit imposta il numero massimo di processi che xinetd può lanciare secondo quanto specificato da proc_limit;
  • -logprocs limit imposta il numero massimo di daemon che possono essere lanciati in esecuzione per ogni utente, secondo quanto specificato da limit;
  • -version visualizza la versione di xinetd;
  • -inetd_compat indica di considerare anche il file di configurazione /etc/inetd.conf subito dopo /etc/xinetd.conf;
  • -cc interval indica di controllare un controllo periodico del proprio stato ogni interval secondi;

Il processo xinetd effettua le operazioni elencate in corrsipondenza dei seguenti segnali.

  • SIGHUP rilegge il file di configurazione e termina l’esecuzione dei daemon relativi a servizi non più attivi (secondo quanto specificato nel file di configurazione).
  • SIGQUIT termina la sua esecuzione.
  • SIGTERM termina l’esecuzione di tutti i daemon prima di terminare anche la sua esecuzione.
  • SIGUSR1 scrive il suo stato interno (dump) nel file /var/run/xinetd.dump.
  • SIGIOT controlla la consistenza delle sue strutture dati, visualizzando quindi un messaggio relativo.

Autore: Net deity