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
.
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
.
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).
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 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
.
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:
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
È 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:
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
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
.
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 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.
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.
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>.