Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

filtrovani_paketu_pomoci_iptables [2011/09/20 08:31]
root vytvořeno
filtrovani_paketu_pomoci_iptables [2011/09/22 20:45] (aktuální)
cert11
Řádek 1: Řádek 1:
-vaše+===== Iptables ===== 
 +Cílem článku je základní seznámení s problematikou filtrování paketů, nastavení a uložení iptables na systému Debian na virtuálních serverech 4smart.cz. Článek v žádném případě nevysvětluje všechny možnosti a nastavení iptables, pro zájemce je na konci uvedeno několik odakzů na články, které iptables vysvětlují detailněji. 
 + 
 +Iptables je nástroj pro práci se síťovou komunikací. Pomocí něj lze vytvořit firewall pro kontrolu a omezení síťové komunikace.  
 + 
 +==== Proč filtrovat síťovou komunikaci ==== 
 +Filtrování síťové komunikace zajišťuje základní ochranu proti útokům na jednotlivé služby systému. Každá síťová služba, která není určena pro přístup celému světu, by měla být zabezpečena proti pokusům o napadení (např. ssh): 
 +  * Pokus o uhodnudí hesla např. služby ssh, ftp, nebo i SIP účtu, a následné zneužití ​  
 +  * Útoky typu DoS - velké množství požadavků,​ které zatěžují systém a mohou vést k nekorektnímu chování popř. pádu systému 
 +Typickým příkladem použití iptables může být : 
 +  * povolení ssh přístupu (nebo i jiné služby) jen z vybraných IP adres   
 +  * zablokování probíhajícího síťového útoku 
 +Pokud má váš systém veřejnou IP adresu, může být z internetu vystaven útokům.  
 +Pokud používáte neveřejou adresu a máte pouze promapované vybrané porty, neznamená to, že je váš systém v bezpečí.  
 +Je sice nižší riziko útoku z internetu, protože namapované porty k jednotlivým službám neodpovídají portům, na kterém tato služba na serveru běží. 
 +Proto útočící roboti tyto nestandartní porty pravděpodobně zkoušet nebudou. 
 +Může ale dojít k útoku z jiného virtuálního stroje, který také využívá neveřejnou IP adresu. Takže i v tomto případě doporučuji systém zabezpečit. ​  
 + 
 +==== Jak vytvořit pravidla ==== 
 +Základním příkazem je  
 +<​code>​iptables</​code>​ 
 +V základním balíčku debian-6.0-x86_64 a pravděpodobně i z něj odvozených je již tento balíček nainstalován. Pokud jej v systému nemáte, proveďte instalaci : 
 +<​code>​apt-get install iptables</​code>​ 
 +Existuje několik tabulek: 
 +  * FILTER - filtrování paketů 
 +  * NAT - slouží k modifikaci adres (NAT, promapování portů, ...) 
 +  * MANGLE - modifikace paketů nad rámec NATu a filtrování paketů 
 +V tomto článku budeme pracovat s tabulkou FILTER. ​        
 +Pro zjištění aktuálního nastavení pravidel slouží volba: 
 +<​code>​iptables -L 
 +nebo  
 +iptables -t filter -L</​code>​ 
 +Volba -t určuje tabulku, není-li uvedeno, pracuje se s tabulkou filter. 
 + 
 +Volba -L provádí výpis nastavení. 
 + 
 +Výpis by měl vypadat asi takto: 
 +<​code>​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 
 +</​code>​ 
 +Na výpisu je vidět, že existuje několik řetězů (Chain): 
 +  * INPUT - pakety přicházející do systému zvenku 
 +  * OUTPUT - pakety odcházející ze systému 
 +  * FORWARD - pakety přecházející mezi sítěmi, pokud server funguje jako router 
 +Ve výchozím stavu je u všech řetězců nastavena politika (policy) na ACCEPT - veškerá komunikace je povolena, žádná další pravidla nejsou definována. 
 +Pro práci s pravidly se používají volby: 
 +  * iptables -F jmeno_retezu - odstraní všechna pravidla 
 +  * iptables -P jmeno_retezu cil - nastaví výchozí politiku (ACCEPT, DROP, REJECT, ...) 
 +  * iptables -A jmeno_retezu ... - přidává pravidlo na konec seznamu 
 +Ukažme si nyní, jak vytvořit pravidlo, které povolí vzdálený přístup pomocí ssh (tcp port 22) z IP adresy např. 77.93.202.202. 
 +<​code>​iptables -A INPUT -p tcp --dport 22 -s 77.93.202.202 -j ACCEPT</​code>​ 
 +Nyní vysvětlení jednotlivých voleb: 
 +  * -A INPUT - Přidáváme do řetězu INPUT (přicházející pakety) 
 +  * -p tcp - pravidlo platí pro TCP pakety 
 +  * --dport 22 - pravidlo platí pro pakety na portu 22 
 +  * -s 77.93.202.202 - pravidlo platí pro pakety přicházející z IP 77.93.202.202 
 +  * -j ACCEPT - tyto pakety budou akceptovány 
 +Dále zakážeme ostatní pakety přicházející na port 22: 
 +<​code>​iptables -A INPUT -p tcp --dport 22 -j DROP</​code>​ 
 +Podobným způsobem lze přidávat pravidla i pro další služby. 
 +Nyní můžeme vypsat aktuální nastavení dříve použitým příkazem iptables -L a dostaneme výpis: 
 +<​code>​Chain INPUT (policy ACCEPT) 
 +target ​    prot opt source ​              ​destination 
 +ACCEPT ​    ​tcp ​ --  77.93.202.202 ​       anywhere ​           tcp dpt:ssh 
 +DROP       ​tcp ​ --  anywhere ​            ​anywhere ​           tcp dpt:ssh 
 + 
 +Chain FORWARD (policy ACCEPT) 
 +target ​    prot opt source ​              ​destination 
 + 
 +Chain OUTPUT (policy ACCEPT) 
 +target ​    prot opt source ​              ​destination 
 +</​code>​ 
 +Detailnější výpis můžeme dostat iptables -L -v : 
 +<​code>​Chain INPUT (policy ACCEPT 8 packets, 3215 bytes) 
 + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination 
 +  672 50140 ACCEPT ​    ​tcp ​ --  any    any     ​77.93.202.202 ​       anywhere ​           tcp dpt:ssh 
 +    0     0 DROP       ​tcp ​ --  any    any     ​anywhere ​            ​anywhere ​           tcp dpt:ssh 
 + 
 +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
 + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination 
 + 
 +Chain OUTPUT (policy ACCEPT 20 packets, 4032 bytes) 
 + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination 
 +</​code>​ 
 +Tento výpis nám zobrazí informace, kolik paketů a bytů prošlo jednotlivými pravidly. 
 + 
 +**Pozor : ** 
 +  * **Nově zadaná pravidla se ukládají na konec tabulky.** 
 +  * **Tímto způsobem vytvořená pravidla začínají platit ihned po zadání.** 
 +  * **Pakety procházejí tabulkou zhora dolů, a paket který splní parametry některého pravidla, nebude dále tabulkou vyhodnocován. Proto jsme nejprve vytvořili pravidlo, které povoluje, a teprve po něm musí být pravidlo, které zakazuje všechno ostatní. Naopak by byly všechny požadavky na port 22 zahozeny a nebylo by možné se na systém vzdáleně připojit.** 
 + 
 +==== Uložení pravidel ==== 
 +Vytvořením pravidel práce nekončí. Pravidla máme vytvořená,​ vše pracuje, ale restartem systému by se vše ztratilo. Nyní musíme zajistit, aby se námi vytvořená pravidla uložila a po startu systému aplikovala.  
 +K uložení pravidel použijeme příkaz: 
 +<​code>​iptables-save >> /​etc/​network/​iptables</​code>​ 
 +Tím dojde k uložení konfigurace do souboru /​etc/​network/​iptables v textové podobě. Tam můžete pravidla upravovat a přidávat. Soubor vypadá nějak takto: 
 +<​code>#​ Generated by iptables-save v1.4.8 on Sat Sep 17 18:16:04 2011 
 +*mangle 
 +:PREROUTING ACCEPT [6792:​798116] 
 +:INPUT ACCEPT [6792:​798116] 
 +:FORWARD ACCEPT [0:0] 
 +:OUTPUT ACCEPT [5457:​2198551] 
 +:​POSTROUTING ACCEPT [5457:​2198551] 
 +COMMIT 
 +# Completed on Sat Sep 17 18:16:04 2011 
 +# Generated by iptables-save v1.4.8 on Sat Sep 17 18:16:04 2011 
 +*filter 
 +:INPUT ACCEPT [6792:​798116] 
 +:FORWARD ACCEPT [0:0] 
 +:OUTPUT ACCEPT [5457:​2198551] 
 +COMMIT 
 +# Completed on Sat Sep 17 18:16:04 2011 
 +# Generated by iptables-save v1.4.8 on Sat Sep 17 20:12:35 2011 
 +*mangle 
 +:PREROUTING ACCEPT [1399:​255102] 
 +:INPUT ACCEPT [1399:​255102] 
 +:FORWARD ACCEPT [0:0] 
 +:OUTPUT ACCEPT [992:​259680] 
 +:​POSTROUTING ACCEPT [992:​259680] 
 +COMMIT 
 +# Completed on Sat Sep 17 20:12:35 2011 
 +# Generated by iptables-save v1.4.8 on Sat Sep 17 20:12:35 2011 
 +*filter 
 +:INPUT ACCEPT [55:​27259] 
 +:FORWARD ACCEPT [0:0] 
 +:OUTPUT ACCEPT [209:​82588] 
 +-A INPUT -s 77.93.202.202/​32 -p tcp -m tcp --dport 22 -j ACCEPT 
 +-A INPUT -p tcp -m tcp --dport 22 -j DROP 
 +COMMIT 
 +# Completed on Sat Sep 17 20:12:35 2011 
 +</​code>​ 
 +Ve spodní části vidíme námi zadaná pravidla. 
 +Pokud se rozhodnete upravovat pravidla editací tohoto souboru, bude se vám hodit příkaz, který změny provedené v tomto souboru aplikuje: 
 +<​code>​iptables-apply 
 +nebo  
 +iptables-restore < /​etc/​network/​iptables</​code>​ 
 +Posledním krokem je nastavení automatického načtení iptables z vytvořeného souboru. Toto lze provést editací souboru /​etc/​rc.local,​ který je volán při spuštění systému. 
 +Tam stačí doplnit příkaz <​code>/​sbin/​iptables-restore < /​etc/​network/​iptables</​code>​ před řádek exit0. 
 +Tím dojde k načtení iptables při spouštění systému. 
 + 
 +==== Další rady a doporučení ==== 
 +  * Pokud chcete omezit přístup přes ssh pro správu systému, zadejte alespoň 2 IP adresy ze kterých se můžete přihlásit (doma + v práci, ...). Co když dojde ke změně ​vaší domácí IP adresy? Někteří poskytovatelé internetu (např. ADSL, ...) totiž nabízejí veřejnou IP adresu, ale ne statickou - může vám být změněna. 
 +  * Používejte bezpečná hesla. 
 +  * Zvažte použití nestandartních portů pro síťové služby (např. ssh na portu 822, SIP na portu 5560, apod.). 
 + 
 +==== Odkazy ==== 
 +  * 1. [[http://​cs.wikipedia.org/​wiki/​Iptables|iptables - Wikipedie]] 
 +  * 2. [[http://​www.root.cz/​serialy/​vse-o-iptables/​|Seriál vše o iptables - Root.cz]] 
 +  * 3. [[http://​linux.die.net/​man/​8/​iptables|Manuálové stránky iptables (EN) ]] 
 + 
 
filtrovani_paketu_pomoci_iptables.txt · Poslední úprava: 2011/09/22 20:45 autor: cert11