Weboldal keresés

25 hasznos IPtable tűzfalszabály, amelyet minden Linux-rendszergazdának tudnia kell


A hálózati forgalom kezelése az egyik legnehezebb feladat, amellyel a rendszergazdáknak meg kell küzdeniük. A tűzfalat úgy kell konfigurálnia, hogy az megfeleljen a rendszer és a felhasználói követelményeknek mind a bejövő, mind a kimenő kapcsolatokra vonatkozóan, anélkül, hogy a rendszert sebezhetővé tenné a támadásokkal szemben.

Itt jön jól az iptables. Az Iptables egy Linux parancssori tűzfal, amely lehetővé teszi a rendszergazdák számára, hogy konfigurálható táblázatszabályok segítségével kezeljék a bejövő és kimenő forgalmat.

Az Iptables táblakészletet használ, amelynek láncai beépített vagy felhasználó által meghatározott szabályokat tartalmaznak. Ezeknek köszönhetően a rendszergazda megfelelően szűrheti rendszere hálózati forgalmát.

Az iptables kézikönyve szerint jelenleg 3 típusú tábla létezik:

    1. SZŰRŐ – ez az alapértelmezett tábla, amely a következő beépített láncokat tartalmazza:

      1. INPUT  – helyi aljzatokhoz szánt csomagok
      2. FORWARD – a rendszeren keresztül irányított csomagok
      3. OUTPUT – helyileg generált csomagok
    2. NAT – egy tábla, amelyet a rendszer lekérdez, amikor egy csomag új kapcsolatot próbál létrehozni. A következő beépített elemekkel rendelkezik:

      1. PREROUTING – a csomag fogadása utáni módosítására szolgál
      2. OUTPUT – a helyileg generált csomagok módosítására szolgál
      3. POSTROUTING – csomagok módosítására szolgál, amikor azok hamarosan kialszanak
    3. MANGLE – ez a táblázat a csomagok módosítására szolgál. A 2.4 kernelverzióig ennek a táblázatnak csak két lánca volt, de most 5:

      1. PREROUTING – a bejövő kapcsolatok módosításához
      2. OUTPUT – a helyileg generált csomagok módosításához
      3. INPUT – a bejövő csomagokhoz
      4. POSTROUTING – a csomagok megváltoztatásához, amint azok hamarosan kimennek
      5. FORWARD – a dobozon keresztül irányított csomagokhoz

Ebben a cikkben néhány hasznos parancsot talál, amelyek segítenek kezelni a Linux-box tűzfalát az iptables segítségével. Ebben a cikkben az egyszerűbb parancsokkal kezdem, és a végére megyek az összetettebbekkel.

1. Indítsa el/leállítsa/indítsa újra az Iptables tűzfalat

Először is tudnia kell, hogyan kezelheti az iptables szolgáltatást a különböző Linux disztribúciókban. Ez elég egyszerű:

SystemD alapú Linux disztribúciókon

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

SysVinit alapú Linux disztribúciókon

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Ellenőrizze az összes IPtables tűzfalszabályt

Ha ellenőrizni szeretné a meglévő szabályokat, használja a következő parancsot:

iptables -L -n -v

Ennek az alábbihoz hasonló kimenetet kell visszaadnia:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Ha inkább egy adott tábla szabályait szeretné ellenőrizni, használhatja a -t opciót, majd az ellenőrizni kívánt táblát. Például a NAT tábla szabályainak ellenőrzéséhez a következőket használhatja:

iptables -t nat -L -v -n

3. Adott IP-cím blokkolása az IPtables tűzfalban

Ha szokatlan vagy visszaélésszerű tevékenységet talál egy IP-címről, blokkolhatja az IP-címet a következő szabállyal:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Ahol meg kell változtatni a "xxx.xxx.xxx.xxx" címet a tényleges IP-címre. Legyen nagyon óvatos a parancs futtatásakor, mert véletlenül blokkolhatja saját IP-címét. A -A opció hozzáfűzi a szabályt a kiválasztott lánc végéhez.

Ha csak az adott IP-címről érkező TCP forgalmat szeretné blokkolni, használhatja a protokollt meghatározó -p opciót. Így a parancs így fog kinézni:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Oldja fel az IP-cím blokkolását az IPtables Firewallban

Ha úgy döntött, hogy többé nem szeretné blokkolni az adott IP-címről érkező kéréseket, a következő paranccsal törölheti a blokkoló szabályt:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

A -D opció egy vagy több szabályt töröl a kiválasztott láncból. Ha inkább a hosszabb opciót szeretné használni, használhatja a --delete parancsot.

5. Blokkolja az adott portot az IPtables tűzfalon

Néha érdemes blokkolni a bejövő vagy kimenő kapcsolatokat egy adott porton. Ez egy jó biztonsági intézkedés, és tényleg gondolnia kell erre a tűzfal beállításakor.

A kimenő kapcsolatok blokkolása egy adott porton:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

A bejövő kapcsolatok engedélyezéséhez használja:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

Mindkét példában módosítsa a "xxx" paramétert az engedélyezni kívánt tényleges portra. Ha a TCP helyett az UDP forgalmat szeretné blokkolni, egyszerűen módosítsa a "tcp" értéket az "udp" értékre a iptables szabály felett.

6. Több port engedélyezése az IP-táblákon a Multiport használatával

Egyszerre több portot is engedélyezhet a multiport használatával. Az alábbiakban egy ilyen szabályt talál a bejövő és kimenő kapcsolatokra egyaránt:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Adott hálózati tartomány engedélyezése adott porton az IP-táblákon

Előfordulhat, hogy egy adott porton bizonyos kapcsolatokat egy adott hálózatra kíván korlátozni. Tegyük fel, hogy engedélyezni szeretné a kimenő kapcsolatokat a 22 porton a 192.168.100.0/24 hálózathoz.

Ezzel a paranccsal megteheti:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Blokkolja a Facebookot az IPtables tűzfalon

Egyes munkaadók szeretik letiltani alkalmazottaik hozzáférését a Facebookhoz. Az alábbiakban bemutatunk egy példát a Facebook felé irányuló forgalom blokkolására.

Megjegyzés: Ha Ön rendszergazda, és alkalmaznia kell ezeket a szabályokat, ne feledje, hogy kollégái nem beszélnek Önnel :)

Először keresse meg a Facebook által használt IP-címeket:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Ezután letilthatja ezt a Facebook-hálózatot a következőkkel:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Ne feledje, hogy a Facebook által használt IP-címtartomány országonként eltérő lehet.

9. Állítsa be a porttovábbítást az IPtables-ban

Néha érdemes lehet egy szolgáltatás forgalmát egy másik portra továbbítani. Ezt a következő paranccsal érheti el:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

A fenti parancs az összes bejövő forgalmat továbbítja az eth0 hálózati interfészen, a 25 portról a 2525 portra. Megváltoztathatja a szükséges portokat.

10. Blokkolja a hálózati özönt az Apache porton IPtables segítségével

Előfordulhat, hogy az IP-címek túl sok kapcsolatot kérnek a webhely webportjaihoz. Ez számos problémát okozhat, és az ilyen problémák megelőzésére használhatja a következő szabályt:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

A fenti parancs percenként 100-ra korlátozza a bejövő kapcsolatokat, és a korlátot 200-ra állítja be. A határértéket és a limit-sorozatot saját igényei szerint módosíthatja.

11. Blokkolja a bejövő ping kéréseket az IPtables-on

Egyes rendszergazdák biztonsági megfontolások miatt szeretik blokkolni a bejövő ping kéréseket. Bár a fenyegetés nem olyan nagy, jó tudni, hogyan lehet blokkolni az ilyen kéréseket:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Engedélyezze a visszahurkolt hozzáférést

A visszahurkolt hozzáférés (elérés a 127.0.0.1-ről) fontos, és mindig hagyd aktívan:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Vezessen naplót az eldobott hálózati csomagokról az IPtables-on

Ha az eldobott csomagokat az eth0 hálózati interfészen szeretné naplózni, használja a következő parancsot:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

A "--log-prefix" utáni értéket tetszés szerint módosíthatja. Az üzenetek a /var/log/messages mappában vannak naplózva, és a következővel keresheti őket:

grep "IPtables dropped packets:" /var/log/messages

14. Blokkolja a hozzáférést egy adott MAC-címhez az IP-táblákon

A rendszerhez való hozzáférést blokkolhatja adott MAC-címről a következő módon:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Természetesen meg kell változtatnia a "00:00:00:00:00:00" értéket a blokkolni kívánt tényleges MAC-címre.

15. Korlátozza az egyidejű kapcsolatok számát IP-címenként

Ha nem szeretne túl sok párhuzamos kapcsolatot létrehozni egyetlen IP-címről az adott porton, használja az alábbi parancsot:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

A fenti parancs legfeljebb 3 kapcsolatot tesz lehetővé kliensenként. Természetesen módosíthatja a portszámot, hogy megfeleljen a különböző szolgáltatásoknak. A --connlimit-above-t is módosítani kell, hogy megfeleljen a követelménynek.

16. Keresés az IPtables szabályon belül

Miután meghatározta az iptables-szabályokat, időről időre keresni kell, és esetleg módosítania kell őket. A szabályokon belüli keresés egyszerű módja a következők használatával:

iptables -L $table -v -n | grep $string

A fenti példában meg kell változtatnia a $table-t a tényleges táblára, amelyben keresni szeretne, és a $string-t a keresett tényleges karakterláncra.

Íme egy példa:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Új IPTables lánc meghatározása

Az iptables segítségével saját láncot definiálhat, és egyéni szabályokat tárolhat benne. A lánc meghatározásához használja:

iptables -N custom-filter

Most ellenőrizheti, hogy az új szűrő megvan-e:

iptables -L
Minta kimenet
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Öblítse ki az IPtables tűzfalláncait vagy szabályait

Ha ki szeretné üríteni a tűzfalláncokat, a következőket használhatja:

iptables -F

A láncokat egy adott táblázatból öblítheti le:

iptables -t nat -F

Megváltoztathatja a "nat" elemet az aktuális táblázattal, mely láncokat szeretné kiüríteni.

19. Mentse az IPtables szabályokat fájlba

Ha el szeretné menteni a tűzfalszabályokat, használhatja az iptables-save parancsot. A szabályok fájlba mentéséhez és tárolásához a következőket használhatja:

iptables-save > ~/iptables.rules

Rajtad múlik, hogy hol tárolod a fájlt, és hogyan nevezed el.

20. Állítsa vissza az IPtables szabályokat egy fájlból

Ha vissza szeretné állítani az iptables szabályok listáját, használja az iptables-restore parancsot. A parancs így néz ki:

iptables-restore < ~/iptables.rules

Természetesen a szabályfájl elérési útja eltérő lehet.

21. Állítsa be az IPtables szabályokat a PCI megfelelőség érdekében

Előfordulhat, hogy egyes rendszergazdáknak kiszolgálóikat PCI-kompatibilisre kell konfigurálniuk. A különböző PCI-megfelelőségi szállítók sok követelményt támasztanak, de kevés az általános.

Sok esetben egynél több IP-címmel kell rendelkeznie. Az alábbi szabályokat kell alkalmaznia a webhely IP-címére vonatkozóan. Legyen különösen óvatos az alábbi szabályok használatakor, és csak akkor használja őket, ha biztos abban, hogy mit csinál:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Ha cPanel vagy hasonló vezérlőpultot használ, előfordulhat, hogy annak portjait is blokkolnia kell. Íme egy példa:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Megjegyzés: Annak érdekében, hogy megfeleljen a PCI-szállító követelményeinek, gondosan ellenőrizze a jelentését, és alkalmazza a szükséges szabályokat. Egyes esetekben előfordulhat, hogy bizonyos portokon is blokkolnia kell az UDP-forgalmat.

22. Engedélyezze a létrehozott és kapcsolódó kapcsolatokat

Mivel a bejövő és a kimenő hálózati forgalom elkülönül, engedélyezni kell a kialakult és kapcsolódó bejövő forgalmat. A bejövő kapcsolatokhoz tegye ezt:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Kimenő használatra:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Dobja el az érvénytelen csomagokat az IP-táblázatokban

Előfordulhat, hogy egyes hálózati csomagokat érvénytelenként jelölnek meg. Vannak, akik szívesebben naplózzák ezeket a csomagokat, de mások inkább eldobják őket. Az érvénytelen csomagok eldobásához a következőket használhatja:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Kapcsolódás blokkolása a hálózati interfészen

Egyes rendszerek egynél több hálózati interfésszel is rendelkezhetnek. Korlátozhatja a hozzáférést az adott hálózati interfészhez, vagy blokkolhatja a kapcsolatokat bizonyos IP-címekről.

Például:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Módosítsa az „xxx.xxx.xxx.xxx” elemet a blokkolni kívánt tényleges IP-címre (vagy hálózatra).

25. Tiltsa le a kimenő leveleket az IPTables segítségével

Ha a rendszere nem küld e-maileket, blokkolhatja a kimenő portokat az SMTP-portokon. Például használhatja ezt:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Következtetés

Az Iptables egy hatékony tűzfal, amelyből könnyen profitálhat. Minden rendszergazdának létfontosságú, hogy legalább az iptables alapjait elsajátítsa. Ha részletesebb információkat szeretne találni az iptables-ról és annak lehetőségeiről, javasoljuk, hogy olvassa el a kézikönyvét:

man iptables

Ha úgy gondolja, hogy további parancsokat kellene hozzáadnunk ehhez a listához, kérjük, ossza meg őket velünk az alábbi megjegyzés részben.