Ez a Magrathea disztribúció egy floppys tűzfal verziójának readme fájljának HTML verziója.
Utoljára frissítve: 2008.09.29.

TARTALOMJEGYZÉK

  1. Mi az a tűzfal?
  2. Mit jelent a floppys tűzfal és mik az elönyei?
  3. Mire nem alkalmas ez a tűzfal verzió?
  4. Letöltés,telepítés
  5. Konfigurálás
  6. További dokumentáció, segítség, stb.
  7. Szerzői jogok
  8. A szerző további haszontalan megjegyzései


1. Mi az a tűzfal?

A tűzfal megakadályozza hogy a hálózaton keresztül egy adott számítógépbe illetéktelenül behatoljanak, illetve korlátozhatja a számítógép kapcsolatát a hálózat felé.


1.1 Hálózati alapok

Manapság az interneten sok az ártó szándékú ember, és az általuk írt programok is folyamatosan itt keringenek körülöttünk. Az ipv4-es IP címekből is egyre nehezebb eléghez hozzájutni. A tűzfal alkalmazása egy alapvető, bár nem 100%-os megoldás a védekezésre. A magrathea-fw tűzfal a védelmen, azaz a hagyományos tűzfal funkciókon túl képes a masquerade-re, azaz képes gépeink címeit a külső hálózat felé egy címnek álcázni, képes a routolásra, az IP aliasingra, és az ún. port átirányításra ( port forward ) is.

Az interneten a kommunikáció a gépek között a címük alapján zajlik, ez tipikusan egy X.Y.V.Z formátumban emlegetett cím. ( A felhasználók általában nem ismerik ezeket a címeket, csak a hozzájuk tartozó ún. DNS neveket, ha a gép ilyen kérést kap, a DNS szerverekhez fordul ahonnan lekérdezi melyik IP cím ( IP szám ) tartozik az adott névhez. )


Az internet különálló hálózatokból áll. Egy hálózatra jellemző, hogy a hálózat gépeinek IP címeinek első része megegyezik. Az egyező rész hossza hálózatonként más és más lehet. Pl. Egy hálózat gépei:

195.211.25.1
195.211.25.14
195.211.25.238
( az IP cím 4 mezője a 0-255 -ig terjedő számokat veheti fel )

Hogy a cím eleje milyen hosszan kell hogy megegyezzen egy adott hálózatban a netmask ( alhálózati maszk ) határozza meg.

Pl. a fenti hálózat netmask-ja:
255.255.255.0

Azaz az első három mező teljesen meg kell egyezzen, a negyedik pedig tetszőleges. Egy hálózaton belül a gépek általában közvetlenül kommunikálnak egymással, azaz harmadik gép nem vesz részt a kommunikációban.

Ha azonban egy olyan géppel szeretnénk kommunikálni, ami nem az adott hálózaton belül található, az átjáróhoz kell fordulnunk. Az átjáró az a számítógép, amely amellett hogy tagja a hálózatunknak, egy másik hálózat felé is képes kommunikálni, így tipikusan több hálózati eszköze van, illetve több különbözö IP címe. Ilyen átjáróból több is lehet egy hálózaton. Minden átjárón keresztül eljuthatunk az adott átjáró többi hálózati eszközéhez tartozó hálózathoz. Ha azonban a gép amit keresünk azon a hálózaton sincs, az úgynevezett alapértelmezett átjáróhoz kell fordulnunk ( default gateway ).

Az alapértelmezett átjáró felé küldi gépünk azokat a kéréseket amelyek nem a helyi hálózatunknak szólnak és nem olyan hálózatba, amit esetleg egy másik átjárón keresztül közvetlenül elérünk.

Ezt az egész folyamatot útválasztásnak ( routing ) hívják. A legtöbb hálózaton csak egy alapértelmezett átjáró található, sőt általában egyszerűen csak egy átjáró. Ez azt jelenti hogy az egész helyi hálózat és minden távoli gép között a kommunikáció ezen a gépen keresztül zajlik.

Az útválasztást a unix alapú rendszereken a route segédprogrammal állíthatjuk be.

Az útválasztás beállításainál adhatjuk meg hogy egyes gépek illetve egyes hálózatok, valamint "minden egyéb" felé melyik hálózati csatolón illetve melyik átjárón keresztül szeretnénk kommunikálni.


1.2. A tűzfal

A fenti esetben az átjáró nem csak arra lehet képes hogy szolgai módon továbbítsa a kommunikációt, hanem arra is hogy szabályok alapján meg is szűrje azt. És pontosan ez tesz egy tűzfalat tűzfallá.

Van még egy apró de lényeges része a kommunikációnak a tűzfalak szempontjából. Az IP címekkel a gépek elérik egymást, de szükséges a különféle kapcsolatok elkülönitése egy egy gépen belül is. Nem mindegy például hogy ftp-zni szeretnénk, vagy levelet írni...

A szolgáltatások ilyesforma elkülönítése portszámok alapján müködik. Minden szolgáltatásnak megvan a maga portja, amikhez persze a felhasználók kedvéért megintcsak tartoznak nevek. Pl.:

A http szolgáltatáshoz a TCP/80-as port tartozik,
a levélküldéshez (smtp) a TCP/25-ös, stb stb.
(a küldő és a cimzett portszám nem feltétlenül egyezik meg, a fenti példa tipikusan
 a kiszolgáló oldali portszámokat tartalmazza, tehát azokat amikhez klienseink csatlakoznak)

A portokat számuk alapján két csoportba sorolhatjuk, a 0 és 1024 közötti portok az úgynevezett fenntartott ( privileged ) portok, ezeket a legtöbb esetben csak rendszergazdai jogokkal lehet használni, az 1024 feletti portok pedig a magas portok, melyek használatára általában bármely program illetve felhasználó jogosult.

A fenti példában a TCP a port tipusát jelenti, ami TCP, UDP és ICMP lehet. A TCP-t és az UDP-t használjuk általában kommunikációs célokra, míg az ICMP hibakezelésre, ellenörzésre, nyomkövetésre, hibakeresésre jó (az ICMP-nek nem portszámait hanem ICMP típusait (ICMP type) különböztetjük meg).

Tehát milyen elemekböl építhetünk fel egy tűzfal szabályt?

Port típusa
Küldő IP címe, Küldő oldali portszám
Cimzett IP címe, Cimzett oldali portszám
(mivel a küldő és a címzett között a kommunikáció valójában mindig kétirányú a küldö
 és cimzett megnevezés valójában csak arra utal melyikük kezdeményezte a kommunikációt)

Ezek alapján a tűzfalunk kétféleképpen dönthet. Továbbengedi a csomagot, vagy eldobja azt. ( a gépek közöti komunikáció kissebb egységekben ún. csomagokban történik )

A tűzfal ilyen elemekből felépülő szabály sorokból áll. A tűzfal még egy alapvető szempont szerint elkülöníti a csomagokat. Megkülönbözteti a bejövő, kimenő és átmenő csomagokat, így ezekre külön szabályokat állíthatunk fel.


1.3 A masquerade.

Van egy harmadik lehetőség is amit a magrathea-fw tehet egy csomaggal, ez a masquerade (álarcosbál). Ennek lényege hogy a gépre a belső hálózat felől érkező csomagokat meghamisítja mielőtt továbbküldené a másik hálózat "az internet" felé. A hamisításkor átírja a feladó IP címet a sajátjára, majd amikor a csomagra válasz érkezik az abban található címzettet visszaírja az eredeti feladó IP címére és így küldi vissza a belső hálózat megfelelő IP címe felé.

Ennek a módszernek több előnye is van. A belső hálózat gépeit nem kell "routolni" a külső hálózat felé, hiszen a kimenő kommunikáció látszólag mindíg a címfordítást végző tűzfaltól ered.

A belső hálózat gépei így kívülről nem elérhetők mivel a cím visszahamisítás csak válaszcsomagoknál történik meg, kívülről kezdeményezett kapcsolatoknál nem, így egy alapvető védelmet biztosíthatunk a belső hálózat számára. Az egyetlen probléma abból adódhat, ha a belső hálózaton egyes számítógépek olyan hálózati szolgáltatásokat valósítanak meg amiket kivülről is elérhetővé szeretnénk tenni. Ebben az esetben a portátirányítást kell alkalmazni. Nincs szükség "valós" IP címekre.

Az internetes IP cím tartományokból van néhány elkülönített amelyek helyi hálózati használatra fenntartottak.
Ezek a tartományok a következők:

FIGYELEM! A masquerade nem felel meg az alapvető TCP/IP szabványnak,ezért több szolgáltatásnál gondokat okozhat!
Ilyen például az aktív ftp, az IRC dcc kapcsolatai, az AFS, stb stb...


1.4 az IP aliasing

Egy tűzfal vagy átjáró klasszikus kialakításban több hálózati csatolóval ( network interface ) rendelkezik. Lehetséges azonban a hálózat pusztán logikai felosztása, amikor egy fizikailag egységes hálózatot több logikai alhálózatra ( subnet ) osztunk. Ebben az esetben nem szükséges két hálózati eszköz, viszont szükségünk van két különböző logikai eszközre, két eltérő IP címmel az alhálózatoknak megfelelően. Az IP aliasing lényege hogy egy fizikai hálózati eszközön több különböző IP címet használhatunk.


2. Mit jelent a floppys tűzfal és mik az előnyei?

A teljes rendszer egyetlen floppy lemezből áll, így mentes a felesleges programoktól és állományoktól. Ez megkönnyíti a rendszer konfigurálását, és megóv minket a feleslegesen futó szolgáltatásoktól is.

Egy másik nem elhanyagolható szempont hogy ha egyszerűen szeretnénk az internet hozzáférésünket megosztani, egyszerű megoldást keresünk.

Ha nem akarunk hardveres tűzfalat vagy routert vásárolni, és együtt élni szoftverének korlátaival, vagy sokaljuk annak árát, megfelelő alternatíva a floppy-s tűzfal. Általában már egy Pentium 1-es PC is elég arra hogy különösebb lassulás nélkül alkalmazhassuk tűzfalnak. Mivel a tűzfalnak mindig mennie kell ha bármelyik mögötte lévő gépről netezni akarunk, bevett gyakorlat hogy 24 órában bekapcsolva tartják. Ebben az esetben fogyasztás és zaj szempontjából is jobban járunk ha nem használunk merevlemezt.


2.1 A "reporter"

A reporter egy bash alapú "webszerver", amit egy world wide web konferenciára írt webszerverből szűkítettem le.

Előnyei:

Hátrányai:

A tűzfalban beállított menedzsment IP címekről látható a reporter információs weblapja, amelyet a reporter nevű fájlban testreszabhatunk.


3. Mire nem alkalmas ez a tűzfal verzió?

Ez a verzió NEM tartalmaz:

Nincs lehetőség a dinamikus útválasztásra, és a tűzfal szabályok távoli (hálózaton keresztül történő) módosítására.


4. Letöltés, telepítés

A disztribúció weblapja a http://magrathea.ttk.pte.hu/

Itt mindig megtalálod a szoftver legfrissebb verzióját, és az előre elkészített sablonokat (template) is.

A letölthető formátum az img, ami egy floppy bitképe.

Ezt linux alatt a cat /elérési_út/floppy_image_neve.img > /dev/fd0 paranccsal írhatod ki egy lemezre, vagy használhatod a dd parancsot is. DOS felhasználóknak a régi rawrite-ot illetve Windows környezetben a windowsos rawrite nevű ingyenes programot ajánljuk (GNU/GPL)

A géphez lásd az 5.3-as (hadver igények) fejezetet.


5. Konfigurálás

Sajnos a beállításokhoz érteni kell kissé a linux és csomagszűrő tűzfala,az ipchains lelki dolgaihoz.
Hamarosan elkészülnek azonban a tipikusan minimálisan módosítandó sablonok amik szintén letölthetőek lesznek a rendszerhez.


5.1 a shell szkriptekről általában

A shell szkript egy szöveges formátumú fájl, amelyben egy adott shell (parancsértelmező) számára sorolunk fel utasításokat, hasonlóan ahhoz mint amikor egy egy shell-t interaktívan használunk.

A shell szkriptek tipikusan futtathatók ( x - eXecute,végrehajtási jog ).

Első sorukban találjuk meg hogy melyik parancsértelmezőhöz készült az adott szkript.

Pl.: #!/bin/bash
Ez azt jelenti hogy a /bin könyvtárban található bash shellt hívja meg a rendszer az adott szkript lefuttatásakor.
Ha az általunk írt shell szkript nincs a programok között ( a path-ban ) teljes elérési úttal adjuk meg.
Egy shell szkript futtatása pl.: /home/doshika/teszt_konyvtar/elso_szkriptem
A # karakter és az adott sor utána következő része nem kerül értelmezésre. Ezek a kommentek ( megjegyzések ).Az elsö sorban a #! speciális eset.


Változók

Az aktív,értékkel rendelkező változókat a "set" paranccsal listázhatjuk ki.
A tűzfal esetében ezeknek sok jelentősége nincs, azonban belső változóinkat praktikus úgy megadni, hogy ne ütközzenek ezekkel.
Belső változó amelyet mi deklarálunk ( mi hozzuk létre, és adunk neki értéket ), és a szkripten belül használunk. Ezek a változók a szkript lefutása után elvesznek.

A változók nevei betűkből (konvencionálisan nagybetűkből), számokból, és _ illetve - karakterekből állhatnak.Pl.: TESZT_VALTOZO1
Ne használjunk csak számjegyekből álló változót!

A változók "alap típusa" szöveges, és általában létrehozáskor értéket is adunk nekik. Pl.:TESZT_VALTOZO1="proba szoveg..."
Ha a szövegben szóköz is van hasznos az idézőjel, javasolt egyszerűen mindig használni.
Ha egy változó értékét szeretnénk használni $ -et teszünk a neve elé. Pl. a fenti változót használva:
echo $TESZT_VALTOZO1

A fenti példában megismerkedtünk az echo paranccsal, amely a mögé írt szöveget a képernyőre írja. Ez esetben a program lefuttatva a "proba szoveg..." szöveget írja a képernyőre.
Ha a $ jelet nem változó jelölésére szeretnénk használni, vagy a # -et nem megjegyzés elhelyezésére, elé kell írnunk a \ karaktert, amivel jelezzük a parancsértelmező felé hogy a következő karaktert ne értelmezze speciálisan ( ebből következően a \ karakternek a \\ felel meg ).

A belső változók főként azért fontosak a szkriptekben mert ha sok helyen van szükségünk egy szövegre elég egy változóba tenni, és utána annak értékére hivatkozni. Pl.:

...
DISZ_SOR="-magrathea--------------------------------------------------------"
echo $DISZ_SOR
ls	# ez itt egy megjegyzés....
echo $DISZ_SOR
...

Van néhány speciális változó, mint pl. a $? amely az utoljára futott program kilépési kódját adja meg.
Tipikusan 0 a kilépési kód,ha a program hiba nélkül futott le, és valami más egész szám, ha hiba történt ( a különböző értékek programonként változó jelentésűek).

Emellett sokszor értesítést kapunk a programtól is, de ez az egyszerű numerikus visszajelzés a legkönnyebben vizsgálható.

Szintén speciális változó a $(utasítás) is. Ez a változó az adott utasítás kimenetét kapja meg.
Pl.: az echo $(date) a képernyőn: "Sun Dec 18 04:35:09 CET 2005"
Az utasításnak lehetnek paraméterei, amelyek akár változók is lehetnek, illetve egy $()-en belül szerepelhet több független utasítás is, ;-vel elválasztva.
Pl.: echo $(ifconfig $ELSO_KARTYA|grep inet;route -n;for I in HAHA HAHA ; do echo $I ; done)


Ciklusok

A for ciklus felépítésére egy egyszerű példa:
					       |<-ciklusmag-->|
for VALTOZO in valami1 valami2 valami3 ... ; do echo $VALTOZO ; done

(A ; -t bárhol használhatjuk új sor helyett, így természetesen értékként ez is \; -nek írandó )
A for ciklus lényege hogy a VALTOZO először felveszi a valami1 értéket, lefut a ciklusmag ( ez esetben az echo ), majd felveszi a valami2 értéket, újra lefut a ciklusmag, és így tovább amíg a for az utolsó valami értékhez nem ér. Ezután a program futása folytatódik tovább lineárisan a ciklus végét jelző "done" kulcsszó után.

Egy konkrét példa:

---
#!/bin/bash
REKLAMOZANDOK="Bela Carlos Gabor Miklos"
for I in $REKLAMOZANDOK ; do
echo "Eljen $I !"
done
---
A pogram kimenete:
Eljen Bela !
Eljen Carlos !
Eljen Gabor !
Eljen Miklos !
---

Figyelem! a for ciklusban a $REKLAMOZANDOK-at tilos idézőjelbe tenni, mert ez esetben az I változó értéke egyszerűen "Bela Carlos Gabor Miklos" lesz.
Az így megírt program azért is hasznos mert ha még egy nevet szeretnék kiiratni elég csak a REKLAMOZANDOK valtozohoz hozzaadni.

Példa "Végtelen ciklusra"


while : ; do
echo "a program fut, akar ez a kepernyon"
done
echo "ez a sor sohase kerul ki...."

A while a paraméterként megadott feltételt vizsgálja, és addig futtatja a ciklusmagot míg a paramétere ( feltétele ) igaz.
A : egy speciális utasítás amely mindig igaz. Következésképpen ez a ciklus végtelen.


Elágazás, feltételek.

Az imént már szó esett a feltételekről. A while "kiértékeli" azt az utasítást amelyet paraméterként megkap, és ennek alapján dönti el végrehajtódjon-e a ciklusmag.

A klasszikus elágazás az if.
Szerkezete:
if utasítás (azaz az utasítás kilépési kódja 0) ; then (akkor)
utasítás(ok)
else (egyébként)
utasítás(ok)
fi

Az if elágazás hatókörét a fi-vel kell jelezni. Ha az if-nek paraméterben megadott utasítás igaz, a then kulcsszó és az else közötti utasítások futnak le, míg ha hamis az else és a fi közöttiek.

Ha hamis esetben nem kívánunk semmilyen utasítást végrehajtani az else kulcsszó elhagyható.
Lássunk egy újabb példát a while ciklussal és az if elágazással:

while : ; do
if read -n1 -t1 ; then break
else
echo "nyomj meg egy gombot"
fi
done
echo "na vegre"

A programban van egy "végtelen ciklus", amelynek ciklusmagjában egy elágazás található.Az elágazásban az if paramétere a read -n1 -t1. A read utasítás egy sort olvas a képernyőről. A -n1 hatására azonban csupán egyetlen karaktert vár, a -t1 hatására pedig 1 másodpercig vár a karakterre (alapértelmezés szerint egyszerűen addig várna míg le nem ütünk egy karaktert). Ha tehát egy másodpercen belül nem nyomunk le egy billentyűt, a read feladja, és az 1-es hibakóddal kilép, a hibakódot kiértékeli az if, és minthogy nem 0, az else utáni utasításokat hajtja végre, azaz a képernyőre írja a "nyomj meg egy gombot" szöveget. Ezutan a ciklus kezdődik elölről. Ha leütünk egy billentyűt a read kilépési kódja 0 lesz, tehát az if a then és az else közötti utasításokat hajtja végre. Itt a break (törés) utasítás található, amely megszakítja a ciklus futását, és a vezérlést továbbküldi a ciklus utánra, azaz ezesetben a programunk kiírja: "na vegre".

A programok ki és bemenete "átirányítható".

A bemenet lehet:

A kimenet lehet:
A csővezeték jele a bash-ban a |.
A csővezetékkel egy parancs szabványos kimenetét irányíthatjuk rá egy másik program szabványos bementére.
Ez különösen hasznos az úgynevezett "szűrőprogramok" esetében. Az ilyen programok a szabványos bemenetükre érkező adatokon művelet(ek)et végeznek, és a kapott adatokat a szabványos kimenetükön adják ki.
Ilyen parancs például a grep ami alapértelmezésben a szabványos bemenetére érkező sorok közül adja ki a szabványos kimenetén azokat a sorokat amelyekben a számára paraméterként megadott kifejezés szerepel.
Példa a grep csővezetéken keresztüli használatára:
cat lista.txt|grep "ellenorzott"|less A fenti példában a cat program segítségével a szabványos kimenetre íratunk egy fájlt, ezt csővezetéken átadjuk a grep szűrőparancsnak, aminek az ellenorzott paramétert adjuk, minek hatására a grep parancs szabványos kimenetén a lista.txt azon sorai jelennek meg, amelyekben az ellenorzott szó szerepel.Ezt a kimenetet csővezetékkel átirányítottuk a less parancsnak, amelynek segítségével kényelmesen végignézhetjük az így kapott listát.

Fájlokkal kapcsolatos átirányításokat a < , > jelekkel tehetünk. A < karakterrel fájlok tartalmát irányíthatjuk egy program szabványos bemenetére.
A fenti példa kihasználva ezt a lehetőséget:
grep "ellenorzott" < lista.txt | less Ebben a példában közvetlenül a grep szabványos bementére irányítottuk a lista.txt fájl tartalmát, megspórolva így a cat parancs használatát.
A > karakterrel szabványos kimenetet irányíthatunk fájlba (A >> jelekkel szintén fájlba irányíthatunk kimenetet, ilyenkor viszont az állomány korábbi tartalma megmarad, és a kimenet hozzáfűzésre kerül).
Példa a használatára:
cat lista.txt | grep ellenorzott > ellenorzottek_listaja.txt
vagy
grep ellenorzott < lista.txt > ellenorzottek_listaja.txt Linux alatt léteznek speciális fájlok is, pl. eszköz meghajtó fájlok ( device files ). Legtipikusabban a null nevű ilyen speciális fájlt szoktuk használni az átirányításokhoz. Ez a fájl minden beleírt adatot nyomtalanul és hibaüzenet nélkül elnyel.
Példa:
grep ellenorzott lista.txt > /dev/null A fenti példában a grep parancs kimenetét irányítjuk a null eszköz kezelő fájlba ( ami mint az eszközkezelő fájlok általában, a dev könyvtárban található.
A grep parancs itt egyébként második paramétereként kapja meg a bemeneti fájl nevét.


5.2 a tűzfal szkript beállítása

Jelenleg a floppyn található halozat nevű fájl szerkesztésével állítható be minden kívánt opció. Ez a fájl egy shell script.
Rendelkezésre áll a busybox, a dash, az ipchains, és a socket is.
A rendszer induláskor beolvassa az állományokat a floppyról, és a következő újraindításig nem olvassa újra őket.
Így a floppy futás közben kivehető, átírható, majd visszatétel után újraindításkor életbelép az új konfiguráció.
Nyugodtan reset-tel vagy ki-be kapcsolással újraindítható a rendszer, a kezdeti betöltés után a teljes linux a ram-ban van, így nem okoz gondot az ilyesmi.


5.2.1 Sysctl

A sysctl a "proc" virtuális fájlrendszeren belül, a sys alkönyvtárban érhető el. Az itt elhelyezkedő állományokon keresztül információkat kaphatunk a rendszermagtól (kernel),illetve menet közben át is állíthatunk egyes beállításokat.
A tűzfalra és hálózatra vonatkozó információk illetve beállítási lehetőségek a /proc/sys/net könyvtár alatt találhatók.

Linux alatt a sysctl-en keresztül kérdezhetjük le hogy gépünkön engedélyezve van-e a különböző hálózati csatolók közötti forgalmazás. Ez a beállítás kicsit olyasmi mint egy főkapcsoló, önmagában is alkalmas az "átmenő" forgalom tiltására, anélkül hogy tűzfal szabályokkal kéne kiszűrnünk azt.(a különböző hálózati csatolók közti forgalom átengedése eredetileg szabványos viselkedés volt az interneten)
Rendszerinditáskor kikapcsolt állapotban van, az átmenő forgalom tiltott. Ezt le is kérdezhetjük a cat /proc/sys/net/ipv4/ip_forward utasítással. Ha több gépet is kiszolgáló tűzfalat szeretnénk beállítani engedélyeznünk kell az átmenő forgalmat. Érdemes ezt azonban csak azután megtenni hogy a tűzfalszabályokat már beállítottuk, mivel ha még nincsenek tűzfal szabályok nincs ami megszűrje számunkra az átmenő forgalmat.
Az átmenő forgalom engedélyezhető ha 1-est írunk a fenti állományba:
echo "1" > /proc/sys/net/ipv4/ip_forward
Illetve tiltható, ha 0-át írunk bele:
echo "0" > /proc/sys/net/ipv4/ip_forward

Az ICMP protokoll hibakeresésre, ellenőrzésre, és általában a TCP/UDP forgalom vezérlésére használható. Az egyik gyakran használt program amely az ICMP-t használja a ping, amely ICMP_ECHO_REQUEST (ICMP visszhang,ping) kérést küld az általunk paraméterként megadott gép felé, és várja annak visszaérkeztét (ICMP_ECHO_REPLY,pong).
Ezzel könnyedén ellenőrizhetjük hogy egy adott gép elérhető-e vagy sem.
Az ilyen csomagokkal azonban le is lehet foglalni a gépet és elérni hogy a sok csomag miatt hálózati kapcsolatunk lelassuljon, vagy akár teljesen le is álljon.
Különösen alkalmas erre az ún. Broadcast Ping, amikor egy hálózat broadcast címét pingetik és erre szabvány szerint a hálózat minden gépe válaszol(ha pl. 256 gép van a hálózatban 256 szorosára nő az okozott terhelés). A sysctl-en keresztül letilthatjuk a broadcast pingekre történő választ a következő paranccsal:
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Illetve lekérdezhetjük a következő paranccsal:
cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
A 0 azt jelenti, hogy gépünk válaszol a broadcast ping csomagokra, az 1 pedig hogy nem.
Teljesen letiltható az ICMP_ECHO_REQUEST-ekre történő válaszadás a következő parancs segítségével:
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
Illetve ennek beállítását is lekérdezhetjük a következővel:
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
A 0 azt jelenti hogy gépünk válaszol a neki címzett kérésekre ( a broadcast pingre történő válasz a fentebbi icmp_echo_ignore_broadcast beállításától függ), az 1 pedig hogy gépünk semmilyen ping kérésre nem válaszol (ezesetben az icmp_echo_ignore_broadcast beállítása nem számít).

Megjegyzés: A sysctl-en keresztül még sok egyéb paraméter beállítható, illetve lekérdezhető (a kernel fordítási beállításaitól függően), melyekre azonban terjedelmi korlátok miatt nem térünk ki.


5.2.2 Ifconfig

Az ifconfig parancs segítségével kezelhetjük hálózati csatolóinkat.
A disztribúció nem tartalmazza külön az ifconfig parancsot, mivel a busybox magában foglalja azt.
Ennek megfelelően az ifconfig parancs a busybox ifconfig paranccsal hívható meg a disztribben.
Paraméter nélkül az ifconfig aktív hálózati eszközeink beállításait mutatja meg.
A busybox ifconfig -a paranccsal láthatjuk az összes hálózati eszközünket, tehát azokat is amelyeket nem aktivizáltunk ( ez hasznos lehet ellenőrizni hogy a kernel felismert-e minden hálózati kártyát ).
Ha megadunk egy hálózati csatolót csak annak az információit látjuk.
Pl.:

root@en:~# busybox ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 42:D4:B2:42:DB:42  
          inet addr:56.23.108.2  Bcast:56.23.108.255  Mask:255.0.0.0
          inet6 addr: fe80::204:e2ff:fe06:56fe/64 Scope:Link
	  inet6 addr: 3ffe:2500:317:1:29::28/128 Scope:Global
	  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
	  RX packets:4737224 errors:0 dropped:0 overruns:0 frame:0
	  TX packets:122741 errors:5085 dropped:0 overruns:0 carrier:10170
	  collisions:0 txqueuelen:1000 
          RX bytes:619918764 (591.2 MiB)  TX bytes:35352188 (33.7 MiB)
          Interrupt:21 Base address:0x9000 
											  
Megjegyzés: a pirossal jelölt sorok csak abban az esetben jelennek meg,ha ipv6 támogatást is használunk.
Nézzük sorra a fontosabb információkat az eszközröl:
HWaddr: a csatoló fizikai, MAC címe (bővebben az arp-ról szóló dokumentumban).
inet addr: itt láthatjuk az eszköz IP címét.
Bcast: ez a ún. broadcast cím.
Mask: az alhálózati maszk.
Az RX packets és a TX packets sorban statisztikát találunk a küldött és a fogadott csomagokról.

A busybox ifconfig parancs segítségével nem csak lekérdezhetjük hálózati csatolóink beállításait, hanem meg is változtathatjuk azokat.
Pl.:
root@en:~# busybox ifconfig eth0 10.0.1.2 netmask 255.0.0.0 broadcast 10.255.255.255
Az adott hálózati eszköz (az eth0), így megkapja a 10.0.1.2-es IP-t és a hozzá tartozó beállításokat. Ha a kártya eddig nem volt aktív, az ifconfig automatikusan aktiválja azt. Ha a kártya más beállításokat használt az ifconfig egyszerűen átállítja azt.
Egy eszközt deaktiválni a down paraméterrel tudunk.
Pl.:
busybox ifconfig eth0 down
Az eszközök nevét felderíthetjük a busybox ifconfig -a paranccsal.
Egy csatolóhoz úgy rendelhetünk több IP címet, hogy az interfész neve után kettőspont után egy számot írunk ( amivel tkp. egy virtuális csatoló jön létre ).
Pl.:
busybox ifconfig eth0:1 10.4.33.2 netmask 255.0.0.0 broadcast 10.255.255.255
Megjegyzés: Ha nem találunk minden hálózati eszközt az interfészek között ellenőrizzük hogy támogatott-e minden hálózati kártyánk és nincs-e IRQ ütközés köztük.
Az ifconfig használatakor ne felejtsük el, hogy egy kártya felkonfigurálásakor az ifconfig az útválasztáshoz is hozzáteszi annak információit, illetve deaktiváláskor törli azokat.
Mivel a hálózati csatolók konfigurálásakor, a tűzfal beállításakor, illetve az útválasztás beállításai közben előfordulhat hogy a DNS feloldás nem működik lehetőség szerint az ifconfig, route, és ipchains parancsokhoz mindig IP címeket használjunk és ne hosztneveket.


5.2.3 Route

A route parancsa segítségével állíthatjuk be az útválasztást.
A disztribúció nem tartalmazza külön a route parancsot, mivel a busybox magában foglalja azt.
Ennek megfelelően a route parancs a busybox route paranccsal hívható meg a disztribben.

A route paranccsal ( ahogy az imént az ifconfignál is láttuk ) lekérdezhetjük és be is állíthatjuk útválasztásunkat.
Pl.:

busybox route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
191.3.12.0      0.0.0.0         255.255.255.0   U     0      0        0 eth3
192.169.4.0     192.168.1.11    255.255.255.0   UG    0      0        0 eth0
192.169.2.0     192.168.1.20    255.255.255.0   UG    0      0        0 eth0
10.1.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.169.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.4.0     192.168.1.27    255.255.255.0   UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         191.3.12.254    0.0.0.0         UG    0      0        0 eth3
A fenti példában mikor lekérdeztük a jelenlegi konfigurációt, a route parancsnak a -n paramétert adtuk, amely arra vonatkozik hogy a route ne kisérelje meg az IP címekhez tartozó nevek feloldását.
Ezt a paramétert gyakran használjuk, mivel legtöbbször akkor van szükségünk erre a listára mikor valamiért nem működik megfelelően az útválasztás, és így természetesen a DNS szerverek sem érhetők el.
A kimenetben a következőket látjuk:
Destination
Az adott sorban szereplő útválasztási szabály cél hálózatának ( vagy cél gépének IP címe, illetve hálózati címe ).
Az alapértelmezett átjáró esetén ebben az oszlopban a 0.0.0.0 szerepel.
Gateway
Abban az esetben látjuk, ha az adott hálózatot nem közvetlenül érjük el, hanem átjárón keresztül. Ebben az esetben itt szerepel az átjáró IP címe, egyébként 0.0.0.0.
Genmask
Itt látjuk a cél hálózat alhálózati maszkját.
Természetesen ha ez 255.255.255.255 akkor egyetlen gépről beszélünk.
Az alapértelmezett átjáró esetén ebben az oszlopban a 0.0.0.0 szerepel.
Flags
Lásd az ADVANCED.TXT állományban.
Metric
Lásd az ADVANCED.TXT állományban.
Ref
Lásd az ADVANCED.TXT állományban.
Use
Lásd az ADVANCED.TXT állományban.
Iface
Itt láthatjuk hogy az adott útvonal melyik hálózati kártyánkhoz tartozik.

A linux statikus útválasztása szekvenciálisan működik.
A kernel minden csomagnál megvizsgálja, hogy a csomag beleesik-e valamelyik szabály hatáskörébe ( azaz a csomag célja a felsorolt cél hálózatok/gépek között szerepel-e ) fentről lefelé haladva. Az utolsó szabály általában a "default gateway", az alapértelmezett átjáró, amely gépnek gépünk továbbküldi azokat a csomagokat amelyekre egyik korábbi szabály sem vonatkozott.

A route paranccsal törölhetünk illetve hozzá is adhatunk szabályokat.
Lássunk egy példát az alapértelmezett átjáróra vonatkozó szabály hozzáadására:

busybox route add default gw 191.3.12.254 dev eth0
(A dev kulcsszó használata, és utána a hálózati eszköz megadása nem kötelező)

Hálózathoz vezető közvetlen útvonal hozzáadása:
busybox route add -net 10.2.0.0/16 dev eth1
Hálózathoz vezető útvonal hozzáadása átjárón keresztül:
busybox route add -net 10.3.1.0/24 gw 10.2.1.15
(Az átjáróra kell hogy mutasson egy routing szabály hogy egy ilyen parancsot a route elfogadjon)

Egy géphez vezető útvonal hozzáadása közvetlenül:
busybox route add -host 11.12.6.7 dev eth0
A legutóbbi szabály törlése:
busybox route del -host 11.12.6.7 dev eth0
(egy szabály törlésének szintaktikája minden esetben megegyezik a szabály hozzáadásával, csak az "add" kulcsszó helyett a "del" szót kell használni)


5.2.4 Ipchains

Az ipchains a 2.2-es kernel széria tűzfal szoftvere.


Az ipchains beépített, azaz alapértelmezésben is jelenlévő láncai az input, a forward, és az output láncok.
Az input és output láncok a gépről kifelé illetve befelé irányuló csomagok szűrésében játszik szerepet, míg a forward lánc a gép különböző (akár logikai, lásd 1.4 az IP aliasing) hálózati kártyái közötti forgalmat szabályozza.

Alapértelmezés szerint mindhárom lánc üres, és a Policy ACCEPT.
A Policy adja meg hogy mi történjen egy csomaggal az adott lánc végén. Az ACCEPT pedig az engedélyezést jelenti.

Az ipchains segítségével lekérdezhetjük hogy melyik láncban milyen szabályok találhatók, illetve hogy milyen további láncok találhatók a tűzfalban, illetve hogy a beépített láncoknak mi a Policy-je.

A lekérdezést az

ipchains -L
paranccsal hajthatjuk végre. (A -L opció a list, azaz listázás)
Megyjegyzés: ha a -n opciót is hozzáteszzük a parancshoz, az ipchains nem gépneveket, hanem IP címeket ír ki. Ez hasznos abban az esetben ha nincs elérhető DNS szerver, és ezért a gépnevek lekérdezése hosszú várakozás után sem sikerül.

...

5.3 a hardver igények

Pentium osztalyú számítógép, vagy újabb, 16Mb RAM (32 ajánlott). 1.44Mb Floppy meghajtó, legalább egy ethernet hálózati eszköz.

Támogatott hálózati kártyák:


6. További dokumentáció, segítség, stb.

Elöször is olvasd végig ezt a fájlt.

Ha további kérdések merülnek fel benned, olvasd el az ADVANCED.TXT-t is, ami a letölthető floppyn megtalálható.

IRC-n az ircnet-en állunk rendelkezésedre a #penta csatornán.

Ha valamilyen hibát észlelnél a disztribúcióban, vagy végképp elakadnál, írj levelet a magrathea@omega.ttk.pte.hu levelezőlistára.


7. Szerzői jogok

A disztribúció nem más mint különböző programok egy rendszerbe történő ágyazása. Az egyes programok szerzői jogai természetesen mindig az adott program íróit illetik meg.

Maga a disztribúció GNU/GPL copyright alatt kerül terjesztésre.

A magrathea 1 floppys tűzfal verziójának programjai:


8. A szerző további haszontalan megjegyzései

Konzol nincs. Olyannyira nincs, hogy a rendszer 3 enter után leáll.

Miért nem konfigurálható a rendszer távolról?
Mivel távolról nem konfigurálható a tűzfal, a szabályokon történő változtatásokhoz oda kell menni a géphez, ami jelentősen csökkenti a különböző crackerek lehetőségeit.

Miért nincs konzol?
Ez a tűzfal verzió nem vállalati felhasználásra és nem vér profiknak készült. A konzol elhagyásával szükségtelenné vált a változások visszaírása a lemezre, így nem lehet gond egy szabálytalan újraindításból, vagy egy áramszünetből.
Az a kényelmetlen helyzet sem állhat elő hogy egy konzolon megtörtént változtatást elfelejtünk menteni a gépen, és egy távollétünkben történő újraindítás után semmi sem működik.

Sok sikert kivánok mindenkinek, és egy kicsit is komolyabb alkalmazás esetében ajánlom olvasásra az ADVANCED.TXT-t is (ha majd elkészül).

A disztribúcióval kapcsolatban nincs helye semmiféle garanciális követelésnek.


Carlos és a Magrathea csapat