Weboldal keresés

Az Iptables tűzfal beállítása a szolgáltatások távoli eléréséhez Linux alatt – 8. rész


Bemutatkozik a Linux Foundation Certification Program

Emlékszel az LFCE (Linux Foundation Certified Engineer) sorozat 1. részéből – Az Iptables-ról, hogy alapvető leírást adtunk arról, mi a tűzfal: egy felügyeleti mechanizmus a hálózatba érkező és onnan kilépő csomagok. A „kezelés” alatt valójában a következőket értjük:

  1. Bizonyos csomagok hálózatunkba való belépésének vagy elhagyásának engedélyezése vagy megakadályozása.
  2. Más csomagok továbbítása a hálózat egyik pontjáról a másikra.

előre meghatározott kritériumok alapján.

Ebben a cikkben megvitatjuk, hogyan valósítsuk meg az alapvető csomagszűrést, és hogyan állítsuk be a tűzfalat az iptables-szal, amely a netfilter frontendje, amely a tűzfalra használt natív kernelmodul.

Kérjük, vegye figyelembe, hogy a tűzfal egy hatalmas téma, és ennek a cikknek nem célja, hogy átfogó útmutatóul szolgáljon a vele kapcsolatos tudnivalók megértéséhez, hanem inkább kiindulópontként szolgál a téma mélyebb tanulmányozásához. Mindazonáltal a sorozat 10. részében újra megvizsgáljuk a témát, amikor megvizsgáljuk a Linux tűzfalának néhány konkrét felhasználási esetét.

A tűzfalra úgy gondolhat, mint egy nemzetközi repülőtérre, ahol utasszállító repülőgépek jönnek és mennek szinte a hét minden napján, a hét minden napján. Számos feltétel alapján, mint például az útlevél érvényessége vagy a származási országa (hogy csak néhány példát említsünk), beutazhat vagy elhagyhat egy bizonyos országot, vagy nem.

Ugyanakkor a repülőtéri tisztek utasíthatják az embereket, hogy szükség esetén a repülőtér egyik helyéről a másikra költözzenek, például amikor át kell menniük a Vámszolgálaton.

A reptéri analógiát hasznosnak találhatjuk az oktatóanyag további részében. Csak tartsa szem előtt a következő összefüggéseket, ahogy haladunk:

  1. Személyek=Csomagok
  2. Tűzfal=Repülőtér
  3. Ország #1=Hálózat #1
  4. 2. ország=2. hálózat
  5. A tisztek által betartatott repülőtéri szabályok=tűzfalszabályok

Iptables – Az alapok

Alacsony szinten maga a kernel „dönti el”, hogy mit kezdjen a csomagokkal a láncokba vagy mondatokban csoportosított szabályok alapján. Ezek a láncok határozzák meg, hogy milyen lépéseket kell tenni, ha egy csomag megfelel az általuk meghatározott feltételeknek.

Az iptables első lépése annak eldöntése, hogy mit tegyen egy csomaggal:

  1. Elfogadja (átengedi a hálózatunkba)?
  2. Elutasítja (megakadályozza, hogy hozzáférjen a hálózatunkhoz)?
  3. Továbbítja (egy másik láncba)?

Arra az esetre, ha kíváncsi lenne, miért hívják ezt az eszközt iptables-nak, ez azért van, mert ezek a láncok táblázatokba vannak rendezve, ahol a szűrőtábla a legismertebb és a legmegfelelőbb. csomagszűrés megvalósítására szolgál annak három alapértelmezett láncával:

1. Az INPUT lánc kezeli a hálózatba érkező csomagokat, amelyeket helyi programoknak szánnak.

2. Az OUTPUT lánc a helyi hálózatból származó csomagok elemzésére szolgál, amelyeket ki kell küldeni.

3. A FORWARD lánc feldolgozza azokat a csomagokat, amelyeket egy másik célállomásra kell továbbítani (mint egy útválasztó esetében).

Mindegyik lánchoz tartozik egy alapértelmezett házirend, amely megszabja, hogy mi a teendő alapértelmezés szerint, ha a csomagok nem egyeznek a lánc egyik szabályával sem. A következő parancs futtatásával megtekintheti az egyes láncokhoz létrehozott szabályokat és az alapértelmezett házirendet:

iptables -L

A rendelkezésre álló irányelvek a következők:

  1. ACCEPT → átengedi a csomagot. Minden olyan csomag bekerül a hálózatba, amely nem felel meg a lánc szabályainak.
  2. DROP → csendesen eldobja a csomagot. Minden olyan csomag, amely nem felel meg a lánc szabályainak, meg van akadályozva abban, hogy belépjen a hálózatba.
  3. REJECT → elutasítja a csomagot, és tájékoztató üzenetet küld vissza. Ez különösen nem működik alapértelmezett házirendként. Ehelyett a csomagszűrési szabályok kiegészítésére szolgál.

Amikor arról kell dönteni, hogy melyik politikát alkalmazza, mérlegelnie kell az egyes megközelítések előnyeit és hátrányait a fent leírtak szerint – vegye figyelembe, hogy nincs egyforma megoldás. - minden megoldás.

Szabályok hozzáadása

Ha szabályt szeretne hozzáadni a tűzfalhoz, hívja meg az iptables parancsot az alábbiak szerint:

iptables -A chain_name criteria -j target

ahol,

  1. A -A a Hozzáfűzés rövidítése (az aktuális szabály hozzáfűzése a lánc végéhez).
  2. A lánc_neve értéke INPUT, OUTPUT vagy FORWARD.
  3. A cél az ebben az esetben alkalmazandó művelet vagy irányelv (ELFOGADÁS, ELUTASÍTÁS vagy ELADÁS).
  4. A kritérium azon feltételek összessége, amelyek alapján a csomagokat megvizsgálni kell. A következő jelzők közül legalább egyből (valószínűleg többből) áll. A zárójelben lévő, függőleges sávval elválasztott opciók egyenértékűek egymással. A többi opcionális kapcsolók:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Tesztelési környezetünk

Ragasszuk fel mindezt 3 klasszikus példában az alábbi tesztkörnyezet használatával az első kettőhöz:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

És ez az utolsó példa

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
1. PÉLDA: A DROP és RJECT házirendek közötti különbség elemzése

Először DROP házirendet fogunk meghatározni a tűzfalunkba történő bemeneti pingekhez. Vagyis az icmp-csomagokat csendben eldobják.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Mielőtt folytatnánk az ELUTASÍTÁS részt, minden szabályt kiürítünk az INPUT láncból, hogy megbizonyosodjunk arról, hogy csomagjainkat ez az új szabály teszteli:

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

2. PÉLDA: Az ssh bejelentkezés letiltása/újbóli engedélyezése a dev2-ről a dev1-re

Az OUTPUT lánccal fogunk foglalkozni, ahogyan a kimenő forgalmat is kezeljük:

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

3. PÉLDA: NFS-kliensek (192.168.0.0/24-től) NFS4-megosztások csatlakoztatásának engedélyezése/tiltása

Futtassa a következő parancsokat az NFSv4-kiszolgálón/tűzfalon a 2049-es és 111-es portok mindenfajta forgalom esetén történő bezárásához:

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Most nyissuk meg ezeket a portokat, és nézzük meg, mi történik.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Mint látható, a forgalom megnyitása után tudtuk csatolni az NFSv4 megosztást.

Szabályok beszúrása, hozzáfűzése és törlése

Az előző példákban bemutattuk, hogyan lehet szabályokat hozzáfűzni az INPUT és OUTPUT láncokhoz. Ha inkább egy előre meghatározott pozícióba szeretnénk beszúrni őket, akkor inkább a -I (nagybetűs i) kapcsolót használjuk.

Ne feledje, hogy a szabályok egymás után kerülnek kiértékelésre, és az értékelés leáll (vagy ugrik), ha egy DROP vagy ACCEPT házirend egyezik. Emiatt előfordulhat, hogy szükség szerint felfelé vagy lefelé kell mozgatnia a szabályokat a lánclistában.

Ennek bemutatására egy triviális példát fogunk használni:

Tegyük fel a következő szabályt,

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

a BEMENETI lánc 2. pozíciójában (így az előző 2. helyet 3.-ként mozgatja)

A fenti beállítás segítségével a forgalom ellenőrzi, hogy a 80-as portra irányul-e, mielőtt a 2049-es portot ellenőrizné.

Alternatív megoldásként törölhet egy szabályt, és módosíthatja a fennmaradó szabályok célját REJECT értékre (a -R kapcsolóval):

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Végül, de nem utolsósorban, emlékeznie kell arra, hogy a tűzfalszabályok állandó működéséhez el kell mentenie őket egy fájlba, majd rendszerindításkor automatikusan vissza kell állítani őket (az Ön által választott módszerrel vagy azzal, elérhető az Ön terjesztésére).

Tűzfalszabályok mentése:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Szabályok visszaállítása:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Itt egy hasonló eljárást láthatunk (a tűzfalszabályok kézi mentése és visszaállítása) az iptables.dump nevű álfájl használatával, a fent látható alapértelmezett fájl helyett.

iptables-save > iptables.dump

Ha azt szeretné, hogy ezek a változtatások a rendszerindítások között megmaradjanak:

Ubuntu: Telepítse az iptables-persistent csomagot, amely betölti az /etc/iptables/rules.v4 fájlba mentett szabályokat.

apt-get install iptables-persistent

CentOS: Adja hozzá a következő 2 sort az /etc/sysconfig/iptables-config fájlhoz.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: Az engedélyezett portok, protokollok, címek és egyebek listája (vesszővel elválasztva) a /etc/sysconfig/SuSEfirewall2 fájlban.

További információkért tekintse meg magát a fájlt, amelyhez rengeteg megjegyzés tartozik.

Következtetés

A cikkben található példák, bár nem fedik le az iptables összes csengőjét és sípját, azt a célt szolgálják, hogy bemutassák, hogyan lehet engedélyezni és letiltani a bejövő vagy kimenő forgalmat.

Azok számára, akik tűzfal rajongók, ne feledje, hogy ennek az LFCE sorozatnak a 10. részében ezt a témát konkrétabb alkalmazásokkal is meg fogjuk tekinteni.

Ha bármilyen kérdése vagy észrevétele van, forduljon hozzám bizalommal.