This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
inetd(8) viene 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 una sola istanza di inetd riduce 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.
inetd viene inizializzato attraverso il sistema /etc/rc.conf. L'opzione inetd_enable è impostata a NO di default, ma viene spesso attivata da sysinstall con la politica di sicurezza media. Inserendo:
inetd_enable="YES"o
inetd_enable="NO"in /etc/rc.conf si abilita o meno la partenza di inetd al boot.
Inoltre, diverse opzioni di linea di comando possono essere passate a inetd attraverso l'opzione inetd_flags.
inetd synopsis:
inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address |
hostname] [-p filename] [-R rate] [configuration file]
Attiva il debugging.
Attiva il tracciamento delle connessioni avvenute con successo.
Attiva il wrapping TCP per i servizi esterni (attivo di default).
Attiva il wrapping TCP per i servizi interni che sono incorporati in inetd (attivo di default).
Specifica il numero massimo di invocazioni simultanee per ogni servizio; il default
è illimitato. Può essere sovrascritto per ogni servizio dal parametro max-child.
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.
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.
Specifica un indirizzo IP al quale effettuare il bind. In alternativa, può essere specificato un hostname, nel qual caso l'indirizzo IPv4 o IPv6 che corrisponde a quell'hostname è usata. Di solito viene specificato un hostname quando inetd è eseguito all'interno di una jail(8), in questo caso l'hostname corrisponde all'ambiente jail(8).
Quando si specifica l'hostname e si opta per entrambi i bindings IPv4 ed IPv6, è richiesta una linea di configurazione per ogni protocollo appropriato per ogni servizio in /etc/inetd.conf. Per esempio, un servizio basata sul TCP necessita di due entry, una che usa tcp4 come protocollo e l'altra che usa tcp6.
Specifica un altro file in cui salvare il l'ID di processo.
Queste opzioni possono essere passate ad inetd usando l'opzione inetd_flags nel file /etc/rc.conf. Di default, inetd_flags è impostata a -wW, il che attiva il TCP wrapping per i servizi interni ed esterni di inetd. Per i novizi, questi parametri di solito non necessitano di essere modificati o inseriti in /etc/rc.conf.
Nota: Un servizio esterno è un demone all'esterno di inetd, che viene invocato quando una connessione è ricevuta per lui. D'altro canto, un servizio interno è un servizio che inetd ha l'opzione di offrire lui stesso.
La configurazione di inetd è controllata 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 inviando un segnale HangUP al processo inetd come mostrato di seguito:
Ogni linea del file di configurazione specifica un singolo demone. I commenti nel file sono preceduti da un “#”. Il formato di /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 usando l'IPv4:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
È 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.
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.
Uno dei seguenti:
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.
Oltre all'opzione max-child, un'altra opzione che limita
il massimo numero di connessioni da un singolo ip verso un particolare demone può
essere attivata. max-connections-per-ip-per-minute fa
esattamente questo. Un valore di dieci in questo caso dovrebbe limitare ogni singolo
indirizzo IP che cerca di connettersi ad un particolare servizio dieci volte al minuto.
Questo è utile per prevenire 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 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, come si vede di seguito:
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
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.
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.
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.
A seconda del profilo di sicurezza scelto all'installazione, molti demoni di inetd potrebbero essere attivi di default. Se non c'è necessità apparente per un particolare demone, disabilitalo! Usa un “#” in cima alla riga del demone in questione in /etc/inetd.conf, e invia un segnale hangup ad inetd. Alcuni demoni, come fingerd, potrebbero non essere assolutamente desiderati, poichè forniscono all'attaccante troppe informazioni.
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 su certi demoni.
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.
daytime, time, echo, discard, chargen, e auth sono tutti servizi interni di inetd.
Il servizio auth fornisce servizi di rete di identificazione (ident, identd) , ed è configurabile fino ad un certo punto.
Consulta la paigna di manuale di inetd(8) per dettagli più approfonditi.
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>.