Säkra ditt nätverk med Iptables - Proxy - NAT - IDS: DEL 1

Detta inlägg försöker klargöra lite om hur nätverk fungerar och hur vi kan förvandla vår Linux-utrustning till en router som garanterar lite mer vårt nätverk, oavsett om det är hemma eller till och med företag. Så låt oss börja:

Detta innehåll är baserat på boken "Linux - Systemadministration och drift av nätverkstjänster" - Sébastien BOBILLIER

Routing och filtrering

För att prata och förstå om routing kan vi först definiera vilken funktion routern har? För detta kan vi säga att en router, förutom att skapa ett nätverk och tillåta anslutning till annan utrustning (vet att vi kan göra detta med en AP, Switch, Hub eller andra) har förmågan att ansluta två olika nätverk till varandra.

router

Som vi kan se på bilden finns det ett lokalt nätverk "10.0.1.0" som skapas av routern och når ett av dess två gränssnitt. Då har routern på det andra gränssnittet ett annat nätverk med sin offentliga IP som den kan ansluta till Internet. Routing-funktionen är i grunden att fungera som en mellanhand mellan dessa två nätverk så att de kan kommunicera.

Linux som en router.

Naturligtvis har Linux-kärnan redan möjlighet att "vidarebefordra", men som standard är det inaktiverat, så om vi vill att vår Linux ska göra detta arbete måste vi gå till filen.

/proc/sys/net/ipv4/ip_forward

Där kommer vi att upptäcka att det är en fil som bara innehåller noll "0", vad vi måste göra är att ändra den till en "1" för att aktivera detta beteende. Detta raderas tyvärr när vi startar om datorn, för att låta den vara aktiverad som standard måste vi använda kommandot:

sysctl net.ipv4.ip_forward=1

Eller redigera den direkt i filen /etc/sysctl.conf. Beroende på distribution kan denna konfiguration också finnas i en fil i  /etc/sysctl.d/.

Som standard måste vår Linux ha en routingtabell, som i allmänhet är konfigurationen för vårt LAN-nätverk och anslutning till routern. Om vi ​​vill se denna routing kan vi använda två kommandon:

route -n

o

netstat -nr

Båda kommandona ska returnera samma.

Skärmdump från 2014-09-30 18:23:06

I allmänhet räcker den här konfigurationen för att din Linux ska fungera som en gateway och andra datorer kan navigera genom vår dator. Om vi ​​till exempel vill att Linux ska ansluta två eller flera nätverk, oavsett om det är lokalt eller inte, kan vi använda statiska rutter.

Anta att min Linux har två nätverksgränssnitt, den första har en internetanslutning vars nätverk är 172.26.0.0 och den andra (10.0.0.0) har vissa datorer från ett annat lokalt nätverk. Om vi ​​vill dirigera paket till det andra nätverket kan vi använda:

route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.26.0.8

I allmänhet är det:

route add -net REDDESTINO netmask MASCARA gw IPDELLINUX

om vi ger rutt -n oavsett om detta nätverk existerar eller inte, kommer denna routing att fixas i vår tabell.

Skärmdump från 2014-09-30 18:31:35

Om vi ​​vill eliminera den här routningen kan vi använda

route del -net 10.0.0.0 netmask 255.0.0.0

iptables.

I princip används iptables för att filtrera paket, utgående, inkommande eller andra, vilket gör det till ett utmärkt verktyg för att hantera vår nätverkstrafik. Tja, iptables, precis som det låter oss filtrera trafiken från samma dator, gör det också att vi kan filtrera den trafik som passerar genom den. (Spedition). Iptables kan delas in i tabeller, kedjor och åtgärder.

  • Styrelser:  i princip kan det finnas två bord, filtrera, för att filtrera paket och  nat att översätta adresser, det vill säga att flytta från ett nätverk till ett annat.
  • Kedjor: Kedjan hänvisar till den typ av trafik som vi vill filtrera eller simma, det vill säga på vilken trafik ska vi tillämpa tabellerna? och de kan vara:  INPUT: Inkommande trafik, PRODUKTION: utgående trafik eller FRAM: Trafik som passerar genom den, men det är inte en korrekt anslutning.
  • Det kan också visas EFTER-ROUTING, som används för att behandla paketet på ett visst sätt efter att det har routats.
  • åtgärder: Åtgärder är i grunden den åtgärd som ska utföras med kedjan. Denna åtgärd kan vara SLÄPPA, som förstör bara den trafiken eller ACCEPTERA. som gör att trafiken kan utföra den åtgärden.

IPTABLES-regler sparas och körs i den ordning de skapades, och om en regel raderar en tidigare regel tillämpas alltid den sista regeln i ordningen.

Brandväggspolicyer.

I allmänhet fungerar brandväggar naturligtvis på två sätt:

  1. Tillåt all trafik utom, eller
  2. Tillåt inte trafik utom ...

För att tillämpa policyer, använd IPTABLES - P ACTION CHAIN

Där strängen representerar typen av trafik (INPUT, OUTPUT, FORWARD, POSTROUTING ...) och åtgärden är DROP ELLER ACCEPT.

Låt oss titta på ett exempel.

Skärmdump från 2014-09-30 18:53:23

Här ser vi att jag först kunde pinga, sedan sa jag till IPTABLES att all UTGÅNGSTrafik var DROP eller inte tillåten. Sedan sa jag till IPTABLES att acceptera det.

Om vi ​​ska bygga en brandvägg från grunden måste vi alltid tillämpa reglerna för (Tillåt inte någon trafik utom ... För detta tillämpar vi reglerna

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Om dessa policyer gäller kommer de inte att ha någon typ av anslutning
.

För att återvända skriver vi samma och ersätter DROP med ACCEPT.

Vid denna punkt, eftersom all trafik nekas, börjar vi berätta för våra IPTABLES vilken trafik den kan ha.

Syntaksen är:

iptables -A cadena -s ip_orgigen -d ip_destino -p protocolo --dport puerto -j acción

Var:

Sträng = INGÅNG, UTGÅNG eller FRAMÅT

origin_ip = Ursprunget till paketen, detta kan vara en enda IP eller ett nätverk och i detta fall måste vi specificera masken).

destination_ip = vart paketen går. detta kan vara en enda IP eller ett nätverk och i detta fall måste vi ange masken).

protokoll = anger protokollet som används av paketen (icmp, tcp, udp ...)

port = målport för trafiken.

action = DROP eller ACCEPT.

Exempelvis:

Skärmdump från 2014-09-30 19:26:41

ALLA begränsade policyer gäller.

Skärmdump från 2014-09-30 19:27:42

Sedan lägger vi till reglerna för att kunna ha trafik genom port 80 HTTP och 443 HTTPS, med TCP-protokollet. Sedan port 53 Det tillämpas för DNS-klienten för att lösa domänerna, annars navigerar du inte. Detta fungerar med udp-protokollet.

Linjen:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Det beror på följande: När du till exempel gör en HTTP-begäran, ansluter du till port 80 på servern, men servern för att returnera informationen måste anslutas till dig via vilken port som helst. (Generellt sett mer än 1024).

Eftersom alla våra portar är stängda kommer detta inte att uppnås om vi inte öppnar alla portar högre än 1024 (dålig idé). Vad detta säger är att all inkommande trafik som kommer från en anslutning som jag upprättade själv accepteras. Jag menar, en anslutning som jag i princip startade.

När du placerar OUTPUT i reglerna gäller detta endast utrustningen i fråga. Om vi ​​använder vår utrustning som en router för att tillåta dessa anslutningar måste vi ändra OUTPUT till FORWARD. Eftersom trafik passerar genom datorn men inte initieras av den
Alla dessa regler raderas efter omstart, så du måste skapa skript så att de börjar som standard. Men vi kommer att se detta i nästa

Jag hoppas att du gillade den här informationen. I nästa kommer jag att prata om NAT, Proxy och skript för Firewal.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Rogelio pinto sade

    Detta är grunden som många företagare tar för att tillverka sina egna brandväggar, varför det finns så många märken av brandväggar med inbäddad Linux på marknaden, några bra och andra inte så mycket.

  2.   Heber sade

    Utmärkt artikel. Jag ser fram emot den andra delen.

  3.   Milton sade

    Mycket bra förklaring, det hjälpte mig att förstå proxyen för mitt arbete. Tack

  4.   faustod sade

    Hej Jlcmux,

    Utmärkt, jag gillade det verkligen, när blir den andra parten tillgänglig?

    Hälsningar och tack för delningen

    1.    @Jlcmux sade

      Tack för kommentaren.

      Jag skickade den andra delen igår, under dagen tror jag att de kommer att publicera den.

      Hälsningar.

  5.   Israel sade

    Mycket bra artikelvän @ Jlcmux, jag lärde mig verkligen med honom eftersom han klargjorde några tvivel som jag hade under en tid, förresten skulle du inte ha något emot att dela boken med källan till artikeln, den av Sébastien BOBILLIER, väl slau2s och nu till se den andra delen, salu2s.

    1.    @Jlcmux sade

      Hej Tack för att du kommenterade Israel.

      Det visar sig att jag har boken i fysisk form. Men jag hittade den här länken på Google Books. http://books.google.com.co/books?id=zxASM3ii4GYC&pg=PA356&lpg=PA356&dq=S%C3%A9bastien+BOBILLIER+Linux+%E2%80%93+Administraci%C3%B3n+del+sistema+y+explotaci%C3%B3n+de+los+servicios+de+red#v=onepage&q=

      Jag tror att det är komplett.

  6.   Ariel sade

    Mycket bra artikel, jag lägger till en fråga: Vad skulle vara fördelen med att använda Linux som en router, om det finns någon, med avseende på hårdvara som är dedikerad till den? Eller är det bara för träning? Jag vet att det finns dedikerade distros men jag vet inte om de ska rädda gamla datorer eller ge mer flexibilitet i konfigurationen.

    1.    @Jlcmux sade

      Jag tror att fördelarna och nackdelarna beror på scenariot där du ska genomföra detta. Varför ska du säkert inte köpa en UTM eller något liknande till ditt hus? Och kanske för ett litet företag som inte har råd med det heller. Det är också bra som en övning, eftersom det hjälper dig att förstå all logik i detta och du kan bättre konfigurera en dedikerad FWall. Utöver det är nästan alla dessa enheter verkligen inbäddad Linux.

      Hälsningar.

  7.   Ariel sade

    Hej, en fråga, kan du skapa ett "artificiellt" gränssnitt i Linux för liknande routing mellan nätverk? (paketspårningsstil) för att arbeta med virtuella maskiner? om jag t.ex. har eth0 (för jag har naturligtvis ett enda kort) kan jag skapa eth1 för att skapa ett annat nätverk? Mycket bra handledare!

    1.    livlig sade

      I Linux kan du naturligtvis skapa virtuella gränssnitt. Om du har eth0 kan du ha eth0: 0, eth0: 1, eth0: 2 ... etc.

  8.   chinoloco sade

    Så bra, tack för att du delar