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 }
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!!
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.
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.
“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