Az inetd(8) démont gyakran csak “internet szuperszerverként” nevezik, mivel a helyi szolgáltatások kapcsolatainak kezeléséért felelős. Amikor az inetd fogad egy csatlakozási kérelmet, akkor eldönti róla, hogy ez melyik programhoz tartozik és elindít egy példányt belőle, majd átadja neki a socketet (az így meghívott program a szabvány bemenetéhez, kimenetéhez és hibajelzési csatornájához kapja meg a socket leíróit). Az inetd használatával úgy tudjuk csökkenteni a rendszerünk terhelését, hogy a csak alkalmanként meghívott szolgáltatásokat nem futtatjuk teljesen független önálló módban.
Az inetd démont elsősorban más démonok elindítására használjuk, de néhány triviális protokollt közvetlenül is képes kezelni, mint például a chargen, auth és a daytime.
Ebben a fejezetben az inetd beállításának alapjait foglaljuk össze mind parancssoros módban, mind pedig az /etc/inetd.conf konfigurációs állományon keresztül.
Az inetd működése az rc(8) rendszeren keresztül inicializálható. Az inetd_enable ugyan alapból a NO értéket veszi fel, vagyis tiltott, de a sysinstall használatával már akár a telepítés során bekapcsolható attól függően, hogy a felhasználó milyen konfigurációt választott. Ha tehát a:
inetd_enable="YES"
vagy
inetd_enable="NO"
sort tesszük az /etc/rc.conf állományba, akkor azzal az inetd démont indíthatjuk el vagy tilthatjuk le a rendszer indítása során. Az
# /etc/rc.d/inetd rcvar
paranccsal lekérdezhetjük a pillanatnyilag érvényes beállítást.
Emellett még az inetd démonnak az inetd_flags változón keresztül különböző parancssori paramétereket is át tudunk adni.
Hasonlóan a legtöbb szerverhez, az inetd viselkedését is befolyásolni tudjuk a parancssorban átadható különböző paraméterekkel. Ezek teljes listája a következő:
inetd [-d] [-l] [-w] [-W] [-c
	maximum] [-C arány] [-a cím | név] [-p
	állomány] [-R arány] [-s maximum]
	[konfigurációs
	állomány]
Ezek a paraméterek az /etc/rc.conf állományban az inetd_flags segítségével adhatóak meg az inetd részére. Alapértelmezés szerint az inetd_flags értéke -wW -C 60, ami az inetd által biztosított szolgáltatások TCP protokollon keresztüli wrappelését kapcsolja be, illetve egy IP-címről nem engedi a felkínált szolgáltatások elérését percenként hatvannál többször.
A kezdő felhasználók örömmel nyugtázhatják, hogy ezeket az alapbeállításokat nem szükséges módosítaniuk. A későbbiekben majd fény derül arra, hogy a kiszolgálás gyakoriságának szabályozása remek védekezést nyújthat túlzottan nagy mennyiségű kapcsolódási kérelem ellen. A megadható paraméterek teljes listája az inetd(8) man oldalán olvasható.
Az egyes szolgáltatásokhoz egyszerre
	      felépíthető kapcsolatok
	      alapértelmezett maximális
	      számát adja meg.  Alapból ezt a
	      démont nem korlátozza.  A
	      max-child
	      beállítással ez akár
	      szolgáltatásonként külön is
	      megadható.
Korlátozza, hogy egyetlen IP-címről
	      alapból hányszor hívhatóak meg
	      az egyes szolgáltatások egy percen
	      belül.  Ez az érték alapból
	      korlátlan.  A
	      max-connections-per-ip-per-minute
	      beállítással ez
	      szolgáltatásonként is
	      definiálható.
Megadja, hogy egy szolgáltatást egy perc alatt mennyiszer lehet meghívni. Ez az érték alapértelmezés szerint 256. A 0 megadásával eltöröljük ezt a típusú korlátozást.
Annak maximumát adja meg, hogy egyetlen
	      IP-címről egyszerre az egyes
	      szolgáltatásokat mennyiszer tudjuk
	      elérni.  Alapból ez korlátlan.
	      Szolgáltatásonként ezt a
	      max-child-per-ip paraméterrel
	      tudjuk felülbírálni.
Az inetd beállítását az /etc/inetd.conf konfigurációs állományon keresztül végezhetjük el.
Amikor az /etc/inetd.conf állományban módosítunk valamit, az inetd démont a következő paranccsal meg kell kérnünk, hogy olvassa újra:
A konfigurációs állomány minden egyes sora egy-egy démont ír le. A megjegyzéseket egy “#” jel vezeti be. Az /etc/inetd.conf állomány bejegyzéseinek formátuma az alábbi:
szolgáltatás-neve
socket-típusa
protokoll
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
felhasználó[:csoport][/bejelentkezési-osztály]
szerver-program
szerver-program-paramétereiAz IPv4 protokollt használó ftpd(8) démon bejegyzése például így néz ki:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Ez az adott démon által képviselt szolgáltatást nevezi meg, amelynek szerepelnie kell az /etc/services állományban. Ez határozza meg, hogy az inetd milyen porton figyelje a beérkező kapcsolatokat. Ha egy új szolgáltatást hozunk létre, akkor azt először az /etc/services állományba kell felvennünk.
Ennek az értéke stream, dgram, raw, vagy seqpacket lehet. A stream típust használja a legtöbb kapcsolat-orientált TCP démon, miközben a dgram típus az UDP szállítási protokollt alkalmazó démonok esetében használatos.
Valamelyik a következők közül:
A wait|nowait
	      beállítás mondja meg, hogy az
	      inetd démonból
	      meghívott démon saját maga
	      képes-e kezelni kapcsolatokat.  A
	      dgram típusú kapcsolatok
	      esetében egyértelműen a
	      wait beállítást kell
	      használni, miközben a stream
	      esetén, ahol általában több
	      szálon dolgozunk, a nowait
	      megadása javasolt.  A wait
	      hatására általában egyetlen
	      démonnak adunk át több socketet,
	      míg a nowait minden sockethez egy
	      újabb példányt indít
	      el.
Az inetd által
	      indítható példányokat a
	      max-child megadásával
	      korlátozhatjuk.  Ha tehát
	      például az adott démon
	      számára legfeljebb példány
	      létrehozását
	      engedélyezzük, akkor a nowait
	      után /10
	      beállítást kell megadnunk.  A
	      /0 használatával
	      korlátlan mennyiségű
	      példányt
	      engedélyezhetünk.
A max-child mellett még
	      további két másik
	      beállítás jöhet
	      számításba az egyes démonok
	      által kezelhető kapcsolatok maximális
	      számának
	      korlátozásában.  A
	      max-connections-per-ip-per-minute az
	      egyes IP-címekről befutó
	      lekezelhető kapcsolatok percenkénti
	      számát szabályozza, így
	      például ha itt a tizes értéket
	      adjuk meg, akkor az adott szolgáltatáshoz
	      egy IP-címről percenként csak
	      tízszer férhetünk hozzá.  A
	      max-child-per-ip az egyes
	      IP-címekhez egyszerre elindítható
	      példányok számára ír
	      elő egy korlátot.  Ezek a paraméterek
	      segítenek megóvni rendszerünket az
	      erőforrások akaratos vagy akaratlan
	      kimerítésétől és a DoS
	      (Denial of Service) típusú
	      támadásoktól.
Ebben a mezőben a wait vagy
	      nowait valamelyikét
	      kötelező megadni.  A max-child,
	      max-connections-per-ip-per-minute
	      és max-child-per-ip
	      paraméterek ellenben elhagyhatóak.
A stream típusú
	      több szálon futó démonok a
	      max-child,
	      max-connections-per-ip-per-minute vagy
	      max-child-per-ip
	      korlátozása nélkül
	      egyszerűen csak így adhatóak meg:
	      nowait.
Ha ugyanezt a démont tíz kapcsolatra lekorlátozzuk, akkor a következőt kell megadnunk: nowait/10.
Amikor pedig IP-címenként 20 kapcsolatot engedélyezünk percenként és mindössze 10 példányt, akkor: nowait/10/20.
Az iménti beállítások a fingerd(8) démon alapértelmezett paramétereinél is megtalálhatóak:
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
Végezetül engedélyezzük 100 példányt, melyek közül IP-címenként 5 használható: nowait/100/0/5.
Ezzel azt a felhasználót adjuk meg, akinek a nevében az adott démon futni fog. Az esetek túlnyomó részében a démonokat a root felhasználó futtatja. Láthatjuk azonban, hogy biztonsági okokból bizonyos démonok a daemon vagy a legkevesebb joggal rendelkező nobody felhasználóval futnak.
A kapcsolat felépülésekor az itt
	      teljes elérési úttal megadott
	      démon indul el.  Ha ezt a
	      szolgáltatást maga az
	      inetd belsőleg
	      valósítja meg, akkor ebben a mezőben az
	      internal értéket adjuk
	      meg.
Ez a szerver-program
	      beállítással együtt
	      működik, és ebben a mezőben a
	      démon meghívásakor
	      alkalmazandó paramétereket tudjuk
	      rögzíteni, amelyet a démon
	      nevével kezdünk.  Ha a démont a
	      parancssorból a
	      sajátdémon
	      -d paranccsal hívnánk meg, akkor a
	      sajátdémon
	      -d lesz
	      szerver-program-paraméterei
	      beállítás helyes értéke
	      is.  Természetesen, ha a démon egy
	      belsőleg megvalósított
	      szolgáltatás, akkor ebben a mezőben is
	      az internal fog megjelenni.
Attól függően, hogy a telepítés során mit választottunk, az inetd által támogatott szolgáltatások egyes része talán alapból engedélyezett is. Amennyiben egy adott démont konkrétan nem használunk, akkor érdemes megfontolni a letiltását. A kérdéses démon sorába tegyünk egy “#” jelet az /etc/inetd.conf állományba, majd olvastassuk újra az inetd beállításait. Egyes démonok, mint például az fingerd használata egyáltalán nem ajánlott, mivel a támadók számára hasznos információkat tudnak kiszivárogtatni.
Más démonok nem ügyelnek a
	védelemre, és a kapcsolatokhoz rendelt
	lejárati idejük túlságosan
	hosszú vagy éppen nincs is.  Ezzel a
	támadónak lehetősége van lassú
	kapcsolatokkal leterhelni az adott démont, ezáltal
	kimeríteni a rendszer erőforrásait.  Ha
	úgy találjuk, hogy túlságosan sok az
	ilyen kapcsolat, akkor jó ötletnek bizonyulhat a
	démonok számára a
	max-connections-per-ip-per-minute,
	max-child vagy
	max-child-per-ip korlátozások
	elrendelése.
Alapértelmezés szerint a TCP kapcsolatok wrappelése engedélyezett. A hosts_access(5) man oldalon találhatjuk meg az inetd által meghívható különféle démonok TCP-alapú korlátozásainak lehetőségeit.
A daytime, time, echo, discard, chargen és auth szolgáltatások feladatainak mindegyikét maga az inetd is képes ellátni.
Az auth szolgáltatás a hálózati keresztül azonosítást teszi lehetővé és bizonyos mértékig beállítható. A többit egyszerűen csak kapcsoljuk ki vagy be.
A témában az inetd(8) man oldalán tudunk még jobban elmerülni.
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
		  címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
		  kérjük erre a címre írjon: <gabor@FreeBSD.org>.