Tento článek vysvětluje, jak přidat pravidla brány firewall iptables pomocí příkazu „iptables -A“ (append).
„-A“ je pro připojení. Pokud vám to usnadní zapamatování „-A“ jako pravidla sčítání (místo pravidla pro připojení), je to v pořádku. Mějte však na paměti, že „-A“ přidává pravidlo na konec řetězce.
Opět je velmi důležité si uvědomit, že -A přidá pravidlo na konec.
Typickým posledním pravidlem bude zahození všech paketů. Pokud již máte pravidlo pro zahazování všech paketů a pokusíte-li se použít „-A“ z příkazového řádku k vytvoření nového pravidla, skončí přidáním nového pravidla za aktuální pravidlo „zahození všech paketů“, díky čemuž bude vaše nové pravidlo v podstatě k ničemu.
Jakmile zvládnete iptables a když je implementujete do produkce, měli byste použít skript shellu, kde pomocí příkazu -A přidáte všechna pravidla. V tomto skriptu shellu by váš poslední řádek měl vždy obsahovat pravidlo „zahoďte všechny pakety“. Pokud chcete přidat nová pravidla, upravte tento skript shellu a přidejte svá nová pravidla nad pravidlo „zahození všech paketů“.
Syntaxe:
iptables -A chain firewall-rule
- -Řetěz – Zadejte řetězec, ke kterému má být pravidlo připojeno. Například použijte řetězec INPUT pro příchozí pakety a OUTPUT pro odchozí pakety.
- pravidlo brány firewall – pravidlo brány firewall tvoří různé parametry.
Pokud nevíte, co řetězec znamená, raději si nejprve přečtěte o základech iptables.
Parametry pravidla brány firewall
Následující parametry jsou dostupné pro všechny druhy pravidel brány firewall.
-p je pro protokol
- Označuje protokol pro pravidlo.
- Možné hodnoty jsou tcp, udp, icmp
- Pomocí „vše“ povolte všechny protokoly. Pokud nezadáte -p, budou standardně použity „všechny“ protokoly. Není dobrým zvykem používat „vše“ a vždy specifikovat protokol.
- Pro protokol použijte buď název (například:tcp), nebo číslo (například:6 pro tcp).
- soubor /etc/protocols obsahuje všechny povolené názvy a čísla protokolu.
- Vy také používáte –protokol
-s je pro zdroj
- Označuje zdroj paketu.
- Může to být adresa IP, síťová adresa nebo název hostitele
- Například:-s 192.168.1.101 označuje konkrétní IP adresu
- Pro masku sítě použijte /mask. Například:„-s 192.168.1.0/24“ představuje masku sítě 255.255.255.0 pro danou síť. To odpovídá síti 192.168.1.x.
- Pokud neurčíte zdroj, bude odpovídat všem zdrojům.
- Můžete také použít –src nebo –source
-d je pro cíl
- Označuje cíl paketu.
- Toto je stejné jako „-s“ (s výjimkou toho, že představuje cílového hostitele, ip-adresu nebo síť)
- Můžete také použít –dst nebo –destination
-j je cíl
- j znamená „skok na cíl“
- Toto určuje, co se má stát s paketem, který odpovídá tomuto pravidlu brány firewall.
- Možné hodnoty jsou ACCEPT, DROP, QUEUE, RETURN
- Jako cílovou hodnotu můžete také zadat jiný řetězec definovaný uživatelem.
-i je pro v rozhraní
- i znamená „vstupní rozhraní“
- Mohli byste to přehlédnout a předpokládat, že „-i“ je pro rozhraní. Pamatujte, že oba -i i -o jsou pro rozhraní. Nicméně -i pro vstupní rozhraní a -o pro výstupní rozhraní.
- Označuje rozhraní, přes které přicházejí příchozí pakety prostřednictvím řetězce INPUT, FORWARD a PREROUTING.
- Například:-i eth0 označuje, že toto pravidlo by mělo brát v úvahu příchozí pakety přicházející přes rozhraní eth0.
- Pokud nezadáte volbu -i, budou pro vstupní pakety uvažována všechna dostupná rozhraní v systému.
- Můžete také použít –in-interface
-o je pro vnější rozhraní
- o znamená „výstupní rozhraní“
- Označuje rozhraní, přes které jsou odchozí pakety odesílány prostřednictvím řetězce INPUT, FORWARD a PREROUTING.
- Pokud nezadáte volbu -o, budou pro výstupní pakety uvažována všechna dostupná rozhraní v systému.
- Můžete také použít –out-interface
Další možnosti pro parametry brány firewall
Některé z výše uvedených parametrů brány firewall mají zase své vlastní možnosti, které lze s nimi předávat. Níže jsou uvedeny některé z nejběžnějších možností.
Chcete-li použít tyto možnosti parametrů, měli byste v pravidle brány firewall zadat odpovídající parametr. Chcete-li například použít možnost „–sport“, měli byste v pravidle brány firewall zadat parametr „-p tcp“ (nebo „-p udp“).
Poznámka:Všechny tyto možnosti mají před sebou dvě pomlčky. Například před sportem jsou dvě pomlčky.
–sport je pro zdrojový port (pro -p tcp nebo -p udp)
- Ve výchozím nastavení jsou všechny zdrojové porty shodné.
- Můžete zadat číslo portu nebo název. Chcete-li například v pravidle brány firewall použít port SSH, použijte buď „–sport 22“ nebo „–sport ssh“.
- soubor /etc/services obsahuje všechny povolené názvy a čísla portu.
- Použití čísla portu v pravidle je lepší (pro výkon) než použití názvu portu.
- Chcete-li odpovídat rozsahu portů, použijte dvojtečku. Například 22:100 odpovídá číslu portu od 22 do 100.
- Můžete také použít –source-port
–dport je pro cílový port (pro -p tcp nebo -p udp)
- Vše je stejné jako –sport, kromě cílových portů.
- Můžete také použít –destination-port
–tcp-flags je pro TCP příznaky (pro -p tcp)
- Může obsahovat více hodnot oddělených čárkou.
- Možné hodnoty jsou:SYN, ACK, FIN, RST, URG, PSH. Můžete také použít VŠECHNY nebo NONE
–icmp-type je pro typ ICMP (pro -p icmp)
- Když používáte protokol icmp „-p icmp“, můžete také určit typ ICMP pomocí parametru „–icmp-type“.
- Například:použijte „–icmp-type 0“ pro „Echo Reply“ a „–icmp-type 8“ pro „Echo“.
Příklad pravidla brány firewall pro povolení příchozích připojení SSH
Nyní, když rozumíte různým parametrům (a jejich možnostem) pravidla brány firewall, pojďme sestavit vzorové pravidlo brány firewall.
V tomto příkladu povolme pouze příchozí SSH připojení k serveru. Všechna ostatní připojení budou zablokována (včetně pingu).
VAROVÁNÍ:Hra s pravidly brány firewall může způsobit, že váš systém nebude přístupný. Pokud nevíte, co děláte, můžete se (a všichni ostatní) zablokovat ze systému. Takže provádějte veškeré své učení pouze na testovacím systému, který nikdo nepoužívá, a máte přístup ke konzoli, abyste mohli restartovat iptables, pokud ztratíte přístup.
1. Smazat existující pravidla
Pokud již máte nějaká pravidla iptables, udělejte si zálohu, než smažete stávající pravidla.
Odstraňte všechna existující pravidla a povolte firewallu, aby vše přijal. Použijte iptables flush, jak jsme diskutovali dříve, k vyčištění všech vašich stávajících pravidel a začněte od nuly.
Otestujte, abyste se ujistili, že jste schopni provést ssh a ping na tento server zvenčí.
Až skončíme s tímto příkladem, budete moci SSH pouze na tento server. Tento server nebudete moci pingnout zvenčí.
2. Povolit pouze SSH
Povolit pouze příchozí připojení SSH k tomuto serveru. Na tento server můžete ssh odkudkoli.
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
Výše uvedený příkaz iptables má následující 4 komponenty.
- „-A INPUT“ – To znamená, že přidáváme nové pravidlo (nebo přidáváme) do řetězce INPUT. Toto pravidlo tedy platí pro příchozí provoz.
- „-i eth0“ – příchozí pakety přes rozhraní eth0 budou kontrolovány podle tohoto pravidla.
- “-p tcp –dport 22” – Toto pravidlo platí pro pakety TCP. Toto má jednu možnost tcp nazvanou „–dport 22“, což znamená, že cílový port pro toto pravidlo na serveru je 22 (což je ssh).
- „-j ACCEPT“ – skok na přijetí, který paket pouze PŘIJÍMÁ.
Zjednodušeně lze výše uvedené pravidlo vyjádřit takto:Všechny příchozí pakety přes eth0 pro ssh budou přijaty.
3. Zahodit všechny ostatní pakety
Jakmile určíte svá vlastní pravidla pro přijímání paketů, měli byste mít také výchozí pravidlo pro zahazování všech ostatních paketů.
Toto by mělo být vaše poslední pravidlo v řetězci INPUT.
Chcete-li zahodit všechny příchozí pakety, proveďte následující.
iptables -A INPUT -j DROP
4. Podívejte se na pravidlo SSH a test
Chcete-li zobrazit aktuální pravidla brány firewall iptables, použijte příkaz „iptables -L“.
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere
Jak vidíte z výše uvedeného výstupu, má za sebou následující dvě pravidla.
- Přijmout všechna příchozí připojení ssh
- Zahoďte všechny ostatní pakety.
Místo přidávání pravidel brány firewall z příkazového řádku může být lepší vytvořit skript shellu, který obsahuje vaše pravidla, jak je uvedeno níže.
# vi iptables.sh iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -j DROP # sh -x iptables.sh + iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT + iptables -A INPUT -j DROP # iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere
Podobně jako u příkazu iptables append/add je pro iptables k dispozici několik dalších příkazů. Budu se jim věnovat v nadcházejících článcích série iptables. Poskytnu také několik praktických příkladů pravidel brány firewall, které budou užitečné v reálných scénářích.
Předchozí články ze série iptables:
- Výukový program brány firewall systému Linux:Tabulky IPTables, řetězce, základy pravidel
- IPTables Flush:Smazat / odebrat všechna pravidla na RedHat a CentOS Linux