iptables: Hoe de Linux-firewall te configureren om uw server te beschermen

iptables: Hoe de Linux-firewall te configureren

iptables is het firewall gebruikt op Linuxgebaseerde besturingssystemen. Hoewel we de afgelopen jaren standaard nftables hebben geïnstalleerd, kunt u nog steeds de iptables-syntaxis gebruiken om de firewall in ons besturingssysteem te configureren, zoals Debian, Ubuntu en zelfs de firewall van de router als deze op Linux is gebaseerd. Het kennen van iptables is erg belangrijk om ons lokale netwerk te beschermen tegen indringers, dit komt omdat iptables ons de mogelijkheid geeft om het verkeer dat we willen toe te staan ​​of te weigeren. Vandaag gaan we in dit artikel uitleggen hoe iptables werkt, en geavanceerde gebruiksvoorbeelden.

Belangrijkste kenmerken van iptables

iptables is software die verantwoordelijk is voor het optreden als firewall of firewall op ons netwerk. Het is een zeer belangrijk onderdeel van besturingssystemen en het is specifiek ontworpen om geautoriseerde toegang toe te staan ​​en ongeautoriseerde toegang te blokkeren. Een firewall zorgt voor een controlepunt, zowel inkomende als uitgaande pakketten. Daarnaast is het erg belangrijk om aan te geven dat een firewall wel beschermt tegen verkeer dat verschillende netwerken kruist, maar het lokale netwerk niet beschermt tegen aanvallen die plaatsvinden binnen hetzelfde subnet. .

iptables is de firewall die is opgenomen in Linux-systemen sinds versie 2.4, daarom is het standaard ingebouwd in systemen zoals Debian, Ubuntu, Linux Mint en vele andere, hoewel momenteel nftables intern wordt gebruikt, omdat iptables als oud wordt beschouwd, hoewel iptables tegenwoordig nog steeds veel gebruikt in de wereld van Linux-systeembeheer en ook in de wereld van netwerkbeheer.

Deze firewall heeft standaard verschillende tabellen gemaakt, met als doel de mogelijkheid om verschillende ketens en regels toe te voegen aanzienlijk te vergemakkelijken. Een heel belangrijk detail is dat we standaard alles hebben ingesteld op "accepteren", dat wil zeggen dat al het verkeer is toegestaan, er is geen regel om verkeer te weigeren, daarom is deze firewall in eerste instantie tolerant, maar we kunnen het standaardbeleid zeer wijzigen gemakkelijk en snel.

Zodra we de belangrijkste kenmerken kennen, laten we u de werking en architectuur van deze firewall zien.

Werking en architectuur

Deze firewall is gebaseerd op regels die we de een na de ander zullen invoeren, de werking ervan is gebaseerd op het toepassen van regels die de firewall zelf moet uitvoeren. Hoewel iptables in het begin misschien eenvoudig te gebruiken lijkt, is het ingewikkelder als je het op een geavanceerde manier wilt doen. Vervolgens kunt u een samenvattend schema zien van hoe iptables werkt.

De structuur van iptables is gebaseerd op tabellen, waarvan er vele standaard al zijn aangemaakt. Binnen de tabellen hebben we de strings, waarvan we er ook enkele standaard hebben gemaakt. Ten slotte hebben we binnen de ketens de verschillende regels die we kunnen configureren. Op de volgende foto ziet u een klein schema van hoe de architectuur van de firewall eruit zou zien:

Standaard hebben we in totaal vier tabellen:

  • filtertabel : het is de standaardtabel, als we geen tabel definiëren om een ​​regel toe te voegen, gaat deze altijd naar de filtertabel. In deze tabel hebben we in totaal drie standaardketens, afhankelijk van wat ons interesseert, zullen we de ene of de andere keten moeten gebruiken: INPUT (dit zijn de pakketten in de inkomende richting, naar de firewall zelf), OUTPUT (ze zijn de uitgaande pakketten, van de server naar buiten), en FORWARD (gebruikt om pakketten te filteren die van de ene netwerkinterface naar de andere gaan).
  • Nat tabel: deze tabel is verantwoordelijk voor het uitvoeren van de NAT, het transformeren van het privé-IP naar het openbare en vice versa. Binnen NAT hebben we drie ketens: PREROUTING (verandert pakketten voordat ze worden gerouteerd, hier wordt DNAT of port forwarding gedaan), POSTROUTING (verandert pakketten nadat ze zijn gerouteerd, hier wordt SNAT of MASQUERADE gedaan) en OUTPUT (pakketten gegenereerd door de firewall die de geconfigureerde NAT zal doorkruisen).
  • mangel tabel: deze tabel is verantwoordelijk voor het wijzigen van pakketten, het is waar QoS is geconfigureerd voor servicekwaliteit, het wijzigen van TCP-headers, enz. In deze tabel hebben we de vijf ketens: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
  • rauw table – Deze tabel wordt niet vaak gebruikt omdat pakketten reizen zonder verbindingsstatus. We hebben de keten PREROUTING en OUTPUT.

In de volgende afbeelding ziet u een kleine samenvatting van de kettingen die we in de verschillende tabellen hebben:

De bewerking bij het toevoegen van een regel is als volgt:

  • De regels die we aan de ketens toevoegen, hebben altijd een doel (-j in de regel).
  • Wanneer de firewall een pakket ontvangt, controleert het of het pakket overeenkomt met een regel die we hebben ingeschakeld. Als het overeenkomt, wordt het doelcommando uitgevoerd, anders gaat het naar de volgende regel tot het einde van de keten.
  • De regels worden gecontroleerd in een sequentiële volgorde, van de eerste regel tot de laatste. De volgorde is erg belangrijk, als we eerst alles blokkeren en dan iets specifiekers toestaan, blokkeren we al het verkeer en wordt de meest specifieke regel niet gecontroleerd.
  • In het geval dat geen enkele regel aan het pakket voldoet, wordt het beleid van de keten die we hebben (algemene regel) gebruikt.

De doelstellingen van de verschillende regels zijn de volgende:

  • ACCEPTEREN: accepteert het pakket en geeft het door naar het volgende niveau, een webserver, SSH, FTP enz.
  • DROP: blokkeert het pakket en geeft het niet door naar het volgende niveau.
  • WACHTRIJ: is een speciaal doel dat het pakket doorgeeft in een wachtrij die bedoeld is voor verwerking van gebruikersruimte. Dit kan worden gebruikt om andere externe programma's uit te voeren.
  • RETURN: heeft hetzelfde effect alsof we het einde van de keten hebben bereikt. Als de regel zich in een van de standaardketens bevond, wordt het beleid van de keten uitgevoerd. Voor een regel die zich in een door de gebruiker gedefinieerde keten bevindt, wordt deze verlaten en gaat door de keten vóór de sprong, net na de regel waarmee werd gesprongen.

Als we eenmaal weten hoe het werkt en zijn architectuur, gaan we verschillende commando's zien om verschillende acties uit te voeren.

 

Essentiële commando's om iptables te gebruiken

Het eerste waar we rekening mee moeten houden bij het configureren van deze firewall, is dat we superuser-permissies nodig hebben om de verschillende opdrachten uit te voeren. Het is absoluut noodzakelijk dat ze rennen, anders werkt het niet. De volgende commando's hebben geen "sudo" omdat we aannemen dat je al superuser (sudo su) bent.

In de nieuwste versies van Linux is het niet mogelijk om de iptables-service te stoppen, om al het netwerkverkeer toe te staan ​​en de firewall met de standaardparameters te laten, moeten we de volgende opdrachten uitvoeren:

  • sudo iptables-F
  • sudo iptables -X
  • sudo iptables -t nat -F
  • sudo iptables -t nat -X
  • sudo iptables -t mangel -F
  • sudo iptables -t mangel -X
  • sudo iptables -P INPUT ACCEPTEREN
  • sudo iptables -P VOORUIT ACCEPTEREN
  • sudo iptables -P UITVOER ACCEPTEREN

Zodra we dit hebben gedaan, zullen we de firewall laten "resetten" en alles toestaan. Nu we weten hoe we het moeten resetten, laten we eens kijken naar de verschillende commando's.

 

Bekijk huidige tabellen

Als je de inhoud wilt zien van de verschillende ketens en regels die we in een bepaalde tabel hebben, dan kun je zien hoe ze eruit zouden zien:

  • iptables -t filter –lijst
  • iptables -t mangel -lijst
  • iptables -t nat –lijst
  • iptables -t raw –lijst

 

Belangrijkste argumenten en waar ze voor zijn

  • -t, -tabel tafel Selecteer de tafel die we willen
  • -A, -add chain rule-specification We voegen een nieuwe regel toe in een bepaalde keten
  • -C, -check chain rule-specification We checken of er een bepaalde regel in een bepaalde keten zit
  • -D, -delete chain rule-specification We verwijderen de regel die we in een bepaalde keten plaatsen
  • -D, -delete chain rulenum We verwijderen het regelnummer X in een bepaalde keten
  • -I, -insert chain [regel] regelspecificatie We voegen een nieuwe ketting met een nummer in een bepaalde tabel in
  • -R, -replace chain rulenum rule-specification Vervangt een gegeven ketting in een tabel, gebruikt om het nummer te verplaatsen.
  • -L, –list [keten] Toon de lijst met regels van een keten
  • -F, –flush [keten] Spoel alle regels van een bepaalde keten.
  • -Z, –nul [keten [regel]] Zet de tellers van een bepaalde regel op 0.
  • -N, -nieuwe keten keten We maken een nieuwe keten in een bepaalde tabel
  • -X, -delete-chain [chain] We verwijderen een bepaalde keten (leeg) in een bepaalde tabel
  • -P, –beleidsketendoel We passen het standaardbeleid toe, het wordt vervuld wanneer geen enkele regel van de ketens wordt vervuld.
  • -E, -hernoem-keten oude-keten nieuwe-keten Hernoem een ​​eerder toegevoegde keten
  • -h, toon hulp
  • -v, –verbose Uitvoer gebruikt in combinatie met –L, om meer informatie weer te geven dan de opdracht –L biedt.
  • -n, –numerieke IP-adressen en poortnummers verschijnen als nummers. Als we bijvoorbeeld poort 80 filteren, verschijnt de typische -L www, en niet 80.
  • -x, –exact Toon de exacte waarde van het pakket en de byteteller, in plaats van K, M of G te gebruiken voor de waarden.
  • –regelnummers Wanneer de lijst met regels wordt weergegeven, wordt het exacte nummer van de regel weergegeven. Ideaal voor het gebruik van –D en het nummer (verwijderen) of –I om voor of na de regel in te voeren.

 

Belangrijkste voorwaarden

  • -p , –protocolprotocol. Filter het pakket op protocol, het gespecificeerde protocol kan zijn: tcp, udp, Idplite, icmp, esp, ah, sctp.
  • -s , –bronadres[/mask][,…] Bron IP-adres van het pakket. We kunnen een IP of een subnet hebben (met vermelding van het masker in CIDR-indeling). We kunnen ook hostnamen (domeinen, websites enz.) plaatsen, maar het is een slecht idee omdat het niet efficiënt is. Er kunnen meerdere bronadressen worden opgegeven (192.168.1.1,192.168.1.2), maar het zal verschillende regels creëren om hieraan te voldoen.
  • -d , –bestemmingsadres[/mask][,…] Bestemmings-IP-adres van het pakket. Het gedraagt ​​zich precies zoals -s.
  • -m , - wedstrijd wedstrijd. Geeft aan of we de uitgebreide modules van iptables willen aanroepen om bepaalde acties uit te voeren, zoals:
    • Plaats meerdere bron- en bestemmingspoorten (multipoortmodule).
    • Besturingsaansluitingen (conntrack-module).
    • Vermijd brute kracht (recente module, ideaal voor SSH).
    • Beperk het aantal verbindingen (modulo limit en connlimit).
    • IP-adresbereik (iprange).
  • -j , – doel springen. Specificeert het doel van de regel, als we het pakket willen accepteren, weigeren en zelfs doorsturen naar een andere keten voor verdere behandeling. In elke regel hebben we altijd een -j om te vertellen wat we willen doen. Als we geen -j toevoegen, wordt de regel toegevoegd en telt hij de pakketten, maar hij doet niets. Als we -j gebruiken om door te sturen naar een andere keten, keert de andere keten terug naar het origineel.
  • -g , -ga naar ketting. Het wordt gebruikt om het verkeer naar een andere ketting door te sturen, maar in tegenstelling tot springen, gaat het niet terug naar de oorspronkelijke ketting waar het binnenkwam.
  • -i , -in-interface naam. Naam van de interface via welke een pakket wordt ontvangen. Het werkt alleen voor invoerreeksen zoals INPUT, FORWARD en PREROUTING. Als we het zeggen, betekent het alles behalve die interface. Als we een + aan het einde van de naam plaatsen, zal elke interface met het begin van de naam deze ter controle pakken. Laten we ons eth0, eth1 en eth2 voorstellen. Als we ze alle drie willen plaatsen, volstaat het om gewoon eth+ te zetten.
  • -o , –out-interface naam. Naam van de interface waarlangs een pakket vertrekt. Het is alleen geldig voor uitvoerreeksen zoals OUTPUT, FORWARD en POSTROUTING.

 

Voorwaarden alleen als u TCP of UDP gebruikt

Als je het TCP- of UDP-protocol gebruikt, wil je misschien filteren op bron- en/of bestemmingspoortnummer, dan heb je de twee argumenten die je kunt gebruiken:

  • –sport –bron-poort. Selecteer bronpoorten om toe te staan ​​of te weigeren. Als we gebruiken! sluit uit.
  • –dport –bestemmingspoort. Selecteer bestemmingspoorten om toe te staan ​​of te weigeren. Als we gebruiken! sluit uit.

Er zijn veel meer voorwaarden voor een geavanceerde configuratie van de firewall, maar de elementaire hebben we al op een rijtje gezet.

 

Stel het standaardbeleid in

Beleid wordt gebruikt zodat wanneer een regel niet in de keten wordt gevonden, het standaardbeleid wordt uitgevoerd. Het standaardbeleid voor alle ketens is ACCEPT, maar er zijn twee opties: ACCEPT of DROP

-P, –doelstelling beleidsketen

Voorbeelden:

  • iptables -P INPUT DROP
  • iptables -P VOORUIT DROP
  • iptables -P UITVOER DROP

Hiermee zullen we geen internet meer hebben, dus nu moeten we beginnen met het maken van tolerante regels.

Hieronder ziet u al het beleid dat we hebben in de verschillende tabellen:

  • iptables -t filter -P (INPUT | OUTPUT | VOORUIT) (ACCEPTEREN | DROP)
  • iptables -P (INPUT | OUTPUT | VOORUIT) (ACCEPTEREN | DROP)
  • iptables -t mangle -P (INPUT | OUTPUT | FORWARD | PREROUTING | POSTROUTING) (ACCEPTEREN | DROP)

 

Firewallstatus bekijken

De parameter -L toont de regels die we hebben geconfigureerd. Met V kunt u meer informatie over de verbindingen ontvangen en N retourneert de IP-adressen en de bijbehorende poorten zonder een DNS server.

  • iptables -L -n -v

Dit is een van de belangrijkste commando's om de status van de firewall te zien.

 

Modules (-m match) van iptables

 

meerdere poorten

Het is een uitbreiding van iptables die ons de mogelijkheid geeft om vergelijkbare regels met verschillende TCP- en UDP-poorten in één te groeperen. Met Multiport kun je meerdere poorten overslaan, en ook meerdere poorten achter elkaar, het maximum is 15 poortargumenten. Voorbeeld:

  • iptables –A INPUT –p tcp –m meerdere poorten –dports 80,81,1000:1200 –j ACCEPTEREN

Dankzij deze module hebben we de mogelijkheid om meerdere poorten in dezelfde regel te gebruiken.

 

ipbereik

Met iprange kunnen we meerdere bron- of bestemmings-IP-adressen tegelijk plaatsen, zonder dat we tientallen regels hoeven te stellen. Het stelt u ook in staat om zowel het bron- als het bestemmings-IP te plaatsen, de syntaxis is als volgt:

  • [!]–src-bereik ip-ip
  • [!]–dst-bereik ip-ip

De werking van deze regel is vrij eenvoudig, we plaatsen gewoon het start-IP en het eind-IP.

 

Begrenzing

De connlimit-module is verantwoordelijk voor het beperken van het aantal gelijktijdige verbindingen gemaakt door een IP-adres, het is ideaal voor het beperken van het aantal verbindingen om DoS te vermijden.

  • –connlimit-tot n . We controleren of het aantal verbindingen gelijk is aan of kleiner is dan N (dan kunnen we toestaan ​​of weigeren).
  • –connlimit-boven n . We controleren of het aantal verbindingen groter is dan N (dan kunnen we toestaan ​​of weigeren).
  • –connlimit-masker prefix_length . We markeren op subnetbereik (het is hetzelfde als een host die 2 verbindingen maakt, twee hosts op hetzelfde subnet die elk 1 verbinding maken).
  • –connlimit-saddr . Pas de beperking toe op de brongroep, dit is de standaardinstelling als er niets is opgegeven.
  • –connlimit-daddr . Past de beperking toe op de doelgroep.

Laten we bijvoorbeeld zeggen dat we slechts twee SSH-verbindingen per client willen toestaan:

  • iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-boven 2 -j DROP

We kunnen echter de aanvullende regel maken en maximaal 2 verbindingen accepteren.

 

conntrack

Deze module wordt gebruikt om de verbindingen te volgen, het wordt gebruikt om de invoer en uitvoer van pakketten voor en na het tot stand brengen van de verbinding te beheren. Binnen deze module zijn er verschillende opties, maar de belangrijkste is -ctstate waarmee we verschillende soorten pakketten kunnen accepteren of weigeren. Binnen ctstate hebben we verschillende staten, de volgende vallen op:

  • ONGELDIG: het ontvangen pakket is ongeldig en hoort bij geen enkele verbinding.
  • NIEUW: Nieuwe verbindingen die worden gemaakt, of die zijn gekoppeld aan een verbinding die nog niet bidirectioneel is.
  • GEVESTIGD: Gevestigde verbindingen, ze doorlopen eerst NIEUW sinds ze een reactie hebben gehad
  • GERELATEERD: Een pakket dat gerelateerd is aan, maar geen deel uitmaakt van, een bestaande verbinding, zoals passieve FTP.

Laten we ons voorstellen dat we toegang willen tot elke site, maar we willen niet dat absoluut niemand toegang tot ons heeft.

  • iptables –P INGANG DROP
  • iptables -A INPUT -m conntrack –ctstate VASTGESTELD, GERELATEERD -j ACCEPTEREN

 

Begrenzing

Met de limietmodule kunnen we zowel het verkeer als het aantal logs beperken dat naar de syslog moet worden geschreven als verbindingspogingen. Het heeft twee hoofdargumenten:

  • –limiet N . Dit argument specificeert het maximale aantal gemiddelde overeenkomsten per seconde (N/s), minuut (N/m), uur (N/h) of dag (N/d) dat is toegestaan. N specificeert het nummer
  • –limiet-burst N . Geeft de langste burst aan die kan optreden voordat de limiet –limiet wordt gecontroleerd.

De standaardwaarde als er niets is opgegeven, is 3 overeenkomsten per uur, in bursts van 5. Stel je de volgende regel voor: "iptables -A INPUT -m limit -j LOG", de werking is als volgt:

  • De eerste keer dat deze regel wordt bereikt, worden de eerste vijf pakketten gelogd.
  • Daarna duurt het twintig minuten voordat een pakket opnieuw wordt geregistreerd met deze regel (3 overeenkomsten tussen 60 minuten is gelijk aan 20 minuten, aangezien het GEMIDDELDE is).
  • Elke twintig minuten die verstrijken zonder dat een pakket de regel bereikt, zal de burst ook een pakket ophalen.
  • Als er gedurende 100 minuten niets gebeurt, wordt de burst volledig opgeladen; dan terug naar de beginsituatie.

 

Recent

De recente module wordt gebruikt om het aantal verbindingen per seconde op IP-niveau te beperken, dit is ideaal om ons te beschermen tegen aanvallen op de SSH-poort omdat een aanvaller meerdere wachtwoorden zal proberen. Als we bijvoorbeeld onze SSH willen beschermen, kunnen we de volgende regel uitvoeren:

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NIEUW -m recent –set –name ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m status –status NIEUW -m recent –rcheck –seconden 60 –hitcount 4 –name ssh –rsource -j DROP

Deze regel staat slechts vier verbindingspogingen toe binnen 60 seconden, het is een "schuivend" venster.

 

NAT

Deze firewall is ook verantwoordelijk voor het NATeren van onze verbinding. Om de NAT van ons openbare IP-adres (of interface met dit openbare IP-adres) te maken, moeten we het volgende plaatsen:

  • Statische SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
  • Dynamische SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

De normale gang van zaken is om MASQUERADE te gebruiken om NAT te doen, ongeacht het IP-adres dat de fysieke of logische interface heeft.

Om poorten te openen, moeten we een regel toevoegen in de PREROUTING-keten van de NAT-tabel.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT –naar-bestemming 192.168.1.1

De PREROUTING-tabel stelt ons ook in staat om de poorten on-the-fly te wijzigen, zodat als we pakketten ontvangen op poort 2121, we deze kunnen transformeren naar 21.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT –naar-bestemming 192.168.1.1:21

Zodra we deze firewall in detail kennen, gaan we de basisvoorbeelden van gebruik zien en ook de meest geavanceerde.

 

Voorbeelden van basisgebruik

Deze firewall is zeer compleet en we hebben honderden commando's die we kunnen uitvoeren om verschillende acties uit te voeren. In dit artikel geven we u enkele gemakkelijk te begrijpen voorbeelden voor een eerste benadering van deze firewall.

Blokkeer het IP-adres 192.168.1.10 om enige communicatie met onze server te maken:

  • iptables -A INPUT –s 192.168.1.10 –j DROP

Blokkeer de IP-adressen 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 voor enige communicatie met onze server:

  • iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP

Blokkeer het hele 192.168.2.0/24-subnet van het maken van communicatie met onze server, behalve het 192.168.2.20 IP-adres, dat zou zijn toegestaan:

  • iptables –A INPUT –s 192.168.2.20 –j ACCEPTEREN
  • iptables –A INPUT –s 192.168.2.0/24 –j DROP

Blokkeer het IP-adres van 192.168.4.50 zodat we geen communicatie kunnen maken:

  • iptables –A UITGANG –d 192.168.4.50 –j DROP

Blokkeer de IP-adressen 192.168.4.51 en 192.168.4.52 zodat we geen communicatie kunnen maken:

  • iptables –A UITGANG –d 192.168.4.51,192.168.4.52 –j DROP

Blokkeer de toegang tot www.google.es vanuit iptables:

  • iptables –A UITVOER –d www.google.es –j DROP

We willen de toegang tot onze server blokkeren vanaf de MAC 00:01:02:03:04:05, en de rest staat alles toe:

  • iptables -A INPUT -m mac –mac-bron 00:01:02:03:04:05 -j DROP

We willen toegang tot onze server toestaan ​​tot het MAC-adres MAC 00:01:02:03:04:06, en de rest weigert alles:

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ACCEPTEREN
    iptables -A INPUT -j DROP

Blokkeer het IP-adres 192.168.1.10 voor pingen vanaf onze server:

  • iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP

Blokkeer IP-adressen 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 om onze server te pingen (in één regel):

  • iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP

Blokkeer het hele 192.168.2.0/24-subnet zodat ze onze server niet pingen, behalve het IP-adres 192.168.2.20, dat zou zijn toegestaan:

  • iptables -A INPUT -s 192.168.2.20 -p icmp -j ACCEPTEREN
    iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP

Blokkeer het IP-adres van 192.168.4.50 zodat we het niet kunnen pingen.

  • iptables -A UITVOER -d 192.168.4.50 -p icmp -j DROP

Blokkeer de IP-adressen 192.168.4.51 en 192.168.4.52 zodat we ze niet kunnen pingen.

  • iptables -A UITVOER -d 192.168.4.51,192.168.4.52 -p icmp -j DROP

Blokkeer de toegang tot www.google.es vanuit iptables.

  • iptables -A UITVOER -d www.google.es -p icmp -j DROP

Zoals je kunt zien, is de operatie vrij eenvoudig met de regels op basis van IP met herkomst en bestemming. We kunnen ook de iprange-module gebruiken om een ​​reeks IP's te configureren:

Blokkeer een reeks IP-adressen van 192.168.5.1 tot 192.168.5.50 om vanaf onze server te kunnen pingen.

  • iptables -A OUTPUT -m iprange –dst-bereik 192.168.5.1-192.168.5.50 -p icmp -j DROP

We kunnen het ICMP-protocol ook op een geavanceerdere manier filteren. Laten we ons voorstellen dat we een gebruiker hebben die elke host wil kunnen pingen, maar niet wil dat IEDEREEN hem kan pingen. Hoe kunnen we het doen met iptables als PING zelf bidirectionele communicatie heeft?

  • iptables -A INPUT -s IP -p icmp –icmp-type echo-request -j DROP

Blokkeer alle inkomende toegang via de eth0-interface (alleen), waardoor eth1-toegang wordt toegestaan.

  • iptables -A INPUT -i eth0 -j DROP
  • iptables -A INPUT -i eth1 -j ACCEPTEREN

Blokkeer uitgaand verkeer op de eth0-interface (alleen), waardoor eth1 toegang wordt verleend.

  • iptables -A UITVOER -o eth0 -j DROP
  • iptables -A OUTPUT -o eth1 -j ACCEPTEREN

Sta elk inkomend en uitgaand verkeer toe op eth0, en weiger elk inkomend of uitgaand verkeer op eth1.

  • iptables -A INPUT -i eth0 -j ACCEPTEREN
  • iptables -A OUTPUT -o eth0 -j ACCEPTEREN
  • iptables -A INPUT -i eth1 -j DROP
  • iptables -A UITVOER -o eth1 -j DROP

Als u wilt zien hoe het TCP- en UDP-protocol werken, volgen hier enkele voorbeelden:

Blokkeer webtoegang tot www.google.es en sta bijvoorbeeld al het andere toe (ping).

  • iptables -A UITVOER -d www.google.es -p tcp –dport 80 -j DROP

Blokkeer FTP-toegang tot elk IP-adres of domein en sta al het andere toe.

  • iptables -A UITVOER -p tcp –dport 21 -j DROP

Blokkeer SSH-toegang tot IP 192.168.1.50 en sta al het andere toe.

  • iptables -A UITVOER -d 192.168.1.50 -p tcp –dport 22 -j DROP

Blokkeer Telnet-toegang tot het 192.168.2.0-subnet en sta al het andere toe.

  • iptables -A UITVOER -d 192.168.2.0/24 -p tcp –dport 23 -j DROP

Blokkeer 192.168.1.50 toegang tot onze webserver.

  • iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP

Blokkeer 192.168.1.150 en 192.168.1.151 toegang tot onze SSH-server.

  • iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP

Blokkeer de toegang van het volledige 192.168.2.0/24-subnet tot onze telnet-service

  • iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP

Blokkeer ieders toegang tot de OpenVPN-server, behalve het IP-adres 77.77.77.77 dat is toegestaan.

  • iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j ACCEPTEREN
  • iptables -A INPUT -p tcp –dport 1194 -j DROP

Blokkeer DNS-toegang tot 8.8.8.8 en sta bijvoorbeeld al het andere toe (ping).

  • iptables -A UITVOER -d 8.8.8.8 -p tcp –dport 53 -j DROP
  • iptables -A UITVOER -d 8.8.8.8 -p udp –dport 53 -j DROP

Blokkeer de toegang tot poort 1194 voor elk IP-adres of domein en sta al het andere toe.

  • iptables -A INPUT -p udp –dport 1194 -j DROP

We hebben een DNS-server op onze server. We willen dat alleen computers op het 192.168.1.0/24-subnet ermee kunnen communiceren en alle andere toegang blokkeren.

  • iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j ACCEPTEREN
  • iptables -A INPUT -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPTEREN
  • iptables -A INPUT -p tcp –dport 53 -j DROP
  • iptables -A INPUT -p udp –dport 53 -j DROP

Blokkeer de toegang tot onze webserver, vanaf het IP-bereik 192.168.100.0/24, afkomstig van de eth0-interface.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP

Blokkeer de toegang tot onze ssh-server, vanaf het IP-bereik 192.168.100.0/24, afkomstig van de eth1-interface.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP

 

Geavanceerde gebruiksvoorbeelden

Als je meer wilt weten over iptables, zijn hier enkele voorbeelden waarbij we gebruik maken van de connlimit-module.

Sta slechts 10 Telnet-verbindingen per client toe.

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-boven 10 –connlimit-mask 32 -j DROP

Weiger tot verbinding nummer 5 op het web gemaakt door een klant (het slaat nergens op, maar het is een voorbeeld).

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-tot 5 –connlimit-mask 32 -j DROP

Sta slechts 10 Telnet-verbindingen per client toe (doe het anders dan hierboven).

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-upto 10 –connlimit-mask 32 -j ACCEPTEREN
  • iptables -A INPUT -p tcp –dport 23 -j DROP

Sta slechts 10 webverbindingen toe in het 10.0.0.0/8 IP-bereik en weiger het als dit aantal wordt overschreden.

  • iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m connlimit –connlimit-boven 10 –connlimit-mask 8 -j DROP

Sta slechts 20 HTTP-verbindingen toe voor elke client, zodra deze wordt overschreden, sturen we een TCP-reset.

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-boven 20 –connlimit-mask 32 -j REJECT –reject-met tcp-reset

Of op deze manier:

  • iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-boven 20 –connlimit-mask 32 -j REJECT –reject-met tcp-reset

Zoals u kunt zien, is deze firewall echt compleet en kunnen we veel zeer geavanceerde configuraties doen om alle inkomende en uitgaande verbindingen tot in detail te controleren.