Úvod
Iptables je nástroj příkazové řádky firewall . To znamená, že se jedná o software, který vám umožňuje konfigurovat firewall ve vašem systému. Obvykle je ve výchozím nastavení k dispozici v Linux systémech. V této příručce budeme diskutovat o některých běžných pravidlech a příkazech, které souvisejí s firewallem iptables. Kdykoli se nějaké spojení pokusí navázat kontakt s vaším systémem, firewall se odkáže na tato pravidla, aby určil, jaký by měl být další krok.
Příkazy Iptables
Tato příručka představí některé z nejdůležitějších příkazů iptables. Chcete-li postupovat podle tohoto návodu, budete muset mít základní představu o tom, co je iptables a jak funguje. Pomůže vám to lépe porozumět pravidlům, která implementujete pomocí následujících příkazů. Pamatujte, že jakýkoli z níže uvedených příkazů lze použít samostatně. Na druhou stranu je můžete také kombinovat a přizpůsobit tak svým konkrétním potřebám.
Věci, které je třeba mít na paměti
Než budete číst dál, zde je několik věcí, které byste měli mít na paměti:
- Pořadí pravidel v iptables je důležité.
- Chcete-li přidat nové pravidlo na konec řetězce, váš
iptablespříkaz bude muset použít-A. - Pokud chcete pravidlo přidat na jinou pozici, musíte použít volbu
-I. Tato volba vám umožňuje specifikovat přesné umístění pravidla. Pokud chcete pravidlo umístit na začátek řetězce, jednoduše nezadávejte číslo pravidla. - Chcete-li zajistit konzistentní přístup k vašemu serveru, ve výchozím nastavení blokujte SSH provoz na portu 22.
- V případě, že se vám to nepodaří a ztratíte přístup k serveru, můžete se znovu připojit pomocí konzole. Povolte SSH provoz pro změnu nastavení firewallu.
- Pokud si někdy budete chtít prohlédnout aktuálně platnou sadu pravidel, použijte příkazy
sudo iptables -S a sudo iptables -L.
Kromě toho máme podrobného průvodce, jak vypsat a smazat pravidla firewallu iptables, který vám dále pomůže co nejlépe využít váš firewall iptables.
Nyní, když máme předpoklady za sebou, pojďme se ponořit do některých z běžných příkazů iptables:
Jak uložit pravidla
Začneme tím, že určíme, jak můžete svá pravidla uložit. Je důležité si uvědomit, že pravidla iptables jsou dočasná. To znamená, že po restartu systému budou ztracena – pokud je neuložíte. Zde je návod, jak můžete ručně uložit svá nová pravidla na serverech Ubuntu a CentOS v tomto pořadí:
-
Ubuntu
Nejjednodušší způsob, jak uložit nová pravidla na serveru Ubuntu, je použít balíček iptables-persistent. Můžete snadno vytvořit Ubuntu server podle tohoto návodu.
Nyní, prvním krokem k uložení nových pravidel iptables je instalace balíčku iptables-persistent pomocí apt-get. Zde je návod, jak jej získat:
|
1 |
sudo apt-get install iptables-persistent |

Během procesu instalace se musíte rozhodnout, zda chcete uložit aktuálně platná pravidla firewallu. Chcete-li místo toho pravidla aktualizovat a změny uložit, použijte tento příkaz:
|
1 |
sudo netfilter-persistent save |

Výše uvedený příkaz obvykle funguje pro verze Ubuntu novější než 16.04. Pokud používáte starší verzi, použijte místo toho tento příkaz:
|
1 |
sudo invoke-rc.d iptables-persistent save |
-
CentOS
Na CentOS 6 nebo starších verzích můžete nakonfigurovat firewall pomocí iptables. CentOS 7 místo toho používá FirewallD. Postupujte podle tohoto tutorial to learn how to set up FirewallD on CentOS 7.
Nová pravidla můžete na CentOS uložit pomocí init skriptu iptables. Viz následující příkaz:
|
1 |
sudo service iptables save |
Tento příkaz uloží vaše nová pravidla pro firewall iptables. Aktuálně aktivní pravidla iptables naleznete v souboru /etc/sysconfig/iptables souboru.
Užitečné příkazy Iptables
Nyní přejděme k některým velmi užitečným příkazům firewallu iptables, které možná budete muset na svém serveru použít.
-
Loopback připojení
Nejprve prozkoumáme, jak můžete povolit loopback připojení. Váš systém používá loopback rozhraní k odesílání připojení sám sobě. Představte si například, že jste spustili tento příkaz: ping localhost nebo ping 127.0.0.1. Váš server bude používat rozhraní loopback neboli lo, aby v podstatě pingnul sám sebe. Jindy jej server může použít, pokud je váš aplikační server nakonfigurován pro připojení k adrese „localhost“.
Bez ohledu na situaci se musíte ujistit, že váš firewall iptables tato připojení neblokuje. Proto budete muset povolit připojení loopback, aby tyto funkce mohly probíhat.
Zde jsou příkazy, které spustíte pro povolení veškerého provozu přicházejícího na rozhraní loopback:
|
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |

-
Zavedená a související příchozí připojení
Dalším typem připojení, které možná budete muset povolit, je odchozí připojení. Chcete-li zajistit, aby váš server přijímal a odesílal příchozí i odchozí provoz, musíte povolit zavedená a související příchozí připojení. To umožňuje serveru odesílat zpětný provoz do odchozích připojení. Pro povolení zavedených i souvisejících příchozích připojení použijte tento příkaz:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
![]()
-
Zavedená odchozí připojení
Server obvykle odesílá odpovědi na příchozí připojení ve formě odchozího provozu zavedených připojení. Chcete-li je povolit, použijte následující příkaz:
|
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
![]()
-
Interní na externí
Někdy může být dokonce nutné nakonfigurovat firewall tak, aby umožnil přístup z interní sítě do externí. Ve výchozím nastavení by vaše externí síť měla být eth0 a eth1 by měla být vaše interní síť. Pokud tomu tak je, použijte k povolení přístupu tento příkaz:
|
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |

-
Zahazování neplatných paketů
Někdy budou některé pakety síťového provozu označeny jako neplatné. Většinu času můžete tyto neplatné pakety jednoduše zahodit. Chcete-li tak učinit, použijte následující příkaz:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Pravidla pro blokování IP adres
Dále se podíváme na některé příkazy, které můžete použít k blokování připojení přicházejících z určitých IP adres. Pro usnadnění použijeme v našich příkazech jako příklad IP adresu 15.15.15.51 . Tuto hodnotu můžete nahradit svou konkrétní IP adresou.
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j DROP |
V -s 15.15.15.51, znamená -s zdroj (source). Příkaz tedy specifikuje zdrojovou IP adresu „15.15.15.51“. Podobně můžete specifikovat zdrojovou IP adresu v jakémkoli pravidle firewallu. To zahrnuje pravidlo pro povolení i odmítnutí.
Pokud chcete připojení odmítnout, použijete v příkazu REJECT namísto DROP, takto:
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j REJECT |
V důsledku toho váš server vrátí chybu „připojení odmítnuto“ (connection refused) pokaždé, když tato konkrétní IP adresa odešle požadavek na připojení.
-
Blokování připojení ke konkrétnímu rozhraní
Můžete zablokovat všechny požadavky na připojení přicházející z konkrétní IP adresy na konkrétní síťové rozhraní. V našem příkladu je IP adresa 15.15.15.51 a síťové rozhraní je eth0. K zablokování připojení použijte tento příkaz:
|
1 |
iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP |
Skvělé je, že síťové rozhraní můžete specifikovat v jakémkoli pravidle. To znamená, že jakékoli pravidlo lze použít a omezit pouze na konkrétní síť.
Pravidla pro službu: SSH
SSH se stává relevantním, pokud používáte cloudový server. V tomto případě musíte povolit příchozí připojení SSH na portu 22. Povolení těchto připojení vám umožní připojit se k vašemu serveru a spravovat jej. Zde probereme řadu běžných pravidel týkajících se SSH.
-
Povolení všech příchozích SSH
Následující příkazy povolí všechna příchozí připojení SSH:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Ve výše uvedené sadě musíte druhý příkaz použít pouze v případě, že OUTPUT politika není nastavena na ACCEPT. Povoluje odchozí provoz navázaných SSH připojení.
-
Povolení příchozího SSH z podsítě
Předchozí příkaz povoluje všechna příchozí připojení. Pomocí následujících příkazů můžete povolit pouze příchozí připojení z konkrétní IP adresy nebo podsítě. Řekněme, že chcete povolit pouze příchozí připojení z podsítě 15.15.15.0/24 podsítě:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Stejně jako předtím, druhý příkaz musíte použít pouze v případě, že OUTPUT politika není nastavena na ACCEPT. Povoluje odchozí provoz navázaných SSH připojení.
-
Povolení odchozího SSH
Tyto příkazy použijte, pokud firewallová OUTPUT politika není nastavena na ACCEPT a chcete povolit SSH připojení. To umožní vašemu serveru iniciovat SSH připojení k jiným serverům:
|
1 2 |
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Chcete-li dále využívat SSH na svých cloudových serverech, podívejte se na naše návody na jak používat SSH k připojení ke vzdálenému serveru v Ubuntu a jak nakonfigurovat Linux server pro použití ověřování založeného na SSH klíčích.
-
Povolení příchozího Rsync z podsítě
Rsync je funkce, kterou můžete použít k přenosu souborů z jednoho systému do druhého. Běží na portu 873. Pokud tedy chcete povolit příchozí připojení Rsync na portu 873 z konkrétní IP adresy nebo podsítě, použijte následující příkazy:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Jak vidíte, specifikovali jsme zdrojovou IP adresu spolu s cílovým portem. Druhý příkaz použijete pouze v případě, že firewallová OUTPUT politika není nastavena na ACCEPT. Povoluje odchozí provoz navázaných Rsync připojení. Dále se můžete podívat na náš návod, jak využít Rsync k synchronizaci lokálních a vzdálených adresářů na VPS.
Pravidla pro službu: Webový server
HTTP připojení jsou obvykle přijímána na portu 80. Podobně HTTPS obvykle přichází na portu 443. Webové servery jako Apache a Nginx naslouchají na těchto portech, aby zachytily požadavky na připojení. Někdy mohou výchozí nastavení způsobit, že váš server tyto příchozí požadavky odmítne nebo zahodí. Proto budete muset nastavit nová pravidla, která provoz povolí.
-
Povolení všech příchozích HTTP připojení
Všechna příchozí HTTP připojení na portu 80 můžete povolit pomocí těchto příkazů:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že firewallová OUTPUT politika není nastavena na ACCEPT. Povoluje odchozí provoz navázaných HTTP připojení.
-
Povolení všech příchozích HTTPS připojení
Pomocí těchto příkazů povolíte všechny příchozí požadavky na připojení HTTPS na portu 443:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že firewall iptables OUTPUT politika není nastavena na ACCEPT. Umožňuje odchozí provoz navázaných HTTP připojení.
-
Povolení všech příchozích připojení z HTTP a HTTPS
Pokud chcete povolit provoz z portů HTTP i HTTPS, můžete použít modul multiport. V takovém případě použijte tyto příkazy:
|
1 2 |
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že politika firewallu OUTPUT není nastavena na ACCEPT. Umožňuje odchozí provoz navázaných HTTP a HTTPS připojení.
Pravidla pro službu: MySQL
Někdy může klient k přístupu k vašemu databázovému serveru MySQL použít vzdálený server. V takovém případě musíte ručně povolit příchozí provoz z příslušného portu. MySQL naslouchá požadavkům na připojení z portu 3306.
-
Povolení příchozích připojení MySQL z podsítě
Pokud chcete povolit připojení MySQL z konkrétní podsítě, budete muset specifikovat zdroj. V našem příkladu povolíme příchozí provoz z podsítě 15.15.15.0/24 pomocí těchto příkazů:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že politika firewallu OUTPUT není nastavena na ACCEPT. Umožňuje odchozí provoz navázaných MySQL připojení.
-
Povolení připojení MySQL k rozhraní
Pokud chcete také specifikovat, které síťové rozhraní má přijímat připojení MySQL, můžete použít tyto příkazy:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
V tomto případě povolujeme připojení k privátnímu síťovému rozhraní s názvem eth1.
Druhý příkaz použijete pouze v případě, že politika firewallu OUTPUT není nastavena na ACCEPT. Umožňuje odchozí provoz navázaných MySQL připojení.
Můžete postupovat podle našeho návodu pro snadné nastavení MySQL na vašem serveru.
Pravidla pro službu: PostgreSQL
Váš klient může k přístupu k vašemu databázovému serveru PostgreSQL použít vzdálený server. V takovém případě musíte tato příchozí připojení povolit. Tato připojení budou probíhat přes port 5432.
-
Povolení příchozích připojení PostgreSQL z podsítě
Pomocí následujících příkazů můžete povolit příchozí připojení PostgreSQL z konkrétní podsítě nebo IP adresy. Jak vidíte, specifikovali jsme zdroj, kterým je 15.15.15.0/24 podsíť.
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že politika firewallu OUTPUT není nastavena na ACCEPT. Umožňuje odchozí provoz navázaných připojení PostgreSQL.
-
Povolení připojení PostgreSQL ke konkrétnímu rozhraní
Pokud chcete povolit připojení PostgreSQL pouze k určitému síťovému rozhraní, použijte tyto příkazy:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
V tomto případě povolujeme připojení k privátnímu síťovému rozhraní s názvem eth1. Druhý příkaz použijete pouze v případě, že pravidlo firewallu OUTPUT není nastaveno na ACCEPT. Umožňuje odchozí provoz navázaných připojení PostgreSQL.
Postupujte podle tohoto návodu k instalaci PostgreSQL na váš server Ubuntu.
Pravidla pro službu: Mail
Možná budete muset nakonfigurovat firewall také v souladu s poštovním serverem, který používáte. Například Sendmail a Postfix mohou přijímat připojení na řadě různých portů. Záleží na protokolu, který používáte pro doručování pošty. Chcete-li blokovat a povolit určitá poštovní připojení, musíte vědět, jaký protokol používáte.
-
Povolení příchozích připojení SMTP
Připojení SMTP obvykle přicházejí na portu 25. I když SMTP také běžně používá port 587 pro odchozí poštu. Chcete-li serveru povolit odpovídat na tato připojení, použijte následující příkazy:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že pravidlo firewallu OUTPUT není nastaveno na ACCEPT. Umožňuje odchozí provoz navázaných připojení SMTP.
-
Povolení všech příchozích připojení IMAP
Chcete-li serveru povolit odpovídat na všechna příchozí připojení IMAP na portu 143, jednoduše zadejte a spusťte toto:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že pravidlo firewallu OUTPUT není nastaveno na ACCEPT. Umožňuje odchozí provoz navázaných připojení IMAP.
-
Povolení všech příchozích připojení IMAPS
Pomocí těchto příkazů umožníte serveru odpovídat na připojení IMAPS na portu 993:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že pravidlo firewallu OUTPUT není nastaveno na ACCEPT. Umožňuje odchozí provoz navázaných připojení IMAPS.
-
Povolení všech příchozích připojení POP3
Tato připojení budou přicházet na portu 993. Pokud chcete, aby váš server odpovídal na požadavky o připojení IMAPS, použijte následující příkazy:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že pravidlo firewallu OUTPUT není nastaveno na ACCEPT. Umožňuje odchozí provoz navázaných připojení POP3.
-
Povolení všech příchozích připojení POP3S
Pomocí těchto příkazů umožníte serveru navazovat spojení s požadavky POP3S přicházejícími na portu 995:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Druhý příkaz použijete pouze v případě, že firewall OUTPUT politika není nastavena na ACCEPT. Povoluje odchozí provoz navázaných připojení POP3S.
-
Jak zablokovat odchozí poštu SMTP
Místo povolení příchozích připojení a povolení odpovědi serveru možná budete chtít odchozí poštu zcela zablokovat. Veškerou odchozí poštu SMTP na portu 25 můžete zablokovat pomocí tohoto příkazu:
|
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
V důsledku toho bude veškerý odchozí provoz na portu 25 firewallem iptables odmítnut. Stejnou strukturu příkazu můžete použít, pokud chcete odmítnout jakoukoli jinou službu. Stačí pouze nahradit port 25 příslušným číslem portu.
Závěr
Tato příručka popisuje základní příkazy firewallu iptables. Poskytuje vám základní nástroje, které potřebujete k efektivní konfiguraci firewallu iptables. Mějte na paměti, že neexistuje univerzální řešení pro všechny. Tyto příkazy jsou extrémně flexibilní. To znamená, že je můžete použít jakýmkoli způsobem, který nejlépe vyhovuje vám a vašim požadavkům.
Příjemnou práci s počítačem!

Komentáře
Zatím žádné komentáře. Buďte první.