A Linux tűzfala létfontosságú szerepet játszik a számítógépes rendszerek védelmében. Gátként működik, szabályozza és szűri a hálózati forgalmat, hogy megvédje a rendszert az illetéktelen hozzáféréstől, támadásoktól és egyéb fenyegetésektől. Megfelelően konfigurált tűzfal nélkül a kiszolgáló kiszolgáltatott lehet különféle típusú kibertámadásoknak, ami súlyos következményekkel járhat az adatbiztonság és a bizalmas kezelés szempontjából.
Ebben a cikkben a Linux tűzfal beállításának két fő eszközét tekintjük meg: a tűzfalat és az iptables-t. Összehasonlító elemzést végzünk jellemzőikről, funkcionalitásukról és előnyeiről. Ezenkívül részletes útmutatást adunk ezen eszközök mindegyikének beállításához és használatához, valamint megvitatjuk a rendszer tűzfallal történő biztosításának legjobb gyakorlatait Linux platformon. Minden művelet bemutatásra kerül a virtuális szerver root hozzáféréssel.
Tűzfal konfigurálása Linuxon
Tűzfal (Firewall Daemon) egy program a tűzfal kezelésére Linux operációs rendszerekben. Felhasználói felületet biztosít a tűzfalszabályok konfigurálásához, a hálózati alkalmazások kapcsolatainak engedélyezéséhez vagy blokkolásához. Alapértelmezés szerint a legtöbb kiszolgálódisztribúcióban előre telepítve van. Ha a Firewalld nincs előre telepítve, akkor a disztribúció hivatalos tárolóitól függetlenül telepíthető.
Red Hat rendszerek esetén (például RHEL, CentOS, Fedora) a telepítés a következő paranccsal történik:
yum install firewalld
Debian/Ubuntu esetén:
apt-get install firewalld
Telepítés után azonnal elindítható és aktiválható a következő paranccsal:
systemctl start firewalld
Ezután hozzá kell adnia a szolgáltatást az induláshoz:
systemctl enable firewalld
Ezen a ponton javasoljuk az ufw letiltását, mivel ennek az eszköznek a tűzfallal vagy iptables-szal történő egyidejű használata nem javasolt. Ellenőrizze az állapotot:
systemctl status ufw
A leállításhoz írja be a következő parancsot:
systemctl stop ufw
A teljes deaktiváláshoz:
ufw disable
Ezen műveletek után folytathatja a tűzfal beállítását.
Először is meg kell határozni a bizalmi zónákat. A Firewall a zónák fogalmát használja a hálózati interfészek megbízhatósági szintjének meghatározására. Minden interfészhez egy zóna van hozzárendelve, és a tűzfalszabályok a zónától függően kerülnek alkalmazásra. Az összes elérhető zóna listája a következő paranccsal nyílik meg:
firewall-cmd --get-zones
Általában 4 fő zónát használnak:
- nyilvános: Ez a zóna az Ön által nem biztonságosnak tartott hálózatokhoz való;
- Magán: Otthoni hálózatokra vagy más megbízható hálózati kapcsolatokra vonatkozik;
- belső: Belső hálózatokhoz használatos, például egy szervezeten vagy vállalati hálózaton belüli hálózatokhoz;
- Demilitarizált zóna: Ebben a zónában általában olyan szervereket helyeznek el, amelyeknek elérhetőnek kell lenniük az internetről.
Ez azonban csak egy példa. Saját zónát a következő paranccsal adhat hozzá:
firewall-cmd --permanent --new-zone=nameyourzone
Hozzáadás után újra kell tölteni:
firewall-cmd --reload
Egy zóna törléséhez hasonló módszert alkalmaznak
firewall-cmd --permanent --delete-zone=nameyourzone
A zónák meghatározása után engedélyezni kell a forgalmat a szükséges szolgáltatások és portok számára. Egy bizonyos szolgáltatás engedélyezéséhez használja a következő parancsot:
firewall-cmd --zone=public --add-service=name
Hol név a szolgáltatás neve. Például, hogy engedélyezze a forgalmat az Apache számára:
firewall-cmd --zone=public --add-service=http
A megengedett portok meghatározásához használja a következő parancsot:
firewall-cmd --zone=public --add-port=number/protocol
Például az SSH szabványos 22-es portja így néz ki:
firewall-cmd --zone=public --add-port=22/tcp
Ebben a szakaszban a fő szabályok már létrejöttek. Ezután határozza meg a forgalom feldolgozásának módját a forrástól, a célállomástól, a porttól és egyéb feltételektől függően. Szabály hozzáadásához (a nyilvános zóna példaként):
firewall-cmd --zone=public rule
Például a bejövő forgalom engedélyezéséhez bármely forrásból a 80-as portra (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
Szabály eltávolítása:
firewall-cmd --permanent --remove-rule=rule_specification
Hol szabály a szabály típusa (pl. port, service, rich-rule stb.), és szabály_specifikáció maga a szabály specifikációja.
Miután módosította a tűzfal konfigurációját, el kell mentenie és alkalmaznia kell azokat. A módosítások mentéséhez használja a következő parancsot:
firewall-cmd --runtime-to-permanent
A módosítások alkalmazása:
firewall-cmd --reload
A beállítás befejezése után ellenőrizheti a kiválasztott paramétereket az összes szabály listájának megnyitásával:
firewall-cmd --list-all
Ha bármilyen probléma adódik, ellenőrizze a Firewalld naplóit a következő paranccsal:
journalctl -u firewalld
Megjegyzés: Csak a kapcsolat beállításának általános algoritmusával foglalkoztunk. Az eszköz széles körű funkciókkal rendelkezik. Az összes elérhető opcióval kapcsolatos teljes körű információért használja a hivatalos dokumentumok vagy nyissa meg a súgót:
firewall-cmd --help
Az iptables beállítása Linuxon
A Firewallddal ellentétben az iptables egy régebbi, de még mindig széles körben használt eszköz a Linuxban a tűzfal kezelésére. Közvetlenebb és rugalmasabb megközelítést biztosít a csomagszűrési szabályokhoz a Linux kernel szintjén. Az iptables azonban fejlettebb tudást és tapasztalatot igényel, mint a Firewalld, így kevésbé hozzáférhető a kezdők számára. Ellenőrizze az eszköz előre telepített verzióját a következő paranccsal:
iptables -V
Ha az eszköz nincs telepítve, akkor telepíteni kell. Ubuntu, Debian telepítési parancs:
apt install iptables
Red Hat rendszerek esetén (pl. CentOS, Fedora):
yum install iptables
A telepítés utáni aktiválási parancs:
systemctl start iptables
Az indításhoz való hozzáadáshoz hajtsa végre:
systemctl enable iptables
Az iptables konfigurációjának elindítása előtt fontos megérteni, hogyan működik. Ebben segít a program szintaxisa. A következőképpen néz ki:
iptables -t table action chain additional_parameters
Nézzünk mélyebbre az egyes tételekbe.
Az Iptables négy fő táblával rendelkezik: filter, nat, mangle és raw. Mindegyiket bizonyos típusú csomagok feldolgozására tervezték, és megvannak a saját szabályláncai:
- szűrő: Ez a leggyakrabban használt tábla, amely csomagszűrési szabályokat tartalmaz. A csomagok engedélyezésével vagy elutasításával kapcsolatos döntések meghozatalára szolgál.
- nat: Ez a táblázat a csomagokban lévő hálózati címek és portok módosítására szolgál. Gyakran használják a maszkolás (NAT) beállítására.
- mángorló: Ebben a táblázatban módosíthatja a csomagfejléceket. Speciális csomagműveletekhez, például jelöléshez használják.
- nyers: Ez a táblázat a kapcsolatkövető rendszeren való áthaladás előtt érvényes szabályok konfigurálására szolgál. Általában olyan szabályok beállítására használják, amelyeket a nyomkövető rendszernek nem szabad módosítania, például csomagok eldobására bizonyos címekről.
Minden táblázat egy sor láncot tartalmaz. A láncok szabálysorozatok, amelyeket egymás után ellenőriznek. Három előre meghatározott lánc létezik:
- BEMENET (bejövő). A lánc szabályai határozzák meg, hogy mit kell tenni a bejövő csomagokkal.
- KIMENET (kimenő). Ez a lánc minden olyan csomagra vonatkozik, amelyet a számítógép a hálózat többi eszközére vagy számítógépére küld.
- ELŐRE (továbbítás). A lánc szabályai meghatározzák, hogy mit kell tenni a továbbított csomagokkal.
Végül minden láncnak van valamilyen akciója (célpontja). A gyakorlatban 5 fő műveletet alkalmaznak:
- ELFOGAD: Hagyja, hogy a csomag áthaladjon a tűzfalon.
- DROP: A csomag elutasítása és válasz nélkül dobja el.
- ELUTASÍT: A csomag elutasítása és ICMP hibaüzenet küldése a feladónak.
- BEJELENTKEZÉS: naplózza a csomagot a rendszernaplóba, és hajtson végre egy másik műveletet (pl. ELFOGADÁS vagy DROP).
- VISSZATÉRÉS: Hagyja abba a szabályok ellenőrzését az aktuális láncban, és térjen vissza a hívó lánchoz (ha van).
A telepítés elindításához nyissa meg a meglévő szabályok listáját a következő paranccsal:
iptables -L
Útmutatóként az Iptables konfigurálásához nézzünk gyakorlati példákat a leggyakrabban használt parancsokra. Az egyszerűség kedvéért a példákat 3 csoportra osztjuk, az adott lánctól függően.
Lánc INPUT:
- TCP protokollon keresztül bejövő forgalom engedélyezése a 80-as porton:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Engedélyezze a bejövő forgalmat UDP protokollon keresztül a 22-es porton:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Egy adott IP-címről érkező forgalom blokkolása:
iptables -A INPUT -s 192.168.1.100 -j DROP
Lánc KIMENET:
- Kimenő forgalom engedélyezése TCP protokollon keresztül a 443-as porton:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Engedélyezze a kimenő forgalmat UDP protokollon keresztül a 80-as porton:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Blokkolja a kimenő forgalmat egy adott portra (például 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Lánc ELŐRE:
- Az IP-címek meghatározott tartományáról továbbított forgalom blokkolása:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Blokkolja a csomagok továbbítását egy adott hálózati interfészről:
iptables -A FORWARD -i eth1 -j DROP
3. Korlátozza az egyidejű kapcsolatok számát egy adott porton (ebben a példában 10 kapcsolat percenként a 80-as porton):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Mint látható, minden egyes esetben egy további argumentum (parancs) kerül felhasználásra. A lehetséges érvek teljes listájának megtekintéséhez és az eszköz funkcióinak általános támogatásához írja be:
iptables -h
A beállítások helyességének ellenőrzéséhez írja be újra a parancsot a szabályok listájának megtekintéséhez:
iptables -L
Egy adott szabály törléséhez használja a következő parancsot:
iptables -D chain rule_number
Például, ha törölni szeretné az 1. számú szabályt az INPUT láncból, a parancs így fog kinézni:
iptables -D INPUT 1
Az összes szabály törlése egyetlen paranccsal:
iptables -F
Fontos megjegyzés: az iptables szabályok nem kerülnek automatikusan mentésre a rendszer vagy a szolgáltatás újraindítása után. A szabályok mentéséhez hozzá kell adni őket egy konfigurációs fájlhoz, és újraindítás után vissza kell állítani őket. A iptables-save és a iptables-restore segédprogramok segíthetnek ebben. A szabályok mentéséhez írja be a következő parancsot:
iptables-save > /etc/iptables/rules.v4
Ez elmenti az aktuális iptables-szabályokat a rules.v4 fájlba. Az újraindítás utáni visszaállításhoz írja be:
iptables-restore < /etc/iptables/rules.v4
Ez a parancs visszaállítja a szabályokat a rules.v4 fájlból.
Összegzés
A tűzfal konfigurálása Linux rendszeren tűzfal vagy iptables használatával fontos szempont a kiszolgáló biztonságának biztosításában. Mindkét eszköz megbízható eszközöket kínál a hálózati forgalom kezeléséhez, valamint a rendszer megóvásához az illetéktelen hozzáféréstől és a kibertámadásoktól. A tűzfal és az iptables közötti választás a felhasználó egyedi igényeitől és preferenciáitól függ, figyelembe véve a különböző funkciókat és erősségeiket.