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. Zie de handleidingpagina inetd(8) voor een volledige lijst van de opties.
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.
Ook al worden er hieronder rate-limiting opties besproken, beginnende gebruikers kunnen blij zijn met het feit dat deze parameters gewoonlijk niet hoeven te worden aangepast. Deze opties kunnen interessant zijn wanneer er een buitensporige hoeveelheid verbindingen worden opgezet. 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).