Skip to end of metadata
Go to start of metadata

5.2.2. A börtön filozófiája

A jail akkor hasznos, ha egy gépünk van csak, s ennek ellenére a futó szolgáltatásokat külön szeretnénk választani. Több előnye is van ennek:

  • a szolgáltatások külön-külön frissíthetők, akár több azonos program is futhat más-más IP címen, anélkül, hogy a konfigurációs állományaik összekeverednének.
  • a frissítés során előre elkészíthetjük és tesztelhetjük az újabb jail-t, majd egyszerűen le kell állítani a régit, átmásolni (vagy átcsatolni) az adatokat és elindítani az újabbat; a kiesés így másodpercekben mérhető.
  • a sebezhetőbb szolgáltatásokat külön fájlrendszeren tudjuk futtatni, így a betörés kockázata, illetve a betörés során okozott károk kisebbek lehetnek.

A jail lehetővé teszi, hogy több gépből álló hálózatot készítsünk egy géppel, legyünk hát nagyvonalúak, és tervezzünk egy nagyobb hálózatot, amelyben több jail egyszerű feladatot lát el:

  • logserver, amely önmaga és a többi jail logjait gyűjti össze
  • ldap, amely az LDAP adatbázis helye lesz
  • dns, amely a névfeloldásért felel
  • mail, amelyben a levelek fogadását és küldését végezzük
  • mailscanner, amelyben a levelek vírus és spam szűrése történik
  • mailman, amely a levelezőlistákat kezeli
  • httpd, amely a webszerverünk lesz
  • pgsql, amelyben egy PostgreSQL kezeli az adatbázisokat
  • mysql, amelyben a MySQL adatbáziskezelő fut
  • svn, amely a Subversion repó helye

Mivel a logserver és a mail használata szinte borítékolható, ezért célszerű a template jail-t úgy elkészíteni, hogy a logserver felé naplózzon és a mail felé küldje a leveleket. Be kell állítanunk a munin-node működését, hiszen ezzel fogjuk monitorozni a fenti tíz jail működését.

5.2.2.1. Helyi névszolgáltatás

A szolgáltatások helyes működéséhez fel kell vennünk megfelelő hosztneveket, amelyekre a jail-ben futó szolgáltatások hivatkozni tudnak. Ezt megtehetjük a DNS kiszolgáló adatbázisában is, de ha a DNS szolgáltatás nem érhető el, akkor bajban leszünk, mivel se a logszervert nem éri el a dns jail, és még levelet se tud nekünk írni, hogy nem fut a szolgáltatáshoz tartozó démon. Célszerű lehet a /etc/hosts fájlba írni a létrehozandó jail-ek IP címét és nevét, így a névfeloldás mindig működni fog, bár a nevekhez tartozó IP címek módosításához mind a tíz jail-ben egyszerre kell módosítani az állomány tartalmát, de erre tudunk egy pársoros szkriptet írni. Lássuk a fájl tartalmát (az IP címek kiosztása "történelmi" okokból alakult így):

/etc/hosts

A módosítás után lépjünk ki a jail-ből, majd lépjünk vissza FQDN használatával, ennek a továbbiakban lesz szerepe:

Parancssor

5.2.2.2. Naplózás

Feltelepítettünk egy syslog_ng2 csomagot, amelyet arra fogunk használni, hogy a tucatnyi jail egy helyre naplózzon, így hibakereséskor nem kell egyenként végigjárnunk minden érintett jail-t, csak a logserver fájlrendszerét kell megnéznünk. Ehhez mindössze annyit kell tennünk, hogy a naplók küldésére konfiguráljuk be a template naplózását:

/usr/local/etc/syslog-ng.conf

Mint látjuk, a logszerver elérését a logserver.jails.javaforum.hu névvel adtuk meg, amely a hosts fájl alapján IP címmé oldható fel, s a naplóbejegyzések TCP alapon továbbításra kerülnek a megadott IP cím felé. Ellenőrizzük, hogy a jail /etc/rc.conf állományában letiltottuk-e a syslogd futását, illetve engedélyeztük a syslog-ng futását:

/etc/rc.conf

5.2.2.3. Levelezés

A levelezés helyes beállítása létfontosságú, mivel minden jail naponta, hetente illetve havonta készít egy jelentést, amelyből a jail helyes működésről tudunk tájékozódni. Ehhez szükséges, hogy az alaprendszerben lévő Sendmail a mail jail-felé küldje a leveleket. A Sendmail beállítása egyes pletykák szerint pilótavizsgát igényel, holott fél perc alatt be tudjuk állítani, hogy melyik szerver lesz a helyi Sendmail kiszolgálója, egyszerűen a /etc/mail/freebsd.mc állományban a "SMART_HOST" változóban meg kell adnunk a saját szerverünket :

/etc/mail/freebsd.mc

Az aliases állományban adjuk meg a saját email címünket a root felhasználó alias nevénél, hogy a root felhasználónak címzett leveleket mi kapjuk meg:

/etc/mail/aliases

Természetesen ettől még nem vagyunk kész, az elmentett változást le kell fordítanunk a Sendmail által érthető formátumra:

Parancssor

A make parancs a megadott útmutatás szerint elkészíti a template.jails.javaforum.hu.cf állományt, illetve az aliases alapján az aliases.db fájlt. Mint látjuk, a jail FQDN neve lett a lefordított konfigurációs állomány neve, illetve ez belekerül a generált állományokba is.

Ellenőrizzük, hogy a Sendmail futását helyesen állítottuk be a /etc/rc.conf állományban:

/etc/rc.conf

Zavaró lehet a NO paraméter, hiszen használni szeretnénk a Sendmail-t levelek küldésére... a Sendmail három paramétert fogad el:

  • YES, amikor a levelek küldését és fogadását is végzi
  • NO, amikor a levelek küldésével foglalkozik, de leveleket nem fogad a külvilágból
  • NONE, amikor nem indul el

5.2.2.4. Munin-node

Célszerű beállítani egyet a tucatnyi diagnosztikát segítő adatgyűjtő program közül, én a Munin programot használom, amelynek a kliens csomagját munin-node néven már telepítettük. A Munin egy keretrendszer, amely a 4949-es TCP porton át kérdezgeti a klienseit, amelyek a betöltött pluginek alapján adatot szolgáltatnak. Nézzük a munin-node.conf állományt:

/usr/local/etc/munin/munin-node.conf

Megnézhetjük az alapértelmezett konfigurációs állományt az egyes sorok leírásáról, a lényeg számunkra a log_file, amely a Syslog használatára utasítja a programot, illetve az allow, amely a helyi IP címek felől engedélyezi a lekérdezést. Lépjünk tovább a plugins könyvtárba, ahol egy csomó plugint találunk, töröljük ki ezeket, nem kellenek:

Parancssor

Hozzunk létre egy df és egy processes állományt, majd adjunk nekik futtatási jogot:

Parancssor

Majd írjunk bele egy Perl programot a df állományba:

/usr/local/etc/munin/plugins/df

Illetve a processes fájlba:

/usr/local/etc/munin/plugins/processes

Utolsó lépésként töröljünk ki mindent a plugin-conf.d könyvtárban lévő plugin.conf állományból, felesleges szeméttel terhelni a klienst, hiszen csak kettő plugint tartottunk meg, amelyek viszont magukat konfigurálják. Ellenőrizzük a /etc_rc.conf állományban, hogy elindul-e a munin-node:

/etc/rc.conf

5.2.2.5. SSHD

Luxusnak tűnhet minden jail-be SSH elérést beállítani, de a kényelmi funkciók okán dobjuk el a többlet erőforrások miatti aggodalmainkat. Ha elindítunk egy jail-t (lásd később), akkor az adott processz fa alapján tudjuk csak befolyásolni a jail-ben futó alkalmazásokat. Ez a gyakorlatban azt jelenti, hogy ha később a jail parancs segítségével lépünk be, akkor az már egy új processz fát jelent, tehát nem lesz jogunk leállítani régebben elindított szolgáltatást. Ha a jail indításakor elindítunk egy sshd szolgáltatást is, akkor később ssh-n belépve - mivel a processz fa azonos - képesek leszünk újraíndítani egyes szolgáltatásokat. Kezdjünk hozzá az sshd beállításához, módosítsunk egy sort a /etc/ssh/sshd_config állományban, hogy be tudjunk lépni root felhasználóval:

/etc/ssh/sshd_config

Adjunk jelszót a root felhasználónak:

Parancssor

S engedélyezzük az sshd futását a /etc/rc.conf állományban:

/etc/rc.conf

Kényelmi szempont lehet még, hogy a root felhasználó is bash shell-t kapjon, ehhez a vipw parancs segítségével szerkesztenünk kell a password fájlt. Ha minden szükséges módosítást elvégeztünk, akkor lépjünk ki a jail-ből, és takarítsunk ismét:

Parancssor

5.2.2.6. A konfiguráció véglegesítése

Az elkészült template jail-ről készítsünk egy ZFS snapshot fájlrendszert, s majd ezt fogjuk klónozni a továbbiakban:

Parancssor

Jól gondoljuk meg, hogy kell-e még valami a template jail-be, mivel a snapshot már nem módosítható, ha változtatunk a template fájlrendszeren, az nem fog megjelenni a klónozott fájlrendszerekben!


Előző fejezet Tartalomjegyzék Következő fejezet


Auth Gábor auth.gabor@javaforum.hu


Unknown macro: {rate}
Labels: