Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze | |||
bezpečnost:firewall:iptables [2015/06/23 13:02] – oprava interního odkazu bezpezpečnost/firewall jiri001meitner | bezpečnost:firewall:iptables [2019/02/25 18:21] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ==== iptables ==== | ||
+ | {{page> | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Linuxové jádro obsahuje subsystém // | ||
+ | |||
+ | Takže už víme, že // | ||
+ | |||
+ | ==== Stručně o struktuře iptables a jak to zhruba funguje ==== | ||
+ | |||
+ | Iptables jsou rozděleny do čtyř nezávislých tabulek **filter**, **nat**, **mangle** a **raw**. Jaké jsou v iptables konkrétně přítomné záleží na konfiguraci jádra a na nastavení jadrných modulů. Se kterou tabulkou hodláme pracovat musíme specifikovat přepínačem **-t**, **--table** // | ||
+ | |||
+ | |||
+ | Tabulky jsou následující: | ||
+ | **filter** | ||
+ | Výchozí tabulka vhodná pro základní filtrování, | ||
+ | |||
+ | **nat** | ||
+ | Používá se pro pro překlad adres ([[http:// | ||
+ | |||
+ | {{ :tux.png}} | ||
+ | |||
+ | |||
+ | **mangle** | ||
+ | Vhodná pro vychytávky související a alternováním paketů a zatím přesahuje rámec tohoto návodu. | ||
+ | |||
+ | |||
+ | |||
+ | **raw** | ||
+ | Slouží k jakémusi nastavování výjimek a taky se jí nebudeme zabývat. | ||
+ | |||
+ | |||
+ | |||
+ | Jak jste si jistě všimli, v tabulkách jsou nějaké řetězy. Ptáte se co to je takový řetěz a proč řetěz? Jedná se o jakési sady pravidel dělených ( v případě tabulky **filter**) na příchozí, | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | DROP | ||
+ | </ | ||
+ | Výchozí politika je nastavená na ACCEPT, ale ta se bude uplatňovat až jako poslední, takže paket směřující na [[smtp]] port 25 projde nejprve prvním pravidlem, kde se testuje jestli je paket ze založeného spojení, nebo ze spojení odvozeného. Dále se testuje zda-li paket nesměřuje na [[: | ||
+ | |||
+ | Když pravidla přeházíme tímto způsobem: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Potom nový výpis bude vypadat takto: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | DROP | ||
+ | ACCEPT | ||
+ | </ | ||
+ | Výsledek bude takový, že náš smtp paket proleze, ale další www pakety směřující na port 80 budou nemilosrdně zahozeny, protože než dojde na pravidlo testující pakety směřující na port 80, uplatní se pravidlo, které zahodí vše. | ||
+ | |||
+ | Řetězů ale může být víc a můžete si taky nastavit vlastní " | ||
+ | |||
+ | Z výše uvedeného příkladu je patrné , že pravidla se většinou ukončují přepínačem **-j** nebo **--jump** **ACCEPT** nebo **DROP**. Tedy něco jako : Pokud paket pravidlu vyhoví dostane za úkol " | ||
+ | |||
+ | **' | ||
+ | |||
+ | Dovolí paketu projít. | ||
+ | |||
+ | |||
+ | **' | ||
+ | |||
+ | Upustí paket na zem. Zahodí ho a více se o něj nestará. | ||
+ | |||
+ | |||
+ | **' | ||
+ | |||
+ | Podstoupí paket do uživatelského prostoru. | ||
+ | |||
+ | |||
+ | **' | ||
+ | |||
+ | Vrátí paket do předchozího řetězu , ze kterého se dostal do tohoto řetězu. Pakte se nevrátí na začátek řetězu, ale pokračuje od pravidla, kde přestal. Pokud tímto způsobem dorazí paket na konce vestavěného řetězu a nebo paket vyhoví pravidlu zakončeném na RETURN ve vestavěném řetězu, potom výchozí politika řetězu rozhodne o osudu paketu. | ||
+ | |||
+ | |||
+ | ==== Základní příkazy ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | tak se vám vypíší všechny aktuálně nastavené pravidla pro síťový provoz v '' | ||
+ | |||
+ | < | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | |||
+ | Chain FORWARD (policy ACCEPT) | ||
+ | target | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target | ||
+ | </ | ||
+ | Všimněte si , že v závorkách , je u každého řetězu (chain) uvedená výchozí politika na '' | ||
+ | |||
+ | Pokusíte-li se skenovat porty vašeho stroje příkazem '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Starting Nmap 5.00 ( http:// | ||
+ | Interesting ports on ip-62-245-78-194.net.upcbroadband.cz (62.245.78.194): | ||
+ | Not shown: 996 closed ports | ||
+ | PORT STATE SERVICE | ||
+ | 25/ | ||
+ | 80/ | ||
+ | 139/tcp open netbios-ssn | ||
+ | 445/tcp open microsoft-ds | ||
+ | |||
+ | Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds | ||
+ | </ | ||
+ | zjistíte, že na [[http:// | ||
+ | |||
+ | Dříve než si předvedeme jak pravidla nastavit, ukážeme si zjednodušeně, | ||
+ | |||
+ | === Zjednodušená syntaxe zápisu pravidel pro iptables === | ||
+ | |||
+ | Zjednodušeně se dá příkaz na definování pravidla popsat takto : | ||
+ | |||
+ | < | ||
+ | iptables < | ||
+ | </ | ||
+ | Syntaxe je mnohem komplexnější, | ||
+ | |||
+ | == Příkazy: == | ||
+ | |||
+ | **-A**, **--append** //řetěz// // | ||
+ | |||
+ | Připojí jedno nebo více pravidel na konec vybraného řetězce. Jestliže zdrojové a/nebo cílové jméno odpovídá více adresám , pravidlo bude přidáno na všechny vyhovující kombinace. | ||
+ | |||
+ | |||
+ | **-D**, **--delete** //řetěz// // | ||
+ | |||
+ | **-D**, **--delete** //řetěz// // | ||
+ | |||
+ | Z vybraného řetězu smaže jedno nebo více pravidel. Jsou dvě možné varianty tohoto příkazu: Buď smažete pravidlo podle jeho čísla (začínají se číslovat od 1), nebo pravidlo , které chcete smazat popíšete stejně, jako v // | ||
+ | |||
+ | |||
+ | **-I**, **--insert** //řetěz// [// | ||
+ | |||
+ | Vloží jedno nebo více pravidel do zvoleného řetězu. Podle čísla se určí pořadí pravidla. Uvedete-li 1, zařadí se pravidlo na začátek. Neuvedete-li číslo pravidla vůbec, použije se implicitně 1. | ||
+ | |||
+ | |||
+ | **-R**, **--replace** //řetěz// // | ||
+ | |||
+ | Nahradí pravidlo ve zvoleném řetězu. Jestliže zdrojové a/nebo cílové jméno odpovídá více adresám, příkaz selže. Pravidla jsou číslována od 1. | ||
+ | |||
+ | |||
+ | **-L**, **--list** [// | ||
+ | |||
+ | Vypíše seznam všech pravidel ve zvoleném řetězu. Pokud není řetěz uveden, vypíše všechny. Stejně jako všechny ostatní příkazy pro // | ||
+ | Je také možné příkaz použít spolu s volbou **-Z --zero**, která způsobí, že řetěz(y) bude nejprve vypsán a bezprostředně potom bude počítadlo paketů vynulováno. | ||
+ | |||
+ | |||
+ | **-S**, **--list-rules** [// | ||
+ | |||
+ | Vypíše všechny pravidla ve zvoleném řetězu. Jestliže není žádný řetěz určen, vypíší se všechny řetězy po způsobu **iptaples-save**. Jako všechny ostatní příkazy pro // | ||
+ | |||
+ | |||
+ | **-F**, **--flush** [// | ||
+ | |||
+ | Spláchne (smaže) všechny pravidla z uvedeného řetězu. Spláchne všechny pravidla ze všech řetězů, pokud žádný řetěz není vybrán. Alternativně je možné mazat všechny pravidla jedno po druhém pomocí **--delete**, | ||
+ | |||
+ | |||
+ | **-Z**, **--zero** [// | ||
+ | |||
+ | Vynuluje počítadla paketů u všech řetězů. Je povolené použít tuto volbu spolu s **-L --list ** , aby se vypsal seznam řetězů přesně před vynulováním. | ||
+ | |||
+ | |||
+ | **-N**, **--new-chain** [// | ||
+ | |||
+ | Vytvoří nový , uživatelem definovaný, | ||
+ | |||
+ | |||
+ | **-X**, **--delete-chain** [// | ||
+ | |||
+ | Smaže uživatelem definovaný řetěz. Na řetěz nesmí existovat žádné odkazy. Pokud nějaké existují musíte je nejprve smazat nebo přejmenovat. Například řetěz nesmí obsahovat žádná pravidla. POkud neuvedete řetěz v příkazu, budou smazány všechny nezabudované řetězy. | ||
+ | |||
+ | |||
+ | **-P**, **--policy** //řetěz// //cíl// | ||
+ | |||
+ | Nastaví výchozí politiku pro řetěz a daný cíl. Povolené hodnoty pro cíle najdete v sekci CÍLE. | ||
+ | Jen vestavěné řetězy mohou mít definovanou výchozí politiku. Vestavěné řetězy ani uživatelem definované řetězy nesmí být cílem pro jakoukoliv výchozí politiku. | ||
+ | |||
+ | |||
+ | **-E**, **--rename** // | ||
+ | |||
+ | Přejmenuje uživatelem definovaný řetěz . Jedná se jen o kosmetickou úpravu, která nemá vliv na na strukturu tabulky. | ||
+ | |||
+ | |||
+ | **-h**, **--help** | ||
+ | |||
+ | Nápověda. Vypíše velmi stručnou nápovědu k syntaxi příkazů. | ||
+ | |||
+ | |||
+ | == Parametry: == | ||
+ | |||
+ | Tyto parametry se používají při definování pravidel síťového provozu a následují za výše uvedenými příkazy **add**, **delete**, **insert**, **replace** a **append**. Před některými může bát uvedený **!**, který značí negaci. | ||
+ | |||
+ | **[!]** **-p** **--protocol** // | ||
+ | |||
+ | Protokol pravidla a nebo kontrolovaného paketu. Můžete určit jeden z následujících protokolů **' | ||
+ | |||
+ | |||
+ | **[!]** **-s** **--source** // | ||
+ | |||
+ | Specifikuje zdroj. Adresa může být síťové jméno, jméno hostitele, nebo prostá IP adresa. Maska může být buď síťová maska nebo prosté číslo vyjadřující počet jedniček na levé straně masky . Takže IP maska 24 je ekvivalentní zápisu 255.255.255.0. Volitelně je možné výběr adres obrátit pomocí //" | ||
+ | |||
+ | |||
+ | **[!]** **-d** **--destination** // | ||
+ | |||
+ | Specifikuje cíl. Podívejte se na specifikaci **-s** (source) pro detailní popis. Přepínač **--dst** je možné použít jako alias. | ||
+ | |||
+ | |||
+ | **-j** **--jump** //cíl// | ||
+ | |||
+ | Specifikuje cíl pravidla . To jest cíl kam je paket poslán, když vyhoví pravidlu. Cílem může být uživatelem definovaný řetěz , ale musí to být jiný řetěz , než ve kterém je toto pravidlo definované. Dále může být cílem jeden ze zabudovaných cílů, která určí osou paketu. Cílem také může být rozšíření (extension) o který se můžete dočíst v sekci o rozšířeních. Pokud je cíl z definice pravidla vynechán (a nepoužijete přepínač **-g**) potom pravidlo nebude mít na osud paketu žádný vliv, ale počítadlo pravidla se bude navyšovat. | ||
+ | |||
+ | |||
+ | **-g** **--goto** //řetěz// | ||
+ | |||
+ | Toto určuje, že zpracování by mělo pokračovat v uživatelem definovaném řetězu. Na rozdíl od volby **--jump** nebude zpracovávání pokračovat v původním pravidle, ale přesune se do odkázaného řetězu. | ||
+ | |||
+ | |||
+ | **[!]** **-i** **--in-interface** //jméno// | ||
+ | |||
+ | Jméno rozhraní na které paket dorazil (lze použít jen na pakety testované v řetězech '' | ||
+ | |||
+ | |||
+ | **[!]** **-o** **--out-interface** //jméno// | ||
+ | |||
+ | Jméno rozhraní ze kterého bude paket odeslán (lze použít jen pro pakety testované v řetězech '' | ||
+ | |||
+ | |||
+ | **[!]** **-f** **--fragment** | ||
+ | |||
+ | Toto znamená, že pravidlo se vztahuje jen na druhý a další fragment fragmentovaného paketu. Protože neexistuje žádný způsob jak určit zdrojový nebo cílová port paketu (nebo [[http:// | ||
+ | |||
+ | |||
+ | **-c** **--set-counters** //pakety// //bajty// | ||
+ | |||
+ | Toto umožňuje administrátorovi nastavit počítadla paketů a bajtů u pravidla. Možno použít jen během //INSERT//, //APPEND//, //REPLACE// operací. | ||
+ | |||
+ | |||
+ | **Další možnosti lze určit tímto způsobem.** | ||
+ | |||
+ | **-v** **--verbose** | ||
+ | |||
+ | Upovídaný výstup. Toto umožní příkazu **--list** navíc vypsat ještě jméno interfejsu, možnosti pravidla (pokud nějaké jsou), TOS masku. Také se zobrazí počítadla bajtů a paketů s příponami " | ||
+ | |||
+ | |||
+ | **-n** **--numeric** | ||
+ | |||
+ | Číselný výstup. IP adresy a čísla portů budou vypsána v číselném formátu | ||
+ | |||
+ | |||
+ | **---list-numbers** | ||
+ | |||
+ | V seznamu pravidel přidá na začátek řádku číslo pravidla, podle jeho pozice v řetězu. Nejprve se program pokusí zobrazit jména hostitele, jména sítí nebo služeb. | ||
+ | |||
+ | |||
+ | **-x** **--exact** | ||
+ | |||
+ | Rozšiřuje čísla. Zobrazí přesné číslo u počítadel paketů a bajtů, nikoliv pouze zaokrouhlené číslo na násobky 1000, 1 000 000 a 1 000 000 000. Tato možnost je pouze použitelná u příkazu --list (-l). | ||
+ | |||
+ | |||
+ | == MATCH EXTENSIONS == | ||
+ | |||
+ | Iptables můžou flirtovat pakety pomocí rozšíření. Zapisují se za přepínač **-m** nebo **--match**. Za tímto přepínačem následuje jméno modulu a pak parametry. Modulů i jejich možností je opravdu velké množství a všechny je najdete v [[Základní příkazy#" | ||
+ | |||
+ | |||
+ | **conntrack** | ||
+ | |||
+ | Tento modul v kombinaci s modulem na stopování spojení umožňuje přístup ke stavu stopování spojení pro pro zkoumané pakety/ | ||
+ | **[!]** **--ctstate** //seznam stavů// | ||
+ | **INVALID** znamená, že paket nemůže být z nějakého důvodu identifikován. Může to být například docházející paměť, a nebo [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | **ESTABLISHED** je stav paketu vztahujícího se ke spojení, které posílá pakety oběma směry. | ||
+ | |||
+ | |||
+ | |||
+ | **NEW** znamená, že paket začal nové spojené , nebo patří do spojené které ještě neposílalo pakety oběma směry. | ||
+ | |||
+ | |||
+ | |||
+ | **RELATED** znamená, že paket začíná nové spojené , ale jedná se o spojení, které má vztah k již existujícímu spojení. Jedná se například o přenos dat po FTP , nebo nějaká [[http:// | ||
+ | |||
+ | |||
+ | **state** | ||
+ | |||
+ | Tento modul v kombinaci se stopováním spojení umožňuje přístup ke stavu stopovaného spojení. | ||
+ | **[!]** **--state** //seznam stavů// | ||
+ | Za přepínač uveďte čárkou oddělený seznam stavů spojen, které se mají vyhledávat. Seznam možných stavů je následující: | ||
+ | **INVALID** znamená, že paket nemůže být z nějakého důvodu identifikován. Může to být například docházející paměť, a nebo [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | **ESTABLISHED** je stav paketu vztahujícího se ke spojení, které posílá pakety oběma směry. | ||
+ | |||
+ | |||
+ | |||
+ | **NEW** znamená, že paket začal nové spojené , nebo patří do spojené které ještě neposílalo pakety oběma směry. | ||
+ | |||
+ | |||
+ | |||
+ | **RELATED** znamená, že paket začíná nové spojené , ale jedná se o spojení, které má vztah k již existujícímu spojení. Jedná se například o přenos dat po [[http:// | ||
+ | |||
+ | |||
+ | ==== Povolení " | ||
+ | |||
+ | Opět připomenu, že s '' | ||
+ | |||
+ | Vraťme se nyní zpět k příkladu z kapitoly [[Iptables# | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | |||
+ | Chain FORWARD (policy ACCEPT) | ||
+ | target | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target | ||
+ | </ | ||
+ | Takže vidíme, že máme úplně vše otevřené. Aby to vůbec mohlo začít fungovat, tak musíme nejprve povolit již založená spojení a spojení, která se k nim vztahují. | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Všimněte si, že stavy spojení '' | ||
+ | |||
+ | Pokud nebude výše uvedený příkaz fungovat, tak je možné, že váš stroj je virtuální, | ||
+ | |||
+ | {{ :faq.png}} | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | |||
+ | ==== Povolení příchozích spojení na určité porty ==== | ||
+ | |||
+ | Nejprve by jste měli začít tím, že zablokujete veškeré příchozí spojení. Je ALE možné, že pracujete s vaším strojem přes [[:SSH]] a tudíž je velmi žádoucí nejprve ssh povolit. V opačném případě se vám může stát, že si přístup na server úplně zablokujete a budete k němu muset jít například do serverovny a restartovat ho. Restart počítač bude mít za následek, že se // | ||
+ | |||
+ | K povolení [[: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | {{.: | ||
+ | |||
+ | Všimněte si, že jsem volbou **-t** řekl, že chci pravidlo uložit do řetězu **INPUT** v tabulce **filter**. Při práci s tabulkou **filter** je zbytečné tabulku specifikovat, | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | * Přepínač **-A** přidává do řetězu INPUT nové pravidlo | ||
+ | * Za jménem řetězu (v našem případě to je INPUT) následuje definice pravidla. | ||
+ | * Přepínač **-p** | ||
+ | * Přepínač **--dport** je cílový port, kam paket směřuje na našem sytému. Port je možné zapsat i číslem 22 , na kterém serve ssh obvykle poslouchá. | ||
+ | * Za přepínačem **-j** je cíl na který má paket " | ||
+ | |||
+ | Necháme si opět vypsat pravidla v řetězu '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Chain INPUT (policy ACCEPT 321K packets, 427M bytes) | ||
+ | pkts bytes target | ||
+ | 3859 1050K ACCEPT | ||
+ | | ||
+ | </ | ||
+ | Můžeme vidět na začátku //pkts// jako počítadlo přijatých paketů, //bytes// jako počítadlo bajtů, //target// jako cíl, //proto// jako protokol, //opt// jako možnosti pravidla, //in// jako příchozí síťový interfejs, //out// jako odchozí síťový interfejns, //source// jako zdrojová adresa, // | ||
+ | |||
+ | Teď si ještě zkusíme povolit port 80 , na kterém poslouchá webový server. | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | A opět zkontrolujeme naše pravidla. | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | </ | ||
+ | Teď máme výslovně povolené porty 22 a 80. Mimo tyto máme povolené i všechny ostatní protože u řetězu INPUT máme //policy ACCEPT//, tedy výchozí politiku zpracování paketu. | ||
+ | |||
+ | ==== Blokování spojení ==== | ||
+ | |||
+ | Pravidla se vykonávají postupně jedno po druhé. Jakmile paket jednou vyhoví, již se následujícím pravidlem nezpracovává. Jestliže chceme veškerou další komunikaci zablokovat stačí nám na konec přidat jednoduché pravidlo s prázdnou definicí: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Výpis pravidel potom bude vypadat takto: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | DROP | ||
+ | </ | ||
+ | ==== Editování pravidel ==== | ||
+ | |||
+ | Toto nastavení // | ||
+ | |||
+ | - Při definování pravidle jsem si nedali pozor na síťové rozhraní , pro které chceme pravidlo uplatnit. Protože jsem žádné neurčili, použilo se výchozí //all//, takže v současném stavu máme zablokované i síťové rozhraní //lo// pro loopback. To může některým programům znepříjemnit život a dokonce, můžou přestat úplně fungovat. Když bychom do řetězu '' | ||
+ | |||
+ | < | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Číslo 1 ze slovem INPUT určuje pozici, kam se má pravidlo vložit, tedy na první pozici. | ||
+ | |||
+ | |||
+ | |||
+ | Abychom si mohli v seznamu pravidel prohlédnout, | ||
+ | |||
+ | |||
+ | < | ||
+ | | ||
+ | |||
+ | Chain INPUT (policy ACCEPT 260 packets, 67806 bytes) | ||
+ | pkts bytes target prot opt in out source | ||
+ | 718 69470 ACCEPT all -- lo any anywhere anywhere | ||
+ | | ||
+ | 1 48 ACCEPT tcp -- any any anywhere anywhere | ||
+ | 0 0 ACCEPT tcp -- any any anywhere anywhere | ||
+ | 2 656 DROP | ||
+ | </ | ||
+ | |||
+ | Nyní všechny pakety, které jdou na interfejs //lo// jsou akceptovány a ty ostatní jsou podstoupeny druhému pravidlu... | ||
+ | |||
+ | |||
+ | - Další úpravu bychom mohli udělat tak, že jedno nadbytečné pravidlo odstraníme - tedy to poslední. | ||
+ | |||
+ | < | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Dále pak přenastavíme výchozí politiku z '' | ||
+ | |||
+ | |||
+ | < | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Nyní, když se podíváme na výpis pravidel, máme tam o jedno méně a celý řetěz funguje stejně, ale rychleji. | ||
+ | |||
+ | |||
+ | - V optimalizování se dá pokračovat. Můžeme totiž předpokládat, | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Nakonec to tedy vypadá takto: | ||
+ | |||
+ | |||
+ | < | ||
+ | | ||
+ | |||
+ | Chain INPUT (policy DROP) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | ==== Logování ==== | ||
+ | |||
+ | V našem případě nastavení '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Všechno se pak loguje do [[syslog|syslogu]]. | ||
+ | |||
+ | ==== Ukládání nastavení iptables ==== | ||
+ | |||
+ | Když nyní restartujete svůj systém, veškeré změny v '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | který nám na standardní výstup vypíše definici všech pravidel pro '' | ||
+ | |||
+ | < | ||
+ | # Generated by iptables-save v1.4.4 on Thu Sep 9 23:45:38 2010 | ||
+ | *filter | ||
+ | :INPUT DROP [1038: | ||
+ | :FORWARD ACCEPT [0:0] | ||
+ | :OUTPUT ACCEPT [3370244: | ||
+ | -A INPUT -i lo -j ACCEPT | ||
+ | -A INPUT -m conntrack --ctstate RELATED, | ||
+ | -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT | ||
+ | COMMIT | ||
+ | # Completed on Thu Sep 9 23:45:39 2010 | ||
+ | </ | ||
+ | Daleko praktičtější než výpis konfigurace na standardní výstup (na obrazovku) je lepší výstup do souboru. | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Obrácenou službu nám udělá program '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Zajímavým pomocníkem při nastavování '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | |||
+ | Applying new ruleset... done. | ||
+ | Can you establish NEW connections to the machine? (y/N) apparently not... | ||
+ | Timeout. Something happened (or did not). Better play it safe... | ||
+ | Reverting to old ruleset... done. | ||
+ | </ | ||
+ | '' | ||
+ | |||
+ | ==== Automatické nastavení iptables při startu systému ==== | ||
+ | |||
+ | {{.: | ||
+ | |||
+ | Pozor, zdá se že '' | ||
+ | |||
+ | Máte tedy dvě řešení : Buď použijete / | ||
+ | |||
+ | === Automatické nastavení při startu pomocí / | ||
+ | |||
+ | Máte na výběr opět dvě možnosti: Buď můžete začít provádět změny do ''/ | ||
+ | |||
+ | == Řešení #1 - / | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Úpravou konfiguračního souboru ''/ | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Pokud dostanete výstup podobný tomuto: | ||
+ | |||
+ | < | ||
+ | lo no wireless extensions. | ||
+ | |||
+ | eth0 no wireless extensions. | ||
+ | </ | ||
+ | potom v systému nemáte žádnou bezdrátovou síťovou kartu, aproto bude nejlepší použít interfejs '' | ||
+ | |||
+ | Jelikož nyní již víte jaký interfejs použít, můžete otevřít soubor ''/ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Pokud raději pracujete v grafickém prostředí Gnome zmáčkněte **Alt+F2** a napište: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | gksudo gedit / | ||
+ | </ | ||
+ | a zmáčkněte klávesu enter . | ||
+ | |||
+ | Pro práci v grafickém prostředí KDE zmáčkněte **Alt+F2** a napište | ||
+ | |||
+ | < | ||
+ | kdesu kate / | ||
+ | </ | ||
+ | a zmáčkněte klávesu enter. | ||
+ | |||
+ | Na konec řádku, který se vztahuje k vašemu síťovému rozhraní napište : | ||
+ | |||
+ | < | ||
+ | pre-up iptables-restore < / | ||
+ | </ | ||
+ | Můžete mít také připravenou sadu pravidel, která se použije při vypínání '' | ||
+ | |||
+ | < | ||
+ | post-down iptables-restore < / | ||
+ | </ | ||
+ | Nakonec bude vypadat soubor ''/ | ||
+ | |||
+ | < | ||
+ | auto eth0 | ||
+ | iface eth0 inet dhcp | ||
+ | pre-up iptables-restore < / | ||
+ | post-down iptables-restore < / | ||
+ | </ | ||
+ | |||
+ | == Řečení #2 / | ||
+ | |||
+ | Druhou možností je přidat '' | ||
+ | |||
+ | Do souboru ''/ | ||
+ | |||
+ | < | ||
+ | iptables-restore < / | ||
+ | exit 0 | ||
+ | </ | ||
+ | A do souboru ''/ | ||
+ | |||
+ | < | ||
+ | iptables-save -c > / | ||
+ | if [ -f / | ||
+ | | ||
+ | fi | ||
+ | exit | ||
+ | </ | ||
+ | Nakonec se ujistěte, že oba soubory mají povolenou spouštění: | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | Pokun chcete navíc mezi restarty počítače zachovávat počítadla paketů, tak použijte pro uložení nastavení '' | ||
+ | |||
+ | < | ||
+ | iptables-save -c > / | ||
+ | </ | ||
+ | |||
+ | === Automatické nastavení při startu pomocí NetworkManagera === | ||
+ | |||
+ | NetworkManager ma v sobě zabudovanou schopnost spouštět skripty, když se zapíná i když se vypíná. K uložení a obnovení pravidle '' | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | nebo v grafickém prostředí Gnome zmáčkněte **Alt+F2** a napište: | ||
+ | |||
+ | < | ||
+ | gksudo gedit / | ||
+ | </ | ||
+ | V KDE zmáčkněte **Alt+F2** anapište: | ||
+ | |||
+ | < | ||
+ | kdesu kate / | ||
+ | </ | ||
+ | Potom do souboru vložte následující: | ||
+ | |||
+ | < | ||
+ | if [ -x / | ||
+ | LOGGER="/ | ||
+ | else | ||
+ | LOGGER=echo | ||
+ | fi | ||
+ | |||
+ | case " | ||
+ | up) | ||
+ | if [ ! -r / | ||
+ | ${LOGGER} "No iptables rules exist to restore." | ||
+ | return | ||
+ | fi | ||
+ | if [ ! -x / | ||
+ | ${LOGGER} "No program exists to restore iptables rules." | ||
+ | return | ||
+ | fi | ||
+ | ${LOGGER} " | ||
+ | / | ||
+ | ;; | ||
+ | down) | ||
+ | if [ ! -x / | ||
+ | ${LOGGER} "No program exists to save iptables rules." | ||
+ | return | ||
+ | fi | ||
+ | ${LOGGER} " | ||
+ | / | ||
+ | ;; | ||
+ | *) | ||
+ | ;; | ||
+ | esac | ||
+ | </ | ||
+ | Nakonec se musíme ujistit, že NeteorkManager je schopen náš skript spouštět. Toho docílíte zapsáním následujícího do terminálu. | ||
+ | |||
+ | < | ||
+ | bfu@ubuntu: | ||
+ | </ | ||
+ | ==== Iptables pro pokročilé ==== | ||
+ | === Nastavení routrování === | ||
+ | === Jak nastavit NAT === | ||
+ | === Jak bezpečně nastavit firewall === | ||
+ | === Matching extensions === |