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éterei
Az 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>.