Netfilter Csomagszűrés Összeállította: Sallai András
Tűzfalak Csomagszűrő tűzfalak TCP/IP protokollok szintjén szűrünk Alkalmazás szintű tűzfalak lehetőség a tartalom alapján való szűrésre
Csomagszűrés A csomagszűrés tulajdonképpen a TCP/IP protokoll rétegein végrehajtott korlátozások, szabálylisták meghatározása
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 1.3 kernel pf 2.0 kernel ipfwadm 2.2 kernel ipchains 2.4 kernel iptables 2.6 kernel iptables
LÁNCOK PREROUTING ROUTING FORWARD POSTROUTING ROUTING INPUT OUTPUT
Láncok PREROUTING interfészről jön a csomag, még routing előtt FORWARD routing után, ha a csomag nem lokális csomagnak szól POSTROUTING routing után miután egy csomag elhagyja a vermet INPUT routing után, ha a csomag lokális processznek szól OUTPUT routing előtt, ahogy ahogy egy lokális processztől megkapja a verem a csomagot
Csomagok sorsai - Célpontok 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 kerül, köv. szab. QUEUE a csomag a usertér felé
Státusz illeszkedés -m state --state NEW Új kapcsolatot létesítő csomag. Lehet egy csomag sima ACK jelzős, mégis NEW Tehát: NEW!= --syn 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.
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ó. Az alapszabályra újabb szabályok építhetők, ezekből fog összeállni a szabálylista
Aktuális szabályok listázása? iptables -L iptables --list iptables -L INPUT iptables -t nat -L
Láncok ürítése iptables -F láncok szabályainak törlése (az alapértelmezett szabály megmarad) iptables -X saját láncok törlése iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
Láncok alapszabályai iptables -P INPUT ACCEPT iptables -P INPUT DROP iptables -L INPUT
Szabályokról 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 iptables -A INPUT -p udp --sport 53 -j ACCEPT A beszúrt szabály lesz a második. A eredeti harmadik lesz iptables -I INPUT -p TCP --dport 80 -j ACCEPT iptables -I INPUT 2 -p TCP --dport 80 -j ACCEPT iptables -R INPUT 2 -p TCP --dport 80 -j DROP iptables -D INPUT 2 második szabály törlése második szabály cseréje
Példák hálózat/ip megadására iptables -A INPUT -p tcp -s 192.168.1.0/24 --sport 80 -j ACCEPT iptables -A INPUT -p tcp -d 192.168.3.0/24 --dport 80 -j ACCEPT iptables -A INPUT -p tcp -s 192.168.1.0/24 --sport 80 -d 192.168.4.0/24 -j ACCEPT 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,ESTABLISHED --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
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 ]
Portok 2 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!
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
Samba iptables -A INPUT -p udp --dport 137 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 138 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -- dport 139 -j ACCEPT -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! /etc/modules-be vegyük fel! 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, RELATED -j ACCEPT 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,RELATED -j ACCEPT (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 "szerver_ip_cím" --sport 20:21 -j ACCEPT
Maszkolás echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE (A 192.168.1.0/24 a maszkolandó háózat. Az eth0 az Inernet felőli interface) Maszkolás beállításának ellenőrzése iptables -t nat -L
Klasszikus támadások védése # Letapogatás elleni védelem iptables -A INPUT -p tcp! --syn -m state --state NEW -j DROP # Syn-flood vedelem iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT # Alattomos portscan iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Halal pingje iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
Naplózás -j LOG --log-level 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 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)
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!!! iptables -A INPUT -t icmp -j LOG --log-prefix ICMP bárhonnan iptables -A INPUT -t icmp -j ACCEPT tail /var/log/syslog
Transzparens proxy iptables -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.2:3128 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
Szabályok mentése, visszatöltése, automatizálása iptables-save > /etc/network/iptables iptables-restore < /etc/network/iptables cat > /etc/init.d/iptables #!/bin/sh echo Starting iptables... iptables-restore < /etc/network/iptables ln -s /etc/init.d/iptables /etc/rcs.d/s20iptables Az S39ifupdown előtt szokás indítani
Egy egyszerű script egy szerver esetén mejnek IP címe 195.199.8.20 iptables -F iptables -X iptables -P INPUT DROP Szerver: Apache, Postfix, MySQL,SSH iptables -P OUTPUT ACCEPT iptables -P FORWARD 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 --dport -d 195.199.8.20 3306 -j ACCEPT iptables -A INPUT -p tcp -d 195.199.8.20 --dport 22 -j ACCEPT
Irodalom http://www.netfilter.org http://www.szabilinux.hu/iptables http://troy.jdmz.net/samba/fw/ http://linuxbazar.uw.hu/lapok/iptables.html http://logi.cc/linux/netfilter-log-format.php3