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.
Előző változat mindkét oldalonElőző változatKövetkező változat | Előző változat | ||
oktatas:linux:tuzfal:netfilter [2019/08/29 22:36] – [A kernel beállítások tárolása] admin | oktatas:linux:tuzfal:netfilter [2020/12/05 21:20] (aktuális) – létrehozva admin | ||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | [[:oktatas: | + | [[oktatas: |
- | + | ||
====== Netfilter ====== | ====== Netfilter ====== | ||
- | * **Szerző:** Sallai András | + | * [[oktatas:linux:tuzfal:netfilter:A netfilter]] |
- | * Copyright (c) Sallai András, 2011, 2015, 2018 | + | * [[oktatas: |
- | * Licenc: GNU Free Documentation License 1.3 | + | * [[oktatas:linux:tuzfal:netfilter:nftables]] |
- | * Web: http://szit.hu | + | * [[oktatas:linux:tuzfal: |
- | + | ||
- | + | ||
- | + | ||
- | ===== Csomagszűrők ===== | + | |
- | + | ||
- | A 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, | + | |
- | naplózhatjuk, | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== 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 | + | |
- | táblával, amelyen keresztül elérhetjük a láncon mozgó csomagokat. | + | |
- | + | ||
- | Az alábbi ábra ezt szemlélteti: | + | |
- | + | ||
- | < | + | |
- | + | ||
- | | + | |
- | | + | |
- | | + | |
- | NAT (Dst) | | Conntrack | + | |
- | | + | |
- | v | | + | |
- | IN Filter | + | |
- | | Conntrack | + | |
- | | Mangle | + | |
- | v | Filter | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | 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, | + | |
- | 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, | + | |
- | + | ||
- | * 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, | + | |
- | + | ||
- | < | + | |
- | -p tcp | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | -p udp | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | -p icmp | + | |
- | </ | + | |
- | Ha nem használjuk a -p kapcsolót, akkor illeszkedik a tcp, udp, icmp és más csomagokra is. | + | |
- | + | ||
- | < | + | |
- | -p all | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | Megadhatunk IP címeket és/vagy tartományneveket. | + | |
- | + | ||
- | A < | + | |
- | + | ||
- | A < | + | |
- | + | ||
- | Példa: | + | |
- | < | + | |
- | -s 192.168.5.1 -d 192.168.5.2 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | Portot adhatunk meg: | + | |
- | + | ||
- | A < | + | |
- | + | ||
- | A < | + | |
- | + | ||
- | < | + | |
- | --dport 80 --sport 1025 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | 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, | + | |
- | 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, | + | |
- | * 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, | + | |
- | + | ||
- | Egy láncra érkező csomag először végigjárja a szabályokat, | + | |
- | ha egyikre sem illeszkedett, | + | |
- | érvénybe lépni. | + | |
- | + | ||
- | + | ||
- | ===== Az iptables kapcsolói ===== | + | |
- | + | ||
- | ==== Aktuális szabályok listázása? | + | |
- | + | ||
- | Rövid kapcsolóval: | + | |
- | < | + | |
- | iptables -L | + | |
- | </ | + | |
- | + | ||
- | Hosszú kapcsolóval: | + | |
- | < | + | |
- | iptables --list | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | Az INPUT láncra illeszkedő szabályokat szeretnénk látni: | + | |
- | < | + | |
- | iptables -L INPUT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | A " | + | |
- | < | + | |
- | iptables -t nat -L | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | A " | + | |
- | < | + | |
- | iptables -t mangle -L | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | A " | + | |
- | < | + | |
- | iptables -t filter -L | + | |
- | </ | + | |
- | Persze a filter tábla használata az alapértelmezett, | + | |
- | kell adni, mint fentebb. | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== Láncok ürítése ==== | + | |
- | + | ||
- | Láncok szabályainak törlése: | + | |
- | < | + | |
- | iptables -F | + | |
- | </ | + | |
- | Az alapértelmezett szabály megmarad. | + | |
- | + | ||
- | + | ||
- | + | ||
- | Ha voltak, saját láncok törlése: | + | |
- | < | + | |
- | iptables -X | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | Alapértelmezett irányelv beállítása, | + | |
- | < | + | |
- | iptables -P INPUT ACCEPT | + | |
- | </ | + | |
- | + | ||
- | Ugyanez az OUTPUT láncon: | + | |
- | < | + | |
- | iptables -P OUTPUT ACCEPT | + | |
- | </ | + | |
- | + | ||
- | A FORWARD láncon: | + | |
- | < | + | |
- | iptables -P FORWARD ACCEPT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Láncok alapszabályai ==== | + | |
- | + | ||
- | < | + | |
- | iptables -P INPUT ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -P INPUT DROP | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -L INPUT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== 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, | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p udp --sport 53 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -I INPUT -p TCP --dport 80 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -I INPUT 2 -p TCP --dport 80 -j ACCEPT | + | |
- | </ | + | |
- | 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: | + | |
- | < | + | |
- | iptables -R INPUT 2 -p TCP --dport 80 -j DROP | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | A második szabály törlése: | + | |
- | < | + | |
- | iptables -D INPUT 2 | + | |
- | </ | + | |
- | + | ||
- | Ha nem tudjuk mi a száma a törlendő szabálynak az iptalbes -L után | + | |
- | használjuk a < | + | |
- | iptables -L --line-numbers | + | |
- | + | ||
- | Így minden sor kap egy sorszámot. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Példák hálózat/ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p tcp -s 192.168.1.0/ | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p tcp -d 192.168.3.0/ | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p tcp -s 192.168.1.0/ | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p tcp -d 192.168.1.5 --dport 80 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Az összes forrás megadása: | + | |
- | < | + | |
- | -s 0/0 | + | |
- | </ | + | |
- | De ez olyan mintha semmit nem írtunk volna. | + | |
- | + | ||
- | + | ||
- | ==== OUTPUT és FORWARD lánc példa ==== | + | |
- | + | ||
- | < | + | |
- | iptables -A FORWARD -p tcp -s $BELSOHALO -i eth1 -m state --state NEW, | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW, | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== Loopback interface ==== | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p all -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | 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 ==== | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p ICMP -d 192.168.1.1 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p icmp --icmp-type echoreply -j DROP | + | |
- | </ | + | |
- | + | ||
- | Biztonság miatt ilyen szabályokat szoktak még megadni, de ez csak önmagunk életének megkeserítése! | + | |
- | + | ||
- | + | ||
- | ==== Naplózás ==== | + | |
- | + | ||
- | < | + | |
- | -j LOG | + | |
- | </ | + | |
- | < | + | |
- | --log-level | + | |
- | </ | + | |
- | + | ||
- | Egy szám vagy név követi. " | + | |
- | " | + | |
- | a számok a felsorolás számai 7-0. A naplózási szintek részletei | + | |
- | + | ||
- | < | + | |
- | man syslog.conf | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | --log-prefix | + | |
- | </ | + | |
- | + | ||
- | Egy maximum 29 karakter hosszú szöveg, amely a log | + | |
- | üzenetek elejére kerül (egyedi azonosítás lehetősége) | + | |
- | + | ||
- | < | + | |
- | iptables -N log-drop | + | |
- | iptables -j LOG --log-prefix "DROP " | + | |
- | iptables -j DROP | + | |
- | </ | + | |
- | + | ||
- | Használjuk a -m limit kapcsolót, mert teleszemetelhetik a naplófájlt: | + | |
- | < | + | |
- | iptables -j LOG --log-prefix "DROP " -m limit | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | === Naplózás beállítása === | + | |
- | + | ||
- | Állítsuk be azt a szabályt amit naplózni | + | |
- | szeretnénk, | + | |
- | szabály előbb legyen mint maga a szabály!!! | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -t icmp -j LOG --log-prefix „ICMP bárhonnan” | + | |
- | iptables -A INPUT -t icmp -j ACCEPT | + | |
- | tail / | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== Á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 < | + | |
- | megadjuk, melyik állapotot szeretnénk figyelni. | + | |
- | + | ||
- | + | ||
- | <code bash> | + | |
- | -m state --state | + | |
- | </ | + | |
- | + | ||
- | ==== Á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, | + | |
- | + | ||
- | === INVALID === | + | |
- | + | ||
- | * Egy valamilyen okból nem azonosítható csomag: ez magában foglalja a memória túlcsordulásokat és az ICMP hibaüzeneteket, | + | |
- | + | ||
- | + | ||
- | === Állapotfigyelés példa === | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | 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 > / | + | |
- | # ip6tables-save > / | + | |
- | + | ||
- | 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, | + | |
- | ip6tables-save paranccsal a fentieknek megfelelően. | + | |
- | + | ||
- | Ellenőrzés: | + | |
- | # systemctl status netfilter-persistent | + | |
- | + | ||
- | Az ellenőrzéshez persze, úgy a legtisztább, | + | |
- | # reboot | + | |
- | + | ||
- | + | ||
- | ==== A kernel beállítások tárolása | + | |
- | + | ||
- | NAT Engedélyezése a kernelben: | + | |
- | + | ||
- | Szerkesszük a sysctl.conf állományt: | + | |
- | # nano / | + | |
- | + | ||
- | Tartalma ez legyen: | + | |
- | net.ipv4.ip_forward = 1 | + | |
- | + | ||
- | Változások betöltése: | + | |
- | # sysctl -p / | + | |
- | + | ||
- | Indítsuk újra a procfs újragenerálása: | + | |
- | # systemctl restart procps | + | |
- | + | ||
- | Ellenőrzés: | + | |
- | # sysctl net.ipv4.ip_forward | + | |
- | vagy: | + | |
- | # cat / | + | |
- | + | ||
- | ===== Fontos szempontok ===== | + | |
- | * Az ICMP-ét globálisan engedni kell | + | |
- | * broadcast ICMP tiltása | + | |
- | * ne jöjjön kívülről, | + | |
- | * 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 > / | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== 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 | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p udp --dport 137 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p udp -m udp --dport 138 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ==== FTP kapcsolatkövető modul ==== | + | |
- | + | ||
- | < | + | |
- | modprobe ip_conntrack_ftp | + | |
- | </ | + | |
- | Nem töltödik be magától. | + | |
- | + | ||
- | Vegyük fel a következő állományba: | + | |
- | < | + | |
- | / | + | |
- | </ | + | |
- | + | ||
- | Alapból szükséges: | + | |
- | < | + | |
- | iptables -A INPUT -p TCP --dport 21 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | === Aktív mód === | + | |
- | < | + | |
- | iptables -A INPUT -p TCP --dport 20 -m state --state ESTABLISHED, | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | === Passzív mód === | + | |
- | + | ||
- | < | + | |
- | iptables -A INPUT -p TCP --sport 1024: -m state --state ESTABLISHED, | + | |
- | </ | + | |
- | + | ||
- | Mindkét esetben legyen engedélyezve a DNS lekérés, mert lassú lesz a FTP kapcsolódás: | + | |
- | < | + | |
- | iptables -A INPUT -p UDP --sport 53 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | Ha az OUTPUT lánc is szűrve van (passzív módnál csak 21 port): | + | |
- | < | + | |
- | iptables -A OUTPUT -p tcp -s " | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== NAT ==== | + | |
- | === A NAT === | + | |
- | + | ||
- | + | ||
- | A NAT a ciscos világban többféle NAT áll rendelkezésre, | + | |
- | 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 / | + | |
- | 0 | + | |
- | + | ||
- | Engedélyezés menet közben: | + | |
- | + | ||
- | sysctl -w net.ipv4.ip_forward=1 | + | |
- | + | ||
- | vagy | + | |
- | echo 1 > / | + | |
- | + | ||
- | Végleges beállítás a / | + | |
- | + | ||
- | <code conf / | + | |
- | net.ipv4.ip_forward = 1 | + | |
- | </ | + | |
- | Ha nincs ilyen beállítás akkor elkészítjük, | + | |
- | + | ||
- | Ha készen van a beállítás, | + | |
- | sysctl -p / | + | |
- | + | ||
- | RedHat alapú rendszereken lehet a következő is: | + | |
- | + | ||
- | service network restart | + | |
- | + | ||
- | Debian alapú rendszereken procps szolgáltatás újraindítása: | + | |
- | / | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | 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 > / | + | |
- | + | ||
- | + | ||
- | Esetleg a hamis csomagok szűrése: | + | |
- | echo 1 > / | + | |
- | Ha egy csomag nem a mi tartományunkból van, akkor azt dobjuk el. | + | |
- | Például 192.168.1.0/ | + | |
- | csomag a külső interfészre. | + | |
- | + | ||
- | + | ||
- | Esetleg az ICMP csomagok elfogadása: | + | |
- | echo 0 > / | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | === Network-address-translation (NAT) === | + | |
- | + | ||
- | Emlékeztetőül, | + | |
- | < | + | |
- | echo 1 > / | + | |
- | </ | + | |
- | + | ||
- | Példa: | + | |
- | < | + | |
- | iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE | + | |
- | </ | + | |
- | + | ||
- | Rövidebben ugyanaz: | + | |
- | < | + | |
- | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | Újabb példa | + | |
- | < | + | |
- | iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/ | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | (A 192.168.1.0/ | + | |
- | + | ||
- | Maszkolás beállításának ellenőrzése: | + | |
- | < | + | |
- | iptables -t nat -L | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | 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: | + | |
- | + | ||
- | < | + | |
- | iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED, | + | |
- | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT | + | |
- | </ | + | |
- | A példában feltételezzük, | + | |
- | az Internet pedig az eth0-án. | + | |
- | + | ||
- | ==== Klasszikus támadások védése ==== | + | |
- | + | ||
- | + | ||
- | #Block DDOS - SYN-flood blokkolása: | + | |
- | < | + | |
- | iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | vagy: | + | |
- | < | + | |
- | iptables -A INPUT -p tcp --syn -m iplimit --iplimit-above 9 -j DROP | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | * < | + | |
- | * < | + | |
- | + | ||
- | Esetleg lehet így kombinálni: | + | |
- | < | + | |
- | # 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 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | Alattomos portscan: | + | |
- | < | + | |
- | iptables -A INPUT -p tcp --tcp-flags SYN, | + | |
- | </ | + | |
- | + | ||
- | #DOS - Ping of Death blokkolása A halál pingje: | + | |
- | < | + | |
- | iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | vagy: | + | |
- | < | + | |
- | iptables -A INPUT -p ICMP --icmp-type echo-request -m length --length 60:65535 -j ACCEPT | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | Letapogatás ellen: | + | |
- | < | + | |
- | iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP | + | |
- | </ | + | |
- | Új kapcsolat a kapcsolat, de nem SYN csomag. | + | |
- | + | ||
- | + | ||
- | + | ||
- | Egyéb minták: | + | |
- | < | + | |
- | # | + | |
- | 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, | + | |
- | + | ||
- | #TCP-FIN scan blokkolása (csak FIN csomagok) | + | |
- | iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN, | + | |
- | + | ||
- | #TCP-ACK scan blokkolása (csak ACK csomagok) | + | |
- | iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN, | + | |
- | + | ||
- | + | ||
- | #TCP-NULL scan blokkolás (csomag jelzők nélkül) | + | |
- | iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags ! SYN, | + | |
- | + | ||
- | #Block " | + | |
- | iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN, | + | |
- | + | ||
- | + | ||
- | #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 | + | |
- | </ | + | |
- | ==== 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. | + | |
- | + | ||
- | < | + | |
- | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.2: | + | |
- | </ | + | |
- | + | ||
- | A fenti példában feltételezzük, | + | |
- | + | ||
- | squid.conf (Squid 2.4-hez): | + | |
- | < | + | |
- | 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 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== 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 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ==== 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 | + | |
- | </ | + | |
- | + | ||
- | Itt azonban, ami nem ment át egy engedő szabályon sem, azt naplózzuk, utána eldobjuk. | + | |
- | + | ||
- | + | ||
- | ==== Állapotkövető ==== | + | |
- | + | ||
- | <code 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 | + | |
- | iptables --append OUTPUT --protocol icmp --icmp-type timestamp-replay --jump | + | |
- | + | ||
- | + | ||
- | # FORWARD lánc | + | |
- | iptables --append FORWARD --jump REJECT --reject-width icmp-net-unreachable | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ==== Burkolóprogramok ==== | + | |
- | + | ||
- | * ufw (konzolra) | + | |
- | * gufw (grafikus felületre) | + | |
- | + | ||
- | + | ||
- | ==== Modulok ==== | + | |
- | + | ||
- | iptables modulok Debian GNU/Linux 6.x alatt: | + | |
- | < | + | |
- | ls / | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | iptables modulok még több: | + | |
- | <code bash> | + | |
- | apt-get install xtables-addons-common | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | 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 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ==== A mangle tábla használata ==== | + | |
- | + | ||
- | <code bash> | + | |
- | iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 1 | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ==== 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: | + | |
- | + | ||
- | 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: | + | |
- | + | ||
- | 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: | + | |
- | </ | + | |
- | + | ||
- | 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 | + | |
- | </ | + | |
- | 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, | + | |
- | iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT | + | |
- | + | ||
- | Kifele webszerverek elérhetők, | + | |
- | 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: | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== 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, | + | |
- | + | ||
- | ==== Linkek ==== | + | |
- | + | ||
- | * http://www.netfilter.org (2018) | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http://linux-ip.net/ | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http://www.netfilter.org/ | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * https:// | + | |
- | + | ||
- | Példák: | + | |
- | * http:// | + | |
- | + | ||
- | Netfilter | + | |
- | * http:// | + | |
- | Forgalomirányítás: | ||
- | * http:// | ||
- | * http:// | ||
- | * http:// | ||
- | Egyéb: | ||
- | * http:// | ||
- |
oktatas/linux/tuzfal/netfilter.1567110970.txt.gz · Utolsó módosítás: 2019/08/29 22:36 szerkesztette: admin