GNU/Linux >> Znalost Linux >  >> Linux

Linux IPTables:Jak přidat pravidla brány firewall (s příkladem Allow SSH)

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

Linux
  1. Přidat uživatele do skupiny v Linuxu, jak na to (s příklady)

  2. Jak protokolovat Linux IPTables Firewall zahozené pakety do souboru protokolu

  3. Jak povolit ssh s prázdnými hesly v Linuxu

  1. Jak přidat vlastní pravidla iptables v CSF Firewallu

  2. Jak na to:Linux General – IPTtables obecně

  3. Jak zajistit vypršení platnosti pravidel iptables?

  1. Jak vytvářet vlákna v Linuxu (pomocí ukázkového programu C)

  2. CentOS / RHEL :Jak přidat pravidla iptable

  3. Jak přidat shebang #! s php skriptem na linuxu?