Leid verkeer om van de ene IP en poort naar een andere IP en poort

Iets heel gebruikelijk bij het beheren van servers is het omleiden van verkeer.

Stel dat we een server hebben waarop bepaalde services draaien, maar om welke reden dan ook wijzigen we een van die services (Ik weet het niet, bijvoorbeeld pop3, dat is poort 110) naar een andere server. Het normale en meest voorkomende zou zijn om eenvoudig het IP-adres in het DNS-record te wijzigen, maar als iemand het IP-adres gebruikte in plaats van het subdomein, zal dit worden beïnvloed.

Wat moeten we doen? ... eenvoudig, leid het verkeer dat de server via die poort ontvangt, om naar een andere server met dezelfde poort.

serverknooppunt-lan-ethernet

Hoe beginnen we met het omleiden van verkeer?

Het eerste is dat we het expeditie op de server, hiervoor zullen we het volgende plaatsen:

echo "1" > /proc/sys/net/ipv4/ip_forward

Alle opdrachten die in deze tutorial worden getoond, moeten worden uitgevoerd met beheerdersrechten, ik raad aan ze rechtstreeks met de rootgebruiker uit te voeren.

U kunt ook deze andere opdracht gebruiken, voor het geval de vorige niet voor u werkt (het is mij zo overkomen op een CentOS):
sysctl net.ipv4.ip_forward=1
Daarna zullen we het netwerk herstarten:

service networking restart

In RPM-distributies zoals CentOS en anderen zou het zijn:

service nertwork restart

Nu gaan we verder met het belangrijkste: vertel de server door iptables wat om te leiden:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

Met andere woorden, en volgens het voorbeeld dat ik noemde, stel dat we al het verkeer dat onze server ontvangt via poort 110 willen omleiden naar een andere server (bijv .: 10.10.0.2), die dat verkeer nog steeds via 110 (het is dezelfde dienst):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

De 10.10.0.2-server zal zien dat alle pakketten of verzoeken afkomstig zijn van het IP-adres van de klant, voor het geval ze de verzoeken willen zwemmen, dat wil zeggen dat de 2e server ziet dat de verzoeken binnenkomen met het IP-adres van de 1e server (en in de waarop we de omleiding toepassen), zou het ook zijn om deze tweede regel te plaatsen:

iptables -t nat -A POSTROUTING -j MASQUERADE

Enkele vragen en antwoorden

In het voorbeeld heb ik bij beide gelegenheden dezelfde poort gebruikt (110), maar ze kunnen het verkeer zonder problemen van de ene poort naar de andere omleiden. Stel dat ik verkeer van poort 80 naar 443 op een andere server wil omleiden, hiervoor zou het zijn:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

namelijk iptables, kunnen ze alle andere parameters gebruiken die we kennen, als we bijvoorbeeld alleen verkeer van een specifiek IP-adres willen omleiden, zou dit -s zijn ... Ik zal bijvoorbeeld alleen het verkeer omleiden dat afkomstig is van 10.10.0.51:

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Of een heel netwerk (/ 24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

We kunnen ook de netwerkinterface specificeren met -i :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Het einde!

Dit zoals ik al zei, is iptables, je kunt toepassen wat al bekend is, zodat de server precies doet wat je wilt dat hij doet 😉

Groeten!

DedicatedServer_SubImage


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Fer zei

    We kunnen dit ook doen vanaf een firewall die port forwarding mogelijk maakt, toch? (toepassing van de bijbehorende regels).

    1.    KZKG ^ Gaara zei

      Ja natuurlijk, uiteindelijk gebruikt een firewall zoals Pfsense of anderen iptables van achteren.

      1.    djager zei

        Om precies te zijn, pfsense gebruikt geen iptables maar pf, onthoud dat het een bsd van binnen is.

        1.    KZKG ^ Gaara zei

          Oh juist, mijn slechte!

  2.   Nicolas zei

    Heel erg bedankt voor de tip 🙂

    Ik heb een paar twijfels:
    1 - Is de wijziging permanent? of gaat het verloren bij het herstarten van de server?
    2 - Ik heb meerdere instanties (bijvoorbeeld A, B en C) op hetzelfde subnet. In voorbeeld A pas ik de regel toe om verkeer naar een extern IP-adres te routeren, en door te testen met curls van instanties B en C, werkt alles wonderen. Het probleem is dat het vanaf instantie A niet werkt. Ik heb geprobeerd zowel je ip- als de loopback-interface te gebruiken, en geen van beide werkt:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –naar-bestemming xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –naar-bestemming xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) Kan geen verbinding maken met ip-yyyy-poort 8080: Verbinding geweigerd
    $ curl localhost: 8080 / hello_world
    curl: (7) Kan geen verbinding maken met localhost-poort 8080: Verbinding geweigerd

    Enig idee wat het probleem kan zijn?

    1.    KZKG ^ Gaara zei

      Ja, de wijziging gaat verloren bij het opnieuw opstarten, u zult iptables-save & iptables-restore of iets dergelijks moeten gebruiken om dat te voorkomen.
      Ik begreep niet helemaal wat je wilt doen, bijvoorbeeld A?

      1.    Nicolas zei

        Ik heb een server die alleen verbindingen van een bepaald IP-adres ondersteunt (server A's), ik kan of wil niet meer ips aan de witte lijst toevoegen (vanwege schaalbaarheidsproblemen), dus ik wil dat al het verkeer naar de externe server doorgaat genoemde server (A).
        Om praktische redenen heb ik globale configuraties die bepalen welk IP-adres voor elke service moet worden gebruikt, dus in dit geval is het zoiets als "iedereen die de externe service wil gebruiken, moet IP A gebruiken"
        Dit wordt met succes bereikt met behulp van de methode in dit artikel, maar ik kom het probleem tegen dat server A bij het toepassen geen toegang heeft tot de service met zijn eigen ip (maar alle andere servers).
        Tot dusverre was het beste dat ik vond om de toewijzing toe te voegen in het bestand / etc / hosts van server A, wijzend naar het externe ip-adres, waarbij de algemene instelling werd overschreven.

  3.   braybaut zei

    Heel goed, als ik een andere mailserver heb, zou ik het verkeer van poort 143 van server1 naar server2 kunnen doorsturen en de e-mails zullen mij op server2 bereiken, toch?

    groeten

    1.    KZKG ^ Gaara zei

      In theorie werkt het zo. Natuurlijk moet de mailserver correct zijn geïnstalleerd op server2 🙂

  4.   msx zei

    Het soort berichten dat we graag lezen, bedankt!

  5.   Abraham Ibarra zei

    Uitstekend artikel, ik heb een project waarin ik werk en ik wilde je een vraag stellen, er zijn industriële switches met NAT-functie (ik neem aan dat ze IPTables hieronder gebruiken), om een ​​IP-adres te vertalen zonder wijzigingen aan de apparatuur aan te brengen, een voorbeeld, ik heb een server 10.10.2.1 die communiceert met 10.10.2.X computers en via de switch zo is geprogrammeerd dat een computer met adres 192.168.2.4 daadwerkelijk vanaf de server wordt gezien als 10.10.2.5, het vertaalde dat IP-adres om gezien te worden Vanaf de andere computers met dat adres, ik wil het doen vanaf een server met Ubuntu of een andere distributie, wat zouden de iptables-regels zijn?

  6.   Kuku zei

    Zeer goede info bedankt ^ _ ^

  7.   jezus zei

    Goedemiddag.
    Ik heb een probleem met het proberen een omleiding uit te voeren. Ik leg uit:
    Ik heb een proxyserver in Ubuntu, met 2 netwerkkaarten:
    eth0 = 192.168.1.1 is verbonden met de rest van het lokale netwerk.
    eth1 = 192.168.2.2 is verbonden met de router.
    Ik heb alles nodig dat via eth0 komt om door eth1 te gaan, en ook via de proxy (ik gebruik Squid, waarvan de standaardpoort 3128 is), en ik kan de sleutel niet vinden in de IPTABLES-configuratie.
    Ik heb geen enkele beperking nodig, alleen dat er een record achterblijft in het logboek van de webadressen die worden bezocht.

    Ik hoop dat je me kunt helpen, want het is een behoorlijk omslachtige taak die me al een paar dagen zorgen baart.

    Dank u.

  8.   Gabriel zei

    Vriend, ik ben erg nieuw op andere servers, ik heb geen idee maar ik begrijp het onderwerp en ik leer snel, mijn vraag is de volgende ik heb 2 servers serv_1 en serv_2 die ik heb verbonden met hetzelfde intranet, in deze servers heb ik een eigen cloud opgezet, Ik zou het volgende willen doen:

    dat een bepaald bereik van ips bijvoorbeeld rangeip_1 bij het plaatsen van een access ip naar de owncloud (ipowncloud) naar de serv_1 wordt gericht en als het een andere rangeip_2 is die is geplaatst, wordt dezelfde ipowncloud naar de serv_2 gestuurd, dit om de 2 servers te lokaliseren in twee verschillende steden en de IP-bereiken zijn verschillend maar ze bevinden zich allemaal op hetzelfde netwerk, dat zou het eerste deel zijn, het tweede zou duidelijk zijn om deze 2 servers te synchroniseren zodat ze mirrors zijn of dat ze mij dit adviseren om de breedte te optimaliseren band, alsjeblieft, als je me gaat uitleggen hoe je het stap voor stap moet doen, niet naar super programmeermodus = (

  9.   Antonio Carrizosa zei

    Hallo, neem me niet kwalijk, ik heb een schakelaar die verantwoordelijk is voor de communicatie van alle apparaten waaruit mijn netwerk bestaat, en daarna een firewall en ten slotte de internetuitgang, wat er gebeurt is dat ik zou willen dat de omleiding wordt gegeven in de switch en hoeft de firewall niet te bereiken, tenzij de gevraagde dienst internet is.

  10.   John zei

    Kunt u met deze methode HTTPS omleiden naar HTTP?

  11.   mati zei

    Hallo, misschien is het een beetje laat, maar ik wilde je vragen, hoe moet ik ervoor zorgen dat squid het IP-adres van de client niet wijzigt als ik verbinding wil maken met een webserver op hetzelfde netwerk?

  12.   lafat32 zei

    Behandel me niet slecht als ik het vraag. Kan dit worden gedaan in Windows?

  13.   Martin zei

    Deze informatie is nuttig voor mij geweest. Zoals altijd zijn jullie te vertrouwen, als ik iets in het Engels niet kan vinden, zoek ik meestal in het Spaans, bij die gelegenheden kom ik bijna altijd naar deze site.

  14.   Seba zei

    Ik heb een 4G-router die een client is van een netwerk dat ik niet beheer (uiteraard ben ik een client) ... deze router is een gateway naar dat externe netwerk via OpenVPN. Bovendien vervult genoemde router de functie van portforwarding om toegang te krijgen tot poort 80 van de server van een van die subnetten in het veld.

    Dit was de verklaring die ik in de router moest plaatsen als een aangepaste firewallregel «-t nat -A POSTROUTING -j MASQUERADE»

    Bedankt voor de hulp!