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 2.0 2.2 2.4 2.6
kernel kernel kernel kernel kernel
pf ipfwadm ipchains iptables iptables
LÁNCOK
PREROUTING
ROUTING
POSTROUTING
FORWARD
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
●
REJECT mint a DROP csak visszajelez
●
LOG
●
●
a csomag eldobása
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
A beszúrt szabály lesz a második. A eredeti harmadik lesz
●
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
●
iptables -R INPUT 2 -p TCP --dport 80 -j DROP
●
iptables -D INPUT 2 második szabály cseréje második szabály törlése
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 SSH HTTP https smtp pop3 pop3s proxy ftp
UDP TCP TCP TCP TCP TCP TCP TCP TCP
53 (Zóna transfer tcp!) 22 80 443 25 110 995 8080 vagy 3128 21 [ és 20 ]
Portok 2 ●
● ●
samba dhcp icmp
UDP TCP UDP ICMP
137,138, 139, 445 67,68 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
●
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
Szerver: Apache, Postfix, MySQL,SSH
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