Alap tűzfal otthoni PC-re (iptables I)



Hasonló dokumentumok
IPTABLES. Forrás: Gregor N. Purdy: Linux iptables zsebkönyv

Netfilter. Csomagszűrés. Összeállította: Sallai András

IPTABLES II. Jelenlegi tűzfalunk így néz ki (IPTABLES I. rész):

Tűzfal építés az alapoktól. Kadlecsik József KFKI RMKI

Javaslat egy Iptables tűzfal konfigurációjára Számítógép hálózatok esszé Készítette : Veress Krisztián

Számítógépes Hálózatok GY 8.hét

A netfilter csomagszűrő tűzfal

Hálózatok építése és üzemeltetése

Készítette: Sallai András Terjesztés csak engedéllyel sallaia_kukac_fre _pont_hu

A Valknut fájlcserélő használata

Fábián Zoltán Hálózatok elmélet

Számítógépes Hálózatok. 8. gyakorlat

Számítógépes Hálózatok GY 9.hét

Adatbiztonság a gazdaságinformatikában ZH december 7. Név: Neptun kód:

Internet ROUTER. Motiváció

DSL Internet telepítése opensuse-ra (Tesztelve: opensuse 10.0-tól 10.3-ig)

Változások a Sulinet szűrési szabályokban

Youtube videó letöltés és konvertálás Linuxon

T?zfalak elméletben és gyakorlatban. Kadlecsik József KFKI RMKI

Számítógépes Hálózatok

Számítógépes Hálózatok GY 8.hét

Bevezetés az informatikába, második gyakorlat. Bevezetés Környezetváltozók és néhány egyszerű utasítás Jogosultságok Fájlkezelés

Linux hálózati adminisztráció

applikációs protokollok


Netfilter: a jó, a rossz és a csúf. Kadlecsik József KFKI RMKI <kadlec@mail.kfki.hu>

nftables Kadlecsik József MTA Wigner FK

Hálózatok építése és üzemeltetése

Nagios NSCA Indirect Monitoring, Passive Check

Hálózati adminisztráció Linux (Ubuntu 9.04) 9. gyakorlat

Google Drive szinkronizálása asztali géppel Linux rendszeren

Hálózati architektúrák laborgyakorlat

G Data MasterAdmin 9 0 _ 09 _ _ # r_ e p a P ch e T 1

Bevezető. PoC kit felépítése. NX appliance. SPAN-Proxy

Java-s Nyomtatványkitöltő Program Súgó

Alkalmazásszintû proxyzás a Zorp segítségével (2. rész)

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Telepítési útmutató. web:

Az SQL*Plus használata

Windows Screencast teszt

1.2. NFS kliens telepítése és beállítása

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program

Tűzfal megoldások. ComNETWORX nap, I. 30. ComNETWORX Rt.

2019/02/12 12:45 1/13 ACL

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

FITNESS SYSTEM Telepítési útmutató

HBONE rendszergazdák tanácsa

Szkriptnyelvek. 1. UNIX shell

Az internet ökoszisztémája és evolúciója. Gyakorlat 1

Hálózati beállítások Készítette: Jámbor Zoltán 2016

ALKALMAZÁSOK ISMERTETÉSE

Ubuntu telepítése virtuális gépre (VirtualBox)

Hálózati architektúrák és Protokollok GI 8. Kocsis Gergely

Sávszélesség szabályozás kezdőknek és haladóknak. Mátó Péter

IPv6 alapok, az első lépések. Kunszt Árpád Andrews IT Engineering Kft.

Linux iptables csomagszűrési gyorstalpaló, kezdőknek...

Számítógépes hálózatok

EESZT szerver üzemeltetési dokumentáció

HÁLÓZATI BEÁLLÍTÁS. Videorögzítőkhöz

Az iptables a Linux rendszerek Netfilter rendszermagjának beállítására szolgáló eszköz.

SAMBA. Forrás: Lajber Zoltán: SAMBA alapok dia, SZIE

Tájékoztató. Használható segédeszköz: -

Hálózati eszközök biztonsága

Tűzfalak működése és összehasonlításuk

Léteznek nagyon jó integrált szoftver termékek a feladatra. Ezek többnyire drágák, és az üzemeltetésük sem túl egyszerű.

1. Alapok. #!/bin/bash

HÁLÓZATBIZTONSÁG III. rész

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

POSZEIDON dokumentáció (4.2)

20. Tétel 1.0 Internet felépítése, OSI modell, TCP/IP modell szintjenek bemutatása, protokollok Pozsonyi ; Szemenyei

Operációs rendszerek. 4. gyakorlat. BASH bevezetés, script írása, futtatása UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Számítógépes hálózatok

IPv6 Biztonság: Ipv6 tűzfalak tesztelése és vizsgálata

13. gyakorlat Deák Kristóf

Symantec Firewall/VPN Appliance

Technikai tudnivalók a Saxo Trader Letöltéséhez tűzfalon vagy proxy szerveren keresztül

Thermo1 Graph. Felhasználói segédlet

Bevezetés a Python programozási nyelvbe

Rendszergazda Debrecenben

Gyors telepítési kézikönyv

Névfeloldás hosts, nsswitch, DNS

Csomagsz rés Linux-Netlter környezetben

Hálózati sávszélesség-menedzsment Linux rendszeren. Mátó Péter Zámbó Marcell

1. Létező postafiók megadása

Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0

Apache, MySQL, PHP/Perl NetWare-n

BIOS beállítása a LiveCD-hez

Hálózatos adatbázis-kapcsolódási problémák és azok javítása

IP150 frissítés 4.20-ra

Előnyei. Helyi hálózatok tervezése és üzemeltetése 2

Bérprogram vásárlásakor az Ügyfélnek ben és levélben is megküldjük a termék letöltéséhez és aktiválásához szükséges termékszámot.

Számítógépek és hálózatok biztonsága laboratórium (BMEVIHI4401) SEC-2 mérés. v1.0. Számítógépes rendszerek sebezhetőségi vizsgálata

[SZÁMÍTÓGÉP-HÁLÓZATOK]

Egyetemi könyvtári nyilvántartó rendszer

Elektronikus számlák befogadása és kezelése az Octopus 8 Integrált Vállalatirányítási Rendszerben

1/13. RL osztály Hálózati alapismeretek I. gyakorlat c. tantárgy Osztályozóvizsga tematika

Beállítások 1. Töltse be a Planet_NET.pkt állományt a szimulációs programba! A teszthálózat már tartalmazza a vállalat

CISCO gyakorlati segédlet. Összeállította: Balogh Zoltán

Windows há lo záti ádminisztrá cio gyákorlát

Átírás:

Alap tűzfal otthoni PC-re (iptables I) Ez egy nagyon nagy téma, én csak az alapokat szeretném megmutatni a teljesség igénye nélkül. Elsősorban fontosnak tartom leírni, hogy a szabályokat egy fájlban fogjuk elhelyezni amit létrehozhatunk például a /usr/local/sbin/ könyvtárban firewall_start.sh néven (pl). Iptables Adminisztrációs eszköz az Ipv4 csomagszűréshez és NAT-oláshoz. (részlet az iptables manualból) Az iptables a hálózati rétegben működik, vagyis IP csomagokkal dolgozik. Szabályokat (rules) lehet vele felállítani amiket táblákba szervez. Három default (alapértelmezett) lánc (chain) létezik: INPUT - a kintről befelé érkező csomagokra match-el OUTPUT - a bentről kimenő csomagokra match-el FORWARD - az adott gépen átmenő csomagokra match-el Megj.: van még kettő (PREROUTING és POSTROUTING) de azok nem tartoznak bele ebbe a leírásba. Talán egy későbbiben. Hozhatunk létre saját láncokat is. Lánc műveletek: -N új lánc létrehozása pl.: iptables -N in_attack - létrehozza az in_attack láncot. -P lánc policy beállítása pl.: iptables -P INPUT DROP ez a parancs beállítja az INPUT lánc policy-ját DROP-ra ami azt jelenti, hogy ha az INPUT láncban szereplő szabályok közül egyikre sem match-el egy csomag, akkor el lesz dobva. -F töröl minden szabályt pl.: iptables -F minden létező szabályt töröl, de nem változtatja meg a láncok policy-jét!! -L kilistázza a szabályokat, az egészet, vagy csak egy láncét pl.: iptables -L INPUT - kilistázza az INPUT lánc összes szabályát. -X törli az üres láncokat pl.: iptables -X

Ennyi elmélet kezdésnek, a többit gyakorlati példákkal mutatnám be. Először hozzuk létre a fájlt a tűzfal szabályoknak (terminálban) és tegyük futtathatóvá: Senki ne másolja be az általam írt parancsot, mindenki vegye a fáradtságot és kézzel írja be. $ sudo touch /usr/local/sbin/firewall_start.sh $ sudo chmod +x /usr/local/sbin/firewall_start.sh Ezután már az elejét meg tudjuk írni: $ sudo mcedit /usr/local/sbin/firewall_start.sh # mcedit helyett bármi lehet (nano, gedit, vi, vim...) A tartalma pedig egyelőre: 1 #!/bin/bash 2 iptables -F 3 iptables -X 4 iptables -P INPUT DROP 5 iptables -P OUTPUT DROP 6 iptables -P FORWARD DROP A sorokat a magyarázás miatt számoztam be. 1. sor megadja az értelmező shellt 2. sor törli az összes szabályt 3. sor törli az üres láncokat (-F miatt már mind üres) 4. 5.6.sor beállítja a policy-ket DROP-ra Az INPUT és az OUTPUT láncot is azzal célszerű kezdeni, hogy a lo (localhost) felé és felől engedünk mindent: iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT Az iptables a program neve. A -A INPUT OUTPUT mondja meg, hogy melyik láncra érvényes a szabály. A -i és -o a bejövő és kimenő interfészt jelenti. Vagyis a -i lo = bejövő interfész a localhost. -j ACCEPT határozza meg a csomagok sorsát amik illeszkednek erre a szabályra. a sorsok lehetnek: ACCEPT; DROP. Amit még fontos betenni minden tűzfal szabályok közé: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT A -m state state ESTABLISHED,RELATED a csomag állapotára utal. Vagyis

azokra a csomagokra vonatkozik a szabály amik tőlünk indult csomagokra érkező válaszok. Tehát nem lehet köztük NEW (syn) csomag. Jó tanács, hogy kifelé sem engedünk minden NEW csomagot, hiszen egy jó tűzfalban szűrni kell az OUTPUT láncot is. Vannak akik ezzel nem értenek egyet. Tűzfal beállítása Most mérjük fel az igényeket, mert ettől a ponttól egyedi esetek állnak fent. Most számoljunk azzal, hogy a szkriptet készítő felhasználó a következőket szeretné: internet (HTTP, HTTPS), MSN, IRC, levelezés és FTP. Internet: 80(HTTP)/tcp 443(HTTPS)/tcp iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT Ez egy egyszerű szabály ami kiengedi azokat a csomagokat amik TCP csomagok (-p tcp) és a célportjuk 80 és 443 (--dport 80 443). A 443-as port a HTTPS portja. Csakhogy ezzel még nem fok működni a böngészés, hiszen ezt a lépést megelőzi az IP cím felderítés (felodás [resolve]) DNS segítségével. iptables -A OUTPUT -p udp --dport 53 -j ACCEPT Így most már kiengedjük az 53-as célportú udp csomagokat is, amik a DNS szerverek felé mennek majd. A válasz befogadásáról nem kell külön gondoskodnunk, hiszen már van egy erre a célra írt szabályunk. (iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT, ezt a sort érdemes az OUTPUT lánc legelejére tenni (az lo lánc szabály után) mivel a legtöbb csomag valoszinűleg erre fog matchelni, s így nem kell áthladnia az összes többi láncon) MSN: 1863/tcp iptables -A OUTPUT -p tcp --dport 1863 -j ACCEPT IRC: 6667/tcp iptables -A OUTPUT -p tcp --dport 6667 -j ACCEPT Levelezés: 25(SMTP)/tcp 465(SMTPS)/tcp 143(IMAP)/tcp 993(IMAPS)/tcp 110(POP3)/tcp 995(POP3S)/tcp iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 143 -j ACCEPT iptables -A OUTPUT -p tcp --dport 993 -j ACCEPT iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT iptables -A OUTPUT -p tcp --dport 995 -j ACCEPT FTP: 20(FTP-DATA)/tcp 21(FTP)/tcp iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT modprobe ip_conntrack_ftp A 3. sor egy FTP modul betöltése. Összefoglalva és egyszerűsítve: 1 #!/bin/bash 2 3 # modulok betolltese 4 modprobe ip_conntrack_ftp 5 6 iptables -F 7 iptables -X 8 iptables -P INPUT DROP 9 iptables -P OUTPUT DROP 10 iptables -P FORWARD DROP 11 12 # INPUT lanc 13 iptables -A INPUT -i lo -j ACCEPT 14 iptables -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT 15 iptables -A INPUT -j LOG --log-prefix INPUT_DROP: 16 iptables -A INPUT -j DROP 17 18 # OUTPUT lanc 19 iptables -A OUTPUT -o lo -j ACCEPT 20 iptables -A OUTPUT -m state state ESTABLISHED,RELATED -j ACCEPT 21 iptables -A OUTPUT -p tcp -m multiport --dport 20,21,25,80,110,/ 22 /143,443,465,993,995,1863,6667 -j ACCEPT 23 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT 24 iptables -A OUTPUT -j LOG --log-prefix OUTPUT_DROP: 25 iptables -A OUTPUT -j DROP Lényegében ez egy nagyon egyszerű, de a semminél mégis lényegesen több tűzfal. Mind a két láncban van két utolsó ismeretlen szabály. 15. és 24. sor: sorsa LOG. Loggol (naplóz) minden csomagot ami nem illeszkedett egyetlen szabályra sem. 16. és 25. sor Loggolás után eldob minden csomagot ami egyetlen előző szabálya sem illeszkedett. Tipp: A logot ki lehet kapcsolni, de én ezzel a módszerrel derítettem ki, hogy egyes alkalmazások milyen portokon szeretnének kommunikálni. A módszer:

$ tail -f /var/log/messages Hagyni kell had fusson, majd elindítani a kérdéses alkalmazást és figyelni kell, milyen csomagokat dob el. A log-ban benne lesz, hogy milyen cél vagy forrás portot igényel és az tcp vagy udp -e. Én szeretem bekapcsolva hagyni a logot, de hogy mégsem legyen sok felesleges log, van még pár szabály a tűzfalamban: iptables -A INPUT -p tcp -m multiport --dport 135,137,139,445,1026,1027,/ /5900,6881 -j DROP iptables -A INPUT -p udp -m multiport --dport 135,137,139,445,1026,1027,/ /5900 -j DROP Ezeket a 14. sor után tettem be. Így ezeket a csomagokat log nélkül eldobja. 135/tcp - epmap, # Location Service 137/tcp - netbios-ns, # NETBIOS Name Service 139/tcp - netbios-ssn # NETBIOS session service 445/tcp - microsoft-ds # Microsoft Naked CIFS 1026/tcp - nem szabványos port 1027/tcp - nem szabványos port 135/udp - 137/udp - 139/udp - 445/udp - 1026/udp - 1027/udp - epmap, netbios-ns, netbios-ssn microsoft-ds nem szabványos port nem szabványos port Ezzel kész egy egyszerű tűzfal szkript ami a /usr/local/sbin/firewall_start.sh fájlban van. Következő lépések: $ sudo touch /etc/init.d/firewall.sh $ sudo chmod +x /etc/init.d/firewall.sh $ sudo mcedit /etc/init.d/firewall.sh A következőket írjuk bele: #!/bin/bash case "$1" in start) /usr/local/sbin/firewall_start.sh ;; stop) /usr/local/sbin/firewall_stop.sh ;; esac Ez egy kis indítószkript, amit szintén tovább lehet fejleszteni majd. De most a célnak megfelel, csak arra kell, hogy a tűzdal szkriptünk automatikusan

lefusson rendszerindításkor. Még egy dolog maradt hátra. $ sudo ln -s /etc/init.d/firewall.sh /etc/rc2.d/s01firewall Rc2.d könyvtárba akkor, ha a futási szint 2. Alapértelmezetten 2, de ellenőrizzük le: budacsik@budacsik-desktop:~$ runlevel N 2 Ki lehet próbálni, de mielőtt restartolunk, még egyszer nézzünk át mindent. Tipp: Az összes port listáját meg lehet nézni a /etc/services fájlban. Kiegészítés: Minden esetben csak simán az iptables parancsot használtam. Sokan más formában írják meg, és talán igazuk van. A szkript elején létrehozzák a parancsok változóit. Az iptables parancs helye: (which iptables) /sbin/iptables Tehát a szkript eleje így néz ki: 1 #!/bin/bash 2 3 # valtozok deklaralasa 4 IPTABLES= /sbin/iptables 5 # modulok betolltese 6 modprobe ip_conntrack_ftp 7 8 $IPTABLES -F 9 $IPTABLES -X 10 $IPTABLES -P INPUT DROP 11 $IPTABLES -P OUTPUT DROP 12 $IPTABLES -P FORWARD DROP Jól látszik, hogy most már a $IPTABLES változóval hivatkozok a programra. További kiegészítés(2008.02.18 12:04): Elegánsabb megoldás, ha a tűzfal kézi indítása után kiadjuk a következő parancsot: Kimentéshez sudo iptables-save > /home/budacsik/firewall.txt Visszatöltéshez sudo iptables-restore < /home/budacsik/firewall.txt

Hol hasznos ez? Firewall szkriptünk /usr/local/sbin/firewall_start.sh a következő képpen módosul: #!/bin/bash sudo iptables-restore < /home/budacsik/firewall.txt Igy nem az iptables kell hívogatni és a kimentett firewall.txt fájlt is lehet szerkeszteni. Sőt a fájlt megnézve hamar hozzá lehet szokni, és lehet eleve így elkészíteni a szkriptet, de én ettől eltekintenék, ugyanis hátránya pl, hogy nehéz kommentezni, könnyen átláthatatlanná válik... Szerintem maradjon meg az eredeti fájl is amit szerkesztünk, majd futtatjuk, lementjük és a továbbiakban azt töltjük vissza rendszerindításkor. Szerző: Budácsik Attila (budacsik) Elérhetőségek: budacsik@gmail.com makay.jozsef@gmail.com Licenc: A dokumentum szabadon másolható, de nem módosítható. A dokumentumot tilos pénzért, vagy bármilyen járandóságért árusítani. Minden jog a szerzőnek van fenntartva. További információk: Az esetleges hibákért a szerző nem vállal felelősséget. A szövegben felfedezett hibákat és észrevételeket a Makay József email-címére kérjük. Minden jog fenntartva! SKL-Projekt