Přesměrování portů , také označované jako mapování portů, je metoda umožňující vzdáleným zařízením připojit se ke konkrétní službě v rámci vaší privátní lokální sítě (LAN). Jak název napovídá, tento proces zahrnuje přesměrování požadavků na konkrétní port na jiný port nebo síť. Mění cíl paketu během přenosu a je považován za typ překladu síťových adres (NAT) operation.
Povolení přesměrování portů umožňuje zařízením nebo hostitelům, kteří nejsou připojeni k interní síti, vzájemný přístup, což je v případě zakázání jinak omezeno. Výhod přesměrování portů můžete využít k blokování cílových webových stránek, zvýšení zabezpečení a vytvoření obezličky kolem firewallu NAT podle vašich potřeb.
V tomto návodu vás provedeme kroky pro přesměrování portů pomocí iptables v Linuxu.
Požadavky
Chcete-li postupovat podle tohoto návodu, budete potřebovat:
- Nainstalované Ubuntu ve vašem systému.
- Dva hostitele s Ubuntu 20.04 ve stejném datovém centru s povoleným privátním síťováním.
- Účet uživatele bez oprávnění root nastavený s právy sudo na každém stroji.
Podrobnosti o hostiteli
Nejprve potřebujeme znát podrobnosti o rozhraních a adresách funkčních serverů. Zkontrolujme síťová rozhraní našeho systému:
|
1 |
ip -4 addr show scope global |
Uvidíte výstup:
|
1 2 3 4 5 6 7 8 9 |
Sample Output 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 198.51.100.45/18 brd 45.55.191.255 scope global eth0 valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.1.5/16 brd 10.132.255.255 scope global eth1 valid_lft forever preferred_lft forever |
Zde zvýrazněný výstup ukazuje dvě rozhraní, první eth0 přiřazené k adrese 192.51.100.45, a druhé eth1 přiřazené k adrese 192.168.1.5. Z těchto dvou rozhraní je jedno veřejné a druhé privátní. Spustíme příkaz, abychom je od sebe odlišili a zjistili veřejné rozhraní, tedy to, které je připojeno k vaší výchozí bráně. Pro rozlišení zadejte:
|
1 |
ip route show | grep default= |
Uvidíte výstup:
|
1 2 3 |
Output: ip route show | grep default |
Ukázková data pro tento návod
V tomto návodu budeme používat fiktivní adresy a přiřazení rozhraní. Tato data můžete libovolně použít nebo je nahradit podle svých potřeb.
Síťové podrobnosti webového serveru:
-
Veřejná IP adresa: 203.0.113.2
-
Privátní IP adresa: 192.0.2.2
-
Veřejné rozhraní: eth0
-
Privátní rozhraní: eth1
Síťové podrobnosti firewallu:
-
Veřejná IP adresa: 203.0.113.15
-
Privátní IP adresa: 192.0.2.15
-
Veřejné rozhraní: eth0
-
Privátní rozhraní: eth1
Nastavení webového serveru
Začněme s naším hostitelem webového serveru. Nejprve se přihlaste pomocí svého sudo uživatele.
Instalace Nginx
Nejprve nainstalujeme Nginx na našeho hostitele webového serveru a uzamkneme jej tak, aby naslouchal pouze na svém privátním rozhraní. To zajistí, že náš webový server bude dostupný pouze v případě, že máme správně nastavené přesměrování portů.
Dále aktualizujte místní mezipaměť balíčků a pomocí apt stáhněte a nainstalujte Nginx:
|
1 |
sudo apt-get update |
|
1 |
sudo apt-get install nginx |
Přidání omezení
Jakmile nainstalujeme Nginx na náš hostitelský webový server, uzamkneme jej, abychom zajistili, že bude přijímat vstupy pouze z privátních rozhraní a odnikud jinud. To také zajistí, že naše webové servery budou aktivní pouze tehdy, pokud je nastavení přesměrování portů správné.
Chcete-li přidat omezení, otevřete výchozí konfigurační soubor bloku serveru /etc/nginx/sites-enabled/default v libovolném textovém editoru podle vašeho výběru (zde používáme textový editor nano) a napište:
|
1 |
sudo nano /etc/nginx/sites-enabled/default |
Ve výstupu uvidíte, že se direktiva listen objevuje dvakrát:

V tomto návodu používáme první direktivu k demonstraci přesměrování IPv4. Druhou, která je nakonfigurována pro IPv6, lze odstranit. Přidejte soukromou IP adresu vašeho webového serveru s dvojtečkou těsně před 80, abyste informovali Nginx, že má přijímat vstupy pouze ze soukromého rozhraní. Dále upravte direktivu:

Jakmile budete hotovi, soubor uložte a zavřete. Než budete pokračovat, ujistěte se, že v něm nejsou žádné syntaktické chyby. Otestujme soubor:
|
1 |
sudo nginx -t |

Pokud se nezobrazí žádná chyba, můžete restartovat Nginx a povolit novou konfiguraci:
|
1 |
sudo service nginx restart |
Ověření síťového omezení
Ověřme úroveň přístupu, kterou máme k našemu webovému serveru. Zkuste přistoupit k webovému serveru přes soukromé rozhraní pomocí curl příkazu:
|
1 |
curl --connect-timeout 5 192.0.2.2 |
Uvidíte výstup:

Pokud se pokusíme použít veřejné rozhraní, nebudeme se moci připojit:
|
1 |
curl --connect-timeout 5 203.0.113.2 |
|
1 |
curl: (7) Failed to connect to 203.0.113.2 port 80: Connection refused |
To je přesně to, co jsme očekávali.
Nakonfigurujte firewall pro přesměrování portu 80
Pokročme v naší práci s implementací přesměrování portů na našem firewallovém stroji.
Povolení přesměrování v jádře
Ve výchozím nastavení má většina systémů přesměrování portů vypnuté. Provedeme několik úprav, abychom přesměrování portů zapnuli. Existuje také možnost zapnout přesměrování portů trvale pomocí oprávnění sudo , jak je znázorněno v následujících krocích.
Chcete-li ZAPNOUT přesměrování provozu na úrovni jádra, napište:
|
1 |
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward |
Chcete-li zapnout přesměrování portů trvale, upravte soubor /etc/sysctl.conf . Otevřete soubor s oprávněními sudo a napište:
|
1 |
sudo nano /etc/sysctl.conf |
Uvnitř najděte a odkomentujte řádek, který vypadá takto:
|
1 |
net.ipv4.ip_forward=1 |
Jakmile budete hotovi, soubor uložte a zavřete. Poté použijte příkazy sysctl k použití změn v nastavení, aby se projevily:
|
1 |
sudo sysctl -p |
|
1 |
sudo sysctl --system |
Základní nastavení firewallu
Nejprve si projděte návod na jak nastavit základní firewall na vašem stroji. Po dokončení budete mít:
- Nainstalovaný iptables-persistent
- Uloženou výchozí sadu pravidel do /etc/iptables/rules.v4
- Komplexní znalosti o přidávání a úpravách pravidel pomocí iptables příkazu
Můžete se také podívat na jak vypsat a smazat pravidla firewallu iptables.
Přidání pravidel pro přesměrování
Nakonfigurujeme náš firewall tak, aby zajistil, že provoz přicházející do našeho veřejného rozhraní ( eth0 ) na portu 80 bude přesměrován na naše soukromé rozhraní ( eth1). Ve výchozím nastavení má náš základní firewall řetězec FORWARD nastavený na DROP provoz. Přidání pravidel firewallu umožní přesměrování připojení na náš webový server. Pro zvýšení bezpečnosti uzamkneme pravidla firewallu tak, aby povolovala pouze požadavky na přesměrování.
V řetězci FORWARD budeme přijímat nová připojení určená pro port 80 přicházející z našeho veřejného rozhraní a směřující do našeho soukromého rozhraní. Nová připojení identifikujeme pomocí rozšíření conntrack a budeme je reprezentovat paketem TCP SYN :
|
1 |
sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT |
Musíte povolit jakýkoli následný provoz v obou směrech vyplývající z příchozího připojení. Zadejte níže uvedené příkazy pro povolení provozu ESTABLISHED a RELATED mezi naším veřejným a soukromým rozhraním:
|
1 |
iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
|
1 |
iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
Ověřme, zda je naše politika na FORWARD řetězci nastavena na DROP:
|
1 |
sudo iptables -P FORWARD DROP |
Doposud jsme přidali několik pravidel, která umožňují průchod provozu mezi naším veřejným a soukromým rozhraním přes náš firewall. Nicméně iptables zatím nemá informace o tom, jak provoz směrovat, protože konfigurace pravidel firewallu ještě není dokončena. V následujících krocích přidáme pravidla NAT a upravíme trvalou sadu pravidel pro směrování provozu.
Přidání pravidel NAT pro směrování paketů
Provedeme dvě samostatné operace, aby iptables správně upravoval pakety a zefektivnil komunikaci s klienty a webovým serverem.
DNAT je první operace, která zahajuje řetězec PREROUTING tabulky nat . Tato operace mění cílovou adresu paketu a umožňuje jeho správné směrování při průchodu mezi sítěmi. Klienti ve veřejné síti se však budou připojovat k našemu firewallovému serveru a nebudou mít žádné informace o topologii naší soukromé sítě. Chcete-li předávat informace v rámci soukromé sítě, změňte cílovou adresu každého paketu, aby mohl správně dorazit na náš cílový webový server.
Je důležité poznamenat, že se zaměřujeme na konfiguraci přesměrování portů. Provádění NAT pro každý paket, který narazí na firewall, není součástí našeho návodu. Budeme porovnávat pakety na portu 80 s privátní IP adresou našeho webového serveru:
|
1 |
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.0.2.2 |
Paket bude správně směrován na náš webový server a bude obsahovat původní adresu klienta jako zdrojovou adresu. Navzdory pokusům serveru odeslat odpověď přímo na tuto adresu nebude možné navázat legitimní TCP spojení.
Pro konfiguraci správného směrování upravíme zdrojovou adresu paketu. Změňme zdrojovou adresu na privátní IP adresu našeho firewallového serveru. Po úpravě bude odpověď odeslána zpět na firewall, který ji předá zpět klientovi.
Chcete-li tuto funkci povolit, přidejte pravidlo do řetězce POSTROUTING tabulky nat , který se vyhodnocuje těsně před odesláním paketů do sítě. Poté porovnejte pakety určené pro náš webový server podle IP adresy a portu:
|
1 |
sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 192.0.2.2 -j SNAT --to-source 192.0.2.15 |
Jakmile bude toto pravidlo zavedeno, náš webový server by měl být přístupný zadáním veřejné adresy našeho firewallu do webového prohlížeče:
|
1 |
curl 203.0.113.15 |
Uvidíte výstup:

Naše nastavení přesměrování portů je dokončeno.
Úprava trvalé sady pravidel
Po dokončení nastavení přesměrování portů jej uložíme do naší trvalé sady pravidel. Pokud chcete zachovat komentáře v aktuální sadě pravidel, použijte službu iptables-persistent k uložení vašich pravidel:
|
1 |
sudo service iptables-persistent save |
Můžete jej také otevřít a upravit ručně, abyste zachovali komentáře v souboru:
|
1 |
sudo nano /etc/iptables/rules.v4 |
Dále nakonfigurujte tabulku filter a tabulku nat pro přidání pravidel pro řetězec FORWARD a ROUTING pravidel. Úprava tabulky nat nám umožní přidat pravidla PREROUTING a POSTROUTING , jak je znázorněno v příkladu níže:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
/etc/iptables/rules.v4 *filter # Povolit veškerý odchozí provoz, ale ve výchozím nastavení zahazovat příchozí a předávané pakety :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # Vlastní řetězce pro jednotlivé protokoly :UDP - [0:0] :TCP - [0:0] :ICMP - [0:0] # Přijatelný UDP provoz # Přijatelný TCP provoz -A TCP -p tcp --dport 22 -j ACCEPT # Přijatelný ICMP provoz # Standardní pravidla pro povolení provozu -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT # Zahazovat neplatné pakety -A INPUT -m conntrack --ctstate INVALID -j DROP # Předat provoz do řetězců specifických pro daný protokol ## Povolit pouze nová spojení (navázaná a související by již měla být vyřízena) ## Pro TCP navíc povolit pouze nové pakety SYN, protože to je jediný platný ## způsob navázání nového TCP spojení -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP # Odmítnout cokoli, co propadlo až sem ## Pokusit se o zprávu o odmítnutí specifickou pro daný protokol -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable # Pravidla pro přesměrování portu 80 na náš webový server # Síťové podrobnosti webového serveru: # * Veřejná IP adresa: 203.0.113.2 # * Soukromá IP adresa: 192.0.2.2 # * Veřejné rozhraní: eth0 # * Soukromé rozhraní: eth1 # # Síťové podrobnosti firewallu: # # * Veřejná IP adresa: 203.0.113.15 # * Soukromá IP adresa: 192.0.2.15 # * Veřejné rozhraní: eth0 # * Soukromé rozhraní: eth1 -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Konec pravidel pro filtrování Forward # Uložit změny COMMIT *raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] COMMIT *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] # Pravidla pro překlad požadavků na port 80 veřejného rozhraní # tak, abychom je mohli správně přesměrovat na webový server pomocí # soukromého rozhraní. # Síťové podrobnosti webového serveru: # * Veřejná IP adresa: 203.0.113.2 # * Soukromá IP adresa: 192.0.2.2 # * Veřejné rozhraní: eth0 # * Soukromé rozhraní: eth1 # # Síťové podrobnosti firewallu: # # * Veřejná IP adresa: 203.0.113.15 # * Soukromá IP adresa: 192.0.2.15 # * Veřejné rozhraní: eth0 # * Soukromé rozhraní: eth1 -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.0.2.2 -A POSTROUTING -d 192.0.2.2 -o eth1 -p tcp --dport 80 -j SNAT --to-source 192.0.2.15 # Konec překladů NAT pro provoz webového serveru COMMIT *security :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] COMMIT *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT |
Po přidání výše uvedených hodnot soubor uložte a zavřete. Poté zadejte níže uvedený příkaz pro otestování syntaxe vašich pravidel:
|
1 |
sudo iptables-restore -t < /etc/iptables/rules.v4 |
Pokud nevidíte žádné chyby, načtěte sadu pravidel:
|
1 |
sudo service iptables-persistent reload |
Ověřme, zda je náš webový server stále přístupný přes veřejnou IP adresu vašeho firewallu:
|
1 |
curl 203.0.113.15 |
Závěr
Na konci tohoto návodu byste měli bez problémů zvládat přesměrování portů na Linuxovém serveru pomocí iptables. Možnosti přesměrování portů můžete využít k maskování topologie vaší soukromé sítě a zároveň k usměrnění provozu služeb tak, aby volně procházel skrze váš bránový firewall.
Vzhledem k tomu, že tento proces závisí výhradně na bezpečnosti vaší sítě a použitých portech, je bezpečný. Pokud ve své síti nemáte bezpečnostní firewall nebo zabezpečení VPN, může existovat určité riziko. Proto se doporučuje nakonfigurovat firewall tak, jak je popsáno v tomto návodu. Doufáme, že vám tento průvodce pomůže zůstat na internetu při používání soukromé sítě v bezpečí.
Chcete-li prozkoumat další řešení firewallu, která můžete na svém systému implementovat, podívejte se na tyto zdroje z našeho blogu:
- Konfigurace firewallu pomocí UFW na Ubuntu 18.04
- Nastavení firewallu pomocí FirewallD na CentOS 7
- Základy UFW: Naučte se základní příkazy firewallu
Příjemnou práci s počítačem!
Komentáře
Zatím žádné komentáře. Buďte první.