Forrás: https://hu.wikipedia.org/wiki/iptables http://szabilinux.hu/iptables/chapter7.html Gregor N. Purdy: Linux iptables zsebkönyv
Mi az iptables? Netfilter a Linux rendszermagjának hálózati csomagok feldolgozására szolgáló alrendszer. Ennek beállítására az iptables parancs használható. Csomagszűrő Tűzfal OSI modell 3. rétegében dolgozik Korábbi kerneleknél ipchains volt a parancs 2
OSI modell 3
Táblák és láncok nat tábla láncai: PREROUTING, POSTROUTING OUTPUT, filter tábla láncai: INPUT, FORWARD, OUTPUT mangle tábla láncai: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 4
Láncok INPUT: Bejövő csomagok OUTPUT: Kimenő csomagok FOWARD: Továbbítandó csomagok PREROUTING, POSTROUTING: Csomagmódosításra szolgáló láncok, a nat és mangle tábla használja. Pl. címfordítás (NAT) Minden láncnak van egy alapértelmezett szabálya (policy): ACCEPT: engedélyezett, DROP: tiltott 5
A filter tábla Alapértelmezett tábla, legfontosabb tábla. Ha nincs megadva tábla az iptables parancsban, akkor ebben dolgozik! Láncai: INPUT FORWARD OUTPUT Egy hálókártya (munkaállomás) esetén az INPUT lánc használatos. Nem tud forward-olni. 6
A nat tábla Címfordításkor használatos. Több hálókártya van, router. Láncai: PREROUTING OUTPUT POSTROUTING Internet felé címfordítás: POSTROUTING Internet felől címfordítás: PREROUTING (SNAT) (DNAT) 7
A mangle tábla Módosítások végezhetőek a TCP/IP csomagokban. Pl. TOS, TTL, MARK, SECMARK, CONNSECMARK... Láncai: PREROUTING INPUT FORWARD OUTPUT POSTROUTING 8
Az iptables parancs Általában az INPUT láncban szűrünk. Ha az adott csomag egyik szabályra sem illeszkedik, akkor az alapértelmezett (default policy) érvényesül. Legfontosabb paraméterek: -F : minden szabályt töröl a láncból, ha a lánc elmarad, a tábla összes láncából -L : kilistázza a szabályokat, ha a lánc elmarad, az INPUT láncét -P : megadja a beépített lánc policy-ját (default policy) -N : saját láncot hoz létre -X : töröl egy saját láncot -A : a szabályt a lánc végére szúrja be -I : a szabályt a lánc elejére szúrja be -t : a tábla, amiben dolgozik, ha nincs megadva, akkor a filter tábla 9
Az iptables parancs Feltételek megadása: -s : küldő IP címe (forrás, source) -d : címzett IP címe (cél, destination) --sport : küldő port --dport : címzett port -i : fogadó interfész, csatoló (pl. eth0) -o : kiküldő interfész, csatoló (pl. eth1) -p : csomag protokoll: tcp, udp, icmp -m : iptables modul betöltése 10
Az iptables parancs Feltételek megadása: -m modulename 11
Az iptables parancs Célok megadása: -j <cél> : A csomagcél megadása Cél lehet: ACCEPT: elfogadott csomag, feldolgozás befejezése. DROP: eldobott csomag, feldolgozás befejezése REJECT: visszautasított csomag, kezdeményező oldal felé egy icmp értesítő üzenet is elküldésre kerül. Feldolgozás befejezése. LOG: kernel szinten naplózásra kerül (--log-level, --log-prefix). Feldolgozás 12 folytatódik.
Az iptables parancs Célok megadása: -j <cél> : A csomagcél megadása Cél lehet a nat táblán: SNAT: SNAT forráscím fordítás DNAT: DNAT célcím fordítás MASQUERADE: forráscím maszkolás 13
iptables példák Naplózás: iptables -A INPUT -j LOG --log-prefix "IPTABLES_input " --log-level debug Rendszernaplóban: Nov 7 08:55:21 szerver1 kernel: [ 1888.333958] IPTABLES_input IN=eth0 OUT= MAC=d4:be:d9:53:23:85:f8:d1:11:3b:ab:1c:08:00 SRC=216.58.209.163 DST=192.168.1.11 LEN=40 TOS=0x00 PREC=0x00 TTL=57 ID=3457 PROTO=TCP SPT=443 DPT=57184 WINDOW=0 RES=0x00 RST URGP=0 Tűzfalszabályok törlése iptables -P INPUT ACCEPT # minden bejövő csomagot engedünk iptables -P OUTPUT ACCEPT # minden kimenő csomagot engedünk iptables -F # törlünk minden szabályt iptables -X # törlünk minden saját láncot iptables -Z # törlünk minden számlálót iptables -P FORWARD DROP # a csomagtovábbítást tiltjuk 14
iptables példák Munkaállomás tűzfalszabályai: iptables -A INPUT -i lo -j ACCEPT # gepen beluli kommunikaciot engedjuk iptables -A OUTPUT -o lo -j ACCEPT # gepen beluli kommunikaciot engedjuk iptables -A OUTPUT -j ACCEPT # mindent kiengedunk iptables -N admin # sajat lanc ssh-nak # INPUT lanc iptables -A INPUT -m pkttype --pkt-type mcast -j DROP iptables -A INPUT -m conntrack --ctstate INVALID -j DROP # a munkaallomas nem hasznal multicastot # a megszunt kapcsolathoz tartozo csomagot eldobjuk iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # a mar letrejott kapcsolatok csomagjai bejohetnek iptables -P INPUT DROP # ha egy csomag beengedesere nincs szabaly, eldobjuk iptables -A INPUT -p icmp --icmp_type echo_request -j ACCEPT # ping iptables -A INPUT -p tcp --dport ssh -j admin # az ssh-t csak bizonyos gepekrol fogadjuk iptables -A INPUT -j LOG --log-prefix "IPTABLES_input " --log-level debug # logoljuk a probalkozasokat # admin lanc iptables -A admin -p tcp -m iprange --src-range 192.168.1.2-192.168.1.254 -j ACCEPT # az ssh-t csak helyi halobol engedjuk iptables -A admin -j LOG --log-prefix "IPTABLES_admin " --log-level debug # logoljuk a probalkozasokat iptables -A admin -s 0/0 -j DROP # eldobjuk a csomagot, amire nincs beengedo szabaly 15
iptables példák NAT szerver tűzfalszabályai: # a megszunt kapcsolathoz tartozo csomagot eldobjuk: iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP # a mar letrejott kapcsolatok csomagjait engedjuk: iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # a belso halobol mindenki kimehet: iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # MASQUERADE a kimeno csatolo elsodleges cimen NAT-ol: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE SNAT: statikus IP címek esetén MASQUERADE: dinamikus IP címek esetén (pl. ppp) A MASQUERADE feldolgozza az IP címváltozást, de erőforrásigényes. 16
Az iptables telepítés Debian alapú rendszerek esetén: apt install iptables RedHat alapú rendszerek esetén: yum install iptables dnf install iptables 17
Az iptables szabályok konfigurálása Szolgáltatás indítás, leállítás, státusz systemctl start iptables systemctl stop iptables systemctl status iptables Beállítások (szabályok) mentése iptables-save Beállítások (szabályok) visszatöltése iptables-restore 18
Az iptables szabályok konfigurálása Lehet shell szkriptet írni. Konfigurációs fájlba beállítható (RedHat alapú rdsz.): /etc/sysconfig/iptables # Generated by iptables-save *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -p udp -m udp sport 161 -j ACCEPT -A INPUT -p tcp dport 21 -j DROP COMMIT 19
Frontend, felhasználói réteg A könnyebb kezelhetőség, konfigurálás érdekében készült egy kezelői felület: firewalld http://www.firewalld.org 20
Köszönöm a figyelmet! 21