Vyhledávání na webu

25 užitečných pravidel brány firewall pro IPtable by měl znát každý správce systému Linux


Správa síťového provozu je jednou z nejnáročnějších úloh, se kterou se musí správci systému vypořádat. Musí nakonfigurovat firewall tak, aby splňoval požadavky systému a uživatelů na příchozí i odchozí připojení, aniž by byl systém zranitelný vůči útokům.

Zde se hodí iptables. Iptables je firewall příkazového řádku systému Linux, který umožňuje správcům systému spravovat příchozí a odchozí provoz pomocí sady konfigurovatelných pravidel tabulek.

Iptables používá sadu tabulek, které mají řetězce obsahující sadu vestavěných nebo uživatelem definovaných pravidel. Díky nim může správce systému správně filtrovat síťový provoz svého systému.

Podle manuálu iptables v současnosti existují 3 typy tabulek:

    1. FILTER – toto je výchozí tabulka, která obsahuje vestavěné řetězce pro:

      1. INPUT  – balíčky určené pro místní zásuvky
      2. FORWARD – pakety směrované systémem
      3. OUTPUT – pakety generované lokálně
    2. NAT – tabulka, která je prohlížena, když se paket pokouší vytvořit nové spojení. Má následující vestavěné:

      1. PREROUTING – používá se ke změně paketu, jakmile je přijat
      2. OUTPUT – používá se ke změně lokálně generovaných paketů
      3. POSTROUTING – používá se ke změně paketů, když se chystají odejít
    3. MANGLE – tato tabulka se používá pro změnu paketů. Do verze jádra 2.4 měla tato tabulka pouze dva řetězce, ale nyní jich je 5:

      1. PREROUTING – pro změnu příchozích spojení
      2. VÝSTUP – pro změnu místně generovaných paketů
      3. INPUT – pro příchozí pakety
      4. POSTROUTING – pro změnu paketů, když se chystají odejít
      5. FORWARD – pro pakety směrované přes schránku

V tomto článku uvidíte několik užitečných příkazů, které vám pomohou spravovat váš linuxový firewall pomocí iptables. Pro účely tohoto článku začnu jednoduššími příkazy a přejdu ke složitějším až na konec.

1. Spusťte/zastavte/restartujte bránu firewall Iptables

Nejprve byste měli vědět, jak spravovat službu iptables v různých distribucích Linuxu. Toto je poměrně snadné:

Na linuxových distribucích založených na SystemD

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

Na linuxových distribucích založených na SysVinit

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

2. Zkontrolujte všechna pravidla brány firewall IPtables

Pokud chcete zkontrolovat stávající pravidla, použijte následující příkaz:

iptables -L -n -v

To by mělo vrátit výstup podobný tomu níže:

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

Pokud dáváte přednost kontrole pravidel pro konkrétní tabulku, můžete použít volbu -t následovanou tabulkou, kterou chcete zkontrolovat. Chcete-li například zkontrolovat pravidla v tabulce NAT, můžete použít:

iptables -t nat -L -v -n

3. Blokujte specifickou IP adresu v IPtables Firewall

Pokud zjistíte neobvyklou nebo nevhodnou aktivitu na IP adrese, můžete tuto IP adresu zablokovat pomocí následujícího pravidla:

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

Kde potřebujete změnit "xxx.xxx.xxx.xxx" na skutečnou IP adresu. Při spouštění tohoto příkazu buďte velmi opatrní, protože můžete omylem zablokovat svou vlastní IP adresu. Možnost -A přidá pravidlo na konec vybraného řetězce.

V případě, že chcete blokovat provoz TCP pouze z této IP adresy, můžete použít volbu -p, která specifikuje protokol. Tímto způsobem bude příkaz vypadat takto:

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

4. Odblokujte IP adresu v IPtables Firewall

Pokud jste se rozhodli, že již nechcete blokovat požadavky z konkrétní IP adresy, můžete pravidlo blokování odstranit následujícím příkazem:

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

Možnost -D odstraní jedno nebo více pravidel z vybraného řetězce. Pokud dáváte přednost delší možnosti, můžete použít --delete.

5. Blokujte konkrétní port na IPtables Firewall

Někdy můžete chtít zablokovat příchozí nebo odchozí připojení na konkrétním portu. Je to dobré bezpečnostní opatření a při nastavování firewallu byste na to měli opravdu myslet.

Chcete-li zablokovat odchozí připojení na konkrétním portu, použijte:

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

Chcete-li povolit příchozí připojení, použijte:

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

V obou příkladech změňte "xxx" na skutečný port, který chcete povolit. Pokud chcete blokovat provoz UDP místo TCP, jednoduše změňte "tcp" na "udp" v výše pravidlo iptables.

6. Povolte více portů na IPtables pomocí funkce Multiport

Můžete povolit více portů najednou pomocí multiportu, níže najdete takové pravidlo pro příchozí i odchozí připojení:

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. Povolte specifický rozsah sítě na konkrétním portu na tabulkách IP

Možná budete chtít omezit určitá připojení na konkrétním portu k dané síti. Řekněme, že chcete povolit odchozí připojení na portu 22 k síti 192.168.100.0/24.

Můžete to udělat pomocí tohoto příkazu:

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

8. Blokujte Facebook na IPtables Firewall

Někteří zaměstnavatelé rádi svým zaměstnancům blokují přístup k Facebooku. Níže je uveden příklad, jak blokovat provoz na Facebooku.

Poznámka: Pokud jste správce systému a potřebujete tato pravidla uplatnit, mějte na paměti, že se s vámi mohou kolegové přestat bavit :)

Nejprve najděte IP adresy používané Facebookem:

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

Tuto síť Facebooku pak můžete zablokovat pomocí:

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

Mějte na paměti, že rozsah IP adres používaný Facebookem se může ve vaší zemi lišit.

9. Nastavte přesměrování portů v IPtables

Někdy můžete chtít přesměrovat provoz jedné služby na jiný port. Toho lze dosáhnout pomocí následujícího příkazu:

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

Výše uvedený příkaz předává veškerý příchozí provoz na síťovém rozhraní eth0, z portu 25 na port 2525. Porty můžete vyměnit za ty, které potřebujete.

10. Blokujte Network Flood na portu Apache pomocí IPtables

Někdy mohou IP adresy vyžadovat příliš mnoho připojení k webovým portům na vašem webu. To může způsobit řadu problémů a abyste těmto problémům předešli, můžete použít následující pravidlo:

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

Výše uvedený příkaz omezuje příchozí spojení za minutu na 100 a nastavuje limit shluku na 200. Limit a limit-burst můžete upravit podle svých vlastních specifických požadavků.

11. Blokujte příchozí požadavky Ping na IPtables

Někteří správci systému z bezpečnostních důvodů rádi blokují příchozí požadavky na ping. I když hrozba není tak velká, je dobré vědět, jak takový požadavek zablokovat:

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

12. Povolte přístup zpětné smyčky

Přístup zpětné smyčky (přístup z 127.0.0.1) je důležitý a měli byste jej vždy nechat aktivní:

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

13. Uchovávejte protokol zahozených síťových paketů na IPtables

Pokud chcete protokolovat zahozené pakety na síťovém rozhraní eth0, můžete použít následující příkaz:

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

Hodnotu za "--log-prefix" můžete změnit něčím podle své volby. Zprávy jsou přihlášeny do /var/log/messages a můžete je vyhledávat pomocí:

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

14. Blokujte přístup ke konkrétní adrese MAC na tabulkách IP

Přístup do systému z konkrétní MAC adresy můžete zablokovat pomocí:

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

Samozřejmě budete muset změnit "00:00:00:00:00:00" na skutečnou MAC adresu, kterou chcete blokovat.

15. Omezte počet souběžných připojení na IP adresu

Pokud nechcete mít z jedné IP adresy na daném portu navázáno příliš mnoho souběžných připojení, můžete použít následující příkaz:

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

Výše uvedený příkaz nepovoluje více než 3 připojení na klienta. Samozřejmě můžete změnit číslo portu, aby odpovídalo jiné službě. Také --connlimit-above by měl být změněn tak, aby odpovídal vašemu požadavku.

16. Vyhledávání v rámci pravidla IPtables

Jakmile definujete pravidla iptables, budete chtít čas od času vyhledávat a možná je budete muset změnit. Snadný způsob, jak vyhledávat v pravidlech, je použít:

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

Ve výše uvedeném příkladu budete muset změnit $table na skutečnou tabulku, ve které chcete hledat, a $string na skutečný řetězec, který hledáte.

Zde je příklad:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Definujte nový řetězec IPTables

Pomocí iptables můžete definovat svůj vlastní řetězec a uložit do něj vlastní pravidla. Chcete-li definovat řetězec, použijte:

iptables -N custom-filter

Nyní můžete zkontrolovat, zda je zde váš nový filtr:

iptables -L
Ukázkový výstup
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. Vyprázdněte řetězce nebo pravidla brány firewall IPtables

Pokud chcete vyprázdnit své firewallové řetězce, můžete použít:

iptables -F

Řetězy můžete spláchnout z konkrétní tabulky pomocí:

iptables -t nat -F

Můžete změnit "nat" se skutečnou tabulkou, které řetězce si přejete vyprázdnit.

19. Uložte pravidla IPtables do souboru

Chcete-li uložit pravidla brány firewall, můžete použít příkaz iptables-save. K uložení a uložení pravidel do souboru můžete použít následující:

iptables-save > ~/iptables.rules

Je jen na vás, kam soubor uložíte a jak jej pojmenujete.

20. Obnovte pravidla IPtables ze souboru

Pokud chcete obnovit seznam pravidel iptables, můžete použít iptables-restore. Příkaz vypadá takto:

iptables-restore < ~/iptables.rules

Cesta k souboru pravidel se samozřejmě může lišit.

21. Nastavení pravidel IPtables pro shodu s PCI

Někteří správci systému mohou být požádáni, aby nakonfigurovali své servery tak, aby byly kompatibilní s PCI. Existuje mnoho požadavků od různých prodejců shody s PCI, ale existuje jen málo společných.

V mnoha případech budete muset mít více než jednu IP adresu. Pro IP adresu webu budete muset použít níže uvedená pravidla. Při používání níže uvedených pravidel buďte zvlášť opatrní a používejte je pouze v případě, že jste si jisti, co děláte:

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

Pokud používáte cPanel nebo podobný ovládací panel, možná budete muset zablokovat také jeho porty. Zde je příklad:

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

Poznámka: Abyste se ujistili, že splňujete požadavky svého dodavatele PCI, pečlivě zkontrolujte jeho zprávu a použijte požadovaná pravidla. V některých případech může být nutné blokovat provoz UDP také na určitých portech.

22. Povolte navázaná a související připojení

Protože je síťový provoz oddělený na příchozí a odchozí, budete chtít povolit zavedený a související příchozí provoz. Pro příchozí připojení to proveďte pomocí:

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

Pro odchozí použití:

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

23. Zahoďte neplatné pakety v IPtables

Je možné, že některé síťové pakety budou označeny jako neplatné. Někteří lidé mohou preferovat protokolování těchto balíčků, ale jiní je raději zahazují. Chcete-li zahodit neplatné pakety, můžete použít:

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

24. Blokujte připojení na síťovém rozhraní

Některé systémy mohou mít více než jedno síťové rozhraní. Můžete omezit přístup k tomuto síťovému rozhraní nebo blokovat připojení z určité IP adresy.

Například:

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

Změňte „xxx.xxx.xxx.xxx “ na skutečnou IP adresu (nebo síť), kterou chcete blokovat.

25. Zakažte odchozí poštu prostřednictvím IPTables

Pokud by váš systém neměl odesílat žádné e-maily, můžete zablokovat odchozí porty na portech SMTP. Můžete použít například toto:

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

Závěr

Iptables je výkonný firewall, ze kterého můžete snadno těžit. Pro každého správce systému je životně důležité naučit se alespoň základy iptables. Pokud chcete najít podrobnější informace o iptables a jejich možnostech, důrazně doporučujeme přečíst si jeho manuál:

man iptables

Pokud si myslíte, že bychom do tohoto seznamu měli přidat další příkazy, podělte se o ně s námi tím, že je odešlete v sekci komentářů níže.