Felhasználói eszközök

Eszközök a webhelyen


oktatas:linux:tuzfal:netfilter

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Előző változat mindkét oldalon Előző változat
oktatas:linux:tuzfal:netfilter [2020/12/05 21:19]
admin eltávolítva
oktatas:linux:tuzfal:netfilter [2020/12/05 21:20] (aktuális)
admin létrehozva
Sor 1: Sor 1:
-[[:oktatas:​linux:​tűzfal|< Tűzfal]] +[[oktatas:​linux:​tuzfal|< Tűzfal]]
- +
  
 ====== Netfilter ====== ====== Netfilter ======
  
-  * **Szerző:** Sallai András +  * [[oktatas:linux:tuzfal:netfilter:A netfilter]] 
-  * Copyright (c) Sallai András, 2011, 2015, 2018 +  * [[oktatas:​linux:​tuzfal:​netfilter:​iptables]] 
-  * LicencGNU Free Documentation License 1.3 +  * [[oktatas:linux:tuzfal:netfilter:nftables]] 
-  * Webhttp://szit.hu +  * [[oktatas:linux:tuzfal:​netfilter:​Netfilter ​jegyzet]]
- +
- +
- +
-===== Csomagszűrők ===== +
- +
-csomagszűrés tulajdonképpen a TCP/IP +
-protokoll rétegein végrehajtott korlátozások,​ +
-szabálylisták meghatározása. Szabályokat állíthatunk fel +
-cél és forrás IP cím alapján, cél és forrás port alapján, +
-megnézhetjük milyen jelzők vannak beállítva egy érkező +
-csomagban (például SYN jelző, stb.). Szűrhetünk protokollokra,​ +
-de megjelölhetünk egyes csomagokat, stb.  +
- +
-A csomagokat elfogadhatjuk,​ eldobhatjuk,​ elutasíthatjuk,​ +
-naplózhatjuk,​ stb. +
- +
- +
- +
-===== A Netfilterről ===== +
- +
-A Netfilter a Linux csomagszűrő rendszere, amelyet az iptables, ip6tables, ebtables és arptables paranccsal irányíthatunk.  +
-A Netfilter a hálózatba érkező csomagokat láncokon keresztül vezeti. A láncok kapcsolatban vannak néhány ​netfilter +
-táblával, amelyen keresztül elérhetjük a láncon mozgó csomagokat.  +
- +
-Az alábbi ábra ezt szemlélteti:​ +
- +
-<​code>​ +
- +
-   ​--->​PRE------>​[ROUTE]--->​FWD---------->​POST------>​ +
-       ​Conntrack ​   |       ​Mangle ​  ​^ ​   Mangle +
-       ​Mangle ​      ​| ​      ​Filter ​  ​| ​   NAT (Src) +
-       NAT (Dst)    |                |    Conntrack +
-       ​(QDisc) ​     |             ​[ROUTE] +
-                    v                | +
-                    IN Filter ​      OUT Conntrack +
-                    |  Conntrack ​    ​^ ​ Mangle +
-                    |  Mangle ​       |  NAT (Dst) +
-                    v                |  Filter +
-</​code>​ +
- +
- +
-Baloldalról jönnek a csomagok befele, és először elérik a PREROUTING láncot (röviden PRE). +
-Tulajdonképpen megnézzük kell-e valamit tennünk a csomagokkal routolás előtt.  +
-A PRE felirat alatt látjuk, hogy mi az ami a csomagok továbbjutásába beleszólhat. +
-  - beleszólhat a csomagok conntrack rendszer +
-  - beleszólhatunk a Mangle táblát kezelve +
-  - beleszólhatunk a NAT táblát kezelve +
-  - beleszólhat a forgalomszabályzó rendszer +
- +
-Ha keresztül jutott a PREROUTING láncon, jöhet a routolás, azaz az útválasztás.  +
-El kell döntenie az útválasztó algoritmusoknak,​ hogy a csomag nekünk szól vagy +
-más gépnek kell továbbítani. Ha nekünk szól, akkor a helyi folyamatok felé irányítjuk +
-az INPUT láncon keresztül (az ábrán IN), ha nem, akkor a FORWARD láncon (az ábrán FDW)  +
-keresztül mehet az interfész felé. Persze itt érinteni fogja még a POSTROUTING láncot +
-(ábrán POST).  +
- +
- +
-Ha a csomag az INPUT láncon jön befele a helyi folyamatok felé akkor három dolog szólhat  +
-bele a csomag útjába.  +
-  - beleszólhat a conntrack rendszer +
-  - a filter táblán keresztül szabályozhatjuk +
-  - a mangle táblán keresztül szabályozhatjuk +
- +
-Ha a FORWARD láncon megy kifele, akkor két dolog szólhat bele a csomag útjába: +
-  - a filter táblán keresztül szabályozhatjuk +
-  - a mangle táblán keresztül szabályozhatjuk +
- +
-Ez után persze még át kell jutnia a POSTROUTING láncon is, ahol újabb szabályok jöhetnek:​ +
-  - a mangle táblán keresztül szabályozhatjuk +
-  - a NAT táblán keresztül szabályozhatjuk +
-  - beleszólhat a conntrack rendszer +
- +
-Ezek után még egy eset lehetséges. A csomag nem kintről jön, hanem a helyi folyamatok felől megy +
-kifele. Ekkor két láncot érint. Elsőként az OUTPUT láncot, majd routing után a POSTROUTING láncot. +
-Az OUTPUT láncon beleszólhat:​ +
-  - a Conntrack rendszer +
-  - a mangle táblán keresztül szabályozhatjuk +
-  - a NAT táblán keresztül szabályozhatjuk +
-  - a filter táblán keresztül szabályozhatjuk +
- +
-A POSTROUTING láncon beleszólhat:​ +
-  - a mangle táblán keresztül szabályozhatjuk +
-  - a NAT táblán keresztül szabályozhatjuk +
-  - a Conntrack rendszer +
- +
- +
-Láthatjuk, hogy mi három táblán keresztül szólhatunk bele a csomagok útjába: +
-  * filter +
-  * mangle +
-  * nat +
-  * raw +
- +
-A listában szerepel még egy negyedik tábla is, a raw, ezt kivételek kezeléséhez szoktuk használni.  +
-A táblák kezelését az iptables parancssori programmal fogjuk szabályozni. +
- +
-  +
- +
-=== Működés === +
- +
-  * szabálylistákat állítunk fel +
-  * a kernel minden beérkező csomagot végig futtat a listákon +
-  * az első egyező szabálynál végrehajtja az ott beállított tevékenységet +
-  * tevékenységek lehetnek: +
-    * elfogadás +
-    * eldobás +
-    * naplózás +
- +
- +
-=== Használt parancs === +
- +
-Fentebb már említettük,​ hogy az iptables parancsot fogjuk használni. A korábbi kernel verzióknál nem ez volt a program neve: +
- +
-  * 1.3 kernel pf +
-  * 2.0 kernel ipfwadm +
-  * 2.2 kernel ipchains +
-  * 2.4 kernel iptables +
-  * 2.6 kernel iptables +
- +
-=== Egyéb netfilter programok === +
- +
-Az iptables parancs mellett van még néhány parancs amelyet használhatunk. A Netfilter szabályozásához használható parancsok listája: +
- +
-  * ebtables (Bridge) +
-  * arptables (ARP) +
-  * iptables (IPv4) +
-  * ip6tables (IPv6) +
- +
- +
-===== Fogalmak ===== +
-==== Láncok ==== +
- +
-A fentiekből kiderült, hogy van öt darab láncunk. Foglaljuk össze ezeket: +
- +
-  * PREROUTING +
-    * interfészről jön a csomag, még routing előtt +
-  * FORWARD +
-    * routing után, ha a csomag nem lokális folyamatnak szól +
-  * POSTROUTING +
-    * routing után miután egy csomag elhagyja a vermet +
-  * INPUT +
-    * routing után, ha a csomag lokális folyamatnak szól +
-  * OUTPUT +
-    * routing előtt, egy lokális folyamatól megkapja a verem a csomagot +
- +
-A szabályokat tehát ezekre a láncokra kell beállítani.  +
-Az iptables parancsnak meg fogjuk mondani, hogy melyik láncra szeretnénk  +
-szabályt felállítani.  +
- +
-==== Illeszkedés ==== +
- +
-Az iptables parancsnak meg kell mondanunk, hogy milyen csomagokra illeszkedjen egy szabály. +
- +
-Megmondhatjuk,​ hogy csak TCP, UDP vagy ICMP protokollokra illeszkedjen. A protokollt konkrétan a -p kapcsolóval adjuk meg. Például:​ +
- +
-<​code>​ +
--p tcp +
-</​code>​ +
- +
-<​code>​ +
--p udp +
-</​code>​ +
- +
-<​code>​ +
--p icmp +
-</​code>​ +
-Ha nem használjuk a -p kapcsolót, akkor illeszkedik a tcp, udp, icmp és más csomagokra is. +
- +
-<​code>​ +
--p all +
-</​code>​ +
- +
- +
-Megadhatunk IP címeket és/vagy tartományneveket. +
- +
-A <​nowiki>​-s</​nowiki>​ kapcsolóval,​ mi volt a forrás IP címe.  +
- +
-A <​nowiki>​-d</​nowiki>​ kapcsolóval,​ mi volt a cél IP cím. +
- +
-Példa: +
-<​code>​ +
--s 192.168.5.1 -d 192.168.5.2 +
-</​code>​ +
- +
- +
-Portot adhatunk meg: +
- +
-A <​nowiki>​--dport</​nowiki>​ kapcsoló cél oldali portot jelent +
- +
-A <​nowiki>​--sport</​nowiki>​ kapcsoló forrás oldali portot jelent. +
- +
-<​code>​ +
---dport 80 --sport 1025 +
-</​code>​ +
- +
- +
-Láthatjuk, hogy az illeszkedés segítségével határozzuk meg, hogy milyen típusú +
-csomagra akarunk szabályt létrehozni. +
- +
- +
- +
-==== Csomagok sorsai ==== +
- +
-Ha egy csomag illeszkedik egy szabályra, akkor dönthetünk a sorsáról. Elfogadjuk, eldobjuk, +
-visszautasítjuk,​ naplózzuk, egy felhasználói folyamat felé irányítjuk.  +
-Ennek megfelelően a következő célpontokat használhatjuk:​ +
- +
- +
-  * ACCEPT a csomag folytatja útját +
-  * DROP a csomag eldobása +
-  * REJECT mint a DROP csak visszajelez +
-  * LOG a csomagról naplóbejegyzés készül +
-  * RETURN beépített láncnál alapirányelv,​ saját láncnál az előző láncra ugrás, köv. szab. +
-  * QUEUE a csomag a felhasználói tér felé +
-  * STOLEN egy alrendszer kezeli tovább a csomagot +
- +
- +
- +
- +
-==== A szabályokról ==== +
- +
-  * Minden lánc rendelkezik egy alapszabállyal (más néven irányelvvel). Az alapszabály külön kapcsolóval állítható (-P). +
-  * Az alapszabályra újabb szabályok építhetők,​ ezekből fog összeállni a szabálylista. +
- +
-Egy láncra érkező csomag először végigjárja a szabályokat,​  +
-ha egyikre sem illeszkedett,​ akkor az alapszabály fog +
-érvénybe lépni. +
- +
- +
-===== Az iptables kapcsolói ===== +
- +
-==== Aktuális szabályok listázása?​ ==== +
- +
-Rövid kapcsolóval:​ +
-<​code>​ +
-iptables -L +
-</​code>​ +
- +
-Hosszú kapcsolóval:​ +
-<​code>​ +
-iptables --list +
-</​code>​ +
- +
- +
- +
-Az INPUT láncra illeszkedő szabályokat szeretnénk látni: +
-<​code>​ +
-iptables -L INPUT +
-</​code>​ +
- +
- +
-A "​nat"​ táblára illeszkedő szabályokat szeretnénk látni: +
-<​code>​ +
-iptables -t nat -L +
-</​code>​ +
- +
- +
-A "​mangle"​ táblára illeszkedő szabályokat szeretnénk látni: +
-<​code>​ +
-iptables -t mangle -L +
-</​code>​ +
- +
- +
-A "​filter"​ táblára illeszkedő szabályokat szeretnénk látni: +
-<​code>​ +
-iptables -t filter -L +
-</​code>​ +
-Persze a filter tábla használata az alapértelmezett,​ így azt meg sem +
-kell adni, mint fentebb. +
- +
- +
- +
-==== Láncok ürítése ==== +
- +
-Láncok szabályainak törlése:​ +
-<​code>​ +
-iptables -F  +
-</​code>​ +
-Az alapértelmezett szabály megmarad. +
- +
- +
- +
-Ha voltak, saját láncok törlése:​ +
-<​code>​ +
-iptables -X  +
-</​code>​ +
- +
- +
-Alapértelmezett irányelv beállítása,​ persze alapértelmezetten ACCEPT. +
-<​code>​ +
-iptables -P INPUT ACCEPT +
-</​code>​ +
- +
-Ugyanez az OUTPUT láncon: +
-<​code>​ +
-iptables -P OUTPUT ACCEPT +
-</​code>​ +
- +
-A FORWARD láncon: +
-<​code>​ +
-iptables -P FORWARD ACCEPT +
-</​code>​ +
- +
- +
- +
- +
-==== Láncok alapszabályai ==== +
- +
-<​code>​ +
-iptables -P INPUT ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -P INPUT DROP +
-</​code>​ +
- +
-<​code>​ +
-iptables -L INPUT +
-</​code>​ +
- +
- +
- +
- +
-===== Szabályok ===== +
- +
- +
-  * Szokásos helyzet, hogy az alapértelmezett szabályt DROP-ra állítom, és mindent egyenként engedélyezek. +
-  * Ha távolról dolgozunk (ssh), akkor első dolgunk legyen a 53 port mellett a 22 port engedélyezése mielőtt beállítom az alapértelmezett DROP-ot! (Különben kitiltjuk magunkat!) +
- +
- +
-==== Szabályok kezelése ==== +
-Három szabályt alkotunk meg. Egy hozzáfűzéssel,​ kettő beszúrással.  +
- +
-<​code>​ +
-iptables -A INPUT -p udp --sport 53 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -I INPUT -p TCP --dport 80 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -I INPUT 2 -p TCP --dport 80 -j ACCEPT +
-</​code>​ +
-Ez utóbbi szabály lesz a második, az eredeti a harmadik lesz. +
- +
-A következő utasítás a 2-s szabályt cseréli le: +
-<​code>​ +
-iptables -R INPUT 2 -p TCP --dport 80 -j DROP +
-</​code>​ +
- +
- +
-A második szabály törlése:​ +
-<​code>​ +
-iptables -D INPUT 2 +
-</​code>​ +
- +
-Ha nem tudjuk mi a száma a törlendő szabálynak az iptalbes -L után +
-használjuk a <​nowiki>​--line-numbers</​nowiki>​ kapcsolót:​ +
-  iptables -L --line-numbers +
- +
-Így minden sor kap egy sorszámot. +
- +
- +
- +
- +
-==== Példák hálózat/​IP megadására ==== +
- +
-<​code>​ +
-iptables -A INPUT -p tcp -s 192.168.1.0/​24 --sport 80 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -p tcp -d 192.168.3.0/​24 --dport 80 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -p tcp -s 192.168.1.0/​24 --sport 80 -d 192.168.4.0/​24 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -p tcp -d 192.168.1.5 --dport 80 -j ACCEPT +
-</​code>​ +
- +
- +
- +
- +
-Az összes forrás megadása:​ +
-<​code>​ +
--s 0/0 +
-</​code>​ +
-De ez olyan mintha semmit nem írtunk volna. +
- +
- +
-==== OUTPUT és FORWARD lánc példa ==== +
- +
-<​code>​ +
-iptables -A FORWARD -p tcp -s $BELSOHALO -i eth1 -m state --state NEW,​ESTABLISHED --dport 80 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,​ESTABLISHED -j ACCEPT +
-</​code>​ +
- +
- +
- +
-==== Loopback interface ==== +
- +
-<​code>​ +
-iptables -A INPUT -p all -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT +
-</​code>​ +
- +
-Erre mindig szükség van, mert néhány dolog e nélkül nem működik. +
- +
-==== Portok, átviteli protokoll ==== +
- +
-  * DNS UDP 53 (Zóna transfer tcp!) +
-  * SSH TCP 22 +
-  * HTTP TCP 80 +
-  * https TCP 443 +
-  * smtp TCP 25 +
-  * pop3 TCP 110 +
-  * pop3s TCP 995 +
-  * proxy TCP 8080 vagy 3128 +
-  * ftp TCP 21 és 20 ] +
-  * samba UDP 137,138, TCP 139, 445 +
-  * dhcp UDP 67,68 +
-  * icmp ICMP (nincs portja) +
- +
- +
- +
-==== ICMP ==== +
- +
-<​code>​ +
-iptables -A INPUT -p ICMP -d 192.168.1.1 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -p icmp --icmp-type echoreply -j DROP +
-</​code>​ +
- +
-Biztonság miatt ilyen szabályokat szoktak még megadni, de ez csak önmagunk életének megkeserítése! +
- +
- +
-==== Naplózás ==== +
- +
-<​code>​ +
--j LOG +
-</​code>​ +
-<​code>​ +
---log-level +
-</​code>​ +
- +
-Egy szám vagy név követi. "​debug",​ "​info",​ "​notice",​ "​warning",​  +
-"​err",​ "​crit",​ "​alert"​ és "​emerg"​ (kis- vagy nagybetűsek egyaránt):​ +
-a számok a felsorolás számai 7-0. A naplózási szintek részletei +
- +
-<​code>​ +
-man syslog.conf +
-</​code>​ +
- +
-<​code>​ +
---log-prefix +
-</​code>​ +
- +
-Egy maximum 29 karakter hosszú szöveg, amely a log +
-üzenetek elejére kerül (egyedi azonosítás lehetősége) +
- +
-<​code>​ +
-iptables -N log-drop +
-iptables -j LOG --log-prefix "DROP " +
-iptables -j DROP +
-</​code>​ +
- +
-Használjuk a -m limit kapcsolót, mert teleszemetelhetik a naplófájlt:​ +
-<​code>​ +
-iptables -j LOG --log-prefix "DROP " -m limit +
-</​code>​ +
- +
- +
- +
- +
-=== Naplózás beállítása === +
- +
-Állítsuk be azt a szabályt amit naplózni +
-szeretnénk,​ majd a cél legyen LOG. A naplózó +
-szabály előbb legyen mint maga a szabály!!! +
- +
-<​code>​ +
-iptables -A INPUT -t icmp -j LOG --log-prefix „ICMP bárhonnan” +
-iptables -A INPUT -t icmp -j ACCEPT +
-tail /​var/​log/​syslog +
-</​code>​ +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-===== Állapotfigyelés ===== +
- +
-A csomagok állapotára is beállíthatunk illeszkedést. +
-Ezzel fejlettebb, állapotfigyelő csomagszűrő tűzfalat  +
-készíthetünk. Az állapotfigyeléshez szükség van a state +
-modulra, és a <​nowiki>​--state</​nowiki>​ kapcsolóra,​ hogy +
-megadjuk, melyik állapotot szeretnénk figyelni. +
- +
- +
-<code bash> +
--m state --state +
-</​code>​ +
- +
-==== Állapotok ==== +
-  * NEW - új kapcsolat +
-  * ESTABLISED - válaszcsomag +
-  * RELATED - új, de egy másik kapcsolathoz tartozik +
-  * INVALID - nem azonosítható +
- +
- +
- +
-=== NEW === +
-    * Új kapcsolatot létesítő csomag. +
- +
-=== ESTABLISHED === +
-    * Egy csomag, mely létező kapcsolatot jelez (egy visszajelző csomag, vagy egy visszajelzett kapcsolaton kimenő csomag). +
- +
-=== RELATED === +
-    * Egy létező kapcsolathoz tartozó, de annak részét nem képező csomag, mint például egy ICMP hibaüzenet,​ vagy (beépített FTP modullal) egy ftp adatkapcsolatot létesítő csomag. +
- +
-=== INVALID === +
- +
-    * Egy valamilyen okból nem azonosítható csomag: ez magában foglalja a memória túlcsordulásokat és az ICMP hibaüzeneteket,​ melyek nem felelnek meg egyetlen ismert kapcsolatnak sem. Általában ezek a csomagok eldobandók. +
- +
- +
-=== Állapotfigyelés példa === +
- +
-<​code>​ +
-iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT +
-</​code>​ +
- +
-A webszerverhez bejövő új csomagokat elfogadjuk. +
- +
- +
- +
-===== Tartó tárolás ===== +
- +
-==== A Netfilter beállítások tárolása ​ ==== +
- +
-Telepítsük az iptables-persistent csomagot: +
-  # apt install iptables-persistent +
- +
-Ha nem mentettük még a tűzfalszabályokat:​ +
-  # iptables-save > /​etc/​iptables/​rules.v4 +
-  # ip6tables-save > /​etc/​iptables/​rules.v6 +
- +
-A telepítő egyébként rákérdez, hogy mentsük-e a szabályokat.  +
-Ha az iptables-persistent telepítésekor mentettük az iptables szabályokat nincs teendőnk. +
-Viszont minden iptables változtatás esetén mentsük a szabályokat,​ az iptables-save és +
-ip6tables-save paranccsal a fentieknek megfelelően.  +
- +
-Ellenőrzés:​ +
-  # systemctl status netfilter-persistent +
- +
-Az ellenőrzéshez persze, úgy a legtisztább,​ ha újraindítjuk a gépet: +
-  # reboot +
- +
- +
-==== A kernel beállítások tárolása ​ ==== +
- +
-NAT Engedélyezése a kernelben:​ +
- +
-Szerkesszük a sysctl.conf állományt:​ +
-  # nano /​etc/​sysctl.conf:​ +
- +
-Tartalma ez legyen: +
-  net.ipv4.ip_forward = 1 +
- +
-Változások betöltése:​ +
-  # sysctl -p /​etc/​sysctl.conf +
- +
-Indítsuk újra a procfs újragenerálása:​ +
-  # systemctl restart procps +
- +
-Ellenőrzés:​ +
-  # sysctl net.ipv4.ip_forward +
-vagy: +
-  # cat /​proc/​sys/​net/​ipv4/​ip_forward +
- +
-===== Fontos szempontok ===== +
-  * Az ICMP-ét globálisan engedni kell +
-  * broadcast ICMP tiltása +
-  * ne jöjjön kívülről,​ ha bent van +
-  * ki se engedjünk olyat, ami azt állítja forrás IP-je nem helyi, de kifele megy +
-  * Ne az alapszabály legyen a DROP. Helyette az engedő szabályok végén egy DROP naplózással +
-  * Az rp_filter-t kapcsoljuk be ( echo 1 > /​proc/​sys/​net/​ipv4/​conf/​eth0/​rp_filter) +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-===== Függelék ===== +
- +
- +
- +
-==== Samba portok ==== +
- +
-  * netbios-ns 137/udp # NetBIOS Name Service +
-  * netbios-dgm 138/udp # NetBIOS Datagram Service +
-  * netbios-ssn 139/tcp # NetBIOS Session Service +
-  * microsoft-ds 445/tcp # Microsoft Directory Service +
- +
-<​code>​ +
-iptables -A INPUT -p udp --dport 137 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -p udp -m udp --dport 138 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT +
-</​code>​ +
- +
- +
-==== FTP kapcsolatkövető modul ==== +
- +
-<​code>​ +
-modprobe ip_conntrack_ftp +
-</​code>​ +
-Nem töltödik be magától. +
- +
-Vegyük fel a következő állományba:​ +
-<​code>​ +
-/​etc/​modules +
-</​code>​ +
- +
-Alapból szükséges:​ +
-<​code>​ +
-iptables -A INPUT -p TCP --dport 21 -j ACCEPT +
-</​code>​ +
- +
- +
- +
-=== Aktív mód === +
-<​code>​ +
-iptables -A INPUT -p TCP --dport 20 -m state --state ESTABLISHED,​ RELATED -j ACCEPT +
-</​code>​ +
- +
-<​code>​ +
-iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT +
-</​code>​ +
- +
- +
-=== Passzív mód === +
- +
-<​code>​ +
-iptables -A INPUT -p TCP --sport 1024: -m state --state ESTABLISHED,​RELATED -j ACCEPT +
-</​code>​ +
- +
-Mindkét esetben legyen engedélyezve a DNS lekérés, mert lassú lesz a FTP kapcsolódás:​ +
-<​code>​ +
-iptables -A INPUT -p UDP --sport 53 -j ACCEPT +
-</​code>​ +
- +
-Ha az OUTPUT lánc is szűrve van (passzív módnál csak 21 port): +
-<​code>​ +
-iptables -A OUTPUT -p tcp -s "​szerver_ip_cím"​ --sport 20:21 -j ACCEPT +
-</​code>​ +
- +
- +
- +
-==== NAT ==== +
-=== A NAT === +
- +
- +
-A NAT a ciscos világban többféle NAT áll rendelkezésre,​ ők ezt nem is NAT-nak hívják hanem +
-PAT-nak. De szoktunk néha szimplán maszkolásról beszélni.  +
- +
- +
-=== IP továbbítás engedélyezése === +
- +
-A sysctl paranccsal ellenőrizzük be van-e állítva:​ +
- +
-  sysctl net.ipv4.ip_forward +
-  net.ipv4.ip_forward = 0 +
- +
-vagy a /proc rendszeren keresztül:​ +
- +
-  cat /​proc/​sys/​net/​ipv4/​ip_forward +
-  0 +
- +
-Engedélyezés menet közben: +
- +
-  sysctl -w net.ipv4.ip_forward=1 +
- +
-vagy +
-  echo 1 > /​proc/​sys/​net/​ipv4/​ip_forward +
- +
-Végleges beállítás a /​etc/​sysctl.conf fájlban: +
- +
-<code conf /​etc/​sysctl.conf>​ +
-net.ipv4.ip_forward = 1 +
-</​code>​ +
-Ha nincs ilyen beállítás akkor elkészítjük,​ ha van ilyen 1-re állítjuk, ha értéke nem 1 lenne. +
- +
-Ha készen van a beállítás,​ azok aktualizálásához futtasd a következő parancsot:​ +
-  sysctl -p /​etc/​sysctl.conf +
- +
-RedHat alapú rendszereken lehet a következő is: +
- +
-  service network restart +
- +
-Debian alapú rendszereken procps szolgáltatás újraindítása:​ +
-  /​etc/​init.d/​procps.sh restart +
- +
- +
- +
- +
-A fentiek mellett beállítható még a következő két kernelparaméter:​ +
-  net.ipv6.conf.default.forwarding=1 +
-  net.ipv6.conf.all.forwarding=1 +
- +
-Esetleg a broadcast ping tiltása: +
-  echo 1 > /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_broadcasts +
- +
- +
-Esetleg a hamis csomagok szűrése:​ +
-  echo 1 > /​proc/​sys/​net/​ipv4/​conf/​all/​rp_filter +
-Ha egy csomag nem a mi tartományunkból van, akkor azt dobjuk el.  +
-Például 192.168.1.0/​24 tartományban vagyunk és ilyen címre érkezik  +
-csomag a külső interfészre. +
- +
- +
-Esetleg az ICMP csomagok elfogadása:​ +
-  echo 0 > /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_all +
- +
- +
- +
- +
- +
- +
-=== Network-address-translation (NAT) === +
- +
-Emlékeztetőül,​ erre mindenképpen szükség van: +
-<​code>​ +
-echo 1 > /​proc/​sys/​net/​ipv4/​ip_forward +
-</​code>​ +
- +
-Példa: +
-<​code>​ +
-iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE +
-</​code>​ +
- +
-Rövidebben ugyanaz: +
-<​code>​ +
-iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE +
-</​code>​ +
- +
- +
- +
-Újabb példa +
-<​code>​ +
-iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/​24 -j MASQUERADE +
-</​code>​ +
- +
- +
-(A 192.168.1.0/​24 a maszkolandó hálózat. Az eth0 az Inernet felőli interface) +
- +
-Maszkolás beállításának ellenőrzése:​ +
-<​code>​ +
-iptables -t nat -L +
-</​code>​ +
- +
- +
-PPP kapcsolat esetén: +
-  iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE +
- +
- +
- +
-=== FORWARD lánc === +
- +
- +
-Ha maszkolást állítottunk be, akkor a csomagok a FORWARD láncon mennek át a Netfilteren.  +
-Ha ennek a láncnak az alapértelmezett szabálya a DROP, akkor engednünk kell a maszkolt +
-csomagokat:​ +
- +
-<​code>​ +
-iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,​ESTABLISHED -j ACCEPT +
-iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT +
-</​code>​ +
-A példában feltételezzük,​ hogy a belső hálózat (LAN) az eth1 hálózati kártyán van, +
-az Internet pedig az eth0-án.  +
- +
-==== Klasszikus támadások védése ==== +
- +
- +
-#Block DDOS - SYN-flood blokkolása:​ +
-<​code>​ +
-iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT +
-</​code>​ +
- +
-vagy: +
-<​code>​ +
-iptables -A INPUT -p tcp --syn -m iplimit --iplimit-above 9 -j DROP +
-</​code>​ +
- +
- +
- +
- +
-  * <​nowiki>​--limit 1/s: 1 </​nowiki>​másodperc alatt átlagosan maximálisan elfogadott csomagok +
-  * <​nowiki>​--limit-burst 4 </​nowiki>​ Induláskor ennyi csomag megengedett +
- +
-Esetleg lehet így kombinálni:​ +
-<​code>​ +
-# Beenged két szolgáltatást:​ +
-iptables -A INPUT -p tcp --syn --dport 25 -j ACCEPT +
-iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT +
-# Limitet ha nem lépi túl jöhet: +
-iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT +
-# Minden más kapcsolatkezdeményezőt tiltunk: +
-iptables -A INPUT -p tcp --syn -j DROP +
-</​code>​ +
- +
- +
- +
-Alattomos portscan: +
-<​code>​ +
-iptables -A INPUT -p tcp --tcp-flags SYN,​ACK,​FIN,​RST RST -m limit --limit 1/s -j ACCEPT +
-</​code>​ +
- +
-#DOS - Ping of Death blokkolása A halál pingje: +
-<​code>​ +
-iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT +
-</​code>​ +
- +
-vagy: +
-<​code>​ +
-iptables -A INPUT -p ICMP --icmp-type echo-request -m length --length 60:65535 -j ACCEPT +
-</​code>​ +
- +
- +
- +
-Letapogatás ellen: +
-<​code>​ +
-iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP +
-</​code>​ +
-Új kapcsolat a kapcsolat, de nem SYN csomag. +
- +
- +
- +
-Egyéb minták: +
-<​code>​ +
-#​TCP-CONNECT scan blokkolás (SYN csomagok; stealth scan vagy half-open scan; be nem fejezett TCP kapcsolódás) +
-iptables -A INPUT -p tcp --syn -j DROP +
- +
-#TCP-SYN scan blokkolás (csak SYN csomagok) +
-iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,​RST,​ACK,​FIN,​URG,​PSH SYN -j DROP +
- +
-#TCP-FIN scan blokkolása (csak FIN csomagok) +
-iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,​RST,​ACK,​FIN,​URG,​PSH FIN -j DROP +
- +
-#TCP-ACK scan blokkolása (csak ACK csomagok) +
-iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,​RST,​ACK,​FIN,​URG,​PSH ACK -j DROP +
- +
- +
-#TCP-NULL scan blokkolás (csomag jelzők nélkül) +
-iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags ! SYN,​RST,​ACK,​FIN,​URG,​PSH SYN,​RST,​ACK,​FIN,​URG,​PSH -j DROP +
- +
-#Block "​Karácsonyfa"​ TCP-XMAS scan blokkoása (csomagok FIN, URG, PSH jelzővel) +
-iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,​RST,​ACK,​FIN,​URG,​PSH FIN,URG,PSH -j DROP +
- +
- +
-#DOS - Teardrop blokkolása +
-iptables -A INPUT -p UDP -f -j DROP +
- +
- +
-#DDOS - Smurf blokkolása +
-iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP +
-iptables -A INPUT -p ICMP --icmp-type echo-request -m pkttype --pkttype broadcast -j DROP +
-iptables -A INPUT -p ICMP --icmp-type echo-request -m limit --limit 3/s -j ACCEPT +
- +
- +
-#Block DDOS - Fraggle blokkolás +
-iptables -A INPUT -p UDP -m pkttype --pkt-type broadcast -j DROP +
-iptables -A INPUT -p UDP -m limit --limit 3/s -j ACCEPT +
- +
- +
-#DDOS - UDP-flood (Pepsi) blokkolás +
-iptables -A INPUT -p UDP --dport 7 -j DROP +
-iptables -A INPUT -p UDP --dport 19 -j DROP +
- +
-#DDOS - SMBnuke blokkolás +
-iptables -A INPUT -p UDP --dport 135:139 -j DROP +
-iptables -A INPUT -p TCP --dport 135:139 -j DROP +
- +
-#DDOS - Connection-flood blokkolás +
-iptables -A INPUT -p TCP --syn -m iplimit --iplimit-above 3 -j DROP +
- +
- +
-#DDOS - Jolt blokkolás +
-iptables -A INPUT -p ICMP -f -j DROP +
-</​code>​ +
-==== Transzparens proxy ==== +
- +
-Látszólag nincs proxy. A kérések a 80-as portra érkeznek, amelyek szimpla +
-NAT-al mennének át a tűzfalon, de ezeket a csomagokat átirányítjuk a  +
-proxy szerver számára.  +
- +
-<​code>​ +
-iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.2:​3128 +
-</​code>​ +
- +
-A fenti példában feltételezzük,​ hogy a proxy szerver a 3128-as címen figyel.  +
- +
-squid.conf (Squid 2.4-hez): +
-<​code>​ +
-http_port 3128 +
-httpd_accel_host virtual +
-httpd_accel_port 80 httpd_accel_with_proxy +
-on httpd_accel_uses_host_header on +
-httpd_accel_single_host off +
-</​code>​ +
- +
- +
- +
-==== Egyszerű script ==== +
- +
- +
-Egy egyszerű script egy szerver esetén mejnek IP címe 195.199.8.20 +
- +
-<code bash tuzfal.sh>​ +
-#!/bin/sh +
- +
-iptables -F +
-iptables -X +
- +
-# Alapértelmezett irányelvek megadása +
-iptables -P INPUT DROP +
-iptables -P OUTPUT ACCEPT +
-iptables -P FORWARD ACCEPT +
- +
-# Helyben mindent engedünk +
-iptables -A INPUT -i lo -j ACCEPT +
-iptables -A OUTPUT -o lo -j ACCEPT +
- +
-iptables -A INPUT -p udp -d 195.199.8.20 --dport 53 -j ACCEPT +
-iptables -A INPUT -p tcp -d 195.199.8.20 --dport 80 -j ACCEPT +
-iptables -A INPUT -p tcp -d 195.199.8.20 --dport 25 -j ACCEPT +
-iptables -A INPUT -p tcp -d 195.199.8.20 --dport 110 -j ACCEPT +
-iptables -A INPUT -p tcp -d 195.199.8.20 --dport 3306 -j ACCEPT +
-iptables -A INPUT -p tcp -d 195.199.8.20 --dport 22 -j ACCEPT +
-</​code>​ +
- +
- +
-==== Naplózásos példa ==== +
- +
-Ami nincs engedélyezve itt sem mehet át: +
-<code bash tuzfal.sh>​ +
-#!/bin/sh +
- +
-# Ürítjük a láncokat +
-iptables -F +
- +
-# Helyben mindent engedünk +
-iptables -A INPUT -i lo -j ACCEPT +
-iptables -A OUTPUT -o lo -j ACCEPT +
- +
-# Szeretnénk kifele látni DNS-t: +
-iptables -A INPUT -p udp --sport 53 -j ACCEPT +
- +
-# Szeretnénk kifele látni Webet: +
-iptables -A INPUT -p tcp --sport 80 -j ACCEPT +
- +
-# Ami eddig nem ment át azt naplózzuk:​ +
-iptables -A INPUT -j LOG --log-prefix "DROP " +
- +
-# Minden mást eldobunk: +
-iptables -A INPUT -j DROP +
-</​code>​ +
- +
-Itt azonban, ami nem ment át egy engedő szabályon sem, azt naplózzuk, utána eldobjuk. +
- +
- +
-==== Állapotkövető ==== +
- +
-<code bash> +
-#​!/​bin/​bash +
- +
-# Először töröljük a szabályokat +
-iptables --flush INPUT +
-iptables --flush OUTPUT +
-iptables --flush FORWARD +
- +
-iptables --policy INPUT DROP +
-iptables --policy OUTPUT ACCEPT +
-iptables --policy FORWARD DROP +
- +
- +
-# INPUT lánc +
-iptables --append INPUT --in-interface lo --jump ACCEPT +
-iptables --append INPUT --protocol icmp --jump ACCEPT +
- +
-# A kiépített kapcsolatok csomagjai jöhetnek +
-iptables --append INPUT --match state --state ESTABLISHED --jump ACCEPT +
-iptables --append INPUT --match state --state RELATED --jump ACCEPT +
- +
-# Szolgáltatások mehetnek +
-iptables --append INPUT --protocol tcp --destination-port 80 --match state --state NEW --jump ACCEPT +
- +
-# OUTPUT lánc +
-iptables --append INPUT --out-interface lo --jump ACCEPT +
- +
-# Rejtőzködési céllal: +
-iptables --append OUTPUT --protocol icmp --icmp-type echo-reply --jump ​ DROP +
-iptables --append OUTPUT --protocol icmp --icmp-type timestamp-replay --jump ​ DROP +
- +
- +
-# FORWARD lánc +
-iptables --append FORWARD --jump REJECT --reject-width icmp-net-unreachable +
- +
-</​code>​ +
- +
-==== Burkolóprogramok ==== +
- +
-  * ufw  (konzolra) +
-  * gufw (grafikus felületre) +
- +
- +
-==== Modulok ==== +
- +
-iptables modulok Debian GNU/Linux 6.x alatt: +
-<​code>​ +
-ls /​lib/​xtables +
-</​code>​ +
- +
- +
-iptables modulok még több: +
-<code bash> +
-apt-get install xtables-addons-common +
-</​code>​ +
- +
- +
-Több info: +
-  man xtables-addons +
-==== IP limit ==== +
- +
- +
-Az iplimit nem szerepel a Debian GNU/Linux 6.x verziójában.  +
- +
- +
-IP,TCP limit. Egy helyről max 5 SYN csomag +
-<code bash> +
-iptables -A INPUT -p tcp --syn -m iplimit --iplimit-above 5 -j REJECT +
-</​code>​ +
- +
- +
-==== A mangle tábla használata ==== +
- +
-<code bash> +
-iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 1 +
-</​code>​ +
- +
- +
-==== Terheléselosztás ==== +
- +
-<code bash> +
-iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW \ +
-  -m statistic --mode nth --every 3 -j DNAT --to-destination 192.168.1.1:​80 +
- +
-iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW \ +
-  -m statistic --mode nth --every 2 -j DNAT --to-destination 192.168.1.2:​80 +
- +
-iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW \ +
- -m statistic --mode nth --every 1 -j DNAT --to-destination 192.168.1.3:​80 +
-</​code>​ +
- +
-Minden harmadik csomag (33%) illeszkedik az elsőre.  +
-A fennmaradó 66%, 50%-a második szabályra illeszkedik.  +
-A fennmaradó csomagok az utolsóra illeszkednek.  +
-A szabály célja DNAT lesz. A bejövő webforgalom három szerver között oszlik meg. +
- +
-<code bash> +
-man iptables +
-</​code>​ +
-Keressünk rá a statistic szóra. +
- +
-==== Portátirnyítás ==== +
- +
-  iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 80 -j REDIRECT --to-port 3180 +
- +
- +
-==== Praktikák ==== +
- +
-Kifele DNS lekérdezés,​ ha vissza jön: +
-  iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT +
- +
-Kifele webszerverek elérhetők,​ például hálózati telepítéshez:​ +
-  iptables -A INPUT -p tcp --sport 80 --dport 1024:65536 -m state ESTABLISHED -j ACCEPT +
- +
-Távolról ping-el tesztelhetik a szerverünk:​ +
-  iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT +
- +
-Távoli gépeket ping-el tesztelhetünk:​ +
-  iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT +
- +
- +
- +
-==== Netfilter képekben ==== +
- +
- +
-{{:oktatas:​linux:​tűzfal:netfilter_csomagok_utja_v2.png|}} +
- +
- +
- +
-===== Irodalom ===== +
- +
-==== Könyvek ==== +
- +
-  * Pere László: GNU/Linux rendszerek üzemeltetése II. +
-  * Gregor N. Purdy: Linux iptables zsebkönyv (Tűzfalak, címfordítás,​ forgalomszámlálás) +
- +
-==== Linkek ==== +
- +
-  * http://www.netfilter.org (2018) +
-  * http://​www.netfilter.org/​projects/​conntrack-tools/​ (2018) +
-  * http://​conntrack-tools.netfilter.org (2018) +
-  * http://​www.netfilter.org/​documentation/​HOWTO/​netfilter-extensions-HOWTO-3.html (2018) +
-  * http://​www.szabilinux.hu/​iptables ​(2018) +
-  * http://​troy.jdmz.net/​samba/​fw/​ (2018) +
-  * http://​www.thegeekstuff.com/​2011/​01/​iptables-fundamentals/​ (2018) +
-  * http://linux-ip.net/​nf/​nfk-traversal.png (2018) +
-  * http://​unixlinux.tmit.bme.hu/​T%C5%B1zfalak (2018) +
-  * http://​lok.hu/​egyeb/​2006mentes/​eloadasok/​lok-2006-netfilter.pdf (2018) +
-  * http://​www.pantz.org/​software/​iptables/​laptopiptables.html (2018) +
-  * http://​cipherdyne.org/​psad/​ (2018) +
-  * http://​serverfault.com/​questions/​245711/​iptables-tips-tricks +
-  * http://​www.cyberciti.biz/​faq/​linux-detect-port-scan-attacks/​ (2018) +
-  * http://​www.cyberciti.biz/​tips/​howto-limit-linux-syn-attacks.html (2018) +
-  * http://​www.webhostingtalk.com/​archive/​index.php/​t-355411.html (2018) +
-  * http://​hu.wikipedia.org/​wiki/​SYN_flood (2018) +
-  * http://​wiki.debian.org/​DebianFirewall (2018) +
-  * http://www.netfilter.org/​documentation/​HOWTO/​netfilter-hacking-HOWTO-3.html (2018) +
-  * http://​www.netfilter.org/​documentation/​HOWTO/​netfilter-hacking-HOWTO-4.html#​ss4.2 (2018) +
-  * http://​linux-ip.net/​nf/​nfk-traversal.png (2018) +
-  * https://​www.digitalocean.com/​community/​tutorials/​a-deep-dive-into-iptables-and-netfilter-architecture (2018) +
- +
-Példák: +
-  * http://​www.linuxhomenetworking.com/​wiki/​index.php/​Quick_HOWTO_:​_Ch14_:​_Linux_Firewalls_Using_iptables +
- +
-Netfilter ​illesztések:​ +
-  * http://​www.netfilter.org/​documentation/​HOWTO/​netfilter-extensions-HOWTO-3.html +
  
-Forgalomirányítás:​ 
-  * http://​unixlinux.tmit.bme.hu/​Tc 
-  * http://​tldp.org/​HOWTO/​Traffic-Control-HOWTO/​index.html 
-  * http://​linux-ip.net/​articles/​Traffic-Control-HOWTO/​index.html 
-Egyéb: 
-  * http://​en.wikipedia.org/​wiki/​Port_scanner 
-  
oktatas/linux/tuzfal/netfilter.1607199543.txt.gz · Utolsó módosítás: 2020/12/05 21:19 szerkesztette: admin