27.2. Il «Super-Server» inetd
Indietro | Capitolo 27. Server di rete | Avanti

## 27.2. Il «Super-Server» inetd

Grazie al contributo di Chern Lee.
Aggiornato per FreeBSD 6.1-RELEASE da The FreeBSD Documentation Project.

### 27.2.1. Uno sguardo d'insieme

inetd(8) viene talvolta definito l'«Internet Super-Server» perchè gestisce le connessioni verso molti servizi. Quando una connessione viene ricevuta da inetd, questo determina per quale programma la connessione sia destinata, esegue quel particolare processo e affida a lui la socket (il programma è invocato con la socket del servizio come descrittore di standard input, output ed error). Eseguire inetd per server dal carico non troppo alto può ridurre il carico complessivo di sistema, rispetto all'esecuzione individuale di ogni demone in modalità stand-alone.

Principalmente, inetd è usato per lanciare altri demoni, ma molti protocolli triviali sono gestiti direttamente, come ad esempio i protocolli chargen, auth, e daytime.

Questa sezione coprirà le basi della configurazione di inetd attraverso le opzioni da linea di comando ed il suo file di configurazione, `/etc/inetd.conf`.

### 27.2.2. Impostazioni

inetd viene inizializzato attraverso il sistema rc(8). L'opzione `inetd_enable` è impostata a `NO` di default, ma può essere attivata da sysinstall durante l'installazione, a seconda della configurazione scelta dall'utente. Inserendo:

inetd_enable="YES"

o

inetd_enable="NO"

in `/etc/rc.conf` si abiliterà o meno la partenza di inetd al boot. Il comando:

`#` `/etc/rc.d/inetd rcvar`

può essere utilizzato per mostrare le impostazioni attive al momento.

Inoltre, diverse opzioni di linea di comando possono essere passate a inetd attraverso l'opzione `inetd_flags`.

### 27.2.3. Opzioni su linea di comando

Come molti server di rete, inetd ha un numero di opzioni che possono essergli passate per modificare il suo comportamento. La lista di tutte le opzioni è:

inetd synopsis:

`inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] [-p filename] [-R rate] [configuration file]`

Si possono passare opzioni ad inetd usando l'opzione `inetd_flags` in `/etc/rc.conf`. Di default, `inetd_flags` è impostato a `-wW -C 60`, il che attiva il TCP wrapping per i servizi di inetd, ed impedisce ad ogni singolo indirizzo IP di richiedere qualsiasi servizio piùdi 60 volte al minuto.

Gli utenti novizi possono notare con piacere che questi parametri di solito non devono essere modificati, anche se bisogna menzionare il fatto che le opzioni di limitazione delle connessioni sono utili solo se ci si accorge di ricevere un numero eccessivo di connessioni. L'intera lista delle opzioni di inetd(8) può essere trovata nel manuale di inetd(8).

-c maximum

  Specifica il numero massimo di invocazioni simultanee per ogni servizio; il default è illimitato. Può essere sovrascritto per ogni servizio dal parametro `max-child`.

-C rate

  Specifica un numero massimo di volte in cui un servizio può essere invocato da un singolo indirizzo IP in un minuto; il default è illimitato. Può essere sovrascritto per ogni servizio con il parametro `max-connections-per-ip-per-minute`.

-R rate

  Specifica il numero massimo di volte che un servizio può essere invocato in un minuto; il default è 256. L'impostazione 0 permette un numero illimitato di invocazioni.

-s maximum

  Specifica il numero massimo di volte che un servizio può essere invocato per ogni periodo di tempo; il default è illimitato. Può essere sovrascritto per ogni singolo servizio con il parametro `max-child-per-ip`.

### 27.2.4. `inetd.conf`

La configurazione di inetd è fatta attraverso il file `/etc/inetd.conf`.

Quando viene apportata una modifica a `/etc/inetd.conf`, si può forzare inetd a rileggere il suo file di configurazione eseguendo il comando:

Esempio 27.1. Ricaricare il file di configurazione di inetd
`#` `/etc/rc.d/inetd reload`

Ogni linea del file di configurazione specifica un singolo demone. I commenti nel file sono preceduti da un «#». Il formato di ogni riga del file `/etc/inetd.conf` è il seguente:

nome del servizio tipo della socket protocollo {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] utente[:gruppo][/classe-di-login] programma-server argomenti-del-programma-server

Un esempio di linea per il demone ftpd(8) usando l'IPv4:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

nome-del-servizio

  È il nome del servizio per il demone. Deve corrispondere ad un servizio elencato in `/etc/services`. Questo determina su quale porta inetd deve restare in ascolto. Se viene creato un nuovo servizio, deve essere messo prima in `/etc/services`.

tipo-di-socket

  Una a scelta fra `stream`, `dgram`, `raw`, o `seqpacket`. `stream` deve essere usata per demoni basati sulla connessione, tipo TCP, mentre `dgram` è usato per demoni che usano il protocollo di trasporto UDP.

protocollo

  Uno dei seguenti:

  Protocollo | Spiegazione
  --- | ---
  tcp, tcp4 | TCP IPv4
  udp, udp4 | UDP IPv4
  tcp6 | TCP IPv6
  udp6 | UDP IPv6
  tcp46 | Entrambi TCP IPv4 e v6
  udp46 | Entrambi UDP IPv4 e v6

{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]

  `wait|nowait` indica se il demone invocato da inetd è in grado di gestire la sua socket o meno. Il tipo di socket `dgram` deve usare l'opzione `wait`, mentre i demoni con socket stream, che sono in genere multi-thread, devono usare `nowait`. `wait` in genere fornisce socket multiple ad un singolo demone, mentre `nowait` lancia un demone figlio per ogni nuova socket.

  Il massimo numero di demoni figli che inetd può lanciare si imposta attraverso l'opzione `max-child`. Se è richiesto un limite di dieci istanze per un particolare demone, un `/10` dovrebbe essere inserito dopo l'opzione `nowait`. Specificando `/0` si lascia un numero illimitato di figli.

  Oltre all'opzione `max-child`, possono essere attivate due altre opzioni che limitano il massimo numero di connessioni da un singolo ip verso un particolare demone. `max-connections-per-ip-per-minute` limita il numero di connessioni da un particolare indirizzo IP per minuto, ad esempio un valore di dieci limiterebbe ogni singolo indirizzo IP a connettersi verso un certo servizio a dieci connessioni al minuto. `max-child-per-ip` limita il numero di figli che possono essere avviati su richiesta di un singolo indirizzo IP in ogni momento. Queste opzioni sono utili per prevenire eccessivo consumo delle risorse intenzionale o non intenzionale e attacchi Denial of Service (DoS) ad una macchina.

  In questo campo, `wait` o `nowait` sono obbligatorie. `max-child` e `max-connections-per-ip-per-minute` e `max-child-per-ip` sono opzionali.

  Un demone tipo-stream multi-thread senza i limiti `max-child` o `max-connections-per-ip-per-minute` dovrebbe essere semplicemente: `nowait`.

  Lo stesso demone con un limite massimo di dieci demoni dovrebbe avere: `nowait/10`.

  In aggiunta, la stessa impostazione con un limite di venti connessioni per IP al minuto ed un limite massimo di dieci demoni figli avrebbe: `nowait/10/20`.

  Queste opzioni sono tutte utilizzate di default nelle impostazioni del demone fingerd(8) come si vede di seguito:

  finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s

  Alla fine, un esempio di questo campo con 100 figli in tutto, con un massimo di 5 per singolo indirizzo IP sarebbe: `nowait/100/0/5`.

user

  Questo è lo username sotto il quale un particolare demone dovrebbe girare. Di frequente, i demoni girano come utente `root`. Per motivi di sicurezza, è normale trovare alcuni server che girano con l'utente `daemon`, o il meno privilegiato utente `nobody`.

server-program

  Il percorso assoluto del demone che deve essere eseguito quando è ricevuta una connessione . Se il demone è un servizio offerto da inetd internamente, bisogna usare `internal`.

server-program-arguments

  Questa opzione funziona in congiunzione con `server-program` specificando gli argomenti, cominciando con `argv[0]`, passati al demone al momento dell'invocazione. Se `mydaemon -d` è la linea di comando, `mydaemon -d` sarà il valore dell'opzione `server-program-arguments`. Ancora, se un demone è un servizio interno, usa `internal`.

### 27.2.5. Sicurezza

A seconda delle scelte fatte all'installazione, molti servizi di inetd potrebbero essere attivi di default. Se non c'è necessità apparente per un particolare demone, considera di disabilitarlo. Usa un «#» a capo della riga del demone in questione in `/etc/inetd.conf`, e quindi ricarica la configurazione di inetd. Alcuni demoni, come fingerd, potrebbero non essere assolutamente desiderati, poichè forniscono all'attaccante informazioni che gli potrebbero risultare utili.

Alcuni demoni non sono stati creati coll'obiettivo della sicurezza ed hanno timeout lunghi, o non esistenti. Questo permette ad un attaccante di inviare lentamente connessioni ad un particolare demone, saturando in questo modo le risorse disponibile. Può essere una buona idea impostare le limitazioni `max-connections-per-ip-per-minute` e `max-child` o `max-child-per-ip` su certi demoni se scopri di avere troppe connessioni.

Di default, il TCP wrapping è attivo. Consulta la pagina del manuale di hosts_access(5) per impostare delle restrizioni TCP su certi demoni invocati da inetd.

### 27.2.6. Miscellanei

daytime, time, echo, discard, chargen, e auth sono tutti servizi interni di inetd.

Il servizio auth fornisce servizi di rete di identificazione ed è configurabile fino ad un certo punto, mentre gli altri possono solo essere accesi o spenti.

Consulta la paigna di manuale di inetd(8) per dettagli più approfonditi.

Indietro | Risali | Avanti
Capitolo 27. Server di rete | Partenza | 27.3. Network File System (NFS)

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.