25 gyakran használt iptables szabály példákkal

| Német Krisztián | 2011. július 10. vasárnap

A bejegyzésben áttekintjük az iptables leggyakoribb szabályait, amelyek bármikor beilleszthetők a saját tűzfalunk szabályrendszerébe.

1. Létező iptables szabályok törlése

Mielőtt létrehoznánk egy teljesen új szabályrendszert törölnünk kell a már létező szabályokat és az alapszabályokat.

iptables -F

vagy

iptables --flush

2. A láncok alapértelmezett házirendjének beállítása

A láncok házirendje határozza meg a láncok végét elérő, más célra nem küldött csomagok sorsát. Beépített láncok házirendjeként csak ACCEPT és DROP beépített célt használhatjuk. A láncok alapértelmezett házirendje az ACCEPT. Megváltoztatjuk DROP-ra minden INPUT, FORWARD, OUTPUT cél esetében.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

3. Speciális ip című interfész

Gyakran hivatkozunk a szabályokon belül ip címekre, amelyeket az elején érdemes meghatározni és változóként hivatkozni rá a későbbiekben.

BELSO_IP="x.x.x.x"
iptables -A INPUT -s "$BELSO_IP" -j DROP

Ezen megoldás segítségével beszédesebb log fájlt és könnyebb kereshetőséget biztosít. Lehetőséget biztosít, hogy egyes interfészekre vonatkozó szabályokat hozzunk létre. Pl. eth0 interfésztől jövő a TCP forgalmat eldobjuk.

iptables -A INPUT -i eth0 -s "$BELSO_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BELSO_IP" -j DROP

4. Az összes bejövő SSH forgalmat engedélyezzük

A következő szabály engedélyezi az összes bejövő SSH forgalmat, amely az eth0 hálózati kártya felől jön.

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

5. Az összes bejövő SSH forgalmat engedélyezzük egy hálózat felől

A következő szabály engedélyezi az összes bejövő SSH forgalmat, de csak a 192.168.1.x hálózatból.

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

A “192.168.1.0/24″ formátum lefedi a teljes 192.168.1.x-es alhálózatot, ez megadható így is: “192.168.1.0/255.255.255.0″.

6. Az összes bejövő HTTP és HTTPS forgalom engedélyezése

A következő szabály engedélyezi a webforgalmat, a HTTP portja a 80-as tcp.

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

A HTTPS protokoll portja pedig a 443-as tcp port.

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7. Hasonló szabályok kombinálása multiport lehetőséggel

Az előző példából látható, hogy csak a port számában különböznek egymástól a szabályok. Ilyen esetben lehetőség van összevonni őket a multiport kiterjesztéssel.
A következő szabály engedélyezi az összes bejövő SSH, HTTP és HTTPS forgalmat.

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8. Kimenő SSH forgalom engedélyezése

A következő szabály a kimenő SSH forgalmat engedélyezi. Mikor van erre szükség? pl. amikor egy szerveren keresztül érünk el egy másik szervert.

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

9. Az összes kimenő SSH forgalmat engedélyezzük egy hálózatba

A következő szabály engedélyezi a kimenő SSH forgalmat a 192.168.1.x hálózatból.

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.1.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10. Kimenő HTTPS forgalom engedélyezése

A következő szabály engedélyezi a biztonságos webforgalmat. Ez a felhasználóknál lehetővé teszi a biztonságos internetezést, a szerverek számára pedig a frissítések letöltését, wget használatát.

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Itt nincs multiport kiterjesztés, ezért ha a HTTP-t is szeretnénk engedélyezni, akkor a 80-as tcp portot is engedélyezni kell.

11. Terheléselosztás bejövő webforgalomnál

Az iptables lehetővő tudja tenni megfelelő szabály alkotásával a bejövő webforgalom terheléselosztását (load balance).
Ehhez az nth kiterjesztést kell használni. A következő szabály a HTTPS forgalmat 3 különböző IP címmel rendelkező szerver között osztja el a terhelést. Minden harmadik tcp csomagot a megfelelő szerverhez irányítja. (counter 0).

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12. Pingelhetőség engedélyezése

A következő szabály engedélyezi, hogy külső hálózatból pingelhető legyen a szerverünk.

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13. Pingelhetőség engedélyezése hálózatonkból

A következő szabály engedélyezi, hogy hálózatunkból külső szervereket tudjunk pingelni.

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14. Helyi forgalom engedélyezése

A loopback forgalom engedélyezése szükséges a hálózat megfelelő működéséhez (pl. 127.0.0.1).

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

15. Hálózatok közöti forgalom engedélyezése

Ehhez tűzfalunknak két hálózati kártyával kell rendelkeznie. Egyik lehetséges helyzet, hogy egy külső hálózat (internet) és a belső hálózat 192.168.1.x (saját céges hálózat) összekapcsolása. A hálózati interfészek: eth0 belső, eth1 külső.

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16. Kimenő DNS kérések engedélyezése

A következő szabály engedélyezi a kimenő DNS kéréseket.

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17. NIS kapcsolat engedélyezése

A NIS futásakor az ypbind szervíznek is futnia kell, mert a NIS több portot kezel. A következő paranccsal szerezhetünk információt.

rpcinfo -p | grep ypbind

Általában három portot használ 111, 853, 850 tcp és udp portot.

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

18. Rsync engedélyezése egy adott hálózatból

A következő szabály engedélyezi az rsync-et egy másik hálózatból.

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19. MySQL kapcsolat engedélyezése egy adott hálózatból

Általában a webszerver és az adatbázis szerver különböző gépen fut. Ekkor lehetséges a MySQL kapcsolatok korlátozása egy adott alhálózatra.

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20. Levelezés forgalmának engedélyezése

A következő szabály engedélyezi az SMTP (25 tcp port) forgalmat. Levélküldési protokoll, amelyet Sendmail és Postfix segítségével valósítjuk meg.

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

21. IMAP és IMAPS forgalom engedélyezése

A következő szabály az IMAP (143 tcp port) forgalmát engedélyezi.

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

Az IMAPS (993 tcp port) a biztonságosabb protokoll, engedélyezése a következő:

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

22. POP3 és a POP3S forgalom engedélyezése

A következő szabály a POP3 (110 tcp port) forgalmat engedélyezi.

iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

A következő szabály a POP3S (995 tcp port)forgalmat engedélyezi.

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

23. Port átirányítás (port forwarding)

A portátirányítás a DNAT egyik típusa, ahol a számítógép (pl. tűzfal) helyettes kiszolgálóként (proxy) viselkedik más számítógépek számára. A tűzfal elfogadja a külső hálózatokból érkező, neki címzett csomagokat, majd újraírja azokat, hogy a belső hálózaton egy másik géphez címzettként jelenjenek meg, végül a továbbítja a csomagokat az új címre.
A következő szabály a 22-es portot a 422-es portra irányítja.

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.3 --dport 422 -j DNAT --to 192.168.1.3:22

Ilyenkor nem elég a 22-es port engedélyezése a tűzfalon, a 422-t is fel kell venni a szabályok közé.

24. Címálcázás (masquerading)

A címálcázás az SNAT egyik különleges típusa, amelyben a számítógép újraírja a csomagokat, hogy úgy tűnjön, mintha azok tőle származnának. A címálcázást gyakran alkalmazzák arra, hogy egy dinamikus IP című internetkapcsolatot megosszanak egy hálózat több számítógépe között.
Az SNAT-t az eth1 csatolóra úgy állíthatjuk be, ha a nat tábla POSTROUTING láncához egy egyszerű szabályt adunk:

iptables -t nat -A POSTROUTING -o eth1 -j SNAT

A címálcázáshoz a megfelelő parancs a következő:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

25. Eldobott csomagok logolása

Minden eldobott csomagot logolunk, majd eldobjuk. Ehhez létrehozzuk a LOGGING láncot.

iptables -N LOGGING

Majd minden bejövő forgalmat ideterelünk.

iptables -A INPUT -j LOGGING

A logfájl írásához egyedi azonosítót (log-prefix) biztosítunk a jobb kereshetőség érdekében.

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTABLES ELDOBOTT CSOMIK: " --log-level 7

Majd eldobjuk a csomagokat.

iptables -A LOGGING -j DROP

+1. DoS támadás kivédése

Ha webszervert üzemeltetünk érdemes a DoS (Denial of Service) támadásra felkészülni.

# Syn-flood elleni védelem
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

# Portscan elleni védelem
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Ping-flood elleni védelem
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

{ 3 hozzászólások… read them below or add one }

Attila 2011. július 14. - 19:37

Helló!
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.3 –dport 422 -j DNAT –to 192.168.1.3:22
ez a szabály azt eredményezi, hogy ami a 422 és portra érkezik kérés azt átirányítja a 22-re nem fordítva!!

Válasz

Gábor 2011. szeptember 15. - 22:02

Nekem ez jó zavaros, nem is igazán foglalnék állást, csak felvetem, hogy ez nem nézőpont és megfogalmazás kérdése? pl az én gépem 22-es portját a szerver átirányítja a 422-re… portot irányít át… (ez lehet, hogy értelmetlen? ) Persze a valóságban meg csomagot irányít, mikor jön, akkor a csomagot ami 422-re jön, azt a 22 re küldi. Kintről az én portom 422, tehát a lokál port van átirányítva. :D Na jó, ez csak lamentálás ám. ;) Szóval lehet, hogy mindkettőtöknek igaza van. Mert a szerző portot mond, te meg portra érkező kérést.

Válasz

tusi 2011. december 7. - 10:00

“iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT”

Ez pont forditva van. Ha ez igy menne, akkor simán lehetne inditani egy támadást a gépem ellen bármely 80-as portról. A visszafele jövőnek kell establishednek lennie.
Ugyanigy a többinél is

Válasz

Várjuk a hozzászólásokat!

Előző bejegyzés

Következő bejegyzés