Průvodce pro začátečníky k iptables, Linux Firewall

Iptables je extrémně flexibilní nástroj brány firewall vytvořený pro operační systémy Linux. Ať už jste začínajícím Linuxovým geekem nebo správcem systému, pravděpodobně existuje způsob, jak vám iptables mohou skvěle posloužit. Přečtěte si, jak vám ukážeme, jak konfigurovat nejuniverzálnější linuxový firewall.

Fotografie od ezioman .

O iptables

iptables je obslužný program brány firewall příkazového řádku, který k povolení nebo blokování provozu používá řetězy zásad. Když se připojení pokusí ve vašem systému navázat, iptables hledá v seznamu pravidlo, které mu odpovídá. Pokud ji nenajde, uchýlí se k výchozí akci.

iptables jsou téměř vždy předinstalovány v jakékoli distribuci Linuxu. Chcete-li jej aktualizovat / nainstalovat, stačí načíst balíček iptables:

sudo apt-get install iptables

Existují alternativy grafického uživatelského rozhraní k iptables, jako je Firestarter, ale iptables nejsou opravdu tak těžké, jakmile máte několik příkazů dolů. Při konfiguraci pravidel iptables chcete být velmi opatrní, zvláště pokud jste SSH'd na server, protože jeden špatný příkaz vás může trvale zablokovat, dokud nebude ručně opraven na fyzickém stroji.

Druhy řetězů

iptables používá tři různé řetězce: vstup, vpřed a výstup.

Vstup - Tento řetězec se používá k řízení chování pro příchozí připojení. Například pokud se uživatel pokusí o SSH na vašem PC / serveru, iptables se pokusí přiřadit IP adresu a port k pravidlu ve vstupním řetězci.

Předat dál - Tento řetězec se používá pro příchozí připojení, která se ve skutečnosti nedoručují místně. Přemýšlejte o směrovači - data se do něj vždy odesílají, ale jen zřídka jsou skutečně určena pro samotný směrovač; data jsou právě předána svému cíli. Pokud ve svém systému neprovádíte nějaké směrování, NATing nebo něco jiného, ​​co vyžaduje předávání, tento řetězec ani nepoužijete.

Existuje jeden jistý způsob, jak zkontrolovat, zda váš systém používá / nepotřebuje dopředný řetězec.

iptables -L -v

Výše uvedený snímek obrazovky je server, který běží několik týdnů a nemá žádná omezení pro příchozí nebo odchozí připojení. Jak vidíte, vstupní řetězec zpracoval 11 GB paketů a výstupní řetězec zpracoval 17 GB. Přední řetězec na druhé straně nepotřeboval zpracovat jediný paket. Je to proto, že server nedělá žádný druh přeposílání nebo není používán jako předávací zařízení.

Výstup - Tento řetězec se používá pro odchozí připojení. Pokud se například pokusíte ping howtogeek.com, iptables zkontroluje svůj výstupní řetězec, aby zjistil, jaká jsou pravidla týkající se ping a howtogeek.com, než se rozhodne povolit nebo zamítnout pokus o připojení.

Upozornění

I když se pingování na externího hostitele jeví jako něco, co by potřebovalo pouze projít výstupním řetězcem, mějte na paměti, že pro vrácení dat bude použit také vstupní řetězec. Pokud používáte iptables k uzamčení systému, pamatujte, že mnoho protokolů bude vyžadovat obousměrnou komunikaci, takže bude třeba správně nakonfigurovat jak vstupní, tak výstupní řetězce. SSH je běžný protokol, který lidé zapomínají povolit v obou řetězcích.

Výchozí chování řetězce zásad

Před spuštěním a konfigurací konkrétních pravidel se budete chtít rozhodnout, jaké výchozí chování tří řetězců má být. Jinými slovy, co chcete dělat iptables, pokud připojení neodpovídá žádným stávajícím pravidlům?

Chcete-li zjistit, jaké jsou vaše řetězce zásad aktuálně nakonfigurované pro bezkonkurenční provoz, spusťte iptables -Lpříkaz.

Jak vidíte, použili jsme také příkaz grep, který nám poskytl čistší výstup. Na tomto snímku obrazovky jsou naše řetězce aktuálně přijaty, aby přijímaly provoz.

Mnohokrát budete chtít, aby váš systém ve výchozím nastavení přijímal připojení. Pokud jste dříve nezměnili pravidla řetězce zásad, toto nastavení by již mělo být nakonfigurováno. Ať tak či onak, tady je příkaz k přijetí připojení ve výchozím nastavení:

iptables --policy INPUT ACCEPT


iptables --policy OUTPUT ACCEPT


iptables --policy FORWARD ACCEPT

Ve výchozím nastavení pravidla přijetí pak můžete pomocí iptables odepřít konkrétní adresy IP nebo čísla portů, zatímco budete nadále přijímat všechna ostatní připojení. K těm příkazům se dostaneme za minutu.

Pokud byste raději odmítli všechna připojení a ručně určili, kterým z nich chcete povolit připojení, měli byste změnit výchozí zásadu svých řetězců tak, aby byla zrušena. To by pravděpodobně bylo užitečné pouze pro servery, které obsahují citlivé informace a mají k nim připojeny pouze stejné adresy IP.

iptables --policy INPUT DROP


iptables --policy OUTPUT DROP


iptables --policy FORWARD DROP

Odpovědi specifické pro připojení

S nakonfigurovanými výchozími zásadami řetězu můžete začít přidávat pravidla do iptables, aby věděla, co dělat, když narazí na připojení z nebo na konkrétní adresu IP nebo port. V této příručce si projdeme tři nejzákladnější a nejčastěji používané „odpovědi“.

Přijmout - Povolit připojení.

Přerušit - Přerušit připojení, chovat se, jako by se to nikdy nestalo. To je nejlepší, pokud nechcete, aby si zdroj uvědomil, že váš systém existuje.

Odmítnout - Nepovolit připojení, ale odeslat zpět chybu. To je nejlepší, pokud nechcete, aby se k vašemu systému připojoval konkrétní zdroj, ale chcete, aby věděli, že je brána firewall blokovala.

Nejlepším způsobem, jak ukázat rozdíl mezi těmito třemi pravidly, je ukázat, jak to vypadá, když se počítač pokusí ping na stroj Linux s konfigurací iptables pro každé z těchto nastavení.

Povolení připojení:

Ukončení připojení:

Odmítnutí připojení:

Povolení nebo blokování konkrétních připojení

S nakonfigurovanými řetězci zásad můžete nyní nakonfigurovat iptables tak, aby povolily nebo blokovaly konkrétní adresy, rozsahy adres a porty. V těchto příkladech nastavíme připojení na DROP, ale můžete je přepnout na ACCEPTnebo REJECT, v závislosti na vašich potřebách a způsobu konfigurace řetězců zásad.

Poznámka: V těchto příkladech použijeme iptables -Ak připojení pravidel k existujícímu řetězci. iptables začíná v horní části seznamu a prochází každým pravidlem, dokud nenajde pravidlo, které odpovídá. Pokud potřebujete vložit pravidlo nad jiné, můžete použít iptables -I [chain] [number]k určení čísla, které by mělo být v seznamu.

Připojení z jedné IP adresy

Tento příklad ukazuje, jak blokovat všechna připojení z adresy IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

Připojení z řady IP adres

Tento příklad ukazuje, jak blokovat všechny adresy IP v rozsahu sítě 10.10.10.0/24. K určení rozsahu IP adres můžete použít síťovou masku nebo standardní lomítko.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

nebo

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Připojení ke konkrétnímu portu

Tento příklad ukazuje, jak blokovat připojení SSH od 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

„Ssh“ můžete nahradit libovolným číslem protokolu nebo portu. -p tcpČást kódu říká, iptables, jaký typ připojení k použití protokolu. Pokud jste blokovali protokol, který používá spíše UDP než TCP, bylo -p udpby to místo toho nutné.

Tento příklad ukazuje, jak blokovat připojení SSH z jakékoli adresy IP.

iptables -A INPUT -p tcp --dport ssh -j DROP

Stavy připojení

Jak jsme již zmínili, mnoho protokolů bude vyžadovat obousměrnou komunikaci. Například pokud chcete povolit připojení SSH k vašemu systému, vstupní a výstupní řetězce budou k nim potřebovat přidat pravidlo. Ale co když chcete, aby bylo povoleno pouze SSH přicházející do vašeho systému? Neumožňuje přidání pravidla do výstupního řetězce také odchozí pokusy o SSH?

To je místo, kde přicházejí stavy připojení, které vám dávají možnosti, které byste potřebovali k umožnění obousměrné komunikace, ale povolte pouze jednosměrné připojení. Podívejte se na tento příklad, kde jsou povolena připojení SSH OD 10.10.10.10, ale připojení SSH DO 10.10.10.10 nejsou. Systém však smí odesílat zpět informace přes SSH, pokud již byla relace vytvořena, což umožňuje komunikaci SSH mezi těmito dvěma hostiteli.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Ukládání změn

Změny, které provedete ve svých pravidlech iptables, budou zrušeny při příštím restartování služby iptables, pokud neprovedete příkaz k uložení změn. Tento příkaz se může lišit v závislosti na vaší distribuci:

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

Nebo

/etc/init.d/iptables save

Další příkazy

Seznam aktuálně nakonfigurovaných pravidel iptables:

iptables -L

Přidáním -vmožnosti získáte informace o paketech a bajtech a přidáním -nvypíšete vše číselně. Jinými slovy - názvy hostitelů, protokoly a sítě jsou uvedeny jako čísla.

Chcete-li vymazat všechna aktuálně nakonfigurovaná pravidla, můžete vydat příkaz flush.

iptables -F