Hálózati Operációs rendszerek I. (NGB_TA047_1) Mérési feladat megoldások 2010/11 őszi félév Utolsó módosítás: 2010.12.05 (v489)
Tartalomjegyzék Előszó...3 I. Mérés: Debian GNU Linux telepítése...4 II. Mérés: BASH/SHELL szkriptek...7 III. Mérés: Reguláris kifejezések...9 IV. Mérés: Optimalizált kernel fordítása...10 V. Mérés: Linux fájlrendszerek...12 VI. Mérés: IPTABLES...15 VII. Mérés: DHCP, DNS szolgáltatás...18 VIII. Mérés: Naplózás...24 IX. Mérés: SSH, ProFTPd, Samba...26 X. Mérés: Webszerver konfiguráció...30 XI. Mérés: Squid, Dansguardian, Postfix...34 Ábrajegyzék...36
Előszó Mi ez? Ennek a jegyzetnek a célja, hogy egyértelmű, egyszerű és működő megoldásokat mutasson be a Hálózati Operációs Rendszerek I. tárgy méréseihez. Az egyszerűség (és főleg a rövid határidő) miatt néhány dolog nem lehet egyértelmű, ezért kérlek benneteket, hogy ha valahol valami nem világos, szóljatok és igyekszem kibővíteni. Honnan tudhatom, hogy ez tényleg használható anyag-e? Minden itt ismertetett konfigurációt leteszteltem működő "éles" rendszeren is, így teljesen biztos, hogy az itt bemutatott megoldások működőképesek. Hogyan használjam az egyes megoldásokat? Minden feladatmegoldáshoz rövid szöveges magyarázat és konkrét konfigurációs beállítások/utasítások tartoznak. Amennyiben nem vagy biztos a dolgodban célszerű a lépéseket az itt ismertetett módon és sorrendben végrehajtani, mert így biztosan működni fog a megoldás. Hogyan értelmezzem az egyes részeket? A feladat a tárgy holnapjáról letölthető Mérési Feladatból van bemásolva. A feladat után a Megoldás rész alatt van az adott feladat kidolgozása. A terminálon kiadott parancsoknál a gép neve (fekete1:~#) és a kiadott parancs látható fix szélességű betűtípussal szedve és minden felesleges plusz írásjeltől megszabadítva. Ezeket tehát jelen formájukban (idézőjelek, vesszők fontosak!) kell kiadni a terminál előtt ülve is. A rendszerben található fájlok nevei, illetve azok tartalmi részletei szintén fix szélességű betűtípussal láthatóak. A feladatok megoldásaiban én a fekete1 nevű gép előtt ültem, így minden géphez kötött beállítást ennek megfelelően mutatok be. Értelemszerűen ahol nálam a gépnév szerepel oda neked kell a saját géped nevét behelyettesíteni. Ha hibát találtam/észrevételem van mi a teendő? Kérlek ebben az esetben keress meg előadáson, vagy dobj egy levelet: crayon@reddawn.hu Felhasznált irodalom: Hálózati Operációs rendszerek jegyzet (http://www.tilb.sze.hu/tilb/targyak/ngb_ta047_1/unix-2010-11-21.pdf ) A gyakorlatokon elhangzott megoldások jegyzetei. A jegyzet legfrissebb kiadása mindig elérhető a http://tilb.reddawn.hu/halopre1_mfm.pdf címen! A feladatokat kidolgozta: Budai Tamás Villamosmérnök hallgató Lektorálta: Sájer Attila Villamosmérnök Hallgató Sikeres Vizsgát kívánunk mindenkinek! 3
I. Mérés: Debian GNU Linux telepítése Feladat Telepítse fel a Debian Etch linuxot a gyakorlatvezető által bemutatott módon, valamint telepítse a grafikus felületet magyar nyelvvel majd rakja fel az Iceweasel böngészőt. Megoldás A laborban könnyű dolgunk van, mivel a hálózaton már konfigurálva van a hálózati telepítés lehetőség. Először győződjünk meg róla, hogy a gép amin a telepítést végezzük csatlakozik a labor hálózatához! A gép újraindítása/bekapcsolása után a hálózatról bootolva kiválaszthatjuk a telepíteni kívánt rendszert. A jegyzet írásakor ez a debian 5 (lenny). Válasszuk ki a boot alatt a telepítőt, majd nyomjunk Entert az Install-ra. A karakteres telepítőben először nyelvet kell választanunk. Válasszuk a Hungarian lehetőséget, majd a következő lépésben a magyar billentyűzetkiosztást. A következő lépésben meg kell adnunk a gépnevet: fekete1 Most meg kell adnunk a tartomány nevet: tilb.sze.hu Feladat Főbb paraméterek: A Debian a 80GB-os HDD első 20 GB-jára kerüljön A rendszer 2 felhasználója : root:labor, és diak:diak A telepítésnél ne használjon semmilyen előre elkészített csomagkészletet A mérés folyamán a következő csomagokat kell feltelepíteni: ssh, mc, gpm, x-window-system-core, kde, kdm, kde-i18n-hu Állítsa be, a /etc/kde3 könyvtárban, hogy root felhasználóként be lehessen lépni a grafikus felületre. Megoldás A következő lépésben válasszuk a Kézi lehetőséget. Most láthatjuk a gépben lévő merevlemezeket. A feladatnak megfelelően válasszuk a 80GB-os lemezt. A lemezen nagy valószínűséggel már vannak létrehozott partíciók, ezek azonban nekünk nem kellenek, így válasszuk ki az első sort amelyben a lemez adatai szerepelnek. A kérdésre válaszoljunk Igennel, így létrehozunk egy új, üres partíciós táblát. Válasszuk ki a SZABAD HELY -et, majd Új partíció létrehozása. Méretnek adjuk meg a kívánt 20 GB -ot. A típus Elsődleges a pozíció pedig kezdet legyen. A telepítő most létrehozza a partíciót. Most láthatjuk a partíció tulajdonságait: Az alapértelmezett beállítások most megfelelnek nekünk, de azért nézzük meg hogyan kell kinéznie a táblázatnak: Használat: Ext3 naplózó fájlrendszer Csatolási pont: / Csatolási opciók: defaults Címke: semmi Fenntartott blokkok: 5% Jellemző használat: szokásos "Boot" zászló be Válasszuk a <Partíció beállítása kész> lehetőséget. Most láthatjuk mit csináltunk az előző lépésekben: 1. elsődleges 20.0 GB B f ext3 / 4
A maradék szabad helyen hozzunk még létre egy cserehelyet azaz swap partíciót is. Ez akkor jön jól ha fogyóban van a fizikai memória. (Lapozófájl). Válasszuk megint a SZABAD HELY-et és járjunk el úgy, mint az előbb csak most a partíció mérete 512 MB legyen, a típusa logikai, (a helye kezdet) a beállításai pedig így nézzenek ki: Használat: cserehely "Boot" zászló ki Most a partíciós táblánk így fest: 1. elsődleges 20.0 GB B f ext3 / 5. logikai 510 MB f swap swap A maradék szabad hely nem érdekel minket, így válasszuk a <Partíciók lezárása és változások mentése> lehetőséget. A következő lépésben még egyszer leellenőrizhetjük a beállításainkat. Ha minden jónak néz ki válasszuk az <Igen> lehetőséget. Most hátradőlhetünk kicsit, a telepítő leformázza a lemezt és megkezdődik az alapvető rendszerfájlok telepítése. A következő lépésben meg kell adnunk a root jelszavát. Ez a feladat szerint legyen labor. Adjuk meg a jelszót ellenőrzésképp ismét. Most létre kell hoznunk az első felhasználót: A teljes neve Diak a felhasználóneve diak a jelszava diak (és még egyszer diak) legyen. A frissítésekhez használjuk a Magyarország alatt található debian.sth.sze.hu -t ( a Proxy-t hagyjuk üresen). A csomaghasználat felmérése kérdésre válaszoljunk <Igen> -el. A szoftverválasztó képernyőn csak a Szabvány rendszer legyen kijelölve (mivel a többi csomagot kézzel fogjuk telepíteni). Szeretnénk ha a rendszerünk bootolna is, így a GRUB-ot telepítsük az MBR-be: <Igen> A telepítés véget ért, a <Tovább> kiválasztása után a rendszer újraindul és az újonnan telepített rendszerünk bootol be karakteres üzemmódban: Debian GNU/Linux 5.0 fekete1 tty1 fekete1 login: _ jelentkezzünk be root-ként, (a jelszó gépelés közben nem látszik, ez normális), majd telepítsük fel a feladatban megadott csomagokat az aptitude segítségével ( a csomagokat egyszerűen felsoroljuk): fekete1:~# apt-get install ssh mc gpm x-window-system-core kde kdm kde-i18n-hu A kérdésre válaszoljunk igennel ( Enter). A szükséges csomagok letöltődnek és települnek. Ha minden csomag felkerült oldjuk meg az utolsó feladatot is: a /etc/kde3/kdm/kdmrc fájl 252. sorában az AllowRootLogin opciót állítsuk true-ra: fekete1:~# mcedit /etc/kde3/kdm/kdmrc Alt+L -el odaugrunk a 252 sorra. AllowRootLogin=true F2-vel elmentjük a változtatást, és F10-el kiléphetünk. 5
(A későbbiekben ezt a módszert alkalmazhatjuk az összes konfigurációs állományra. Természetesen más szövegszerkesztő alkalmazást is használhatsz. Mostantól csak a módosítandó sorokat tüntetem fel.) Indítsuk újra rendszert a beállítások véglegesítéséhez: fekete1:~# shutdown -r now A rendszer újraindítása után már a kde3 grafikus felületét láthatjuk és be is jelentkezhetünk root-ként. 1. ábra. A kde3 bejelentkező képernyője A bejelentkezés után hátravan még az Iceweasel böngésző telepítése: fekete1:~# apt-get install iceweasel 6
II. Mérés: BASH/SHELL szkriptek 1. Írjon egy programot mely az adott könyvtárban lévő összes fájlban található (space) aláhúzásra _ cseréli. Az 1.sh fájl tartalma: #!/bin/bash for i in * do if [ -f "$i" -a `echo "$i" egrep -c " "`!= 0 ] then mv "$i" `echo $i tr ' ' '_'`; fi done Az első sor minden bash scriptnél azonos. Ezzel mondjuk meg a rendszernek, hogy milyen fájlról van szó és, hogy milyen programmal kell végrehajtani. A for ciklussal végigmegyünk az összes fájlon az adott mappában; a do és done közötti rész annyiszor fut le ahány fájl van a mappában és a $i értéke mindig az aktuális fájl neve lesz. Az if [ -f "$i" segítségével ellenőrizzük, hogy a $i közönséges fájl-e, valamint a -a `echo "$i" egrep -c " "`!= 0 ] résszel, hogy szerepel-e a névben szóköz. Hogyha igen akkor végrehajtjuk a következő műveleteket a fi -ig. A végrehajtandó művelet az átnevezés (mv). Ebben a példában a $i fájlt nevezzük át úgy, hogy a saját nevében tr segítségével kicseréljük a szóközöket _ jelekre, majd ezt a kicserélt nevet a ` ` segítségével visszahelyettesítjük az mv parancs második argumentumának. A legtöbb ilyen típusú feladat tehát 3 részből áll: 1. a kívánt bemeneti lista létrehozása és végiglépkedés az elemeken 2. a kívánt feltételek vizsgálata az elemen 3. ha szükséges módosítás végrehajtása az adott elemen. A kész scriptre adjunk futtatási jogot chmod segítésével: fekete1:~# chmod u+x 1.sh Majd futtassuk a scriptet: fekete1:~#./1.sh 2. Írjon egy programot mely a rendszerben található összes.jpg fájlról egy abc szerinti listát készít, minden fájl mellé zárójelben megadja a fájl helyét. #!/bin/bash FL=`find / -name *.jpg` for i in `echo "$FL"` do L=`echo "$i" egrep -o "([^/]*).jpg"` S+=`echo -n "\n$l"; echo -e " ($i)"` done echo -e "$S" sort Mivel ennél a feladatnál a kimenetet formáznunk és rendeznünk is kell ezért egy változóban eltároljuk a fájlok listáját, majd azon végezzük el a műveleteket. 7
3. Írjon egy programot mely az adott könyvtárban az összes fájl első betűjét kicsiről nagyra cseréli. #!/bin/bash for i in * do e=`echo $i awk '{print substr($1,1,1)}' tr "[a-z]" "[A-Z]"` m=`echo $i awk '{print substr($1,2)}'` sz=$e$m mv $i $sz done A fájlnév első karakterét awk segítségével választjuk szét a maradéktól, nagybetűsre alakítjuk, majd a két részt újra összefűzzük. 4. Írjon bash shell scriptet, amely megszámolja, hogy a /dev könyvtárban hány blokkeszköz-meghajtó (block special device) van! A "kincstári" megoldás a jegyzetből: #!/bin/bash BDC=0; # BlockDeviceCount for i in /dev/*; do if [ -b $i ]; then BDC=$((BDC+1)); fi done echo $BDC Az eljárás itt is hasonló, mint az előzőekben. Inicializálunk egy változót ($BDC), majd egy for ciklussal végigjárjuk a /dev/ alatt található összes elemet. Ezek közül azoknál amelyek block-device típusúak megnöveljük a BDC értékét egyel. A script végén kiíratjuk a BDC értékét (a block-device-ok számát). 5. Írjon bash shell scriptet, amely megszámolja, hogy a scriptnek argumentumként megadott könyvtárban ÉS ALKÖNYVTÁRAIBAN összesen hány *.jpg" fájl van! (Segítség: használjon find-ot!) #!/bin/bash if [! $1 ] then echo "Hasznalat: 5.sh <konyvtar>"; exit; fi find "$1" -name *.jpg wc -l Itt annyi az újdonság a fentiekhez képest, hogy a scriptüknek meg kell birkóznia egy argumentummal is. bash alatt a scripteknek átadott argumentumok a $1 $2 $3 stb. változókba kerülnek. Először megvizsgáljuk, hogy van-e első argumentumunk, ha pedig van akkor felhasználjuk a find paraméterezéséhez. A find a megtalált jpg fájlok neveit sorokban adja vissza, így elég egy wc -l paranccsal megszámlálni a sorokat. 8
III. Mérés: Reguláris kifejezések 1. feladat Írjon reguláris kifejezést, mely a személy számokra illeszkedik. pl:(1-670423-3456) "^[12]-[0-9]{6}-[0-9]{4}$" 2. feladat Írjon reguláris kifejezést, mely illeszkedik a bankszámlaszámokra, (2-szer vagy 3-szor 8 számjegyből álló sor, - elválasztva) "^[0-9]{8}-[0-9]{8}(-[0-9]{8})?$" 3. feladat Írjon reguláris kifejezést mely IP címre illeszkedik (IPv4) a, Ne vizsgálja a 255-ös max értéket b, vizsgálja a 255-ös max értéket a, "^([0-9]{1,3}\.){3}[0-9]{1,3}$" b, "^(([0-9]{1,2} 1[0-9]{2} 2[0-4][0-9] 25[0-5])\.){3}([0-9]{1,2} 1[0-9]{2} 2[0-4][0-9] 25[0-5])$" 4. feladat Írjon olyan Bash shell szkriptet mely a könyvtárban található összes fájl nevében a kisbetűt nagybetűre cseréli. #!/bin/bash for i in * do if [ -f "$i" ] then mv "$i" `echo $i tr '[a-z]' '[A-Z]'`; fi done 5. feladat Írjon olyan Bash shell szkriptet mely kilistázza azon felhasználók neveit, melyeknek alapértelmezett shellje a /bin/bash és 1000 fölötti a UserID-juk. fekete1:~# cat /etc/passwd awk -F ":" '/:\/bin\/bash$/ {if($3 > 1000){print $1;}}' 9
IV. Mérés: Optimalizált kernel fordítása Ebben a mérésben az adott gépre optimalizált kernelt fordítunk a mérésvezető utasításai alapján. Első lépésben fel kell készítenünk a rendszerünket a műveletre: A fordításhoz szükségünk lesz a fordítandó kernel forrására valamint konfigurációjára, egy fordítóra és néhány eszközre amelyekkel a lefordult kernelből debian csomagot tudunk készíteni. Tegyük tehát fel a szükséges csomagokat (természetesen root-ként): fekete1:~# apt-get install build-essential kernel-package libncurses5-dev Töltsük le a kernel forrását (www.kernel.org vagy a mérésvezető által megadott helyről) a /usr/src mappába: fekete1:~# cd /usr/src fekete1:~# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2 Csomagoljuk ki (tar.gz esetén a tar kapcsolói: tar -xvzf, bz2 esetén: tar -xvjf) fekete1:~# tar -xvjf linux-2.6.36.1.tar.bz2 Készítsünk egy szimbolikus linket a könyvtárra "linux"névvel: fekete1:~# ln -s linux-2.6.36.1 linux Lépjünk be a linux könyvtárba, majd másoljuk be a jelenlegi működő kernelünk konfigurációját: fekete1:~# cd linux fekete1:~# cp /boot/config-2.6.26-2-amd64 /usr/src/linux Most használjuk a make programot amellyel előbb feltakarítjuk az esetleges korábban félbemaradt fordítás maradványait, majd a menuconfig segítségével elvégezzük a konfigurációt: fekete1:~# make clean fekete1:~# make menuconfig 2. ábra. A menuconfig ncurses felülete. 10
A konfigurációt a mérésvezető utasításai alapján végezzük, majd ha végeztünk figyeljünk oda, hogy mentsük el a konfigurációt a menuconfigból való kilépéskor! Ha minden készen áll, lefordíthatjuk a kernelünket: fekete1:~# make-kpkg --initrd --revision=labor.1.0 kernel_image A fordítás kb. 30-40 percet vesz igénybe. Az elkészült.deb csomagunk a /usr/src könyvtárba fog kerülni. 11
V. Mérés: Linux fájlrendszerek Fontos: Minden feladat után az aktuális felhasználói korlátozásokat törölje a következő feladat sikeressége érdekében. Quota Telepítse fel a Quota csomagot majd állítson be a diak felhasználónak 100MB soft és 200MB hard limitet. Ellenőrizze a működését. Például dd segítségével, majd szüntesse meg azt. fekete1:~# apt-get install quota A quota működéséhez elengedhetetlen, hogy megmondjuk melyik partíciókat szeretnénk kvótázni. Ezt a következőképpen tehetjük meg: a /etc/fstab fájl megfelelő sorában a jelenlegi gyökér partíciónkat (/) kvótakezelés alá vonjuk: /dev/sda1 / ext3 errors=remount-ro,usrquota,grpquota 0 1 Most létre kell hoznunk a kvótakezeléshez szükséges fájlokat. Ezt a qoutacheck az első futtatáskor megteszi helyettünk: fekete1:~# quotacheck -avugm Ez a parancs végigellenőrzi a kvótakezelésbe bevont partíciókat, majd létrehozza az aquota.user és az aquota.group fájlokat a partíciók gyökerében. Esetünkben tehát a /aquota.user és /aquota.group fájlok jönnek létre. A feladatban a diak felhasználónak kell korlátozást megadnunk. Ezt az edquota segítségével tehetjük meg (természetesen rootként): fekete1:~# edquota -u diak Az edquota egy nano szövegszerkesztőbe betölti nekünk a szerkesztendő quota-táblát: Disk quotas for user diak (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sda1 16 0 0 4 0 0 Ezt a táblázatot a következőképpen kell értelmeznünk: Filesystem: a fájlrendszer amire a kvóta érvényes block: a felhasználó által jelenleg felhasznált blokkok száma (1KB-os egységekben) soft: a jelenlegi blokk soft limit (1KB-os egységekben) hard: a jelenlegi blokk hard limit (1KB-os egységekben) inodes: a felhasználó által jelenleg felhasznált inode-ok száma soft: a jelenlegi inode soft limit (inode-ok számában) hard: a jelenlegi inode hard limit (inode-ok számában) A feladat, hogy 100MB soft és 200MB hard limitet állítsunk be. Ehhez a következőképpen módosítjuk a quota-táblát: Disk quotas for user diak (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sda1 16 102400 204800 4 0 0 Itt a soft limit 102400 (100MB = 102400* 1KB) a hard pedig 204800 (200MB = 204800*1KB). Ha elmentettük a qouta-táblánkat (Ctrl+O, majd Ctrl+X a kilépés a nanoból) már csak le kell tesztelnünk a beállítást. Ehhez diak-ként adjuk ki a qouta parancsot: 12
diak@fekete1:~$ quota Disk quotas for user diak (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/sda1 16 102400 204800 4 0 0 diak@fekete1:~$ Láthatjuk, hogy a beálításaink valóban élnek. Teszteljük is le a limitet dd segítségével: diak@fekete1:~$ dd if=/dev/zero of=asd sda1: warning, user block quota exceeded. sda1: write failed, user block limit reached. dd: írás a következőbe: "asd": A lemezfeladag túllépése 399569+0 beolvasott rekord 399568+0 kiírt rekord 204578816 bájt (205 MB) másolva, 1,60558 mp, 127 MB/mp diak@fekete1:~$ A dd-nek megadtuk, hogy a bemeneti fájl a /dev/zero (végtelen darab 0), a kimenet pedig az asd nevű fájl. Mivel blokklimitet nem adtunk meg ez a dd addig fog futni amíg a fájlunk el nem éri a kvótánk határát. Mivel a jelenlegi hard limit 200MB ezért ekkora fájl legenerálása után szakítja meg a kernel a dd futását (feltételezve, hogy a diak felhasználónak nincs egyéb fájlja az adott kvótázott partíción). Végezetül szüntessük meg a limitet. Ezt egyszerűen megtehetjük úgy, hogy edquota segítségével a fenti 2 beállított limitet visszaírjuk 0-ra. Ezek után ha diak-ként újra megnézzük, valóban megszűnik a korlátozás: diak@fekete1:/root/proba1$ quota Disk quotas for user diak (uid 1000): none Ulimit Állítson be a diak felhasználónak 10MB-os maximális fájlméretet. Ellenőrizze a korlátozás működését, majd szüntesse meg azt! Használjuk az ulimit parancsot: fekete1:~# ulimit -f 10240 Az -f kapcsolóval mondjuk meg, hogy a fájlméretet szeretnénk limitálni, a 10240 pedig a 10MB-os limitünk 1KB-os blokkokban (10MB = 10240*1KB). Teszteljük ezt a beállítást is a dd segítségével: diak@fekete1:~$ dd if=/dev/zero of=asd Elérte a fájl méret határt diak@fekete1:~$ ls -lh összesen 11M -rw-r--r-- 1 diak diak 10M nov 29 14.27 asd A shell a 10MB-os határ elérésekor megszakítja a dd futását. Ha megnézzük ls segítségével, valóban egy 10MB-os fájl jött létre. Szüntessük meg a korlátozást: fekete1:~# ulimit -f 0 Fontos: az ulimit segítségével rendszerszintű korlátozásokat adhatunk meg (tehát ezek minden felhasználóra vonatkozni fognak), de a limitek csak akkor kerülnek értelmezésre és betartásra ha minden user ulimit-et támogató shellt használ! (pl. bash) 13
Állítsa be, hogy maximum 30 processzt indíthatnak a felhasználók, tesztelje működését un. forkbombbal. használjunk ulimitet: fekete1:~# ulimit -u 30 -u, tehát a user processzek számát korlátzzuk és 30 (tehát 30 db folyamat) a korlát. Teszteljük a beállítást forkbomb-al: FONTOS! Forkbombot csak akkor robbantsunk ha meggyőződtünk, hogy van beállítva processz limit, különben a rendszerünket csak egy hard-reset kelti újra életre. Továbbá forkbombot SOHA nem robbantunk rootként!!! diak@fekete1:~$ f(){ f f& };f [1] 2726 diak@fekete1:~$ bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen bash: fork: Erőforrás ideiglenesen elérhetetlen Látható, hogy a 30-as limit elérése után a forkbomb nem tud tovább 'osztódni', így elkerülhető, hogy a renszerünk túlterhelődjön. Érdekesség: A 'forkbomb' működése: f(){ f f& };f Amint látható egy egyszerű f() függvényt definiálunk, amely saját magát hívja meg, majd a létrejött 'fork'-ot (gyermek folyamatot) a háttérbe küldi, így az sosem fog befejeződni (tehát törlődni). A definíció után álló f pedig a lavinát elindító első függvényhívás. Nagyon vigyázzunk a forkbomb-bal, mert ha nem jól állítottuk be az erőforrás limitet, könnyedén kiakaszthatjuk a gépünket és akkor csak az újraindítás segít! pam_limits Állítson be 1 perc maximum processzoridőt a /etc/security/limits.conf-ban a diak felhasználónak, majd tesztelje dd segítségével. Szerkesszük a /etc/security/limits.conf -ot és szúrjuk be a következő sort a fájlba: diak hard cpu 1 A korlátozás a diak felhasználóra vonatkozik, típusa hard és a cpu időt korlátozza 1 percre (percben megadva). Ezek után teszteljük le működik-e a korlátozás: diak@fekete1:~$ dd if=/dev/zero of=/dev/null A dd most a /dev/zero-t másolja a /dev/null-ba (végtelen sok nullát egy végtelen nyelőbe), tehát ez a processz nem érne véget amíg kézzel meg nem állítjuk, vagy esetünkben a korlátozás életbe nem lép: diak@fekete1:~$ dd if=/dev/zero of=/dev/null Leállítva (Ha közben egy másik terminálon ps-el figyeljük, láthatjuk, hogy a dd 1 perc után áll meg, hiszen ez alatt az egy perc alatt folyamatosan használta a processzort.) 14
VI. Mérés: IPTABLES Állítsa össze a következő hálózatot: 3. ábra. A VI. méréshez szükséges fizikai hálózat. A mérés megkezdése előtt a mérésvezető összeköti a gépeket a fenti módon, így a fizikai összeállítással már nem kell foglalkoznunk. A fekete gép a szerver, a fehér gép a kliens lesz a hálózatban. A beállításoknál látható, hogy melyik parancsot melyik gépen adjuk ki: (fekete1:~#, feher1:~#) Először a fekete1 gépen állítjuk be a hálózatot a következőképpen: fekete1:~# dhclient eth4 Ezzel egy címet kérünk a labor dhcp szerverétől. fekete1:~# route add default gw 192.168.100.1 Ezzel beállítjuk, hogy az alapértelmezett átjáró a labor routere. fekete1:~# ifconfig eth1 10.10.10.1/24 up Ezzel a paranccsal kézzel megadjuk az eth1 interfész címét. 15
A beállítások után a fekete gépen az ifconfig parancsot kiadva meggyőződünk róla, hogy minden beállítás helyes-e: fekete1:~# ifconfig eth1 Link encap:ethernet HWaddr 08:00:27:36:66:f3 inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth4 Link encap:ethernet HWaddr 08:00:27:cf:5c:9f inet addr:192.168.100.210 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fecf:5c9f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:40 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1420 (1.3 KiB) TX bytes:9271 (9.0 KiB) (Az ifconfig kimenete ennél hosszabb, de minket most csak ez a 2 interfész érdekel.) Ha mindezt beállítottuk akkor a fekete gépen működnie kell az internetelérésnek. Ezt a legegyszerűbben úgy tesztelhetjük, ha megpingelünk egy ismert kiszolgálót (pl. index.hu): fekete1:~# ping index.hu PING index.hu (217.20.130.97) 56(84) bytes of data. 64 bytes from sportgeza.hu (217.20.130.97): icmp_seq=1 ttl=58 time=13.2 ms 64 bytes from sportgeza.hu (217.20.130.97): icmp_seq=2 ttl=58 time=10.3 ms ^C --- index.hu ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1015ms rtt min/avg/max/mdev = 10.302/11.789/13.276/1.487 ms Ha minden működik átléphetünk a fehér gépre. Állítson be statikus IP-t a fehér gépen a 10.10.10.10+gépszám/24-es hálózatból. feher1:~# ifconfig eth0 10.10.10.11/24 up feher1:~# route add default gw 10.10.10.1 Nálam a gépszám 1, tehát az IP cím 10.10.10.11/24 lesz. Az alapértelmezett átjáró a fekete gép megfelelő interfészének IP címe (ezt állítottuk be az előbb a fekete gépen). Ha mindent jól csináltunk a feher1 gép ifconfig kimenete: feher1:~# ifconfig eth0 Link encap:ethernet HWaddr 08:00:27:20:2e:96 inet addr:10.10.10.11 Bcast:10.10.10.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe20:2e96/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:57 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:990 (990.0 B) TX bytes:11829 (11.5 KiB) Interrupt:10 Base address:0xd020 (a kimenet itt is hosszabb, de minket csak az eth0 érdekel) Ha ezzel is készen vagyunk, akkor a beállítások után CSAK a fekete1 gép felénk eső 10.10.10.1 interfészét szabad elérnünk, semmi mást nem. Ellenőrizzük is le, így van-e: 16
feher1:~# ping 10.10.10.1 PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data. 64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=7.30 ms 64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.470 ms 64 bytes from 10.10.10.1: icmp_seq=3 ttl=64 time=1.07 ms ^C --- 10.10.10.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.470/2.947/7.302/3.089 ms feher1:~# ping 192.168.100.1 PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data. ^C --- 192.168.100.1 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3011ms A rendszer tehát működőképes, engedélyeznünk kell még a fekete gépen az ip forwardolást a kernelben, és kezdhetjük is megoldani az iptables feladatokat: fekete1:~# echo '1' > /proc/sys/net/ipv4/ip_forward Állítsa be a fekete gépen, hogy az IPTABLES NAT-olja a 10.10.10.0/24-es hálózatot. fekete1:~# iptables -t nat -A POSTROUTING --src 10.10.10.0/24 -o eth4 -j MASQUERADE Teszteljük is le a működést a feher1 gépen: feher1:~# ping index.hu PING index.hu (217.20.130.97) 56(84) bytes of data. 64 bytes from sportgeza.hu (217.20.130.97): icmp_seq=1 ttl=57 time=21.5 ms 64 bytes from sportgeza.hu (217.20.130.97): icmp_seq=2 ttl=57 time=22.8 ms ^C --- index.hu ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1020ms rtt min/avg/max/mdev = 21.554/22.182/22.811/0.645 ms Írjon olyan tűzfalszabályt mely, tiltja a fehér gépről HTTPS hozzáférést. fekete1:~# iptables -A OUTPUT -p tcp --src 10.10.10.2 --dport 443 -j DROP Írjon olyan tűzfalszabályt mely, tiltja a fekete gépre a TCP 8080-as portra érkező kéréseket. fekete1:~# iptables -A INPUT -p tcp --dport 8080 -j DROP Írjon olyan tűzfalszabályt mely, a fekete gép TCP 6666-os portjára irányuló kéréseket átirányítja a TCP 22- es portra. fekete1:~# iptables -t nat -A PREROUTING -p tcp --dport 6666 -j REDIRECT --to-port 22 Írjon olyan tűzfalszabályt mely, a fekete gép 80-as portjára érkező kéréseket a teacherb.tilb.sze.hu 80-as portjára dobja (a teacherb IP címe: 192.168.100.205). fekete1:~# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.100.205:80 17
VII. Mérés: DHCP, DNS szolgáltatás Állítson össze egy hálózatot, mely két gép keresztkábellel való összekötéséből áll! Azon a fekete gépen melyen a DHCP szerver fog futni az alaplapi (eth4) legyen a hálózatba kötve, míg a Intel 4portos kártyából (eth0) (10.10.X.1/24) legyen keresztkábellel összekötve a második gép alaplapi hálózati kártyájába! A VI. mérés elején ismertetett módon állítsuk össze a hálózatot, majd a feladatban megadottak szerint konfiguráljuk be az ip címeket ifconfig segítségével (ugyan az, mint a VI. mérésnél,csak az IP-k változnak). Oldja meg DHCP segítségével hogy a második gép a 10.10.X.10-50 tartományból kapjon IP címet, valamint ossza ki a fekete gép 10.10.X.1-es IP-jét mint névkiszolgáló és alapértelmezett átjáró, majd a fekete gépen IPtables segítségével oldja meg a NAT-olást. Telepítsük fel a dhcp3-server csomagot: fekete1:~# apt-get install dhcp3-server Szerkesszük a /etc/dhcp3/dhcpd.conf fájlt a feladatnak megfelelően: (csak a számunkra érdekes, vagy átállítandó beállításokat közöltem) option domain-name tilb.sze.hu ; option domain-name-servers 193.224.130.161, 193.224.128.1; option routers 193.224.130.161; subnet 10.10.1.0 netmask 255.255.255.0 { range 10.10.1.10 10.10.1.50; option routers 10.10.1.1; option domain-name-servers 10.10.1.1; } Az első 3 option a laborban állandó. Alatta egy subnet deklarációja következik amelyben megadjuk a feladatban előírt alhálózatot (10.10.1.0/24 nálam). A range-el adjuk meg mettől meddig osztogathat címeket a dhcp szerver ebben az alhálózatban. Az alatta található 2 opció sorban az alapértelmezett átjárót és a dns szerver címét közli azokkal a gépekkel akik a DHCP-től címet kérnek. A nat beállítása szintén a VI. mérésből: fekete1:~# echo '1' > /proc/sys/net/ipv4/ip_forward fekete1:~# iptables -t nat -A POSTROUTING --src 10.10.10.0/24 -o eth4 -j MASQUERADE FONTOS lépés: Mivel a fekete gép több hálózathoz is csatlakozik nagyon fontos megmondanunk, hogy a DHCP szerverünk mely interfészeken érkező kérésekre válaszolhat. Ha ezt nem tennénk meg akkor előfordulhatna, hogy a laborháló felé is elkezdene a szerverünk címeket (és ott hibásnak számító beállításokat) osztogatni! Állítsuk tehát be, hogy DHCP kérésekre csak az eth0 interfészen szabad válaszolnunk: Módosítsuk a /etc/default/dhcp3-server fájlt az alábbi módon: INTERFACES="eth0" Ha mindez kész indítsuk újra a dhcp szervert: fekete1:~# /etc/init.d/dhcp3-server restart Most térjünk át a fehér gépre és állítsuk be, hogy kapjon is IP címet a DHCP-től. Szerkeszzük a /etc/network/interfaces fájlt az alábbiak szerint: 18
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp A számunkra fontos sort kiemeltem. Ha most megnézzük az interfészünknek nincs IP címe: feher1:~# ifconfig eth0 eth0 Link encap:ethernet HWaddr 08:00:27:2f:90:fe BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Írjuk fel a HWaddr után található MAC címet, mert a későbbiekben még szükség lesz erre. Indítsuk újra a teljes hálózati szolgáltatást: feher1:~# /etc/init.d/networking restart Most látnunk kell ahogy a dhcp kliens IP címet kér a szervertől: Internet Systems Consortium DHCP Client V3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/08:00:27:2f:90:fe Sending on LPF/eth0/08:00:27:2f:90:fe Sending on Socket/fallback DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 DHCPOFFER from 10.10.1.1 DHCPREQUEST on eth0 to 255.255.255.255 port 67 DHCPACK from 10.10.1.1 bound to 10.10.1.10 -- renewal in 227 seconds. (új IP-t kézzel is kérhetünk a dhclient eth0 parancs kiadásával). Ha minden rendben ment és a NAT-olás is jól van beállítva mostantól el kell tudnunk érni a hálózat többi részét a fehér gépről is. (Vigyázat! Mivel DNS szerver még nem fut ezért nincs névfeloldás! Csak IP címeket próbálhatunk pingelni!) feher1:~# ping 192.168.100.1 PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data. 64 bytes from 192.168.100.1: icmp_seq=1 ttl=61 time=3.14 ms 64 bytes from 192.168.100.1: icmp_seq=2 ttl=61 time=2.31 ms ^C --- 192.168.100.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1013ms rtt min/avg/max/mdev = 2.317/2.730/3.144/0.416 ms Oldja meg hogy a második gép minden DHCP kérésre fixen a 10.10.X.13-as IP címet kapja meg (HOST). Ehhez egy host bejegyzést sort kell hozzáadnunk a fekete gépen található /etc/default/dhcp3-server fájlhoz: 19
host fehergep { hardware ethernet 08:00:27:2f:90:fe; fixed-address 10.10.1.13; } A host bejegyzéssel elneveztük a gépet (a név tetszőleges), majd megadtuk a fehér gépben található eth0 interfész MAC címét amit korábban felírtunk, továbbá megadtuk, hogy ez a MAC című interfész mindig a 10.10.1.13-as címet kapja a szerverünktől. A beállítás érvényesítéséhez indítsuk újra a szervert, majd menjünk át a fehér gépre és kérjünk új IP címet: feher1:~# dhclient eth0 There is already a pid file /var/run/dhclient.pid with pid 2683 killed old client process, removed PID file Internet Systems Consortium DHCP Client V3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/08:00:27:2f:90:fe Sending on LPF/eth0/08:00:27:2f:90:fe Sending on Socket/fallback DHCPREQUEST on eth0 to 255.255.255.255 port 67 DHCPNAK from 10.10.1.1 DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8 DHCPOFFER from 10.10.1.1 DHCPREQUEST on eth0 to 255.255.255.255 port 67 DHCPACK from 10.10.1.1 bound to 10.10.1.13 -- renewal in 259 seconds. Ha mindent jól csináltunk a beállított címet kapjuk meg. Telepítse fel a fekete gépre a bind9 csomagot, majd konfigurálja be a következőképpen. (A zónát az ns.tilb.sze.hu-n ledelegáltuk.) Állítsa be egy zonax.tilb.sze.hu zónát, melyhez a feketex az elsődleges DNS kiszolgáló. (ahol X a mérőhely száma) Állítsa be, hogy a 10.10.X.13 gép Domain neve amd.zonax.tilb.sze.hu legyen. Hozzon létre egy CNAME-t www néven, melyre szintén a 10.10.X.13 gép válaszol. Első lépésként tegyük fel a bind9-et: fekete1:~# apt-get install bind9 Nyissuk meg a /etc/bind/named.conf fájlt és konfiguráljuk be a feladatnak megfelelően. Adjuk hozzá a saját master típusú zónánkat és megadjuk a zónaleíró-fájl helyét: zone "zona1.tilb.sze.hu" { type master; file "/etc/bind/db.zona1"; }; Most létre kell hoznunk a zónaleíró fájlunkat. A legegyszerűbb ha a már meglévő db.local fájlról készítünk egy másolatot: fekete1:~# cp /etc/bind/db.local /etc/bind/db.zona1 Nyissuk meg a friss másolatunkat és végezzük el a mérési leírásnak megfelelő konfigurációt: 20
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA zona1.tilb.sze.hu. root.zona1.tilb.sze.hu. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS zona1.tilb.sze.hu. amd IN A 10.1.1.13 www IN CNAME amd Ebben a fájlban adjuk meg a zónánk adatait. Figyeljünk rá, hogy FQDN-t kell használnunk, azaz fontos a lezáró pont a domain név végén! Az első rekord a névkiszolgáló neve, utána az adminisztrátor e-mail címe. (ebben a @ helyett pontot kell használnunk!) Alatta található a serial, amelyet a fájl minden egyes módosításakor KÖTELEZŐEN egyel növelnünk kell! Ezután következnek különböző frissítésre vonatkozó értékek. Ezeket hagyhatjuk alapbeállításon. a SOA rekord után található még 3 beállítás: az első a névszerverre vonatkozik. Ezek jelen esetben mi magunk vagyunk. A másik sor egy szimbolikus névhez rendel egy IP címet. Mivel az amd után nem tettünk pontot ezért az az amd.zona1.tilb.sze.hu-t fogja jelenteni. Alatta egy CNAME azaz egy névhivatkozás található ami a www nevet az amd-hez rendeli. Ha megvagyunk a módosítással mentsük el a fájlunkat. Figyeljünk a serial növelésére! Indítsuk újra a dns szervert a szokott módon: fekete1:~# /etc/init.d/bind9 restart Ha mindent jól csináltunk, működnie kell a beállításoknak. Mielőtt azonban kipróbálnánk a névfeloldást ellenőrizzük le, hogy a gépeink valóban használják-e a bekonfigurált névszerverünket. Nézzük meg a fekete gép /etc/resolv.conf -ját és ha nem szerepel benne a lokális szerver, adjuk hozzá a névszerver lista elejére: nameserver 127.0.0.1 Mentsük el a fájlt, majd próbáljuk meg megpingelni a másik gépet amd vagy www néven hivatkozva rá: fekete1:~# ping amd.zona1.tilb.sze.hu PING amd.zona1.tilb.sze.hu (10.10.1.13) 56(84) bytes of data. 64 bytes from amd.zona1.tilb.sze.hu (10.10.1.13): icmp_seq=1 ttl=64 time=2.23 ms 64 bytes from amd.zona1.tilb.sze.hu (10.10.1.13): icmp_seq=2 ttl=64 time=0.854 ms 64 bytes from amd.zona1.tilb.sze.hu (10.10.1.13): icmp_seq=3 ttl=64 time=0.155 ms ^C --- amd.localhost ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2012ms rtt min/avg/max/mdev = 0.155/1.082/2.238/0.865 ms Lépjünk át a fehér gépre és ellenőrizzük ott is /etc/resolv.conf -ot. Mivel a DHCP szerverünknél ezt korábban már megadtuk a dhcp kliens beállította nekünk a névszervert és a fájlban ez az egy sor szerepel: (Ha mégsem így van akkor javítsuk ki) nameserver 10.10.1.1 Próbáljuk meg innét is megpingelni az amd vagy www nevű gépet (vagyis jelen esetben saját magunkat): 21
feher1:~# ping amd.zona1.tilb.sze.hu PING amd.zona1.tilb.sze.hu (10.10.1.13) 56(84) bytes of data. 64 bytes from feher1.local (10.10.1.13): icmp_seq=1 ttl=64 time=0.015 ms 64 bytes from feher1.local (10.10.1.13): icmp_seq=2 ttl=64 time=0.026 ms 64 bytes from feher1.local (10.10.1.13): icmp_seq=3 ttl=64 time=0.177 ms ^C --- amd.localhost ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 0.015/0.072/0.177/0.074 ms Állítsa be a mérőhelyéhez tartozó ip tartomány reverse DNS-ét.(X.10.10.in-addr.arpa) Majd tesztelje ennek működését. (host t PTR 10.10.X.13) Szerkesszük ismét a /etc/bind/named.conf-ot és adjuk hozzá a következő zónabejegyzést: zone "1.10.10.in-addr.arpa." { type master; file "/etc/bind/db.rev"; }; Itt a zóna bejegyzése a 10.10.1 alatt található hálózatra vonatkozik és a reverse DNS működésének megfelelően fordítva kell bejegyeznünk.in-addr.arpa. végződéssel (mivel ez az rdns gyökere). Mentsük el a fájlt, majd hozzuk létre a hivatkozott reverse-zónafájlt. MIvel az rdns és a DNS zónafájlok nem sokban különböznek egyszerűen másoljuk le a korábbi zónafájlunkat: fekete1:~# cp /etc/bind/db.127 /etc/bind/db.rev Módosítsuk a fájlunkat és adjuk hozzá az rdns bejegyzést: ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA zona1.tilb.sze.hu. root.zona1.tilb.sze.hu. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS zona1.tilb.sze.hu. 13 PTR amd.zona1.tilb.sze.hu. Itt elkezdhetjük 1-től a serial számozását mivel ez a fájl most kerül először forgalomba a dns szerverek közt. A bejegyzésünk 13, hiszen ez jelenti a 10.1.1.13-at (fordítva 13.1.1.10). Mentsük el a fájlt és indítsuk újra ismét a bind9-et. Ha ez is kész akkor már csak a tesztelés maradt hátra: fekete1:/etc/bind# host -t PTR 10.10.1.13 13.1.10.10.in-addr.arpa domain name pointer amd.zona1.tilb.sze.hu Ellenőrizze a mérés működését, kérdezze le saját zónájának az NS és SOA rekordját. Ping-elje az index.hu-t a fehér gépről. Törölje a dhcp3-server és bind9 csomagokat a konfigurációs fájlokkal együtt. 22
fekete1:/etc/bind# host -t NS zona1.tilb.sze.hu fekete1:/etc/bind# host -t SOA tilb.sze.hu feher1:~# ping index.hu PING index.hu (217.20.130.97) 56(84) bytes of data. 64 bytes from sportgeza.hu (217.20.130.97): icmp_seq=1 ttl=57 time=15.3 ms 64 bytes from sportgeza.hu (217.20.130.97): icmp_seq=2 ttl=57 time=18.2 ms ^C --- index.hu ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1006ms rtt min/avg/max/mdev = 15.300/16.784/18.268/1.484 ms (az utolsó feladat előtt persze várjuk meg amíg a mérésvezető leellenőrzi az eddigi munkánkat) fekete1:~# apt-get remove --purge dhcp3-server bind9 23
VIII. Mérés: Naplózás Telepítse fel a syslog-ng csomagot a fekete és fehér gépekre és oldja meg a mérésvezető útmutatása alapján, hogy a fehér gépen található Debian rendszer a fekete gépre naplózzon. Telepítsünk: fekete1:~# apt-get install syslog-ng feher1:~# apt-get install syslog-ng Szerkesszük a fekete gépen a /etc/syslog-ng/syslog-ng.conf fájlt és adjuk hozzá a következőket: (csak a fájl részeit másoltam be, hogy látni lehessen mi hová kerül.) ###### # sources source feher { tcp( port(514) keep-alive(yes) max-connections(100) ); }; # all known message sources... ###### # destinations destination feher_file { file("/var/log/feher.log"); }; ###### # logs # order matters if you use "flags(final);" to mark the end of processing in a # "log" statement log { source(feher); destination(feher_file); };... A fenti beállításokkal megadtuk, hogy az 514 tcp porton várunk távoli gépről érkező logokat és ezek a feher nevű forrásba kerüljenek. Megadtunk egy feher_file nevű célt ahová logolni tudunk. Továbbá megadtunk egy log direktívát, hogy a feher nevű forrásból érkező naplóbejegyzéseket naplózzuk bele a feher_file nevű célba. Indítsuk újra a syslog-ng-t: fekete1:~# /etc/init.d/syslog-ng restart Menjünk át a fehér gépre és állítsuk be ott is a syslog-ng-t. Szerkesszük a /etc/syslog-ng/syslog-ng.conf fájlt és adjuk hozzá a következő részeket: ###### # destinations destination fekete { tcp("10.10.1.1" port(514)); };... 24
###### # logs # order matters if you use "flags(final);" to mark the end of processing in a # "log" statement log { source(s_all); destination(fekete); };... Itt megadunk egy célt ami a 10.10.1.1 gép 514-es portja, majd egy log bejegyzéssel megmondjuk, hogy a helyi gépről az összes naplóbejegyzést küldjük el a távoli célnak. Indítsuk újra a syslog-ng-t ezen a gépen is: feher1:~# /etc/init.d/syslog-ng restart Mivel a fekete gép már fel van készítve a logok fogadására a távoli logolás innentől működik. Próbáljuk is ki: Nézzük meg a fehér gépről érkező log végét folyamatos frissítéssel a fekete gépen: fekete1:~# tail -f /var/log/feher.log Most generáljunk valamilyen naplóüzenetet a fehér gépen: feher1:~# logger teszt log a feher geprol Most nézzünk vissza a fekete gépre: fekete1:~# tail -f /var/log/feher.log Dec 2 23:13:28 10.10.1.2 syslog-ng[3256]: syslog-ng starting up; version='2.0.9' Dec 2 23:23:31 10.10.1.2 logger: teszt Töltse le a dev2.tilb.sze.hu/probalog.log fájlt, mely a labor publikus IP- cím tartomány forgalmának egynapos naplója. A letöltéshez használjunk pl. wget-et: fekete1:~# wget http://dev2.tilb.sze.hu/probalog.log Nézze meg milyen gyakran kapcsolódik a 92.52.216.17-es IP cím a laborhálózatba, és milyen célból? Nézze meg hány alkalommal kapcsolódik a laborhoz egy távoli gép HTTPS kapcsolaton. Egy nap alatt kimenő vagy bejövő kapcsolatokból van több? Állapítsa meg logfájl alapján melyik hálózati interfész kapcsolódik az internethez! Állapítsa meg hányan próbáltak meg belépni ssh segítségével 1 nap alatt a 193.224.130.177-es IPre (tegyük fel hogy senki nem használta aznap az ssh kapcsolatot)! Állapítsa meg hány csomag érkezett a 193.224.130.173-as IP http portjára! Nézzünk bele a logfájlba pl. mcedittel. Láthatjuk, hogy a log formátuma az IPTABLES rövidítéseihez és elnevezésihez hasonló csupa nagybetűs változónevekből és egyenlőségjellel hozzájuk rendelt értékekből áll. A megadott feladatokhoz egyszerűen alkothatunk reguláris kifejezéseket. Pl: Nézze meg hány alkalommal kapcsolódik a laborhoz egy távoli gép HTTPS kapcsolaton. fekete1:~# cat probalog.log egrep "^.*IPTABLES_PUBLIC_IN.*DPT=443.*$" wc -l a kapcsolat bejövő, tehát IPTABLES_PUBLIC_IN a célport pedig DPT=443 az így kiszűrt sorokat pedig egyszerűen összeszámoljuk. 25
IX. Mérés: SSH, ProFTPd, Samba sshd Lépjen be a fekete gépen található Debian rendszerbe diak-ként! Generáljon 1024 bites publikus/privát kulcspárt az ssh-hoz, Az előadáson bemutatott módon helyezze el a megfelelő kulcsot a fehér gépen úgy, hogy jelszó használata nélkül be tudjon lépni. Generáljunk kulcsot. A generáláskor feltett kérdésekre egyszerűen nyomjunk entert (mivel a fájlok alapbeállításban megfelelőek nekünk, jelszót pedig nem akarunk megadni): diak@fekete1:~$ ssh-keygen -t rsa -b 1024 Generating public/private rsa key pair. Enter file in which to save the key (/home/diak/.ssh/id_rsa): Created directory '/home/diak/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/diak/.ssh/id_rsa. Your public key has been saved in /home/diak/.ssh/id_rsa.pub. The key fingerprint is: 74:59:60:eb:f5:88:56:a4:3e:b8:91:e4:a3:1d:e2:28 diak@fekete1 The key's randomart image is: +--[ RSA 1024]----+ o.o. * o = o + * + o. S *.. o + *. E. o o. +-----------------+ diak@fekete1:~$ Most lépjünk át a fehér gépre. Mivel ebben az esetben a fehér lesz az a gép amihez csatlakozni szeretnénk fel kell rá telepítenünk az openssh-server csomagot: feher1:~# apt-get install openssh-server Most térjünk vissza a fekete gépre és másoljuk át az ssh kulcsunkat a fehérre: diak@fekete1:~$ ssh-copy-id 10.10.1.2 The authenticity of host '10.10.1.2 (10.10.1.2)' can't be established. RSA key fingerprint is 81:eb:72:34:15:27:37:f1:f6:19:11:c0:ac:1e:b9:7d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.10.1.2' (RSA) to the list of known hosts. diak@10.10.1.2's password: Now try logging into the machine, with "ssh '10.10.1.2'", and check in:.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. diak@fekete1:~$ A kulcsmásoló script be fog jelentkezni a fehér gépre diak-ként, tehát meg kell adnunk a diak jelszavát (diak) Próbáljunk meg most bejelentkezni a fehér gépre a feketéről: 26
diak@fekete1:~$ ssh 10.10.1.2 Linux feher1 2.6.26-2-amd64 #1 SMP Thu Nov 25 04:30:55 UTC 2010 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. You have mail. Last login: Mon Nov 29 21:49:24 2010 diak@feher1:~$ Ha mindent jól csináltunk jelszó megadása nélkül ssh autentikációval léptünk be és kaptunk egy parancssort a fehér gépen. Az sshd konfigurációs állományában állítsa be a következőket: a. Tiltsa le a root hozzáférést! b. Tiltsa le a PAM alapú autentikációt! Módosítsuk a következő értékeket a fehér gép /etc/ssh/sshd_config fájljában: PermitRootLogin no... UsePAM no Indítsuk újra az ssh szervert: feher1:~# /etc/init.d/ssh restart ProFTPd Telepítse fel a proftpd csomagot. Hozzon létre egy ftpuser1, ftpuser2 felhasználót. Az ftpuser2 felhasználó shelljét állítsa át /bin/false-ra! Telepítsünk: fekete1:~# apt-get install proftpd (A telepítés közben feltett kérdésre válasszuk a standalone lehetőséget) Hozzuk létre a két felhasználót (a -m kapcsoló létrehozza a létrejövő userek home könyvtárait is): fekete1:~# useradd -m ftpuser1 fekete1:~# useradd -m ftpuser2 Most a /etc/passwd fájlban keressük meg az ftpuser2 sorát és módosítsuk a shelljét: ftpuser2:x:1002:1002::/home/ftpuser2:/bin/false Állítsa be a következőket a proftpd konfigurációs állományában a következőket: a. A ftp eléréshez szükséges a felhasználóknak tényleges shell-el rendelkezniük b. A legfelső könyvtár a saját home könyvtár legyen Szerkesszük a /etc/proftpd/proftpd.conf fájlt a következőképpen: # Use this to jail all users in their homes DefaultRoot ~ # Users require a valid shell listed in /etc/shells to login. # Use this directive to release that constrain. RequireValidShell on 27
A konfiguráció módosítása után ne felejtsük el újraindítani az ftp szerverünket: fekete1:~# /etc/init.d/proftpd restart Az ftpuser1 felhasználó könyvtárban hozza létre a következő könyvtárstruktúrát: upload tantargyak egyeb Ha nem akarunk a jogosutságbeállítással külön foglalkozni cészerű a mappákat az ftpuser1 nevében létrehozni: fekete1:~# su ftpuser1 fekete1:/root$ cd fekete1:~$ mkdir upload tantargyak egyeb Állítsa be, hogy az upload könyvtárba lehessen feltölteni, a többibe ne! Állítsa be, hogy a upload könyvtárból ne lehessen se könyvtárat, se fájlt törölni. Adjuk hozzá a szabályokat a /etc/proftpd/proftpd.conf fájl végéhez: <Directory ~> <Limit STOR> Deny All </Limit> </Directory> <Directory ~/upload> <Limit WRITE> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> Ezekkel a könyvtárakra vonatkozó direktívákkal megteremtjük a feladatban szereplő feltételeket. Samba Az ftpuser2 home könyvtárát ossza meg az előadáson látott módon samba segítségével, úgy hogy: A megosztás neve usersamba Böngészhető legyen Csak olvasható legyen Bárki számára hozzáférhető legyen Telepítsünk samba-t: fekete1:~# apt-get install samba (a munkacsoportot állítsuk TILB -re, a második kérdésre válaszoljunk nemmel) Szerkszesszük a /etc/samba/smb.conf fájlt és állítsuk be a következőket: # "security = user" is always a good idea. This will require a Unix account # in this server for every user accessing the server. See # /usr/share/doc/samba-doc/htmldocs/samba3-howto/servertype.html # in the samba-doc package for details. security = share 28
Ez a beállítás mondja meg, hogy a gép mindenki számára elérhető akkor is ha nincs ezen a gépen érvényes felhasználója. Adjuk hozzá a megosztásunkat a fájl végéhez: [usersamba] path=/home/ftpuser2 browseable = yes read only = yes guest ok = yes A megosztásunk életbeléptetéséhez indítsuk újra a samba szervert: fekete1:~# /etc/init.d/samba restart Ellenőrizze a fájlmegosztásokat. Próbálja meg felcsatolni a fehép gép Windows 2003-as szerverére a megosztást. Indítsuk újra a fehér gépet és bootoljunk be a Windows 2003 rendszerbe. Lépjünk be, majd bizonyosodjunk meg róla, hogy elérjük a fekete a gépet. (Ha nem megy az IP konfiguráció Windows alatt, kérjük a mérésvezető segítségét.) Ha elérjük a fekete gépet nyissunk egy sajtgépet és egyszerűen a címsorból próbáljuk meg elérni a fekete gép megosztását (írjuk be a fekete gép hálózati címét NT formátumban): 4. ábra. A megosztás tesztelése 29
X. Mérés: Webszerver konfiguráció Kösse össze a fekete gép eth1-es portját és fehér gép eth0-ás portját. Állítsa be a fekete gép eth1-es portjára a következő paramétereket: address:10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255 Állítsa be a fehér gép eth0-es portjára a következő paramétereket: address 10.10.10.2 netmask 255.255.255.0 broadcast 10.10.10.255 gateway 10.10.10.1 Állítsa be a fehér gépen, hogy a fekete gép legyen a névkiszolgáló. A fizikai összeállítást a mérésvezető már elvégezte helyettünk, így azzal nem kell foglalkoznunk. A feladatot a már ismert módon, ifconfig segítségével oldhatjuk meg: fekete1:~# ifconfig eth1 10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255 up Hasonlóan járunk el a fehér gépen is (figyeljünk oda melyik interfészt állítjuk!): feher1:~# ifconfig eth0 10.10.10.2 netmask 255.255.255.0 broadcast 10.10.10.255 up Itt meg kell még adnunk az alapértelmezett átjárót is: feher1:~# route add default gw 10.10.10.1 Ha eddig eljutottunk, már tudnunk kell pingelni mindegyik gépet a másikról. Telepítse fel a bind9 csomagot, majd konfigurálja fel a már tanult módon, úgy hogy a zóna zonax.tilb.sze.hu (ahol az x a gépszámot jelöli). Adja meg a zónafájlban, hogy a fehér gép szimbolikus neve: www.zonax.tilb.sze.hu legyen, majd állítson be egy CNAME bejegyzést ugyanerre az IP-re www2.zonax.tilb.sze.hu, és www3.zonax.tilb.sze.hu néven. Ellenőrizze ping segítségével a működést. A névkiszolgáló telepítése és konfigurálása megegyezik a VII mérésben leírtakkal, csak a konkrét konfigurációban változik néhány dolog. Végezzük el a telepítést és a beállítást a VII. mérésben leírtak szerint, majd amikor a névfeloldás megfelelően működik, módosítsuk a zónafájlunkat az alábbiak szerint: ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA zona1.tilb.sze.hu. root.zona1.tilb.sze.hu. ( 6 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS zona1.tilb.sze.hu. www IN A 10.10.10.2 www2 IN CNAME www www3 IN CNAME www (Figyeljünk rá, hogy itt más az IP cím, mint a VII mérésben, illetve a serialt se felejtsük el növelni!) 30