Terug naar blog

Poorten doorsturen met Iptables in Linux: een handleiding

Poorten doorsturen met Iptables in Linux: een handleiding

Port forwarding, ook wel poortmapping genoemd, is een methode om externe apparaten verbinding te laten maken met een specifieke service binnen uw particuliere lokale netwerk (LAN). Zoals de naam al doet vermoeden, houdt het proces in dat verzoeken voor een specifieke poort worden doorgestuurd naar een andere poort of netwerk. Het wijzigt de bestemming van het pakket tijdens de overdracht en wordt beschouwd als een type netwerkadresvertaling (NAT)-bewerking.

Het inschakelen van port forwarding stelt apparaten of hosts die niet met het interne netwerk zijn verbonden in staat om met elkaar te communiceren, wat anders beperkt is wanneer het is uitgeschakeld. U kunt de voordelen van port forwarding benutten om doelwebsites te blokkeren, de beveiliging te verbeteren en naar eigen wens een omweg om de NAT-firewall te maken.

In deze handleiding leiden we u door de stappen voor het doorsturen van poorten met iptables in Linux.

Vereisten

Om deze handleiding te volgen, heeft u het volgende nodig:

Hostgegevens

Eerst moeten we de details van de interfaces en adressen van de werkende servers weten. Laten we de netwerkinterfaces van ons systeem controleren:

U ziet de uitvoer:

Hier toont de gemarkeerde uitvoer twee interfaces, de eerste eth0 toegewezen aan het adres 192.51.100.45, en de tweede eth1 toegewezen aan het adres 192.168.1.5. Van deze twee interfaces is de ene openbaar en de andere privé. We zullen een opdracht uitvoeren om de twee te onderscheiden en de openbare interface te achterhalen, degene die is verbonden met uw standaardgateway. Typ om te onderscheiden:

U ziet de uitvoer:

Fictieve gegevens voor de handleiding

We zullen in deze handleiding fictieve adressen en interfacetoewijzingen gebruiken. Het staat u vrij om deze gegevens te gebruiken of te vervangen, zoals u dat wilt.

Netwerkgegevens webserver:

  • Openbaar IP-adres: 203.0.113.2

  • Privé-IP-adres: 192.0.2.2

  • Openbare interface: eth0

  • Privé-interface: eth1

Netwerkgegevens firewall:

  • Openbaar IP-adres: 203.0.113.15

  • Privé-IP-adres: 192.0.2.15

  • Openbare interface: eth0

  • Privé-interface: eth1

Webserver instellen

Laten we beginnen met onze webserverhost. Log eerst in met uw sudo gebruiker.

Nginx installeren

Eerst zullen we Nginx installeren op onze webserverhost en deze vergrendelen zodat deze alleen luistert naar de privé-interface. Dit zorgt ervoor dat onze webserver alleen beschikbaar is als we port forwarding op de juiste manier hebben ingesteld.

Werk vervolgens de lokale pakketcache bij en gebruik apt om Nginx te downloaden en te installeren:

Beperkingen toevoegen

Zodra we Nginx op onze webserverhost hebben geïnstalleerd, vergrendelen we deze om ervoor te zorgen dat deze alleen invoer van privé-interfaces accepteert en nergens anders vandaan. Dit zorgt er ook voor dat onze webservers alleen actief zijn als de port forwarding-configuratie correct is.

Om beperkingen toe te voegen, opent u het standaard configuratiebestand voor het serverblok /etc/nginx/sites-enabled/default in een teksteditor naar keuze (hier gebruiken we de nano-teksteditor), en typ:

In de uitvoer zie je de listen-richtlijn twee keer verschijnen:

Port Forwarding Nginx Default File

In deze handleiding gebruiken we de eerste richtlijn om IPv4-doorsturen te demonstreren. De tweede, die is geconfigureerd voor IPv6, kan worden verwijderd. Voeg het privé-IP-adres van je webserver toe met een dubbele punt net voor de 80 om Nginx te laten weten dat invoer alleen van de privé-interface mag worden geaccepteerd. Bewerk vervolgens de richtlijn:

Port Forwarding Nginx Edited Default File

Sla het bestand op en sluit het als je klaar bent. Controleer of er geen syntaxisfouten zijn voordat je verdergaat. Laten we het bestand testen:

Nginx T

Als er geen foutmelding wordt weergegeven, kun je Nginx herstarten en de nieuwe configuratie inschakelen:

Verificatie van de netwerkbeperking

Laten we het toegangsniveau tot onze webserver verifiëren. Probeer toegang te krijgen tot de webserver via de privé-interface met behulp van het curl -commando:

Je ziet de uitvoer:

Port Forwarding Nginx Output1

Als we proberen de openbare interface te gebruiken, kunnen we geen verbinding maken:

Dit is precies wat we verwachtten.

De firewall configureren om poort 80 door te sturen

Laten we verdergaan met het implementeren van poortdoorsturing op onze firewall-machine.

Doorsturen inschakelen in de kernel

Standaard is poortdoorsturing op de meeste systemen UITGESCHAKELD. We zullen wijzigingen aanbrengen om poortdoorsturing IN te schakelen door een paar aanpassingen te doen. Er is ook een optie om poortdoorsturing permanent IN te schakelen met behulp van de sudo -rechten, zoals getoond in de volgende stappen.

Om verkeersdoorsturing op kernelniveau IN te schakelen, typ je:

Om poortdoorsturing permanent IN te schakelen, bewerk je het /etc/sysctl.conf-bestand. Open het bestand met sudo -rechten en typ:

Zoek daarin de regel die er als volgt uitziet en verwijder het commentaarteken:

Sla het bestand op en sluit het als je klaar bent. Gebruik vervolgens de sysctl -commando's om de wijzigingen in de instellingen toe te passen zodat deze effectief worden:

Basis firewall-configuratie

Lees eerst de handleiding over hoe je een basis-firewall instelt op je machine. Na voltooiing heb je:

  • Geïnstalleerd: iptables-persistent
  • De standaardregelset opgeslagen in /etc/iptables/rules.v4
  • Uitgebreide kennis van het toevoegen en wijzigen van regels met behulp van het iptables -commando

Je kunt ook kijken naar hoe je iptables-firewallregels kunt weergeven en verwijderen.

De doorstuurregels toevoegen

We configureren onze firewall om ervoor te zorgen dat verkeer dat binnenkomt op onze openbare interface ( eth0 ) op poort 80 wordt doorgestuurd naar onze privé-interface ( eth1). Standaard heeft onze basis-firewall een FORWARD chain die is ingesteld om verkeer te DROP -pen. Het toevoegen van firewallregels maakt het mogelijk om verbindingen door te sturen naar onze webserver. Voor extra beveiliging zullen we de firewallregels vergrendelen om alleen specifieke doorstuurverzoeken toe te staan.

In de FORWARD chain accepteren we nieuwe verbindingen die bestemd zijn voor poort 80 die afkomstig zijn van onze openbare interface en naar onze privé-interface gaan. We identificeren de nieuwe verbindingen met behulp van de conntrack extensie en vertegenwoordigen ze door een TCP SYN -pakket:

Je moet al het daaropvolgende verkeer in beide richtingen toestaan dat voortvloeit uit de inkomende verbinding. Typ de onderstaande commando's om ESTABLISHED en RELATED -verkeer toe te staan tussen onze openbare en privé-interfaces:

Laten we controleren of ons beleid op de FORWARD chain is ingesteld op DROP:

Tot nu toe hebben we een paar regels toegevoegd die verkeer tussen onze openbare en privé-interfaces door onze firewall laten gaan. Echter, iptables is nog niet geïnformeerd om het verkeer te sturen omdat de configuratie van de firewallregels nog moet worden gedaan. In de volgende stappen zullen we de NAT-regels toevoegen en de permanente regelset aanpassen om het verkeer te sturen.

De NAT-regels toevoegen om pakketten te sturen

We zullen twee afzonderlijke bewerkingen uitvoeren zodat iptables de pakketten correct kan wijzigen en de communicatie met de clients en de webserver kan stroomlijnen.

DNAT is de eerste bewerking die begint met de PREROUTING chain van de nat tabel. De bewerking wijzigt het bestemmingsadres van het pakket en zorgt ervoor dat het correct wordt gerouteerd wanneer het tussen netwerken reist. De clients op het openbare netwerk maken echter verbinding met onze firewallserver en hebben geen informatie over de topologie van ons privénetwerk. Om informatie uit te wisselen met het privénetwerk, wijzigt u het bestemmingsadres van elk pakket zodat het onze bestemmingswebserver correct kan bereiken.

Het is cruciaal om op te merken dat we ons richten op het configureren van port forwarding. Het uitvoeren van NAT op elk pakket dat de firewall bereikt, maakt geen deel uit van onze handleiding. We zullen pakketten op poort 80 koppelen aan het privé-IP-adres van onze webserver:

Het pakket wordt correct gerouteerd naar onze webserver met het oorspronkelijke adres van de client als bronadres. Ondanks pogingen van de server om het antwoord rechtstreeks naar dat adres te sturen, zal het niet mogelijk zijn om een legitieme TCP-verbinding tot stand te brengen.

Om een juiste routering te configureren, wijzigen we het bronadres van het pakket. Laten we het bronadres bewerken naar het privé-IP-adres van onze firewallserver. Na de wijziging wordt het antwoord teruggestuurd naar de firewall, die het weer doorstuurt naar de client.

Om deze functionaliteit in te schakelen, voegt u een regel toe aan de POSTROUTING chain van de nat tabel die wordt geëvalueerd vlak voordat pakketten op het netwerk worden verzonden. Koppel vervolgens de pakketten die bestemd zijn voor onze webserver op basis van IP-adres en poort:

Zodra deze regel van kracht is, zou onze webserver toegankelijk moeten zijn door onze webbrowser naar het openbare adres van onze firewallmachine te verwijzen:

U ziet de uitvoer:

Nginx Output2

Onze port forwarding-configuratie is voltooid.

De permanente regelset aanpassen

Na het voltooien van de port forwarding-configuratie slaan we dit op in onze permanente regelset. Als u de opmerkingen in de huidige regelset wilt behouden, gebruikt u de iptables-persistent service om uw regels op te slaan:

U kunt het ook openen en handmatig bewerken om de opmerkingen in uw bestand te behouden:

Configureer vervolgens de filter tabel en de nat tabel om respectievelijk de FORWARD chain-regels en ROUTING regels toe te voegen. Het aanpassen van de nat tabel stelt ons in staat om PREROUTING and POSTROUTING regels toe te voegen, zoals in het onderstaande voorbeeld wordt getoond:

Sla het bestand op en sluit het na het toevoegen van de bovenstaande waarden. Typ vervolgens de onderstaande opdracht om de syntaxis van uw regels te testen:

Als u geen fouten ziet, laadt u de regelset:

Laten we controleren of onze webserver nog steeds toegankelijk is via het openbare IP-adres van uw firewall:

Conclusie

Aan het einde van deze handleiding bent u vertrouwd met het doorsturen van poorten op een Linux-server met iptables. U kunt de mogelijkheden voor poortdoorsturing gebruiken om de topologie van uw privénetwerk te verbergen, terwijl u het serviceverkeer soepel door uw gateway-firewall laat stromen.

Omdat het proces expliciet afhankelijk is van uw netwerkbeveiliging en de gebruikte poorten, is het veilig. Er is mogelijk een risico als u geen beveiligingsfirewall of VPN-beveiliging op uw netwerk hebt. Daarom is het raadzaam om de firewall te configureren zoals besproken in deze handleiding. We hopen dat deze gids u helpt veilig te blijven op het internet wanneer u uw privénetwerk gebruikt.

Om meer firewall-oplossingen te ontdekken die u op uw systeem kunt implementeren, kunt u deze bronnen bekijken op onze blog:

Veel computerplezier!

author

Pranay Kapgate

Auteur · CloudSigma

Preslav Dobrev is een creatief ontwerper bij CloudSigma, met de nadruk op een consistente bedrijfsidentiteit door middel van traditionele en innovatieve marketingkanalen. Hij is bedreven in het samenvoegen van artistieke visie met strategische marketing om impactvolle merkverhalen te creëren.

Reacties

Nog geen reacties. Wees de eerste.