Prosljeđivanje portova, također poznato kao mapiranje portova, metoda je koja omogućuje udaljenim uređajima povezivanje s određenom uslugom unutar vaše privatne lokalne mreže (LAN). Kao što sam naziv sugerira, postupak uključuje prosljeđivanje zahtjeva za određeni port na drugi port ili mrežu. On mijenja odredište paketa u letu i smatra se vrstom operacije prevođenja mrežnih adresa (NAT) operacije.
Omogućivanje prosljeđivanja portova omogućuje onim uređajima ili poslužiteljima koji nisu povezani s internom mrežom da pristupe jedni drugima, što je inače ograničeno kada je onemogućeno. Možete iskoristiti prednosti prosljeđivanja portova za blokiranje ciljanih web stranica, nadogradnju sigurnosti i dodavanje zaobilaznice oko NAT vatrozida prema vlastitom nahođenju.
U ovom vodiču, provest ćemo vas kroz korake prosljeđivanja portova pomoću iptables u Linuxu.
Preduvjeti
Kako biste pratili ovaj vodič, trebat će vam:
- instaliran Ubuntu na vašem sustavu.
- Dva Ubuntu 20.04 poslužitelja u istom podatkovnom centru s omogućenim privatnim umrežavanjem.
- Korisnički račun koji nije root postavljen sa sudo privilegijama na svakom stroju.
Pojedinosti o poslužitelju
Prvo moramo znati pojedinosti o sučeljima i adresama radnih poslužitelja. Provjerimo mrežna sučelja našeg sustava:
|
1 |
ip -4 addr show scope global |
Vidjet ćete izlaz:
|
1 2 3 4 5 6 7 8 9 |
Primjer izlaza 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 |
Ovdje istaknuti izlaz prikazuje dva sučelja, prvo eth0 dodijeljeno adresi 192.51.100.45, a drugo eth1 dodijeljeno adresi 192.168.1.5. Od ova dva sučelja, jedno je javno, a drugo privatno. Pokrenut ćemo naredbu kako bismo ih razlikovali i otkrili javno sučelje, ono povezano s vašim zadanim mrežnim prolazom. Za razlikovanje upišite:
|
1 |
ip route show | grep default= |
Vidjet ćete izlaz:
|
1 2 3 |
Izlaz: ip route show | grep default |
Lažni podaci za vodič
Tijekom ovog vodiča koristit ćemo lažne adrese i dodjele sučelja. Slobodni ste koristiti ove podatke ili ih zamijeniti, prema vlastitom nahođenju.
Mrežni detalji web poslužitelja:
-
Javna IP adresa: 203.0.113.2
-
Privatna IP adresa: 192.0.2.2
-
Javno sučelje: eth0
-
Privatno sučelje: eth1
Mrežni detalji vatrozida:
-
Javna IP adresa: 203.0.113.15
-
Privatna IP adresa: 192.0.2.15
-
Javno sučelje: eth0
-
Privatno sučelje: eth1
Postavljanje web poslužitelja
Započnimo s našim web poslužiteljem. Prvo se prijavite sa svojim sudo korisnikom.
Instalacija Nginxa
Prvo ćemo instalirati Nginx na našem web poslužitelju i zaključati ga tako da sluša samo svoje privatno sučelje. To će omogućiti da naš web poslužitelj bude dostupan samo ako smo ispravno postavili prosljeđivanje portova.
Zatim ažurirajte lokalnu predmemoriju paketa i upotrijebite apt za preuzimanje i instalaciju Nginxa:
|
1 |
sudo apt-get update |
|
1 |
sudo apt-get install nginx |
Dodavanje ograničenja
Nakon što instaliramo Nginx na naš web poslužitelj, zaključat ćemo ga kako bismo osigurali da prihvaća unose samo s privatnih sučelja i nigdje drugdje. Također, to će osigurati da naši web poslužitelji budu aktivni samo ako je postavka prosljeđivanja portova ispravna.
Za dodavanje ograničenja, otvorite zadanu konfiguracijsku datoteku bloka poslužitelja /etc/nginx/sites-enabled/default u bilo kojem uređivaču teksta po vašem izboru (ovdje koristimo uređivač teksta nano) i upišite:
|
1 |
sudo nano /etc/nginx/sites-enabled/default |
U izlazu ćete vidjeti da se direktiva listen pojavljuje dvaput:

U ovom vodiču koristimo prvu direktivu za prikaz prosljeđivanja IPv4. Druga, koja je konfigurirana za IPv6, može se ukloniti. Dodajte privatnu IP adresu svog web poslužitelja s dvotočkom ispred 80 kako biste obavijestili Nginx da prima unose samo s privatnog sučelja. Zatim uredite direktivu:

Kada završite, spremite i zatvorite datoteku. Prije nego što nastavite, provjerite ima li sintaktičkih pogrešaka. Testirajmo datoteku:
|
1 |
sudo nginx -t |

Ako se ne prikaže nikakva pogreška, možete ponovno pokrenuti Nginx i omogućiti novu konfiguraciju:
|
1 |
sudo service nginx restart |
Provjera mrežnog ograničenja
Provjerimo razinu pristupa koju imamo našem web poslužitelju. Pokušajte pristupiti web poslužitelju putem privatnog sučelja pomoću naredbe curl naredbe:
|
1 |
curl --connect-timeout 5 192.0.2.2 |
Vidjet ćete izlaz:

Ako pokušamo koristiti javno sučelje, nećemo se moći povezati:
|
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 upravo ono što smo očekivali.
Konfigurirajte vatrozid za prosljeđivanje porta 80
Nastavimo s radom na implementaciji prosljeđivanja portova na našem vatrozidu.
Omogućite prosljeđivanje u jezgri
Prema zadanim postavkama, većina sustava ima isključeno prosljeđivanje portova. Unijet ćemo izmjene kako bismo uključili prosljeđivanje portova s nekoliko uređivanja. Također, postoji opcija trajnog uključivanja prosljeđivanja portova pomoću sudo privilegija kao što je prikazano u sljedećim koracima.
Za uključivanje prosljeđivanja prometa na razini jezgre, upišite:
|
1 |
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward |
Za trajno uključivanje prosljeđivanja portova, uredite datoteku /etc/sysctl.conf datoteku. Otvorite datoteku s sudo privilegijama i upišite:
|
1 |
sudo nano /etc/sysctl.conf |
Unutra pronađite i odkomentirajte redak koji izgleda ovako:
|
1 |
net.ipv4.ip_forward=1 |
Kada završite, spremite i zatvorite datoteku. Zatim upotrijebite naredbe sysctl kako biste primijenili promjene u postavkama kako bi stupile na snagu:
|
1 |
sudo sysctl -p |
|
1 |
sudo sysctl --system |
Osnovno postavljanje vatrozida
Prvo prođite kroz vodič o tome kako postaviti osnovni vatrozid na svom računalu. Po završetku ćete imati:
- Instaliran iptables-persistent
- Spremljen zadani skup pravila u /etc/iptables/rules.v4
- Sveobuhvatno znanje o dodavanju i izmjeni pravila pomoću naredbe iptables naredbe
Također, možete pogledati kako izlistati i izbrisati pravila vatrozida iptables.
Dodavanje pravila prosljeđivanja
Konfigurirat ćemo naš vatrozid kako bismo osigurali da se promet koji ulazi u naše javno sučelje ( eth0 ) na portu 80 prosljeđuje na naše privatno sučelje ( eth1). Prema zadanim postavkama, naš osnovni vatrozid ima lanac FORWARD postavljen na DROP promet. Dodavanje pravila vatrozida omogućit će prosljeđivanje veza na naš web poslužitelj. Radi dodatne sigurnosti, zaključat ćemo pravila vatrozida kako bismo dopustili samo prosljeđivanje zahtjeva.
U lancu FORWARD prihvatit ćemo nove veze namijenjene portu 80 koje dolaze s našeg javnog sučelja i idu prema našem privatnom sučelju. Identificirat ćemo nove veze uz pomoć proširenja conntrack i predstaviti ih TCP SYN paketom:
|
1 |
sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT |
Morate dopustiti sav naknadni promet u oba smjera koji proizlazi iz dolazne veze. Upišite naredbe u nastavku kako biste dopustili promet ESTABLISHED i RELATED između naših javnih i privatnih sučelja:
|
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 |
Provjerimo je li naša politika na lancu FORWARD postavljena na DROP:
|
1 |
sudo iptables -P FORWARD DROP |
Do sada smo dodali nekoliko pravila koja omogućuju prolazak prometa između naših javnih i privatnih sučelja kroz naš vatrozid. Međutim, iptables još nije obaviješten da usmjerava promet jer konfiguracija pravila vatrozida još nije dovršena. U sljedećim koracima dodati ćemo NAT pravila i prilagoditi trajni skup pravila za usmjeravanje prometa.
Dodavanje NAT pravila za usmjeravanje paketa
Izvršit ćemo dvije odvojene operacije kako bi iptables ispravno izmijenio pakete i pojednostavio komunikaciju s klijentima i web poslužiteljem.
DNAT je prva operacija koja započinje PREROUTING lanac tablice nat . Ova operacija mijenja odredišnu adresu paketa i omogućuje njegovo ispravno usmjeravanje pri prolasku između mreža. Međutim, klijenti na javnoj mreži spajat će se na naš poslužitelj vatrozida i neće imati informacije o topologiji naše privatne mreže. Za prijenos informacija s privatnom mrežom, promijenite odredišnu adresu svakog paketa kako biste mu omogućili da ispravno stigne do našeg odredišnog web poslužitelja.
Ključno je napomenuti da se fokusiramo na konfiguraciju prosljeđivanja portova. Izvođenje NAT-a na svakom paketu koji pogodi vatrozid nije dio našeg vodiča. Podudarat ćemo pakete na portu 80 s privatnom IP adresom našeg web poslužitelja:
|
1 |
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.0.2.2 |
Paket će biti ispravno usmjeren na naš web poslužitelj koji sadrži izvornu adresu klijenta kao izvornu adresu. Unatoč pokušajima poslužitelja da pošalje odgovor izravno na tu adresu, neće biti moguće uspostaviti legitimnu TCP vezu.
Za konfiguraciju ispravnog usmjeravanja, modificirat ćemo izvornu adresu paketa. Uredimo izvornu adresu na privatnu IP adresu našeg poslužitelja vatrozida. Nakon izmjene, odgovor će biti poslan natrag vatrozidu, koji će ga proslijediti natrag klijentu.
Kako biste omogućili ovu funkcionalnost, dodajte pravilo u POSTROUTING lanac tablice nat koja se procjenjuje neposredno prije slanja paketa na mrežu. Zatim podudarite pakete namijenjene našem web poslužitelju prema IP adresi i 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 |
Nakon što se ovo pravilo uspostavi, naš bi web poslužitelj trebao biti dostupan usmjeravanjem našeg web preglednika na javnu adresu našeg vatrozida:
|
1 |
curl 203.0.113.15 |
Vidjet ćete izlaz:

Naša konfiguracija prosljeđivanja portova je dovršena.
Prilagodite trajni skup pravila
Nakon dovršetka konfiguracije prosljeđivanja portova, spremit ćemo ovo u naš trajni skup pravila. Ako želite zadržati komentare u trenutnom skupu pravila, upotrijebite uslugu iptables-persistent za spremanje vaših pravila:
|
1 |
sudo service iptables-persistent save |
Također ga možete otvoriti i ručno urediti kako biste zadržali komentare u svojoj datoteci:
|
1 |
sudo nano /etc/iptables/rules.v4 |
Zatim konfigurirajte tablicu filter i tablicu nat kako biste dodali pravila lanca FORWARD odnosno pravila ROUTING . Prilagodba tablice nat omogućit će nam dodavanje pravila PREROUTING i POSTROUTING kao što je prikazano u primjeru u nastavku:
|
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/pravila.v4 *filter # Dopusti sav odlazni promet, ali prema zadanim postavkama odbaci dolazne pakete i pakete za prosljeđivanje :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # Prilagođeni lanci po protokolima :UDP - [0:0] :TCP - [0:0] :ICMP - [0:0] # Prihvatljivi UDP promet # Prihvatljivi TCP promet -A TCP -p tcp --dport 22 -j ACCEPT # Prihvatljivi ICMP promet # Standardna pravila prihvaćanja -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT # Odbaci nevažeće pakete -A INPUT -m conntrack --ctstate INVALID -j DROP # Proslijedi promet lancima specifičnim za protokol ## Dopusti samo nove veze (uspostavljene i povezane već bi trebale biti obrađene) ## Za TCP, dodatno dopusti samo nove SYN pakete jer je to jedina valjana ## metoda za uspostavljanje nove TCP veze -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 # Odbij sve što je dospjelo do ove točke ## Pokušaj biti specifičan za protokol s porukom o odbijanju -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 # Pravila za prosljeđivanje porta 80 na naš web poslužitelj # Mrežni detalji web poslužitelja: # * Public IP Address: 203.0.113.2 # * Private IP Address: 192.0.2.2 # * Public Interface: eth0 # * Private Interface: eth1 # # Mrežni detalji vatrozida: # # * Public IP Address: 203.0.113.15 # * Private IP Address: 192.0.2.15 # * Public Interface: eth0 # * Private Interface: 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 # Kraj pravila filtriranja prosljeđivanja # Primijeni promjene 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] # Pravila za prevođenje zahtjeva za port 80 javnog sučelja # kako bismo mogli ispravno proslijediti na web poslužitelj koristeći # privatno sučelje. # Mrežni detalji web poslužitelja: # * Public IP Address: 203.0.113.2 # * Private IP Address: 192.0.2.2 # * Public Interface: eth0 # * Private Interface: eth1 # # Mrežni detalji vatrozida: # # * Public IP Address: 203.0.113.15 # * Private IP Address: 192.0.2.15 # * Public Interface: eth0 # * Private Interface: 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 # Kraj NAT prevođenja za promet web poslužitelja 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 |
Nakon dodavanja gornjih vrijednosti, spremite i zatvorite datoteku. Zatim upišite naredbu u nastavku kako biste testirali sintaksu svojih pravila:
|
1 |
sudo iptables-restore -t < /etc/iptables/rules.v4 |
Ako ne vidite pogreške, učitajte skup pravila:
|
1 |
sudo service iptables-persistent reload |
Provjerimo je li naš web poslužitelj i dalje dostupan putem javne IP adrese vašeg vatrozida:
|
1 |
curl 203.0.113.15 |
Zaključak
Do kraja ovog vodiča trebali biste se osjećati ugodno s prosljeđivanjem portova na Linux poslužitelju pomoću iptables. Možete iskoristiti mogućnosti prosljeđivanja portova kako biste prikrili topologiju svoje privatne mreže dok istovremeno usmjeravate promet usluga da slobodno teče kroz vaš mrežni prolaz vatrozida.
Budući da se proces izričito oslanja na sigurnost vaše mreže i korištene portove, siguran je. Može postojati mogućnost rizika ako nemate sigurnosni vatrozid ili VPN sigurnost na svojoj mreži. Stoga je preporučljivo konfigurirati vatrozid kako je opisano u ovom vodiču. Nadamo se da će vam ovaj vodič pomoći da ostanete sigurni na internetu kada koristite svoju privatnu mrežu.
Kako biste dodatno istražili više rješenja za vatrozid koja možete implementirati na svom sustavu, pogledajte ove resurse s našeg bloga:
- Konfiguriranje vatrozida s UFW-om na Ubuntu 18.04
- Setting Up a Firewall with FirewallD on CentOS 7
- The Basics of UFW: Learning the Essential Firewall Commands
Ugodan rad na računalu!
Komentari
Još nema komentara. Budite prvi.