Presmerovanie portov, tiež označované ako mapovanie portov, je metóda umožňujúca vzdialeným zariadeniam pripojiť sa k špecifickej službe v rámci vašej súkromnej lokálnej siete (LAN). Ako napovedá samotný názov, tento proces zahŕňa presmerovanie požiadaviek na konkrétny port na iný port alebo sieť. Mení cieľ paketu počas prenosu a považuje sa za typ operácie prekladu sieťových adries (NAT) opätovne.
Povolenie presmerovania portov umožňuje zariadeniam alebo hostiteľom, ktorí nie sú pripojení k internej sieti, vzájomný prístup, čo je inak pri zakázaní obmedzené. Výhody presmerovania portov môžete využiť na blokovanie cieľových webových stránok, zvýšenie bezpečnosti a pridanie obchádzky okolo firewallu NAT podľa vašich potrieb.
V tomto návode vás prevedieme krokmi presmerovania portov pomocou iptables v Linuxe.
Požiadavky
Na sledovanie tohto návodu budete potrebovať:
- Nainštalovaný Ubuntu na vašom systéme.
- Dva hostitele Ubuntu 20.04 v rovnakom dátovom centre s povoleným súkromným sieťovaním.
- Nastavený používateľský účet bez oprávnení root s privilégiami sudo na každom stroji.
Podrobnosti o hostiteľovi
Najprv musíme poznať podrobnosti o rozhraniach a adresách pracujúcich serverov. Skontrolujme sieťové rozhrania nášho systému:
|
1 |
ip -4 addr show scope global |
Uvidíte výstup:
|
1 2 3 4 5 6 7 8 9 |
Príklad Výstup 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 |
Tu zvýraznený výstup ukazuje dve rozhrania, prvé eth0 priradené k adrese 192.51.100.45 a druhé eth1 priradené k adrese 192.168.1.5. Z týchto dvoch rozhraní je jedno verejné a druhé súkromné. Spustíme príkaz na ich rozlíšenie a zistenie verejného rozhrania, ktoré je pripojené k vašej predvolenej bráne. Na rozlíšenie zadajte:
|
1 |
ip route show | grep default= |
Uvidíte výstup:
|
1 2 3 |
Výstup: ip route show | grep default |
Fiktívne údaje pre návod
V tomto návode budeme používať fiktívne adresy a priradenia rozhraní. Tieto údaje môžete ľubovoľne použiť alebo ich nahradiť podľa vlastného uváženia.
Sieťové podrobnosti webového servera:
-
Verejná IP adresa: 203.0.113.2
-
Súkromná IP adresa: 192.0.2.2
-
Verejné rozhranie: eth0
-
Súkromné rozhranie: eth1
Sieťové podrobnosti firewallu:
-
Verejná IP adresa: 203.0.113.15
-
Súkromná IP adresa: 192.0.2.15
-
Verejné rozhranie: eth0
-
Súkromné rozhranie: eth1
Nastavenie webového servera
Začnime s naším hostiteľom webového servera. Najprv sa prihláste pomocou svojho sudo používateľa.
Inštalácia Nginx
Najprv nainštalujeme Nginx na náš hostiteľský webový server a uzamkneme ho tak, aby počúval iba na svojom súkromnom rozhraní. To umožní, aby bol náš webový server dostupný iba vtedy, ak správne nastavíme presmerovanie portov.
Ďalej aktualizujte lokálnu vyrovnávaciu pamäť balíkov a pomocou apt stiahnite a nainštalujte Nginx:
|
1 |
sudo apt-get update |
|
1 |
sudo apt-get install nginx |
Pridanie obmedzení
Po nainštalovaní Nginx na náš hostiteľský webový server ho uzamkneme, aby sme zabezpečili, že bude prijímať vstupy iba zo súkromných rozhraní a odnikiaľ inadiaľ. Taktiež to zabezpečí, že naše webové servery budú aktívne iba vtedy, ak bude nastavenie presmerovania portov správne.
Ak chcete pridať obmedzenia, otvorte predvolený konfiguračný súbor bloku servera /etc/nginx/sites-enabled/default v ľubovoľnom textovom editore podľa vášho výberu (tu používame textový editor nano) a zadajte:
|
1 |
sudo nano /etc/nginx/sites-enabled/default |
Na výstupe uvidíte, že direktíva listen sa zobrazuje dvakrát:

V tomto návode používame prvú direktívu na demonštráciu presmerovania IPv4. Druhú, ktorá je nakonfigurovaná pre IPv6, môžete odstrániť. Pridajte privátnu IP adresu vášho webového servera s dvojbodkou tesne pred 80, aby ste informovali Nginx, že má prijímať vstupy iba z privátneho rozhrania. Ďalej upravte direktívu:

Po dokončení súbor uložte a zatvorte. Predtým, ako budete pokračovať, sa uistite, že v ňom nie sú žiadne syntaktické chyby. Otestujme súbor:
|
1 |
sudo nginx -t |

Ak sa nezobrazí žiadna chyba, môžete reštartovať Nginx a povoliť novú konfiguráciu:
|
1 |
sudo service nginx restart |
Overenie sieťového obmedzenia
Overme úroveň prístupu, ktorú máme k nášmu webovému serveru. Skúste pristúpiť k webovému serveru cez privátne rozhranie pomocou príkazu curl :
|
1 |
curl --connect-timeout 5 192.0.2.2 |
Uvidíte výstup:

Ak sa pokúsime použiť verejné rozhranie, nebudeme sa môcť pripojiť:
|
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 presne to, čo sme očakávali.
Nakonfigurujte firewall na presmerovanie portu 80
Pokračujme v našej práci implementáciou presmerovania portov na našom firewall stroji.
Povolenie presmerovania v jadre
V predvolenom nastavení má väčšina systémov presmerovanie portov VYPNUTÉ. Vykonáme zmeny na ZAPNUTIE presmerovania portov pomocou niekoľkých úprav. Taktiež existuje možnosť zapnúť presmerovanie portov natrvalo pomocou oprávnení sudo , ako je znázornené v nasledujúcich krokoch.
Ak chcete ZAPNÚŤ presmerovanie prevádzky na úrovni jadra, zadajte:
|
1 |
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward |
Ak chcete zapnúť presmerovanie portov natrvalo, upravte súbor /etc/sysctl.conf . Otvorte súbor s oprávneniami sudo a zadajte:
|
1 |
sudo nano /etc/sysctl.conf |
Vo vnútri nájdite a odkomentujte riadok, ktorý vyzerá takto:
|
1 |
net.ipv4.ip_forward=1 |
Po dokončení súbor uložte a zatvorte. Potom použite príkazy sysctl na uplatnenie zmien v nastaveniach, aby sa prejavili:
|
1 |
sudo sysctl -p |
|
1 |
sudo sysctl --system |
Základné nastavenie firewallu
Najprv si prejdite návod na ako nastaviť základný firewall na vašom stroji. Po dokončení budete mať:
- Nainštalovaný iptables-persistent
- Uloženú predvolenú sadu pravidiel do /etc/iptables/rules.v4
- Komplexné znalosti o pridávaní a úprave pravidiel pomocou príkazu iptables command
Taktiež si môžete pozrieť ako zobraziť a vymazať pravidlá firewallu iptables.
Pridanie pravidiel presmerovania
Nakonfigurujeme náš firewall tak, aby zabezpečil, že prevádzka prichádzajúca do nášho verejného rozhrania ( eth0 ) na porte 80 bude presmerovaná na naše privátne rozhranie ( eth1). V predvolenom nastavení má náš základný firewall reťazec FORWARD nastavený na DROP prevádzky. Pridanie pravidiel firewallu umožní presmerovanie pripojení na náš webový server. Pre zvýšenie bezpečnosti uzamkneme pravidlá firewallu tak, aby povoľovali iba presmerované požiadavky.
V reťazci FORWARD budeme prijímať nové pripojenia určené pre port 80 prichádzajúce z nášho verejného rozhrania a smerujúce do nášho privátneho rozhrania. Nové pripojenia identifikujeme pomocou rozšírenia conntrack a budeme ich reprezentovať paketom TCP SYN :
|
1 |
sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT |
Musíte povoliť akúkoľvek následnú prevádzku v oboch smeroch vyplývajúcu z prichádzajúceho pripojenia. Zadajte príkazy nižšie na povolenie prevádzky ESTABLISHED a RELATED medzi naším verejným a privátnym 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 |
Overme, či je naša politika pre FORWARD reťazec nastavená na DROP:
|
1 |
sudo iptables -P FORWARD DROP |
Doteraz sme pridali niekoľko pravidiel, ktoré umožňujú prechod prevádzky medzi naším verejným a súkromným rozhraním cez náš firewall. Avšak, iptables ešte nie je informovaný o smerovaní prevádzky, pretože konfigurácia pravidiel firewallu ešte nie je dokončená. V nasledujúcich krokoch pridáme pravidlá NAT a upravíme trvalú sadu pravidiel na smerovanie prevádzky.
Pridanie pravidiel NAT na smerovanie paketov
Vykonáme dve samostatné operácie, aby iptables správne upravoval pakety a zefektívnil komunikáciu s klientmi a webovým serverom.
DNAT je prvá operácia, ktorá spúšťa PREROUTING reťazec v tabuľke nat . Táto operácia mení cieľovú adresu paketu a umožňuje jeho správne smerovanie pri prechode medzi sieťami. Klienti vo verejnej sieti sa však budú pripájať k nášmu firewallovému serveru a nebudú mať žiadne informácie o topológii našej súkromnej siete. Ak chcete odovzdávať informácie do súkromnej siete, zmeňte cieľovú adresu každého paketu, aby sa správne dostal na náš cieľový webový server.
Je dôležité poznamenať, že sa zameriavame na konfiguráciu presmerovania portov. Vykonávanie NAT na každom pakete, ktorý narazí na firewall, nie je súčasťou nášho návodu. Budeme porovnávať pakety na porte 80 so súkromnou IP adresou nášho webového servera:
|
1 |
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.0.2.2 |
Paket bude správne nasmerovaný na náš webový server a bude obsahovať pôvodnú adresu klienta ako zdrojovú adresu. Napriek pokusom servera odoslať odpoveď priamo na túto adresu nebude možné nadviazať legitímne TCP spojenie.
Na konfiguráciu správneho smerovania upravíme zdrojovú adresu paketu. Zmeňme zdrojovú adresu na súkromnú IP adresu nášho firewallového servera. Po úprave bude odpoveď odoslaná späť na firewall, ktorý ju prepošle späť klientovi.
Ak chcete povoliť túto funkciu, pridajte pravidlo do POSTROUTING reťazca v tabuľke nat vyhodnocovanej tesne pred odoslaním paketov do siete. Potom porovnajte pakety určené pre náš webový server podľa 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 |
Po zavedení tohto pravidla by mal byť náš webový server prístupný zadaním verejnej adresy nášho firewallu do webového prehliadača:
|
1 |
curl 203.0.113.15 |
Uvidíte výstup:

Naše nastavenie presmerovania portov je dokončené.
Úprava trvalej sady pravidiel
Po dokončení nastavenia presmerovania portov ho uložíme do našej trvalej sady pravidiel. Ak chcete zachovať komentáre v aktuálnej sade pravidiel, použite službu iptables-persistent na uloženie vašich pravidiel:
|
1 |
sudo service iptables-persistent save |
Môžete ho tiež otvoriť a upraviť manuálne, aby ste zachovali komentáre vo vašom súbore:
|
1 |
sudo nano /etc/iptables/rules.v4 |
Ďalej nakonfigurujte tabuľku filter a tabuľku nat na pridanie pravidiel pre reťazec FORWARD a ROUTING pravidiel. Úprava tabuľky nat nám umožní pridať pravidlá PREROUTING a POSTROUTING , ako je znázornené v príklade nižšie:
|
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 # Povoliť všetky odchádzajúce, ale predvolene zahadzovať prichádzajúce a preposielané pakety :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # Vlastné reťazce pre jednotlivé protokoly :UDP - [0:0] :TCP - [0:0] :ICMP - [0:0] # Prijateľná UDP prevádzka # Prijateľná TCP prevádzka -A TCP -p tcp --dport 22 -j ACCEPT # Prijateľná ICMP prevádzka # Štandardné pravidlá pre povoľovanie -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT # Zahadzovať neplatné pakety -A INPUT -m conntrack --ctstate INVALID -j DROP # Odovzdať prevádzku reťazcom špecifickým pre protokoly ## Povoliť iba nové spojenia (nadviazané a súvisiace by už mali byť spracované) ## Pre TCP navyše povoliť iba nové pakety SYN, keďže je to jediná platná ## metóda na nadviazanie nového TCP spojenia -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 # Odmietnuť všetko, čo prepadlo až do tohto bodu ## Pokúsiť sa o špecifickú správu o odmietnutí pre 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 # Pravidlá pre presmerovanie portu 80 na náš webový server # Sieťové podrobnosti webového servera: # * Verejná IP adresa: 203.0.113.2 # * Súkromná IP adresa: 192.0.2.2 # * Verejné rozhranie: eth0 # * Súkromné rozhranie: eth1 # # Sieťové podrobnosti firewallu: # # * Verejná IP adresa: 203.0.113.15 # * Súkromná IP adresa: 192.0.2.15 # * Verejné rozhranie: eth0 # * Súkromné rozhranie: 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 # Koniec pravidiel pre filtrovanie preposielania (Forward) # Potvrdiť zmeny 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] # Pravidlá pre preklad požiadaviek na port 80 verejného rozhrania # aby sme ich mohli správne preposlať na webový server pomocou # súkromného rozhrania. # Sieťové podrobnosti webového servera: # * Verejná IP adresa: 203.0.113.2 # * Súkromná IP adresa: 192.0.2.2 # * Verejné rozhranie: eth0 # * Súkromné rozhranie: eth1 # # Sieťové podrobnosti firewallu: # # * Verejná IP adresa: 203.0.113.15 # * Súkromná IP adresa: 192.0.2.15 # * Verejné rozhranie: eth0 # * Súkromné rozhranie: 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 # Koniec prekladov NAT pre prevádzku webového servera 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 pridaní vyššie uvedených hodnôt súbor uložte a zatvorte. Potom zadajte nasledujúci príkaz na otestovanie syntaxe vašich pravidiel:
|
1 |
sudo iptables-restore -t < /etc/iptables/rules.v4 |
Ak nevidíte žiadne chyby, načítajte sadu pravidiel:
|
1 |
sudo service iptables-persistent reload |
Overme si, či je náš webový server stále prístupný cez verejnú IP adresu vášho firewallu:
|
1 |
curl 203.0.113.15 |
Záver
Na konci tohto návodu by ste mali bez problémov zvládať presmerovanie portov na Linuxovom serveri pomocou iptables. Môžete využiť možnosti presmerovania portov na maskovanie topológie vašej súkromnej siete a zároveň zefektívniť prevádzku služieb tak, aby voľne prechádzala cez váš bránový firewall.
Keďže tento proces závisí výlučne od bezpečnosti vašej siete a použitých portov, je bezpečný. Ak vo svojej sieti nemáte bezpečnostný firewall alebo zabezpečenie VPN, môže existovať riziko. Preto sa odporúča nakonfigurovať firewall tak, ako je popísané v tomto návode. Dúfame, že vám táto príručka pomôže zostať v bezpečí na internete pri používaní vašej súkromnej siete.
Ak chcete preskúmať ďalšie riešenia firewallu, ktoré môžete implementovať vo svojom systéme, pozrite si tieto zdroje z nášho blogu:
- Konfigurácia firewallu pomocou UFW na Ubuntu 18.04
- Nastavenie firewallu pomocou FirewallD na CentOS 7
- Základy UFW: Naučte sa základné príkazy pre firewall
Príjemnú prácu s počítačom!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.