inetd(8) wordt soms de “Internet Super-Server” genoemd, omdat het verbindingen voor meerdere diensten beheert. Als door inetd een verbinding wordt ontvangen, bepaalt die voor welk programma de verbinding bedoeld is, splitst het dat proces af en delegeert de socket (het programma wordt gestart met de socket van de dienst als zijn standaardinvoer, -uitvoer en -foutbeschrijvingen). Het draaien van inetd voor servers die niet veel gebruikt worden kan de algehele werklast verminderen in vergelijking met het draaien van elke daemon individueel in stand-alone modus.
inetd wordt primair gebruikt om andere daemons aan te roepen, maar het handelt een aantal triviale protocollen direct af, zoals chargen, auth en daytime.
In deze paragraaf worden de basisinstellingen van inetd behandeld met de opties vanaf de commandoregel en met het instellingenbestand /etc/inetd.conf.
inetd wordt gestart door het rc(8)-systeem. De optie inetd_enable staat standaard op NO, maar kan tijdens de installatie door sysinstall worden aangezet. Door het plaatsen van
inetd_enable="YES"
of
inetd_enable="NO"
in /etc/rc.conf wordt inetd bij het opstarten van een systeem wel of niet ingeschakeld. Het commando:
# /etc/rc.d/inetd rcvar
kan gedraaid worden om de huidige effectieve instellingen weer te geven.
Dan kunnen er ook nog een aantal commandoregelopties aan inetd meegegeven worden met de optie inetd_flags.
Zoals de meeste serverdaemons heeft inetd een aantal opties die doorgegeven kunnen worden om het gedrag aan te passen. De volledige lijst van opties is:
inetd [-d] [-l] [-w] [-W] [-c maximum]
[-C rate] [-a adres | hostnaam] [-p bestandsnaam] [-R rate]
[instellingenbestand]
Opties kunnen door middel van de optie inetd_flags in /etc/rc.conf aan inetd worden doorgegeven. Standaard staat inetd_flags ingesteld op -wW -C 60, dat TCP-wrapping aanzet voor de diensten van inetd, en voorkomt dat elk enkelvoudig IP-adres enige dienst meer dan 60 keer per minuut opvraagt.
Beginnende gebruikers zullen blij zijn om te weten dat deze parameters gewoonlijk niet hoeven te worden aangepast, alhoewel we de ratebeperkende opties hieronder noemen aangezien ze nuttig kunnen zijn in het geval u een buitensporig aantal verbindingen ontvangt. Een volledige lijst van opties staat in de hulppagina inetd(8).
Geeft het maximale aantal gelijktijdige verzoeken voor iedere dienst aan. De standaard
is ongelimiteerd. Kan per dienst ter zijde geschoven worden met de parameter max-child
.
Geeft het maximale aantal keren aan dat een dienst vanaf een bepaald IP-adres per
minuut aangeroepen kan worden. Kan per dienst ter zijde geschoven worden met de parameter
max-connections-per-ip-per-minute
.
Geeft het maximale aantal keren aan dat een dienst per minuut aangeroepen kan worden. De standaard is 256. De instelling 0 geeft aan dat er geen limiet is.
Specificeert het maximaal aantal keer per minuut dat een dienst aangeroepen kan worden
vanuit een enkelvoudig IP-adres; de standaard is onbeperkt. Kan worden overstemd op een
per-dienst-basis met de parameter max-child-per-ip
.
De instellingen van inetd worden beheerd in /etc/inetd.conf.
Als er een wijziging wordt aangebracht in /etc/inetd.conf, dan kan inetd gedwongen worden om de instellingen opnieuw in te lezen door dit commando te draaien:
Iedere regel in het bestand met instellingen heeft betrekking op een individuele daemon. Commentaar wordt vooraf gegaan door een #. De opmaak van elke regel van /etc/inetd.conf is als volgt:
service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] user[:group][/login-class] server-program server-program-arguments
Een voorbeeldregel voor de daemon ftpd(8) met IPv4 kan eruit zien als:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Dit is de dienstnaam van een daemon. Die moet overeenkomen met een dienst uit /etc/services. Hiermee kan de poort waarop inetd moet luisteren aangegeven worden. Als er een nieuwe dienst wordt gemaakt, moet die eerst in /etc/services gezet worden.
Dit is stream, dgram, raw of seqpacket. stream moet gebruikt worden voor verbindingsgebaseerde TCP-daemons, terwijl dgram wordt gebruikt voor daemons die gebruik maken van het transportprotocol UDP.
Een van de volgende:
wait|nowait
geeft aan of de daemon die door inetd wordt aangesproken zijn eigen sockets kan afhandelen of
niet. dgram
sockettypen moeten de optie wait
gebruiken, terwijl streamsocket daemons, die meestal
multi-threaded zijn, de optie nowait
horen te gebruiken.
wait
geeft meestal meerdere sockets aan een daemon, terwijl
nowait
een kinddaemon draait voor iedere nieuwe socket.
Het maximum aantal kinddaemons dat inetd mag voortbrengen
kan ingesteld worden met de optie max-child
. Als een limiet
van tien instanties van een bepaalde daemon gewenst is, dan zou er /10 achter nowait
gezet worden. Door /0 wordt een onbeperkt aantal kinderen toegestaan.
Naast max-child
zijn er nog twee andere opties waarmee het
maximale aantal verbindingen van een bepaalde plaats naar een daemon ingesteld kan
worden. max-connections-per-ip-per-minute
beperkt het aantal
verbindingen per minuut voor enig IP-adres, een waarde van tien betekent hier dat er van
ieder IP-adres maximaal tien verbindingen naar een bepaalde dienst tot stand gebracht
kunnen worden. max-child-per-ip
beperkt het aantal
kindprocessen dat namens enig IP-adres op enig moment gestart kan worden. Deze opties
kunnen zijn nuttig om bedoeld en onbedoeld buitensporig bronnengebruik van en Denial of
Service (DoS) aanvallen op een machine te voorkomen.
In dit veld is één van wait
of nowait
verplicht. max-child
, max-connections-per-ip-per-minute
en max-child-per-ip
zijn optioneel.
Een stream-type multi-threaded daemon zonder één van de limieten max-child
, max-connections-per-ip-per-minute
of max-child-per-ip
is eenvoudigweg: nowait.
Dezelfde daemon met een maximale limiet van tien daemons zou zijn: nowait/10.
Dezelfde instellingen met een limiet van twintig verbindingen per IP-adres per minuut en een totaal maximum van tien kinddaemons zou zijn: nowait/10/20.
Deze opties worden allemaal gebruikt door de standaardinstellingen van de daemon fingerd(8):
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
Als afsluiting, een voorbeeld in dit veld met een maximum van 100 kinderen in totaal, met een maximum van 5 voor enig IP-adres zou zijn: nowait/100/0/5.
Dit is de gebruikersnaam waar een daemon onder draait. Daemons draaien meestal als de gebruiker root. Om veiligheidsredenen draaien sommige daemons onder de gebruiker daemon of de gebruiker met de minste rechten: nobody.
Het volledige pad van de daemon die uitgevoerd moet worden als er een verbinding wordt
ontvangen. Als de daemon een dienst is die door inetd intern
wordt geleverd, dan moet de optie internal
gebruikt
worden.
Deze optie werkt samen met de optie server-program
en
hierin worden de argumenten ingesteld, beginnend met argv[0],
die bij het starten aan de daemon worden meegegeven. Als mijndaemon
-d de commandoregel is, dan zou mijndaemon -d de waarde van
server-program-arguments
zijn. Hier geldt ook dat als de
daemon een interne dienst is, hier de optie internal
moet
worden.
Afhankelijk van keuzes gemaakt tijdens de installatie, kunnen veel van de diensten van inetd standaard ingeschakeld zijn. Het is verstandig te overwegen om een daemon dat niet noodzakelijk is uit te schakelen. Plaats een # voor de daemon in /etc/inetd.conf en herlaad vervolgens de instellingen van inetd. Sommige daemons, zoals fingerd, zijn wellicht helemaal niet gewenst omdat ze informatie geven die nuttig kan zijn voor een aanvaller.
Sommige daemons zijn zich niet echt bewust van beveiliging en hebben lange of niet
bestaande timeouts voor verbindingspogingen. Hierdoor kan een aanvaller langzaam veel
verbindingen maken met een daemon en zo beschikbare bronnen verzadigen. Het is verstandig
voor die daemons de limietopties max-connections-per-ip-per-minute
, max-child
of max-child-per-ip
te
gebruiken als ze naar uw smaak teveel verbindingen hebben.
TCP-wrapping staat standaard aan. Er staat meer informatie over het zetten van TCP-restricties op de verschillende daemons die door inetd worden aangesproken in hosts_access(5).
daytime, time, echo, discard, chargen en auth zijn allemaal interne diensten van inetd.
De dienst auth biedt identiteitsnetwerkdiensten en is tot op een bepaald niveau instelbaar, terwijl de anderen eenvoudigweg aan of uit staan.
Meer diepgaande informatie staat in inetd(8).
Deze en andere documenten kunnen worden gedownload van ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Lees voor vragen over FreeBSD de documentatie alvorens contact te zoeken
<questions@FreeBSD.org>.
Vragen over deze documentatie kunnen per e-mail naar <doc@FreeBSD.org>.