Vissza a bloghoz

Porttovábbítás Iptables segítségével Linuxon: Útmutató

Porttovábbítás Iptables segítségével Linuxon: Útmutató

Porttovábbítás, más néven portleképezés, egy olyan módszer, amely lehetővé teszi a távoli eszközök számára, hogy csatlakozzanak a privát helyi hálózatán (LAN) belüli konkrét szolgáltatásokhoz. Ahogy a név is sugallja, a folyamat magában foglalja egy adott portra érkező kérések továbbítását egy másik portra vagy hálózatra. Módosítja a csomag célját menet közben, és a hálózati címfordítás (NAT) műveletnek minősül.

A porttovábbítás engedélyezése lehetővé teszi a belső hálózathoz nem csatlakozó eszközök vagy állomások számára, hogy elérjék egymást, ami egyébként le van tiltva, ha a funkció ki van kapcsolva. A porttovábbítás előnyeit kihasználva tetszés szerint blokkolhat célwebhelyeket, növelheti a biztonságot, és megkerülheti a NAT tűzfalat.

Ebben az útmutatóban lépésről lépésre bemutatjuk a portok továbbítását iptables segítségével Linux alatt.

Előfeltételek

Az útmutató követéséhez a következőkre lesz szüksége:

Gép részletei

Először is ismernünk kell a működő szerverek interfészeinek és címeinek részleteit. Ellenőrizzük a rendszerünk hálózati interfészeit:

A következő kimenetet fogja látni:

Itt a kiemelt kimenet két interfészt mutat, az első eth0 a következő címhez van hozzárendelve: 192.51.100.45, a második pedig, az eth1 a következő címhez van hozzárendelve: 192.168.1.5. E két interfész közül az egyik nyilvános, a másik pedig privát. Futtatunk egy parancsot, hogy megkülönböztessük a kettőt, és kiderítsük, melyik a nyilvános interfész, amely az alapértelmezett átjáróhoz kapcsolódik. A megkülönböztetéshez írja be:

A következő kimenetet fogja látni:

Fiktív adatok az útmutatóhoz

Ebben az útmutatóban fiktív címeket és interfész-hozzárendeléseket fogunk használni. Ezeket az adatokat szabadon használhatja, vagy tetszés szerint kicserélheti őket.

Webszerver hálózati részletei:

  • Nyilvános IP-cím: 203.0.113.2

  • Privát IP-cím: 192.0.2.2

  • Nyilvános interfész: eth0

  • Privát interfész: eth1

Tűzfal hálózati részletei:

  • Nyilvános IP-cím: 203.0.113.15

  • Privát IP-cím: 192.0.2.15

  • Nyilvános interfész: eth0

  • Privát interfész: eth1

Webszerver beállítása

Kezdjük a webszerver gépünkkel. Először jelentkezzen be a sudo felhasználójával.

Az Nginx telepítése

Először telepítjük az Nginx-et a webszerverünkön, és korlátozzuk, hogy csak a privát interfészén figyeljen. Ez lehetővé teszi, hogy a webszerverünk csak akkor legyen elérhető, ha a porttovábbítást megfelelően állítottuk be.

Ezután frissítse a helyi csomaggyorsítótárat, és az apt segítségével töltse le és telepítse az Nginx-et:

Korlátozások hozzáadása

Miután telepítettük az Nginx-et a webszerverünkön, zárolni fogjuk, hogy biztosítsuk, hogy csak a privát interfészekről fogadjon bemeneteket, máshonnan ne. Ez azt is biztosítja, hogy a webszervereink csak akkor legyenek aktívak, ha a porttovábbítás beállítása helyes.

A korlátozások hozzáadásához nyissa meg az alapértelmezett szerverblokk konfigurációs fájlját: /etc/nginx/sites-enabled/default egy tetszőleges szövegszerkesztőben (itt a nano szövegszerkesztőt használjuk), és gépelje be:

A kimenetben látni fogja, hogy a listen direktíva kétszer jelenik meg:

Port Forwarding Nginx Default File

Ebben az útmutatóban az első direktívát használjuk az IPv4 továbbítás bemutatására. A második, amely az IPv6-hoz van konfigurálva, eltávolítható. Adja hozzá a webszerver privát IP-címét egy kettősponttal közvetlenül a 80 elé, hogy tájékoztassa az Nginx-et, hogy csak a privát interfészről fogadjon bemeneteket. Ezután szerkessze a direktívát:

Port Forwarding Nginx Edited Default File

Ha kész, mentse el és zárja be a fájlt. Mielőtt továbblépne, győződjön meg arról, hogy nincsenek szintaktikai hibák. Teszteljük a fájlt:

Nginx T

Ha nem jelenik meg hibaüzenet, újraindíthatja az Nginx-et és engedélyezheti az új konfigurációt:

A hálózati korlátozás ellenőrzése

Ellenőrizzük, milyen szintű hozzáférésünk van a webszerverünkhöz. Próbálja meg elérni a webszervert a privát interfészen keresztül a curl paranccsal:

A következő kimenetet fogja látni:

Port Forwarding Nginx Output1

Ha a nyilvános interfészt próbáljuk használni, nem fogunk tudni kapcsolódni:

Pontosan erre számítottunk.

A tűzfal konfigurálása a 80-as port továbbítására

Haladjunk tovább a munkával, és valósítsuk meg a porttovábbítást a tűzfal gépünkön.

Továbbítás engedélyezése a kernelben

Alapértelmezés szerint a legtöbb rendszerben a porttovábbítás KI van kapcsolva. Néhány szerkesztéssel be fogjuk kapcsolni a porttovábbítást. Emellett lehetőség van a porttovábbítás végleges BEkapcsolására is a sudo jogosultságok használatával, a következő lépésekben bemutatottak szerint.

A forgalomtovábbítás kernel szintű BEkapcsolásához gépelje be:

A porttovábbítás végleges BEkapcsolásához szerkessze a /etc/sysctl.conf fájlt. Nyissa meg a fájlt sudo jogosultságokkal, és gépelje be:

Belül keresse meg és vegye ki a kommentből a következő sort:

Ha kész, mentse el és zárja be a fájlt. Ezután használja a sysctl parancsokat a beállítások módosításainak érvénybe léptetéséhez:

Alapvető tűzfalbeállítás

Először olvassa el az útmutatót arról, hogyan állítson be egy alapvető tűzfalat a gépén. Ennek befejezése után a következőkkel fog rendelkezni:

  • Telepítette a iptables-persistent
  • Elmentette az alapértelmezett szabálykészletet a /etc/iptables/rules.v4
  • Átfogó ismeretekkel rendelkezik a szabályok hozzáadásáról és módosításáról a iptables parancs használatával

Továbbá megnézheti azt is, how to list and delete iptables Firewall rules.

A továbbítási szabályok hozzáadása

Úgy fogjuk konfigurálni a tűzfalunkat, hogy a nyilvános interfészünkre ( eth0 ) a 80 porton érkező forgalom továbbításra kerüljön a privát interfészünkre ( eth1). Alapértelmezés szerint az alapvető tűzfalunkban a FORWARD lánc DROP értékre van állítva a forgalom eldobásához. Tűzfalszabályok hozzáadásával engedélyezzük a továbbított kapcsolatokat a webszerverünkhöz. A biztonság növelése érdekében korlátozni fogjuk a tűzfalszabályokat a továbbítási kérelmek engedélyezéséhez.

A FORWARD láncban elfogadjuk a portra irányuló új kapcsolatokat,80 amelyek a nyilvános interfészünkről érkeznek és a privát interfészünkre tartanak. Az új kapcsolatokat a conntrack kiterjesztés segítségével azonosítjuk, és egy TCP SYN csomaggal reprezentáljuk:

Engedélyeznie kell a bejövő kapcsolatból származó minden további forgalmat mindkét irányban. Gépelje be az alábbi parancsokat a ESTABLISHED és RELATED forgalom engedélyezéséhez a nyilvános és privát interfészeink között:

Let’s verify if our policy on the FORWARD chain is set to DROP:

Until now, we’ve added a few rules that allow traffic between our public and private interfaces to proceed through our firewall. However, iptables is not yet informed to direct the traffic because firewall rules configuration is yet to be done. In the next steps, we will add the NAT rules and adjust the permanent rule set to direct traffic.

Adding the NAT Rules to Direct Packets

We’ll perform two separate operations in order for iptables to correctly alter the packets, and streamline communication with the clients and the webserver.

DNAT is the first operation that commences the PREROUTING chain of the nat table. The operation alters the packet’s destination address and enables it to be correctly routed as it passes between networks. However, the clients on the public network will be connecting to our firewall server and will have no information about our private network topology. To pass information with the private network, change the destination address of each packet to allow it to correctly reach our destination web server.

It is crucial to note that we’re focusing on configuring port forwarding. Performing NAT on every packing hitting the firewall is not a part of our tutorial. We will match packets at port 80 to our web server’s private IP address:

The packet will get routed correctly to our web server containing the client’s original address as the source address. Despite attempts made by the server to send the reply directly to that address, there will be no possibility to establish a legitimate TCP connection.

To configure proper routing, we’ll modify the packet’s source address. Let’s edit the source address to our firewall server’s private IP address. After modification, the reply will be sent back to the firewall, which will forward back to the client.

To enable this functionality, add a rule to the POSTROUTING chain of the nat table evaluated right before packets are sent out on the network. Then, match the packets destined for our web server by IP address and port:

Once this rule is in place, our web server should be accessible by pointing our web browser at our firewall machine’s public address:

You’ll see the output:

Nginx Output2

Our port forwarding setup is complete.

Adjust the Permanent Rule Set

After completing the port forwarding setup, we’ll save this to our permanent rule set. If you want to keep the comments in the current rule set, use the iptables-persistent service to save your rules:

You can also open it up and edit manually to keep the comments in your file:

Next, configure the filter table and the nat table to add the FORWARD chain rules and ROUTING rules respectively. Adjusting the nat table will allow us to add PREROUTING and POSTROUTING rules as shown in the example below:

A fenti értékek hozzáadása után mentse el és zárja be a fájlt. Ezután írja be az alábbi parancsot a szabályok szintaxisának teszteléséhez:

Ha nem lát hibát, töltse be a szabálykészletet:

Ellenőrizzük, hogy a webszerverünk továbbra is elérhető-e a tűzfal publikus IP-címén keresztül:

Összegzés

A bemutató végére már magabiztosan kell tudnia portokat továbbítani egy Linux szerveren az iptables segítségével. Kihasználhatja a porttovábbítási képességeket a privát hálózat topológiájának elrejtésére, miközben a szolgáltatások forgalmát zökkenőmentesen átirányítja az átjáró tűzfalon.

Mivel a folyamat kifejezetten a hálózati biztonságra és a használt portokra támaszkodik, biztonságos. Fennállhat a kockázat lehetősége, ha nincs biztonsági tűzfal vagy VPN-biztonság a hálózatán. Ezért tanácsos a tűzfalat az ebben a leírásban bemutatott módon konfigurálni. Reméljük, hogy ez az útmutató segít biztonságban maradni az interneten a privát hálózat használata során.

A rendszerén implementálható további tűzfalmegoldások megismeréséhez tekintse meg ezeket a forrásokat a blogunkon:

Kellemes számítógéphasználatot!

author

Pranay Kapgate

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.