Hoe iptables werkt. Hieronder staan ​​de opdrachten en parameters van het hulpprogramma iptables. Web- en bestandsservices

Elke computer die op het netwerk is aangesloten, loopt potentieel gevaar. Er zijn veel bedreigingen op het netwerk, variërend van programma's die op welke manier dan ook proberen het systeem binnen te dringen, tot hackers die toegang willen krijgen tot de computer die ze nodig hebben. En de software die op uw computer is geïnstalleerd, kan onbekende en niet-gecorrigeerde kwetsbaarheden bevatten, die een beveiligingslek kunnen vormen.

Als dit niet erg relevant is voor thuiscomputers, omdat ze via routers en NAT met het netwerk zijn verbonden, waardoor ze voor het externe netwerk worden verborgen, dan is dit voor servers relevanter dan ooit. In de operatiekamer Linux-systeem Een zeer flexibele en betrouwbare iptables-firewall is in de kernel ingebouwd.

Met behulp van dit programma wordt het systeem beschermd tegen externe inbraken, poortomleiding en vele andere acties met verkeer. Maar het nadeel is dat het een beetje moeilijk is om op te zetten. In dit artikel wordt gekeken naar het opzetten van iptables voor dummies. Ik hoop dat je hierna met vertrouwen de basismogelijkheden van iptables kunt gebruiken.

Het subsysteem iptables en Netfilter zijn al geruime tijd in de Linux-kernel ingebouwd. Alle netwerkpakketten die door de computer gaan, door de computer worden verzonden of voor de computer bestemd zijn, worden door de kernel door het iptables-filter geleid. Daar kunnen deze pakketten worden gecontroleerd en vervolgens wordt voor elke controle, als deze wordt doorstaan, de daarin gespecificeerde actie uitgevoerd. Het pakket wordt bijvoorbeeld doorgegeven aan de kernel om te worden verzonden doelprogramma, of weggegooid.

Soorten pakketten

Alle pakketten zijn onderverdeeld in drie typen: inkomend, uitgaand en passerend. Inkomend zijn de berichten die naar deze computer zijn verzonden, uitgaand zijn de berichten die van deze computer naar het netwerk zijn verzonden. En passerende pakketten zijn pakketten die simpelweg verder moeten worden doorgestuurd, bijvoorbeeld als uw computer als router fungeert.

Dienovereenkomstig worden in het iptables-filter alle pakketten verdeeld in drie vergelijkbare ketens:

  • Invoer- verwerkt inkomende pakketten en verbindingen. Als een externe gebruiker bijvoorbeeld via ssh verbinding met uw computer probeert te maken, stuurt een website de inhoud ervan naar u op verzoek van de browser. Al deze pakketten komen in deze keten terecht;
  • vooruit- deze ketting wordt gebruikt voor het doorgeven van verbindingen. Dit omvat pakketten die naar uw computer worden verzonden, maar daar niet voor bedoeld zijn; ze worden eenvoudigweg via het netwerk naar hun bestemming verzonden. Zoals ik al zei, wordt dit waargenomen op routers of bijvoorbeeld als je computer wifi distribueert;
  • uitgang- Deze keten wordt gebruikt voor uitgaande pakketten en verbindingen. Dit omvat pakketten die zijn gemaakt toen u probeerde een site te pingen of wanneer u uw browser start en een site probeert te openen.

Maar als u denkt dat u de invoerketen eenvoudigweg volledig kunt sluiten om de veiligheid te vergroten, dan vergist u zich ernstig. Wanneer het netwerk functioneert, worden zowel input- als outputketens gebruikt. Als u bijvoorbeeld probeert te pingen, worden de gegevens via uitvoer verzonden, maar komt het antwoord via invoer. Hetzelfde gebeurt bij het surfen op websites en andere activiteiten. Maar de voorwaartse keten wordt mogelijk helemaal niet gebruikt als uw computer geen router is. Het configureren van iptables moet dus zeer zorgvuldig gebeuren.

Regels en acties

Voordat u verdergaat met het maken van een lijst met iptables-regels, moet u overwegen hoe ze werken en wat ze zijn. Voor elk type pakket kunt u een reeks regels instellen die achtereenvolgens worden gecontroleerd op naleving van het pakket. Als het pakket overeenkomt, wordt de actie die in de regel is gespecificeerd daarop toegepast. Regels vormen een keten, dus input, output en forward worden ketens genoemd, ketens van regels. Er kunnen verschillende acties zijn:

  • AANVAARDEN- laat het pakket verder langs de keten van regels gaan;
  • DRUPPEL- verwijder het pakket;
  • AFWIJZEN- het pakket weigeren, er wordt een bericht verzonden naar de afzender dat het pakket is afgewezen;
  • LOGBOEK- maak een aantekening over het pakket in het logbestand;
  • WACHTRIJ- stuur het pakket naar de gebruikersapplicatie.

Regels kunnen eventuele overeenkomsten controleren, bijvoorbeeld op IP, op ontvanger- of afzenderpoort, pakketheaders en nog veel meer. Als een pakket niet aan een van de regels voldoet, wordt daarop de standaardactie toegepast, meestal ACCEPTEREN.

Als we de regels hebben bedacht, kunnen we terug naar de ketens. Naast de hierboven genoemde regels zijn er nog twee aanvullende regels:

  • voorrouteren- het pakket komt deze keten binnen voordat het door iptables wordt verwerkt, het systeem weet nog niet waar het naartoe zal worden gestuurd, om in te voeren, uit te voeren of door te sturen;
  • postrouting- alle passerende pakketten die de voorwaartse keten al zijn gepasseerd, gaan hier naartoe.

Maar dat is niet alles. We hebben ook iptables-tabellen, waar we ook mee willen omgaan.

ipatables-tabellen

Boven de regelketens in iptables is er nog een ander abstractieniveau, en dit zijn tabellen. Er zijn verschillende tabellen in het systeem en ze hebben allemaal standaard ingesteld ketens input, forward en output. Tabellen zijn ontworpen om verschillende acties op pakketten uit te voeren, zoals wijziging of filtering. Nu is dit niet zo belangrijk voor u en het zal voldoende zijn om te weten dat de pakketfiltering van iptables wordt uitgevoerd in de filtertabel. Maar we zullen ze allemaal bekijken:

  • rauw- ontworpen om met onbewerkte pakketten te werken voordat ze zijn verwerkt;
  • mangel- bedoeld voor wijziging van pakketten;
  • nat- biedt nat-functionaliteit als u uw computer als router wilt gebruiken;
  • filter- de hoofdtabel voor het filteren van pakketten, die standaard wordt gebruikt.

Bijna alles met de theorie, laten we nu naar het nut kijken opdrachtregel iptables, dat wordt gebruikt om het iptables-systeem te beheren.

Iptables-hulpprogramma

Het subsysteem iptables en netfilter zijn in de kernel ingebouwd, maar een set hulpprogramma's om dit allemaal te beheren wordt niet altijd bij het systeem geleverd. Om het hulpprogramma op Ubuntu te installeren, typt u:

sudo apt installeer iptables

En op Fedora-gebaseerde distributies wordt het installeren van iptables iets anders gedaan:

sudo yum installeer iptables

Zodra de iptables-installatie is voltooid, kunt u doorgaan met de configuratie, maar laten we eerst eens kijken naar de syntaxis van het hulpprogramma. Meestal heeft het commando zoiets als dit algemene vorm:

-t tafelactieketen Extra opties

Laten we nu eens kijken iptables-parameters, table specificeert de tabel waarmee moet worden gewerkt, deze parameter kan worden weggelaten, de actie is Vereiste actie U kunt bijvoorbeeld een regel maken of verwijderen, en aanvullende parameters beschrijven de uit te voeren actie en regel.

Rest ons nog de belangrijkste acties te overwegen die u met iptables kunt uitvoeren:

  • -A- voeg een regel toe aan de keten;
  • -MET- controleer alle regels;
  • -D- verwijder de regel;
  • -I- voeg een regel in met het gewenste nummer;
  • -L- toon alle regels in de huidige keten;
  • -S- toon alle regels;
  • -F- maak alle regels duidelijk;
  • -N- creëer een keten;
  • -X- verwijder de keten;
  • -P- stel de standaardactie in.

Extra opties voor regels:

  • -P- specificeer het protocol, een van tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
    mh;
  • -S- specificeer het IP-adres van het apparaat dat het pakket verzendt;
  • -D- geef het IP-adres van de ontvanger aan;
  • -i- invoer netwerkinterface;
  • -O- uitgaande netwerkinterface;
  • -J- selecteer een actie als de regel overeenkomt.

Nu kunt u verder gaan met het bekijken van voorbeelden van hoe iptables is geconfigureerd.

Iptables-configuratievoorbeelden

We zullen een paar basisvoorbeelden bekijken, zodat u kunt versterken wat u hierboven heeft gelezen.

Lijst met regels

Laten we eerst eens kijken hoe we de iptables-regels kunnen bekijken, hiervoor is de optie -L voldoende:

U kunt ook de gewenste keten opgeven, zodat alleen de regels daarvoor worden weergegeven:

iptables -L INPUT

Regels opruimen

U kunt iptables niet eenvoudigweg uitschakelen door de iptables-regelupdateservice via systemd te stoppen of zelfs door de set configuratiehulpprogramma's te verwijderen. Het subsysteem werkt op kernelniveau en is niet afhankelijk van wat u daar hebt geïnstalleerd. Daarom, als u iets verkeerd doet, moet u de regels duidelijk maken. Voer hiervoor het volgende uit:

Of alleen voor een specifieke keten:

sudo iptables -F Invoer

Ik wil u eraan herinneren dat al deze acties worden uitgevoerd voor het standaardtabelfilter.

Standaardregels

Zoals ik al zei: als geen enkele regel overeenkomt met een pakket, wordt de standaardactie daarop toegepast. Het kan worden opgegeven met de optie -p:

sudo iptables -p INPUT ACCEPT
$ sudo iptables -p UITVOER ACCEPTEREN
$ sudo iptables -p VOORWAARTSE DROP

In dit voorbeeld staan ​​we INPUT- en OUTPUT-ketens toe, maar schakelen we FORWARD uit.

Pakketblokkering

Om pakketten te blokkeren kunnen we de DROP-actie gebruiken; we kunnen pakketten filteren die moeten worden geblokkeerd op basis van veel criteria, bijvoorbeeld protocol, IP-adres, netmasker, poort en nog veel meer.

Dit is hoe het commando eruit zal zien, waarmee je een iptables-regel kunt toevoegen om alle inkomende pakketten vanaf 10.10.10.10 te blokkeren:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

En nu uitgaande pakketten naar hetzelfde adres:

Het blokkeren van het IP-bereik gebeurt op een vergelijkbare manier. Om dit te doen, moet u het netwerkmasker 10.10.10.0/24 gebruiken. Dit zijn alle adressen vanaf 10.10.10.0 tot 10.10.10.255:

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

Of een uitgebreide versie van het masker:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Je kunt ook alle inkomende ssh-verbindingen blokkeren:

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Zoals u kunt zien, is het toevoegen van een iptables-regel heel eenvoudig.

Regels verwijderen

Het verwijderen van iptables-regels gebeurt op dezelfde manier als het maken van nieuwe regels, alleen moet je in plaats van optie A optie D gebruiken. Kijk eerst naar de lijst met regels:

Zo kunt u bijvoorbeeld de iptables-regel verwijderen die als tweede is gemaakt:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Je kunt iptables ook volledig wissen door de opdracht uit te voeren met de optie -F:

Er zijn een aantal oplossingen voor het opzetten van een firewall op Linux, maar veel ervan zijn eigenlijk alleen maar frontends voor het opzetten van iptables, en sommige zijn niet helemaal succesvol. In principe is het fijn om snel een firewall in te kunnen stellen, maar als je eenmaal de iptables onder de knie hebt, kun je het sneller en fijner doen. Het verfijnen van iptables is meestal niet beschikbaar voor frontends.

Laten we beginnen. Laten we beginnen met een eenvoudige, en dan zullen we de configuratie ingewikkelder maken. Hier op de site staat al een artikel over het automatisch laden van iptables-regels, dus we zullen nu niet nadenken over het laden van regels, maar ons concentreren op de regels zelf. De firewall wordt altijd geconfigureerd onder het root-account.

Netwerkverbindingsscenario's

Voordat u een firewall instelt, moet u goed weten wat netwerk connecties en hoe ze moeten worden geïnstalleerd tijdens de werking van het systeem, zodat alle services normaal kunnen werken. Hoe nauwkeuriger ons beeld van het werk netwerkdiensten, zowel werkend op onze server als op andere servers, hoe fijner het systeem kan worden geconfigureerd. Daarom is het raadzaam om altijd eerst de scenario’s te beschrijven hoe alles zou moeten werken, en pas daarna te beginnen met het instellen van de firewall. Het script kan in elk teksteditor. Eerst beschrijven we alle externe services waarmee de server werkt, en vervolgens alle services die op de server draaien. Waarom is dit nodig? Het werkproces zelf accuraat weergeven, zonder zich te verdiepen in het technische gedeelte. Nadat u het meest nauwkeurige script heeft geschreven, kunt u beginnen met het instellen van de firewall. De scriptbeschrijving zou er ongeveer zo uit moeten zien:

1) Alle gebruikers kunnen de site bekijken. Standaard is de site in het Russisch.
2) Als gebruikers afkomstig zijn van adressen<список-адресов-или-маска-подсети>, dan moeten ze de site in het Oekraïens te zien krijgen. In ons voorbeeld is dit bijvoorbeeld een online winkel met één domeinnaam, weergegeven in het Russisch of Oekraïens, en met een eigen set te koop voor Rusland en Oekraïne. We zullen eenvoudigweg twee sites hebben, één in het Russisch, de tweede in het Oekraïens, en het adres waar de klant vandaan komt, zal bepalen naar welke site hij zal gaan. Het voorbeeld komt uit mijn hoofd; in de praktijk worden dergelijke vraagstukken natuurlijk anders opgelost. U kunt ook niet toestaan ​​dat de site wordt bekeken Chinese adressen vanwege constante spam in reacties in het Chinees.
3) Post moet toegankelijk zijn vanaf het kantoor; deze mag niet toegankelijk zijn vanaf andere plaatsen.
4) Het moet mogelijk zijn om van buitenaf verbinding te maken met een VPN
5) We kunnen slechts een paar DNS-servers gebruiken die we vertrouwen. Alle andere DNS-servers zouden niet beschikbaar moeten zijn
6) …..

Enzovoort. Ik denk dat dat genoeg is voor eenvoudig voorbeeld. Het gaat erom het beeld van netwerkinteractie zo nauwkeurig mogelijk te bepalen. Elk script heeft maar één doel: de interactie met gebruikers en diensten formaliseren voordat verbindingsbeschrijvingen worden opgesteld, inclusief poort, protocol, bronadres en bestemmingsadres voor elke verbinding.

IPtables instellen: de eenvoudigste configuratie

Als we het over gevechtsservers hebben, kunnen de firewall-instellingen op twee servers sterk variëren, afhankelijk van de taken die deze servers uitvoeren. Daarom zal ik proberen de algemene principes te beschrijven die kunnen worden gebruikt bij het opzetten van een firewall voor welke server dan ook. Dit is slechts een basis voor verder maatwerk.

Allereerst moet u de geladen regels wissen:

Iptables -F INPUT iptables -F OUTPUT iptables -F VOORUIT

INPUT, OUTPUT, FORWARD - dit zijn de drie hoofdketens waarlangs pakketten zullen stromen: inkomend, uitgaand en passerend van interface naar interface.

Hierna moet u het standaardbeleid instellen. Er zijn er maar twee: ACCEPT en DROP, pakketten accepteren of niet. Voor een productieserver moet u altijd DROP selecteren en vervolgens alles openen wat nodig is en niets meer.

Om een ​​dergelijk beleid in te stellen, moet u eerst verbindingen via SSH toestaan; we gaan ervan uit dat we de standaardpoort niet hebben gewijzigd (wat normaal gesproken moet worden gedaan op productieservers onmiddellijk na het installeren van de SSH-server).

Iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPTEREN

En daarna kunt u beginnen met het wijzigen van het standaardbeleid:

Iptables -P INPUT DROP iptables -P OUTPUT ACCEPTEER iptables -P VOORWAARTSE DROP

Voor de OUTPUT-keten kunt u voorlopig het standaard ACCEPT-beleid, dat uitgaande verbindingen toestaat, laten staan; u kunt hiernaar overschakelen na het instellen van de INPUT-keten, wanneer we inkomende verbindingen verbieden. Op veel servers is het voldoende om de INPUT-keten correct te configureren, maar we zullen later ook naar de OUTPUT-configuratie kijken voor een meer rigide configuratie.

Dus. IN dit moment We hebben alleen de SSH-serverpoort open voor inkomende verbindingen; verbindingen gaan niet door naar alle andere poorten. Nu moet u de ontvangst van verbindingen met de poorten van andere services toevoegen, als deze op uw server draaien.

Iptables -t filter -A INPUT -p tcp -m tcp --dport 25 -j ACCEPTEREN

DNS (meestal is UDP toestaan ​​voldoende, maar je kunt ook TCP toevoegen):

Iptables -t filter -A INPUT -p udp -m udp --dport 53 -j ACCEPTEREN

Iptables -t filter -A INPUT -p tcp -m tcp --dport 80 -j ACCEPTEREN

Iptables -t filter -A INPUT -p tcp -m tcp --dport 110 -j ACCEPTEREN

Iptables -t filter -A INPUT -p tcp -m tcp --dport 443 -j ACCEPTEREN

Maar dat is niet alles. Poorten zijn open, diensten zijn van buitenaf toegankelijk, maar mail werkt niet en domeinnamen worden niet opgelost. Feit is dat bij het opvragen van DNS-servers het verzoek wordt verzonden vanaf een willekeurige vrije poort uit de niet-bevoorrechte poorten, net als bij een verbinding met een andere mailserver. En deze services sturen het antwoord naar dezelfde poort. En deze haven is, zoals u begrijpt, voor ons gesloten. We zouden deze poort kunnen openen, maar we weten niet vanaf welke poort de uitgaande verbinding komt. Daarom kunnen we het eenvoudigst mogelijke doen: verbindingen toestaan ​​vanaf specifieke poorten op de externe computer:

Iptables -t filter -A INPUT -p tcp -m tcp --sport 25 -j ACCEPTEREN

Iptables -t filter -A INPUT -p udp -m udp --sport 53 -j ACCEPTEREN

Deze twee regels staan ​​inkomende verbindingen toe vanaf de poorten 25/tcp en 53/udp, dus wanneer pakketten met het juiste protocol via deze poorten arriveren, zullen ze worden geaccepteerd. Als u van plan bent het systeem, de software of de installatiepakketten die nodig zijn voor de werking bij te werken, moet u verbindingen vanaf poort 80 van externe machines toestaan.

Dit is nu het meeste eenvoudige configuratie We hebben iptables klaar.

Nadat u regels in tabellen heeft ingevoerd, moet u ze opslaan. Om dit te doen, kunt u bijvoorbeeld een script gebruiken.

Verbindingsbron verwerken

Doe Maar. We hebben op bepaalde poorten een verbinding nodig, niet met het hele internet, maar met bepaalde machines, met bepaalde IP-adressen. Daarom kunnen we de regels een beetje ingewikkelder maken door het bronadres van het pakket eraan toe te voegen.

Iptables -t filter -A INPUT -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPTEREN

Met deze regel kunt u via TCP alleen pakketten op poort 22 ontvangen van een bron met het adres 123.123.123.123, dit wordt aangegeven door de parameter “-s” (bron, bron). Op deze manier kunt u verbindingen met de server via SSH beperken tot één specifiek IP-adres, of tot een specifiek subnet als u het subnetmasker opgeeft van waaruit verbindingen zijn toegestaan ​​in plaats van een specifiek IP-adres.

Als u altijd dezelfde mailgateway gebruikt waarlangs uw server mail verstuurt, dan kunt u bijvoorbeeld verbindingen vanaf poort 25/tcp beperken door deze gateway als bron op te geven.

Regels voor een specifieke netwerkinterface of IP-adres

Een server kan meerdere netwerkinterfaces hebben. Meestal zijn er minstens twee: een externe netwerkinterface en de zogenaamde loopback-interface 127.0.0.1, die niet van buitenaf toegankelijk is, tenzij er een geschikte pakketomleiding is. Mogelijk hebt u ook ten minste één ander IP-adres gedeeld met de netwerkinterfacealias, of met een andere fysieke netwerkinterface. En op elk IP-adres of netwerkinterface bepaalde diensten kunnen werken. De ene heeft bijvoorbeeld een Apache-webserver en de andere heeft een bind9 domeinnaamserviceserver. En wanneer u verbindingen op een specifieke poort toestaat zonder die netwerkinterface op te geven, opent u de toegang tot die poort op alle interfaces. Daarom zijn er twee manieren om de reikwijdte van een toestemming te beperken.

De eerste manier is om het IP-adres op te geven waarvoor toegang wordt toegestaan.

Iptables -t filter -A INPUT -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACCEPTEREN

Dit voorbeeld laat zien hoe een bestemmingsadres kan worden gebruikt in een iptables-regel. U kunt ook het bronadres gebruiken:

Iptables -t filter -A INPUT -s 123.123.123.123 -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACCEPTEREN

IN dit voorbeeld We beperken de toegang al tot twee adressen, waardoor u via SSH toegang krijgt tot de server op 234.234.234.234 vanaf het adres 123.123.123.123; u kunt geen toegang krijgen vanaf andere adressen.

De tweede manier is om de naam van de netwerkinterface op te geven. Deze methode is ook toepasbaar wanneer het externe adres kan veranderen. Als het adres op de netwerkinterface verandert, verliest u met de vorige optie de toegang tot de server. De interfacenaam wordt als volgt gespecificeerd:

Iptables -t filter -A INPUT -i eth0 -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPTEREN

Deze optie staat SSH-toegang toe op de eth0-netwerkinterface; SSH-toegang is niet beschikbaar op andere netwerkinterfaces.

Alles waar we zojuist naar hebben gekeken is nog maar het begin, het volgende deel gaat verder...

Iptables is primair verantwoordelijk voor pakketfiltering. Handmatig Iptables instellen is nogal een klus geen gemakkelijke taak. Verwacht niet dat je dit “in een haast” zult ontdekken. Gelukkig zijn er veel tools die je kunnen helpen als je iptables nog niet kent, maar het systeem dringend moet beveiligen: fwbuilder, firestarter, guarddog, arno firewall - in wezen is dit een GUI voor iptables. Er is geen duidelijk antwoord wat beter is. De keuze is aan jou. Het artikel van vandaag is echter specifiek gewijd aan iptables en is verdeeld in twee delen: theorie en praktijk. De meest ongeduldigen kunnen het praktijkgedeelte meteen voltooien, hoewel deze aanpak niet wordt aanbevolen.

Aandacht! Alle acties met iptables worden uitgevoerd namens een bevoorrechte gebruiker!

Theorie

iptables invoerformaat iptables [-t tabel] [opdracht] [actie] Voorbeeld: iptables -t filter -A INPUT ACCEPT

Acties

  • ACCEPTEREN - Accepteer het pakket
  • DROP - Laat een pakketje vallen
  • DNAT - Bestemmingsadres converteren
  • SNAT - Wijzig het uitgaande IP-adres in de pakketheader
  • LOG - Loggen van pakketten en gebeurtenissen
  • MARK - Zet een markering op een pakket
  • MASQUERADE - Wijzig het uitgaande IP-adres in de pakketheader (verschil met SNAT - werken met dynamische IP's)
  • WACHTRIJ - Zet een pakket in de wachtrij voor verwerking
  • REDIRECT - Leid een pakket/stroom om naar een andere poort
  • WEIGEREN - Pakket laten vallen + op de hoogte stellen systeem op afstand Over. dat haar pakket werd afgewezen
  • RETURN - Stop het pakket dat langs de huidige keten beweegt en stuur het terug naar de oproepende keten

Teams

  • -A - Voeg een regel toe aan de keten
  • -D - Verwijder een regel uit de keten
  • -R - Vervang de ene regel door een andere
  • -I - Voeg een nieuwe regel in
  • -L - Lijst met bestaande regels
  • -F - Regels opnieuw instellen
  • -Z - Reset tellers in een bepaalde keten
  • -N - Maak een nieuwe keten met de opgegeven naam
  • -X - Verwijder keten
  • -P - Stel het standaardbeleid in voor de geselecteerde keten
  • -E - Hernoem de gebruikersketen

Criteria (algemeen)

  • -p - Specificeer het protocoltype
  • -s - IP-adres van pakketbron
  • -d - IP-adres van de pakketontvanger
  • -j - Geef de actie voor de regel op
  • -i - Interface waarvan het pakket is ontvangen
  • -o - Geef de naam van de uitvoerinterface op
  • -f - Geef de regel door aan alle fragmenten van het pakket

TCP-criteria:

  • –tcp-flags - Definieer het pakketmasker en de vlaggen

UDP-criteria:

  • –sport - Poort vanwaar het pakket is verzonden
  • –dport - Poort waaraan het pakket is geadresseerd

Meer details in man iptables

Oefening

Bekijk huidige configuratie

$ sudo iptables -L Chain INPUT (beleid ACCEPT) doel prot opt ​​bronbestemming Chain FORWARD (beleid ACCEPT) doel prot opt ​​bronbestemming Chain OUTPUT (beleid ACCEPT) doel prot opt ​​bronbestemming

Als u zoiets ziet, betekent dit dat uw firewall nog niet is geconfigureerd en alles toestaat. Laten we de situatie oplossen.

Het standaardbeleid instellen

  • iptables -P INPUT DROP - blokkeert inkomende pakketten
  • iptables -P OUTPUT ACCEPT - laat uitgaande pakketten toe
  • iptables -P FORWARD DROP - verwerking van pakketten die de server hebben bereikt vanaf een andere machine en wachten op verdere doorzending. In het voorbeeld is het geblokkeerd. In dit geval moet u regels voor vertrouwde machines toevoegen.

Omdat binnenkomende INPUT-pakketten worden geblokkeerd, schrijven we de volgende regel:

$ sudo iptables -A INPUT -m staat --staat VERWANT, GEVESTIGD -j ACCEPTEREN

Hierdoor kunnen pakketten van een eerder tot stand gebrachte verbinding worden geaccepteerd en nieuwe pakketten worden geaccepteerd die door deze verbinding worden gegenereerd.

Of geef het protocoltype aan:

$ sudo iptables -A INPUT -p TCP -m state --state ESTABLISHED, RELATED -j ACCEPT $ sudo iptables -A INPUT -p UDP -m state --state ESTABLISHED, RELATED -j ACCEPT

Nu de lokale interface:

$ sudo iptables -A INPUT -i lo -j ACCEPT

  • NIEUW - gegevens starten van een nieuwe verbinding.
  • ESTABLISHED - een pakket afkomstig van een reeds tot stand gebrachte verbinding.
  • GERELATEERD - een nieuw datapakket, maar gegenereerd door een oude bestaande verbinding
  • ONGELDIG - dus het is duidelijk

$ sudo iptables-save > /etc/iptables.up.rules

Schakel deze regels in:

$sudo iptables-restore< /etc/iptables.up.rules

En zie het verschil:

$sudo iptables -L

Start iptables bij het opstarten van het systeem:

Maak in de map /etc/init.d een bestand met de naam iptables

$ sudo touch /etc/init.d/iptables

Wij schrijven daarin het volgende:

#!/bin/sh /sbin/iptables-restore< /etc/iptables.up.rules

Het iptables-bestand uitvoerbaar maken:

$ sudo chmod +x /etc/init.d/iptables

Voeg het toe aan autorun

$ sudo update-rc.d -n iptables standaardwaarden

Start iptables wanneer verbonden met het netwerk:

$ sudo echo "#! /sbin/iptables-restore" > /etc/network/if-up.d/iptables.up.rules $ sudo iptables-save >> /etc/network/if-up.d/iptables. up.rules $ sudo chmod +x /etc/network/if-up.d/iptables.up.rules

Opmerking: op elk moment kunt u controleren of uw regels zijn geladen door eenvoudigweg iptables-save as root in te voeren

Voor archlinux gebeurt het opslaan van iptables-regels met het commando:

$ sudo rc.d bewaar iptables

Een klein initieel script (regels, iptables faq) voor een desktop of een eenvoudige server. IN in dit geval voorbeelden van het werken met poorten van bepaalde software die op uw computer draait. Op elke computer moeten veiligheidsmaatregelen in acht worden genomen. De mythe dat Linux veiliger is, is niet waar; het hangt allemaal af van de onhandigheid van de handen van de beheerder. Er zijn ook goed beveiligde Windows-systemen, maar ook Linux-systemen die voor vrijwel iedereen toegankelijk zijn. Daarom is het nog steeds de moeite waard om een ​​beetje na te denken over de netwerkbescherming van uw computer. Hieronder staan ​​enkele iptables-regels die in eerste instantie nuttig kunnen zijn.

Ik heb $IPT specifiek vervangen door /sbin/iptables. Als iemand slechts één regel nodig heeft, om niets te veranderen, kopieert hij deze eenvoudigweg en voert deze uit. Uiteraard zijn hier nog weinig regels, er zijn geen verschillende VPN's enz., als je wilt, voeg ze dan toe.

Deze regels kunnen geheel in een script worden gekopieerd en eenvoudig worden uitgevoerd. Voor gewone gevallen is dit voldoende. Als een applicatie geen toegang heeft tot het netwerk, is er speciaal logboekregistratie toegevoegd. Open gewoon tail -f /var/log/syslog (of de jouwe, indien anders dan Ubuntu) en kijk! Als je vragen hebt, voeg ze toe aan de discussie, dan lossen we ze samen op.

PS Denk naast deze regels na over wat u moet meenemen uit het artikel TCP-optimalisatie.

Hoe een regel in Iptables te verwijderen

Geplaatst door Alexey Ubozjenko

Meerdere keren ben ik het feit tegengekomen dat zelfs over het algemeen intelligente mensen volkomen onvergeeflijke fouten maken. Ze zetten bijvoorbeeld de poort waarop de database draait open voor het hele internet.

Blog over systeembeheer. Artikelen over Linux, Windows, NetApp-opslagsystemen en virtualisatie.

Dit overkomt vaak DevOps-beginners die hun hele leven code hebben geschreven en nu ook het opzetten van servers tot hun verantwoordelijkheden behoren. Er zijn goede tutorials online te vinden basisopstelling firewall in Linux en andere *nix, maar vaak zijn dit bladen op veel schermen. Dus ik hoop dat deze beknoptere tutorial voor iemand nuttig zal zijn.

Belangrijk! Het is heel gemakkelijk om per ongeluk een machine zo sterk te firewallen dat u er geen toegang meer toe heeft. Dit geldt vooral voor cloudhosting. Als je in AWS bijvoorbeeld alle poorten van 1024 tot en met 65536 sluit, blijkt de machine om de een of andere reden gesloten te zijn na een herstart alles in het algemeen havens. Als u in de cloud wordt gehost, configureert u dit betere firewall via de webinterface van de hosting.

Een kleine opmerking over de terminologie. De firewall die in de Linux-kernel is ingebouwd, heet Netfilter en iptables is een hulpprogramma voor het beheren van deze firewall. Veel mensen denken ten onrechte dat de firewall iptables heet. Dit is fout. Iets zeggen als "Ik filter pakketten met met behulp van iptables“, je laat anderen je analfabetisme zien.

Welke problemen kunnen in het algemeen worden opgelost met Netfilter:

  • Toestaan/weigeren inkomend verkeer naar specifieke poorten met behulp van specifieke protocollen (IPv4/IPv6, TCP/UDP) vanaf gespecificeerde adressen (IP, MAC) of subnetten;
  • Voor uitgaand verkeer is alles hetzelfde;
  • U kunt bijvoorbeeld alle ICMP-pakketten volledig negeren;
  • NAT instellen, zie de post over het installeren en configureren van OpenVPN;
  • Ik heb gehoord dat echte goeroes weten hoe ze bescherming tegen DDoS en brute force moeten opzetten en de toegang tot het netwerk kunnen beperken specifieke toepassingen, gebruikers of groepen, en andere gekke dingen doen;

Ik zou willen opmerken dat ik persoonlijk het hulpprogramma iptables in eerste instantie uiterst onhandig vond vergeleken met ipfw in FreeBSD. Gelukkig worden, na er een tijdje mee te hebben gewerkt, al deze vele vlaggen zoals -A, -D, -j en andere bekend, dus wees geduldig. Laten we eens kijken naar de basiscommando's.

Toon alle regels:

Het zal je misschien opvallen dat Netfilter een aantal “ketens” heeft - tenminste INPUT, OUTPUT en FORWARD.

Persoonlijk heb ik ook een DOCKER-ketting op mijn machine. Voor het eerst kun je de eerste twee beschouwen als respectievelijk al het inkomende en uitgaande verkeer, en de rest tijdelijk vergeten. De kans is groot dat je ze helemaal nooit nodig zult hebben.

Verwijder alle regels:

Wijzig het beleid (standaardgedrag) van de keten:

iptables -P INPUT DROP
iptables -P INGANG ACCEPTEREN

Toegang weigeren vanaf host/subnet:

iptables -A INPUT -s 123.45.67.89 -j DROP
iptables -A INPUT -s 123.45.0.0/16-j DROP

U kunt ook domeinnamen gebruiken:

iptables -A INPUT -s voorbeeld.ru -j DROP

Verbod op uitgaande verbindingen:

iptables -A UITGANG -d 123.45.67.89 -j DROP

Je kunt ontkenningen in de regels gebruiken:

iptables -A INPUT!-s 123.45.67.89 -j DROP

Een regel verwijderen op basis van het nummer in de keten:

iptables -D INGANG 1

Een regel verwijderen op basis van wat deze doet:

iptables -D INPUT -s 123.45.67.89 -j DROP

De optie -p specificeert het protocol. U kunt all, icmp, tcp, udp of het protocolnummer uit /etc/protocols gebruiken. De vlag --sport specificeert de poort van waaruit het pakket is verzonden, en de vlag --dport specificeert de bestemmingspoort:

iptables -A INPUT -p tcp --sport80-j ACCEPTEREN
iptables -A INPUT -p tcp --dport80-j ACCEPTEREN

Een regel aan het begin van een keten invoegen:

iptables -I VOER IN ...

Of u kunt een specifieke positie opgeven:

iptables-save >/etc/iptables.rules

Regels herstellen:

iptables-herstel

Laten we nu eens kijken naar enkele praktische voorbeelden. Zo ziet netsplit-emulatie er bijvoorbeeld uit in een test die het gedrag controleert van een applicatie die Akka Cluster gebruikt:

run(node1, s"iptables -A INPUT -s $node2 -j DROP")
run(node1, s"iptables -A INPUT -s $node3 -j DROP")
run(node1, s"iptables -A OUTPUT -d $node2 -j DROP")
run(node1, s"iptables -A OUTPUT -d $node3 -j DROP")

Herstel vindt op precies dezelfde manier plaats, alleen de vlag -A wordt vervangen door de vlag -D.

Een ander voorbeeld. U moet uitzoeken welke poorten op de machine luisteren en de onnodige poorten sluiten. We stappen de auto in en zeggen:

Voorbeelduitvoer:

Actieve internetverbindingen (alleen servers)
Proto Recv-Q Send-Q Lokaal adres Buitenlands adres Staat PID/Prog-naam
tcp 0 0 0.0.0.0:80 0.0.0.0:* LUISTER 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LUISTEREN 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LUISTER 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LUISTER 990/postgres

Nginx en SSHd kijken naar internet, dit is normaal. PostgreSQL luistert alleen naar de lokale interface, dus ook daar zijn geen problemen mee. Maar epmd blijft hangen (je kunt het controleren met telnet vanaf een andere machine), en dit is niet goed. U kunt alleen poort 4369 sluiten. Hoe u dit doet, heeft u hierboven weergegeven. Of je kunt nog verder gaan en alle verbindingen van buitenaf naar poort 81 en ouder weigeren:

iptables -A INPUT -m multipoort \
-p tcp --dports81:65535!-s 127.0.0.0/8-j DROP

Hierbij wordt gebruik gemaakt van de multiport-extensie, waarmee u poortbereiken kunt opgeven.

Laten we controleren of alles werkt. Indien OK, sla de regels op:

iptables-save >/etc/iptables.rules

Om ervoor te zorgen dat de regels worden opgepikt wanneer het systeem opstart, maken we een nieuw bestand /etc/network/if-pre-up.d/iptables:

iptables-hersteluitgang0

... en wij zeggen:

chmod +x /etc/network/if-pre-up.d/iptables

Deze methode is getest om te werken op Ubuntu 14.04 LTS.

Het zou ook op Debian moeten werken. Een beschrijving van een alternatieve manier om firewallregels te herstellen bij het opstarten van het systeem vindt u in de reeds genoemde opmerking over OpenVPN.

Aanvullend materiaal voor degenen die meer willen weten over Netfilter:

Hoe stelt u firewalls in op uw servers?

Tags: Linux, Beveiliging, Netwerken.

Het opdrachtregelhulpprogramma iptables wordt gebruikt om de netfilter-firewall te configureren die is ingebouwd in een Linux-kernelgebaseerd systeem.

Deze instructie is geschikt voor zowel dummies die aspecten van netwerkbeveiliging willen begrijpen, als voor ervaren professionals als spiekbriefje.

Instelprincipe

De algemene syntaxis voor het gebruik van iptables is:

iptables -t<таблица> <команда> <цепочка>[nummer]<условие> <действие>

<таблица>

netfilter-regels zijn verdeeld over 4 tabellen, die elk hun eigen doel hebben (meer details hieronder). Het wordt opgegeven met de schakeloptie -t, maar als deze parameter niet is opgegeven, wordt de actie uitgevoerd voor het standaardtabelfilter.

<команда>

De opdrachten geven aan wat voor soort actie we uitvoeren op netfilter, bijvoorbeeld het maken of verwijderen van een regel.

<цепочка>

Elke tafel heeft ketens, voor elk waarvan de regels zelf worden gemaakt. Voor de bovenstaande filtertabel zijn er bijvoorbeeld drie vooraf gedefinieerde ketens: INPUT (inkomende pakketten), OUTPUT (uitgaande pakketten) en FORWARD (transitpakketten).

[nummer]

Voor sommige opdrachten is het opgeven van het regelnummer vereist, bijvoorbeeld om te verwijderen of te bewerken.

<условие>

Een voorwaarde beschrijft de criteria voor het uitwerken van een bepaalde regel.

<действие>

Wat doen we eigenlijk met het pakket als het aan de criteria van de voorwaarde voldoet?

* Eerlijk gezegd is het vermeldenswaard dat de actiesleutel niet aan het einde hoeft te komen. Het is alleen zo dat dit formaat het vaakst wordt aangetroffen in instructies en de regels gemakkelijker leesbaar maakt.

iptables-sleutels en voorbeelden van hun gebruik

Werken met tabellen (iptables -t)

Laat me u eraan herinneren dat alle regels in netfilter over tabellen zijn verdeeld. Om met een specifieke tabel te werken, moet u de schakeloptie -t gebruiken.

Teams

De volgende sleutels bepalen de acties die het hulpprogramma iptables uitvoert.

Sleutel Beschrijving en voorbeelden
-A Een regel toevoegen aan het einde van de lijst:
iptables -A INPUT -s 192.168.0.15 -j DROP
weiger inkomende berichten van 192.168.0.15.
-D Een regel verwijderen:
iptables -D INGANG 10
verwijder regel in de INPUT-keten met nummer 10.
-I Een regel invoegen in een specifiek deel van de lijst:
iptables -I INGANG 5 -s 192.168.0.15 -j DROP
voeg regel 5e in de lijst in.
-R De regel vervangen.
iptables -R UITGANG 5 -s 192.168.0.15 -j ACCEPTEREN
vervang onze vijfde regel van verbieden naar toegeeflijk.
-F Regels resetten in een keten.
iptables -F INPUT
-Z Statistieken resetten.
iptables -Z INPUT
-N Het creëren van een keten.
iptables -N CHAINNIEUW
-X Een keten verwijderen.
iptables -X KETTINGNIEUW
-P Definieer de standaardregel.
iptables -P INPUT DROP
-E Hernoem een ​​keten.
iptables -E CHAINNIEUWE CHAINOUD

Voorwaarden

Deze sleutels definiëren de voorwaarden van de regel.

Sleutel Beschrijving en voorbeelden
-P Netwerkprotocol. Geldige opties zijn TCP, UDP, ICMP of ALL.
iptables -A INPUT -p tcp -j ACCEPTEREN
sta alle inkomende TCP-verbindingen toe.
-S Bronadres: hostnaam, IP-adres of subnet in CIDR-notatie.
iptables -A INPUT -s 192.168.0.50 -j DROP
binnenkomende berichten van knooppunt 192.168.0.50 weigeren
-D Bestemmingsadres. Het gebruiksprincipe is vergelijkbaar met de vorige sleutel -s.
iptables -A UITGANG -d 192.168.0.50 -j DROP
uitgaand verkeer naar knooppunt 192.168.0.50 weigeren
-i De netwerkadapter waardoor pakketten binnenkomen (INPUT).
iptables -A INPUT -i eth2 -j DROP
schakel binnenkomend verkeer uit voor Ethernet-interface eth2.
-O De netwerkadapter van waaruit pakketten worden verzonden (OUTPUT).
iptables -A OUTPUT -o eth3 -j ACCEPTEREN
Sta uitgaande berichten van de eth3 Ethernet-interface toe.
--dport Haven van bestemming.
iptables -A INPUT -p tcp --dport 80 -j ACCEPTEREN
Sta inkomende oproepen toe op poort 80.
--sport Bronpoort.
iptables -A INPUT -p tcp --sport 1023 -j DROP
verbied inkomende berichten vanaf poort 1023.

De vermelde sleutels ondersteunen ook de constructie met behulp van het bord ! .

Netfilter instellen met behulp van iptables

Het keert de toestand om, bijvoorbeeld
iptables -A INPUT -s! 192.168.0.50 -j DROP
zal de verbinding met alle hosts weigeren, behalve 192.168.0.50.

Acties

Acties die worden uitgevoerd op een pakket dat voldoet aan de criteria van de voorwaarde. Elke tabel heeft zijn eigen reeks toegestane acties. Opgegeven met een sleutel -J.

Tafel Actie Beschrijving
filter AANVAARDEN Staat het pakket toe.
DRUPPEL Ontkent het pakket.
AFWIJZEN Verbiedt het verzenden van een bericht naar de bron.
nat MASKERADE Bij uitgaande pakketten wordt het bron-IP-adres vervangen door het adres van de interface waarvandaan het pakket vertrekt.
SNAT Vergelijkbaar met MASQUERADE, maar geeft een specifieke netwerkinterface aan waarvan het adres zal worden gebruikt voor spoofing.
DNAT Vervanging van adres voor inkomende pakketten.
OMLEID Leidt het verzoek om naar een andere poort op hetzelfde systeem.
mangel T.O.S. Wijziging van het TOS-veld (prioriteit van het verkeer).
DSCP DSCP wijzigen (ook verkeersprioritering).
TTL Verander TTL (pakketlevensduur).
H.L. Vergelijkbaar met TTL, maar dan voor IPv6.
MARKERING Pakketmarkering. Gebruikt voor daaropvolgende filtratie of vormgeving.
CONNMARK Aansluitmarkering.
TCPMSS De MTU-waarde wijzigen.

Voorbeelden van veelgebruikte iptables-opdrachten

Algemene commando's

Bekijk regels met hun nummers:

iptables -L --regelnummers

Voor elke tafel moet je afzonderlijk naar de regels kijken:

iptables -t nat -L --regelnummers

Verwijder alle regels:

Standaardregels instellen:

iptables -P INPUT DROP

iptables -P UITGANGSDROP

* in deze voorbeelden werkt de deny-regel (DROP) standaard voor alle inkomende (INPUT) en uitgaande (OUTPUT) pakketten.

Sta alles toe

Methode 1: Door een regel toe te voegen:

iptables -I INGANG 1 -j ACCEPTEREN

iptables -I OUTPUT 1 -j ACCEPTEREN

iptables -I VOORUIT 1 -j ACCEPTEREN

* deze drie commando's creëren regels die alle inkomende, uitgaande en transitpakketten toestaan.

Methode 2. Regels schoonmaken:

* hier verwijderen we eerst alle regels (-F) en stellen we vervolgens het standaardbeleid in om inkomend, uitgaand en doorvoer toe te staan ​​(-S).

Methode 3. De service uitschakelen (het is handig om de firewall tijdelijk uit te schakelen om problemen te diagnosticeren):

Werken met regels

Voeg een regel toe aan het einde van de lijst:

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s! 192.168.0.25 —dport 993 -i eth0 -j ACCEPTEREN

Poortbereik toevoegen:

iptables -A INPUT -p tcp --dport 3000:4000 -j ACCEPTEREN

* in dit geval van 3000 tot 4000.

Regel invoegen:

iptables -I FORWARD 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACCEPTEREN

Port forwarding

Er zijn twee installatiemethoden.

1. PREROUTING + POSTROUTING-regels:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —naar-bestemming 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 2222 -j SNAT —naar-bron 19.8.232.80:22

* Waar 19.8.232.80 — het adres waarop wij naar verbindingsverzoeken luisteren; 22 — poort voor doorsturen; 192.168.1.15 2222 — interne haven.

2. PREROUTING + FORWARD-regels:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --naar-bestemming 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT

* Waar eth1— netwerkinterface waarop we naar verzoeken luisteren; 22 — poort voor doorsturen; 192.168.1.15 — intern IP-adres waarnaar wij alle verzoeken overbrengen; 2222 — interne haven.

Installatie starten

SSH toestaan:

iptables -A INPUT -p tcp --dport 22 -j ACCEPTEREN

We hebben het beleid ingesteld om inkomende berichten te verbieden en alle uitgaande berichten toe te staan:

iptables -P UITGANG ACCEPTEREN

We creëren een regel voor de normale werking van apt-get:

iptables -A INPUT -p tcp --sport 80 -m state --state GEVESTIGD -j ACCEPTEREN

Sta ICMP toe (om de ping-opdracht uit te voeren):

iptables -A INPUT -p icmp -j ACCEPTEREN

Bewaarregels (permanent)

Standaard werken alle regels niet meer nadat het netwerk of de computer opnieuw is opgestart. Er zijn verschillende configuratiemethoden om de regels op te slaan na een herstart.

Methode 1. iptables-save

Sla de regels op in een bestand:

iptables-save > /etc/iptables.rules

Netwerkinstellingen openen:

vi /etc/network/interfaces

en voeg de regel toe:

pre-up iptables-herstel< /etc/iptables.rules

Methode 2: iptables-persistent

Installeer het iptables-persistent pakket:

apt installeer iptables-persistent

Om de regels op te slaan, voert u de opdracht in:

service iptables-persistent opslaan

Methode 3. service iptables

Werkt op oudere versies van Linux:

Methode 4: iptables.init

Werkt op CentOS:

/usr/libexec/iptables/iptables.init opslaan

Ubuntu en CentOS

In moderne operatiekamers Ubuntu-systemen en CentOS heeft standaard geen iptables.

U moet het installeren of nieuwere hulpprogramma's gebruiken.

Op CentOS

Firewall-cmd wordt gebruikt als een standaard firewallbeheerprogramma. Lees voor meer details de instructies over Firewalld configureren op CentOS.

Als u iptables moet gebruiken, installeer dan het pakket met het hulpprogramma:

yum installeer iptables-services

Firewall uitschakelen:

systemctl stop firewalld

systemctl schakel firewalld uit

Sta toe en start iptables:

systemctl schakel iptables in

In Ubuntu

ufw wordt nu gebruikt om de firewall te beheren.

Om met iptables te werken, installeert u het volgende pakket:

apt-get install iptables-persistent

Schakel ufw uit:

# Netwerken# Beveiliging# UNIX# Ubuntu# Linux

Heeft deze instructie u geholpen?

ACHTER DE “MUUR VAN VUUR”:
FIREWALL (FIREWALL) EN GATEWAY NAAR HET INTERNET
IN DEBIAN GNU/LINUX 4.0 ETCH

Een praktische gids voor het organiseren van veilige internettoegang
vanaf een aparte computer en vanaf lokaal netwerk in Debian GNU/Linux 4.0 Etch
Een beetje theorie

Elke toegang tot internet maakt het niet alleen mogelijk om verbinding te maken diverse servers en sites, maar creëert ook een potentieel gevaar van penetratie in onze computer van buitenaf. Dit gevaar mag niet worden genegeerd, aangezien momenteel de meeste pogingen tot ongeoorloofde toegang tot gebruikerscomputers vanaf internet deel uitmaken van een goed georganiseerde criminele onderneming. Nadat ze uw systeem met succes hebben gehackt, zullen ze proberen uw computer te gebruiken om spam te verzenden, DoS-aanvallen op andere computers te organiseren of voor andere snode doeleinden. Het negeren van dit gevaar zal in het beste geval uw verkeerskosten verhogen en de snelheid van uw computer vertragen; in het slechtste geval kunt u onbewust betrokken raken bij de criminele activiteiten van cybergroepen.

De situatie wordt verergerd door het feit dat in sommige (nog steeds) wijdverbreide besturingssystemen standaard veel poorten open blijven staan, waardoor een aanvaller vanaf internet verbinding kan maken met de gebruiker zonder dat deze dit merkt.

Om ongeautoriseerde verbindingen van buitenaf te voorkomen en inkomend/uitgaand verkeer te filteren, moet het besturingssysteem gebruik maken van speciaal programmafirewall(Engelse firewall), ook wel bekend als firewall En firewall . Hieronder wordt een eenvoudige firewall-installatie in een vrij besturingssysteem beschreven Debian GNU/Linux 4.0.

Het gebruik van een firewall wordt vooral relevant als u over meer dan één computer beschikt thuis of kantoor netwerk , waarvan de computers toegang hebben tot internet.

Zelfs een klein lokaal netwerk moet goed georganiseerd zijn. Stel dat u een toegangspunt voor een snelle internetverbinding hebt (bijvoorbeeld een ADSL-modem) met een Ethernet-interface (d.w.z. een netwerk).

De verleiding bestaat (aangewakkerd door ongeletterde aanbevelingen, zoals in de instructies voor mijn ADSL-modem) om het modem rechtstreeks op de switch aan te sluiten en vervolgens verbinding te maken met de switch Alle lokale netwerkcomputers. In dit geval komt de modem dynamisch via de switch lokale IP-adressen, maar het blijkt dat elke computer met rust wordt gelaten met internet! Noch een modem, noch een switch kunnen een obstakel vormen voor iemand die slecht wenst. Een aanvaller kan scannen Alle computers van een lokaal netwerk dat op deze manier is georganiseerd.

Een logische en veilige oplossing is creëren barrière tussen de modem en het lokale netwerk - in de vorm van een aparte computer waarop een "wall of fire" (firewall) is geconfigureerd. Deze computer heeft twee interfaces: met de ene ‘kijkt’ hij naar het internet (d.w.z. hij is fysiek verbonden met de modem), met de andere is hij gericht op het lokale netwerk (en is hij fysiek verbonden met de switch, waarmee ook andere computers verbonden zijn). verbonden). Omdat onze computer met firewall nu een hub is voor andere computers om toegang te krijgen tot internet, wordt deze ook wel genoemd poort(Engelse poort).

Met een dergelijke organisatie van het lokale netwerk wordt de kans op hacking aanzienlijk verminderd: de aanvaller 'ziet' alleen de gateway vanaf internet en er is een firewall op de gateway geïnstalleerd, en het is niet eenvoudig om deze te hacken.

IPtables instellen op Linux voor dummies

Lokale netwerkcomputers kunnen op internet surfen en relatief veilig blijven.

Een firewall instellen met behulp van de arno-iptables-firewall configurator

Om een ​​firewall in te organiseren GNU/Linux het programma wordt gebruikt iptables, dat in de regel onmiddellijk wordt geïnstalleerd bij het installeren van de meeste distributies. IN Debian GNU/Linux U kunt dit controleren door het met beheerdersrechten uit te voeren aanleg. Indien nodig installeren wij iptables.

Echter, handmatige configuratie iptables is niet-triviale taak en kan alleen worden gedaan door specialisten op dit gebied systeem administratie. Daarom is het beter om de regels te configureren waarmee de firewall zal werken speciale configurator. IN Debian GNU/Linux Dit programma arno-iptables-firewall. Eenmaal gelanceerd stelt het een reeks vragen, op basis waarvan regels worden gegenereerd voor het functioneren van de firewall iptables.

Typ de console met superuser-rechten:

#aptitude installeer arno-iptables-firewall

Aan het begin van de installatie zal het programma vragen of we er echt een firewall mee willen configureren. iptables:

Eerst moet u opgeven voorkant– “kijken” naar internet, d.w.z. aangesloten op het modem. Interface-instellingen worden gedefinieerd in het configuratiebestand /etc/netwerk/interfaces. Het kan er bijvoorbeeld zo uitzien:

# Dit is de lo-interface - verwijst naar onze machine zelf. auto lo iface lo inet loopback-adres 127.0.0.1 netmasker 255.0.0.0 # Dit is de eth0-interface, die is verbonden met internet (ADSL-modem) # Het bijzondere is dat het IP-adres er dynamisch aan wordt toegewezen door de provider, # daarom de optie dhcp auto eth0 is ingesteld iface eth0 inet dhcp # Dit is de interface die naar het lokale netwerk kijkt # Het lokale netwerkadres is 192.168.2.0/24 # Voor veiligheidsdoeleinden in het lokale netwerk heeft de gateway een statisch IP-adres - 192.168.2.1, # daarom is de statische optie ingesteld # Netwerkmasker - 255.255.255.0 # Het netwerkbroadcastadres is in dit geval 192.168.2.255 auto eth1 iface eth1 inet statisch adres 192.168.2.1 netmasker 255.255.255.0 broadcast 192.168.2.255

Kijk dus naar de instellingen /etc/netwerk/interfaces, geven we aan de firewallconfigurator aan dat onze interface extern is eth0:

Op de vraag of wij een IP-adres krijgen van de provider dynamisch(met behulp van het DHCP-protocol), antwoorden we bevestigend:

De volgende vraag is welke diensten vanaf onze computer aan externe internetgebruikers zullen worden geleverd. Wij hebben er geen! Wij houden ons niet bezig met professionele webhosting en zijn niet van plan informatie naar buiten te verspreiden. Laat de regel leeg.

Dan is het de vraag of we nog diensten gaan verlenen UDP-protocol. Ook nee - en we laten de rij ook leeg!

Moeten we gepingd worden vanuit de buitenwereld (dus om te controleren of er een verbinding is met de computer waarop de firewall is geïnstalleerd)? In ons geval is dit heel acceptabel:

Hiermee is de installatie voltooid voor een afzonderlijke computer die geen lokale netwerkgateway is. Als we van plan zijn de computer als gateway te gebruiken, moeten we nog een paar vragen beantwoorden. We geven de interface aan waarmee de gateway naar het lokale netwerk kijkt - in ons geval is dat zo eth1, zoals blijkt uit /etc/netwerk/interfaces(anders laat u dit veld leeg voor een “eenzame” computer):

Op de vraag of NAT-vertaling moet worden toegestaan, d.w.z. door verkeer van internet via de gateway naar het lokale netwerk en terug te leiden, antwoorden we "ja" - dit is in dit geval een van onze belangrijkste taken:

Dan rijst de vraag: welk lokaal netwerksegment is toegankelijk via omleiding naar externe netwerken? Alle computers op ons lokale netwerk hebben recht op toegang tot internet; geef de waarde opnieuw aan 192.168.2.0/24

Ten slotte bevestigen we onze wens om te lanceren iptables zonder aanvullende verificatie onzerzijds van de firewallregels die automatisch door de configurator worden gegenereerd:

Hierna wordt, als alles goed is gegaan, een bericht weergegeven dat lijkt op het onderstaande. Het verschijnt nu elke keer dat de gatewaycomputer opstart en informeert u dat de firewall succesvol is gestart:

Arno's Iptables Firewall Script v1.8.8c ———————————————————————————- Sanity checks geslaagd...OK IPTABLES-module gedetecteerd...

Extra IPTABLES-modules laden: Alle IPTABLES-modules geladen! /proc/… configureren. instellingen: Anti-spoof inschakelen met rp_filter SYN-flood-bescherming inschakelen via SYN-cookies Het loggen van marsmannetjes uitschakelen De acceptatie van ICMP-omleidingsberichten uitschakelen Instellen van de max. aantal gelijktijdige verbindingen met 16384 Beveiliging tegen door de bron gerouteerde pakketten inschakelen Standaard conntrack-time-outs instellen Reductie van de DoS-capaciteit inschakelen Instelling Standaard TTL = 64 ECN uitschakelen (Explicit Congestion Notification) Ondersteuning voor dynamische IP's inschakelen Routetabel /proc/ setup done… Regels voor het leegmaken van de filtertabel Standaard (beveiligd) beleid instellen Logniveau “info” gebruiken voor syslogd Firewallregels instellen: ————————————————————————— - Pakketten accepteren van het lokale loopback-apparaat Instellen van de maximale pakketgrootte via MSS inschakelen Mangelen van TOS inschakelen Logging van stealth-scans (nmap-probes enz.) ingeschakeld Logging van pakketten met slechte TCP-vlaggen ingeschakeld Logging van INVALID-pakketten uitgeschakeld Logging van gefragmenteerde pakketten ingeschakeld Logging van toegang vanaf gereserveerde adressen ingeschakeld Anti-spoof-regels instellen Aangepaste IPTABLES-regels lezen uit /etc/arno-iptables-firewall/custom-rules (gebruikers) plug-ins laden INPUT-beleid instellen voor het externe net (INET): ondersteuning voor een DHCP inschakelen toegewezen IP op externe interface(s): eth0 Logging van expliciet geblokkeerde hosts ingeschakeld Logging van geweigerde lokale uitvoerverbindingen ingeschakeld Pakketten worden NIET gecontroleerd op privébronadressen De hele wereld toestaan ​​ICMP-verzoeken te verzenden (ping) Logging van afgebroken ICMP-verzoek (ping)-pakketten ingeschakeld Loggen van verwijderde andere ICMP-pakketten ingeschakeld Loggen van mogelijke stealth-scans ingeschakeld Loggen van (andere) verbindingspogingen naar PRIVILEGED TCP-poorten ingeschakeld Loggen van (andere) verbindingspogingen naar PRIVILEGED UDP-poorten ingeschakeld Loggen van (andere) verbindingspogingen naar UNPRIVILEGED TCP-poorten ingeschakeld Loggen van (andere) verbindingspogingen naar UNPRIVILEGED UDP-poorten ingeschakeld Loggen van andere IP-protocollen (niet-TCP/UDP/ICMP) verbindingspogingen ingeschakeld Loggen van ICMP-flooding ingeschakeld INET-beleid toepassen op externe (INET) interface: eth0 (zonder een extern subnet opgegeven) Instellen van INPUT-beleid voor interne (LAN) interface(s): eth1 Toestaan ​​van ICMP-verzoeken(ping) Toestaan ​​van alle (andere) protocollen Instellen van FORWARD beleid voor interne (LAN) interface(s): eth1 Logging van geweigerd LAN->INET FORWARD verbindingen ingeschakeld LAN->INET beleid instellen: ICMP-verzoeken toestaan(ping) Alle (andere) protocollen toestaan ​​Masquerading(NAT) inschakelen via externe interface(s): eth0 Toevoegen van (interne) host(s) : 192. 168.2.0/24 Beveiliging wordt afgedwongen voor externe interface(s) in de FORWARD-keten 16 januari 23:53:12 Alle firewallregels zijn toegepast.

Notitie 1. In de meeste gevallen vindt een succesvolle lancering van de firewall plaats na de eerste communicatie met de configurator. Als er iets niet werkt, is het ten zeerste aanbevolen om de configuratie te herhalen door de configurator opnieuw uit te voeren met superuser-rechten:

# dpkg-arno-iptables-firewall opnieuw configureren

Dit elimineert willekeurige fouten die kunnen optreden bij het beantwoorden van vragen van de configurator tijdens uw eerste ervaring met communiceren ermee. Als dit niet helpt, kunt u proberen het handmatig te corrigeren configuratiebestand programma's arno-iptables-firewall, namelijk: /etc/arno-iptables-firewall/firewall.conf. Het kan nuttig zijn om de homesite van de maker van dit programma te bezoeken: http://rocky.eld.leidenuniv.nl/. Het bevat een zeer informatieve handleiding over het werken met het programma, een interessante FAQ en daarnaast is er informatie over nieuwe versies van het programma.

Opmerking 2. Dat mogen wij niet vergeten niemand Een firewall kan geen 100% garantie bieden voor de veiligheid van de werking van uw computer op internet. Firewallbescherming mag echter niet worden verwaarloosd. Wij moeten alles doen wat in onze macht ligt om vervolgens op de barmhartigheid van God te kunnen vertrouwen. ‘Tenzij de Heer de stad beschermt, waakt de wachter tevergeefs.’(Ps. 127:1).

Bron van artikel

Ik schreef een blogpost over de basis Iptables-regels voor een productiegebruiker is lang geleden en u zou het waarschijnlijk samen met het gerelateerde artikel over Stateful Firewall moeten lezen.

Maar pre-kernel 2.6.39 (inclusief en je kunt het gebruiken voor het op de witte lijst zetten van IP-adressen als je er meer dan 10 op de witte lijst hebt staan ​​(waarbij 10 willekeurig is)).

IPtables opzetten voor dummies

De eerste handle staat waarvan we weten dat we deze willen accepteren of verwijderen, en interfaces.

Als u alleen IP wilt toestaan, geen status

U zult hoogstwaarschijnlijk problemen tegenkomen die hiermee verband houden en ik stel voor om de aandoening te gebruiken om uw leven gemakkelijker te maken. Het lost bijvoorbeeld niet op en zal bij bepaalde toepassingen zeker problemen veroorzaken.

Inleiding en geschiedenis

Netfilter- er is sinds versie 2.4 een firewall (ook wel firewall, oftewel firewall, oftewel firewall...) ingebouwd in de Linux-kernel. Netfilter wordt beheerd door het hulpprogramma iptables(Voor IPv6 - ip6tabellen). Voor netfilter/iptables was Ipketens, dat was opgenomen in de Linux 2.2-kernels. Voordat ipchains in Linux bestonden, waren er de zogenaamde ipfw (IPV4-firewall), geporteerd van BSD. Beheerhulpprogramma - ipfwadm. Het netfilter/iptables-project werd opgericht in 1998. De auteur is Rusty Russell (hij leidde ook eerdere ontwikkelingen). In 1999 werd het Netfilter Core Team (afgekort coreteam) gevormd. De ontwikkelde firewall kreeg officieel de naam netfilter. In augustus 2003 werd Harald Welte hoofd van het kernteam.

Projecten ipketens En ipfwadm veranderde de werking van de Linux-kernelprotocolstack, sinds vóór de komst van netfilter Er was geen voorziening in de kernelarchitectuur voor het toevoegen van extra pakketbeheermodules. iptables het hoofdidee behouden ipfwadm- een lijst met regels bestaande uit criteria en een actie die wordt uitgevoerd als het pakket aan de criteria voldoet. IN ipketens er werd een nieuw concept geïntroduceerd - de mogelijkheid om nieuwe ketens van regels te creëren en pakketten tussen ketens over te dragen, en in iptables werd het concept uitgebreid naar vier tabellen (in het moderne netfilter - meer dan vier), waarbij ketens van regels per taak werden afgebakend: filtering, NAT en pakketwijziging. Ook iptables uitgebreid Linux-functies op het gebied van statusdetectie, waardoor firewalls kunnen worden gecreëerd die op sessieniveau werken.

Netfilter/iptables-architectuur

Vereisten ()

Zoals hierboven vermeld, heb je kernelversie 2.6 (of minstens 2.3.15) nodig om Netfilter te laten werken. Bovendien, indien nodig, de instellingen CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER ( filtertabel), CONFIG_IP_NF_NAT (nat table), CONFIG_BRIDGE_NETFILTER, evenals talrijke extra modules: CONFIG_IP_NF_CONNTRACK (verbinding volgen), CONFIG_IP_NF_FTP (hulpmodule voor het volgen van FTP-verbindingen), CONFIG_IP_NF_MATCH_* (extra pakketmatchingspatroontypes: LIMIT, MAC, MARK, MULTIPORT, TOS , TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (extra acties in de regels: REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS), CONFIG_IP_NF_COMPAT_IPCHAINS voor compatibiliteit met ipchains, CONFIG_BRIDGE_NF_EBTABLES en CONFIG_BRIDGE_EBT_* voor werken in bridge-modus, andere CONF IG_IP_NF_* en CONFIG_IP6_NF_ *. Het is ook handig om CONFIG_PACKET op te geven.

Als gezien, nat tafel En mangel kan de ontvanger of afzender van een netwerkpakket wijzigen. Daarom wordt het netwerkpakket meerdere keren gecontroleerd aan de hand van de routeringstabel.

Toestandsdetectiemechanisme (conntrack)

Boven in de tekst werd het concept van ‘definitie van staten’ verschillende keren genoemd; het verdient een apart onderwerp voor discussie, maar toch zal ik in dit bericht kort op deze kwestie ingaan. Over het algemeen is het mechanisme voor het bepalen van toestanden (ook wel staatsmachine, oftewel verbind ectie spoor ing, oftewel aansluiten) maakt deel uit van het pakketfilter en stelt u in staat te bepalen tot welke verbinding/sessie een pakket behoort. Contrack analyseert de status van alle pakketten behalve die gemarkeerd als NIETTRACK in rauwe tafel . Op basis van deze status wordt bepaald waartoe het pakket behoort nieuw verbinding (staat NIEUW), al gevestigd verbinding (staat GEVESTIGD), aanvullend naar een reeds bestaande ( VERWANT), of te " naar een ander" (niet-detecteerbare) verbinding (status ONGELDIG). De status van het pakket wordt bepaald door de headers van het verzonden TCP-pakket te analyseren. conntrack-module Hiermee kunt u een (vijfde) firewall op sessieniveau implementeren. Gebruik het hulpprogramma om dit mechanisme te besturen conntrack, evenals de iptables-hulpprogrammaparameter: -m verbinding of -m staat(verouderd). conntrack slaat de status van huidige verbindingen op in de kernel. Ze kunnen worden bekeken in het bestand /proc/net/nf_conntrack (of /proc/net/ip_conntrack) .

Zodat mijn gedachten geen pap worden, denk ik dit korte informatie het verdere materiaal zal voldoende zijn om het te begrijpen.

Netfilter-netwerkfilterregels beheren (met behulp van de opdracht iptables)

iptables-hulpprogramma is een interface voor besturing firewall netfilter. Deze opdracht Hiermee kunt u tabelregels, tabellen en ketens bewerken. Zoals ik al zei - elke regel is een record/string die een selectie netwerkpakketten bevat en pakketten die aan een bepaalde regel voldoen. iptables-opdracht Vereist rootrechten om te kunnen werken.

Over het algemeen is het opdrachtformaat als volgt:

Iptables [-t]

Alle parameters tussen vierkante haakjes - optioneel. Standaard is filtertabel Als u een andere tabel wilt opgeven, moet u de sleutel gebruiken -T wijzend op naam. Nadat de tabelnaam is aangegeven die de actie definieert ( Bijvoorbeeld: voeg een regel in, of voeg een regel toe aan het einde van de keten, of verwijder een regel). stelt selectieparameters in. geeft aan welke actie moet worden ondernomen als de selectiecriteria in de regel overeenkomen ( Bijvoorbeeld: geef het pakket door aan een andere reeks regels, laat het pakket vallen, stuur een foutmelding naar de bron...).

Hieronder staan ​​de opdrachten en parameters van het iptables-hulpprogramma:

Parameter Beschrijving Voorbeeld
Teams
--toevoegen (-A) Voeg de opgegeven regel toe aan het EINDE van de lijst in de opgegeven keten en opgegeven tabel. iptables -A FORWARD-criteria -j actie
--verwijder (-D) Verwijdert de regel(s) gespecificeerd door het nummer(s) of de regel(s). Het eerste voorbeeld verwijdert alle regels met de nummers 10,12 in alle ketens, in de filtertabellen, het tweede voorbeeld verwijdert de opgegeven regel uit de mangeltabel in de PREROUTING-keten. iptables -D 10.12
iptables -t mangle -D PREROUTING-criteria -j actie
--hernoem-keten (-E) Wijzig de ketennaam. iptables -E OLD_CHAIN ​​​​NEW_CHAIN
--flush (-F) Wist alle regels van de huidige tabel. Voor alle pakketten die betrekking hebben op reeds tot stand gebrachte verbindingen, past u de terminalactie ACCEPTEREN - overslaan toe iptables-F
--invoegen (-I) Voegt de opgegeven regel in op de locatie die door het nummer is opgegeven. iptables -I FORWARD 5 criteria -j actie
--lijst (afgekort -L) Bekijk bestaande regels (zonder de tabel expliciet op te geven - de filtertabel van alle ketens wordt weergegeven). iptables-L
--beleid (-P) Stelt het standaardbeleid in voor de gegeven keten. iptables -t mangel -P PREROUTING DROP
--vervang (-R) Vervangt de regel die is opgegeven door het getal, door de regel die is opgegeven in de criteria. iptables -R POSROUTING 7 | criteria -j actie
--verwijder-keten (-X) Verwijder ALLE handmatig gemaakte ketens (behoud alleen de standaard INPUT, OUTPUT, FORWARD, PREROUTING en POSTROUTING). iptables-X
--nul (-Z) Reset de tellers van verzonden gegevens in de keten. iptables -Z INPUT
Opties
--numeriek (-n) Resoluteert geen adressen en protocollen tijdens de uitvoer.
--lijn nummers Geef regelnummers op in de uitvoer (kan worden gebruikt in combinatie met -L). iptables -L --regelnummers
--help (-h) waar zouden we zijn zonder haar?
-t tafel Specificeert de naam van de tabel waarop de actie moet worden uitgevoerd. In het voorbeeld wordt de nat-tabel in alle ketens opnieuw ingesteld. iptables -t nat -F
--uitgebreid (-v) Gedetailleerde conclusie. iptables -L -v

Criteria (parameters) voor het selecteren van netwerkpakketten van de opdracht iptables

Criteria voor het selecteren van netwerkpakketten zijn in het geheim onderverdeeld in verschillende groepen: Algemene criteria, Impliciete criteria, Expliciete criteria. kunnen in alle regels worden gebruikt, zijn niet afhankelijk van het protocoltype en vereisen geen laden van uitbreidingsmodules. (Ik zou het noemen niet-algemeen), de criteria die impliciet worden geladen en beschikbaar komen, bijvoorbeeld bij het opgeven van een algemeen criterium --protocol tcp|udp|icmp. Voor gebruik moet u verbinding maken extra uitbreiding(Deze zijn eigenaardig plug-ins voor netfilter). Extra uitbreidingen geladen met behulp van de parameter -M of --overeenkomst. Dus bijvoorbeeld als we de criteria gaan gebruiken staat, dan moeten we dit expliciet specificeren in de regelregel: -m staat links van het gebruikte criterium. Verschil tussen overduidelijk En impliciet niet-algemeen Het criterium is dat expliciete bestanden expliciet moeten worden geladen, en impliciete bestanden automatisch.

Kan in alle criteria worden gebruikt teken! vóór de criteriumwaarde. Dit betekent dat deze regel betrekking heeft op alle pakketten die komen niet overeen met deze parameter. Bijvoorbeeld: criterium --protocol! TCP betekent dat alle pakketten dat Niet Zijn TCP-protocollen vallen onder de regel. Echter nieuwste versies iptables (met name 1.4.3.2 en hoger) ondersteunen deze syntaxis niet langer en vereisen het gebruik van --protocol! TCP, A ! --protocol-tcp, met de volgende foutmelding:

Het gebruik van intragepositioneerde negatie (`--optie ! this`) wordt afgekeurd ten gunste van extragepositioneerde (`! --optie this`).

Hieronder vindt u ze in tabelvorm Veelgebruikte pakketselectieparameters:

Parameter Beschrijving Voorbeeld
Gemeenschappelijke parameters
--protocol
(afgekort -p)
Definieert het protocol. Opties tcp, udp, icmp, all of enig ander protocol gedefinieerd in /etc/protocols iptables -A INPUT -p tcp
--bron
(-s, --src)
IP-adres van de pakketbron. Kan op verschillende manieren worden gedefinieerd:
  • Enkele host: host.domain.tld, of IP-adres: 10.10.10.3
  • Adrespool (subnet): 10.10.10.3/24 of 10.10.10.3/255.255.255.0

Het wordt sterk aanbevolen om geen domeinnamen te gebruiken waarvoor DNS-query's nodig zijn voor de oplossing, omdat netfilter DNS mogelijk niet correct werkt tijdens de configuratiefase. Houd er ook rekening mee dat namen slechts één keer worden opgelost: wanneer een regel aan de keten wordt toegevoegd. Vervolgens kan het IP-adres dat bij deze naam hoort veranderen, maar dit heeft op geen enkele manier invloed op de reeds vastgelegde regels (ze blijven oud adres). Als u specificeert Domeinnaam, die wordt omgezet in meerdere IP-adressen, wordt voor elk adres een aparte regel toegevoegd.

iptables -A INPUT -s 10.10.10.3
--bestemming
(-D)
IP-adres van de bestemming van het pakket. Kan op verschillende manieren worden gedefinieerd (zie --source). iptables -A INPUT --bestemming 192.168.1.0/24
--in-interface
(-i)
Identificeert de interface waarop het pakket is aangekomen. Handig voor NAT en machines met meerdere netwerkinterfaces. Gebruikt in INPUT-, FORWARD- en PREROUTING-ketens. Het is mogelijk om het "+" teken te gebruiken, dit betekent het gebruik van alle interfaces beginnend met de naam + (bijvoorbeeld eth+ - alle eth interfaces). iptables -t nat -A PREROUTING --in-interface eth0
--out-interface
(-O)
Definieert de interface van waaruit het pakket zal vertrekken. Handig voor NAT en machines met meerdere netwerkinterfaces. Gebruikt in OUTPUT-, FORWARD- en POSTROUTING-ketens. Het is mogelijk om het "+" teken te gebruiken. iptables -t nat -A POSTROUTING --in-interface eth1
Impliciete (niet-gedeelde) parameters
-p proto -h hulp weergeven bij impliciete parameters van het protoprotocol. iptables -p icmp -h
--bron-poort
(--sport)
Bronpoort, alleen mogelijk voor --protocol tcp- of --protocol udp-protocollen iptables -A INPUT --protocol tcp --source-poort 25
--haven van bestemming
(--dport)
Bestemmingspoort, alleen mogelijk voor --protocol tcp- of --protemocol udp-protocollen iptables -A INPUT --protocol udp --bestemmingspoort 67
Expliciete parameters
-m state --state (verouderd)
oftewel
-m conntrack --ctstate

Verbindingsstatus. Beschikbare opties:

  • NIEUW(Alle pakketten die een nieuwe verbinding tot stand brengen)
  • GEVESTIGD(Alle pakketten die bij de tot stand gebrachte verbinding horen)
  • VERWANT(Pakketten die niet tot de tot stand gebrachte verbinding behoren, maar eraan zijn gekoppeld. Bijvoorbeeld: FTP in actieve modus gebruikt verschillende verbindingen voor gegevensoverdracht. Deze verbindingen zijn gerelateerd.)
  • ONGELDIG(Pakketten die om de een of andere reden niet kunnen worden geïdentificeerd. Bijvoorbeeld ICMP-fouten die niet bij bestaande verbindingen horen)
  • etc. (meer details in de documentatie)
iptables -A INPUT -m state --state NEW,ESTABLISHEDiptables -A INPUT -m conntrack --ctstate NEW,ESTABLISHED
-m mac --mac-bron Stelt in Mac adres netwerkknooppunt dat het pakket heeft verzonden. Het MAC-adres moet worden opgegeven in de vorm XX:XX:XX:XX:XX:XX. -m mac --mac-bron 00:00:00:00:00:0

Acties op pakketten

Deze titel zou correcter worden geherformuleerd als " Acties op pakketten die voldoen aan de selectiecriteria". Dus, om iets te bereiken acties op pakketten, moet u de sleutel opgeven -j (--sprong) en geef aan welke specifieke actie ondernomen moet worden.

Acties op pakketten kunnen de volgende waarden aannemen:

  • AANVAARDEN- het pakket verlaat deze keten en wordt overgedragen naar de volgende (letterlijk - ACCEPTEREN).
  • DRUPPEL- een pakket weggooien dat aan de voorwaarde voldoet, terwijl het pakket niet naar andere tabellen/ketens wordt verzonden.
  • AFWIJZEN- verwijder het pakket door een ICMP-bericht naar de afzender te sturen, terwijl het pakket niet naar andere tabellen/ketens wordt verzonden.
  • OPBRENGST- stuur het pakket terug naar de vorige keten en vervolg de passage vanaf de volgende regel.
  • SNAT bron in het pakket. Kan alleen in kettingen gebruikt worden POSTROUTING en OUTPUT in nat-tabellen.
  • DNAT- adresvertaling toepassen afspraken in het pakket. Kan in een ketting gebruikt worden VOORROUTING in de nattabel. (in uitzonderlijke gevallen - in de OUTPUT-keten)
  • LOGBOEK- log het pakket (verzonden naar de daemon) en verwerk het met andere regels.
  • MASKERADE- in plaats daarvan gebruikt SNAT of er een verbinding is met een dynamisch IP-adres (dit mag alleen in de keten worden aangegeven POSTROUTING nat-tabellen).
  • MARKERING- gebruikt om labels op pakketten te plaatsen en door te geven aan verdere verwerkingsregels.
  • en etc.

Naast deze acties zijn er nog andere die in de documentatie te vinden zijn (misschien zal ik het artikel binnenkort aanvullen terwijl ik het onderwerp uitwerk). Sommige acties hebben aanvullende parameters.

De onderstaande tabel bevat voorbeelden en beschrijvingen van aanvullende parameters:

Parameter Beschrijving Voorbeeld
DNAT (Destination Network Address Translation)
--naar-bestemming specificeert welk IP-adres moet worden vervangen als bestemmingsadres. In het voorbeeld, in alle TCP-protocolpakketten die aankomen op adres 1.2.3.4, opgegeven adres wordt vervangen door 4.3.2.1. iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --naar-bestemming 4.3.2.1
LOGBOEK
--Log niveau Wordt gebruikt om het logniveau () in te stellen. In het voorbeeld is het geïnstalleerd maximaal niveau loggen voor alle TCP-pakketten in de filtertabel van de FORWARD-keten. iptables -A FORWARD -p tcp -j LOG --debug op logniveau
--log-voorvoegsel Specificeert de tekst (voorvoegsel) die aan alle berichten voorafgaat iptables. (erg handig voor later) Het voorvoegsel kan maximaal 29 tekens bevatten, inclusief spaties. In het voorbeeld worden alle TCP-pakketten in de filtertabel van de INPUT-keten met het INRUT-filtervoorvoegsel naar syslog verzonden. iptables -A INPUT -p tcp -j LOG --log-voorvoegsel "INRUT-filter"
--log-ip-opties Maakt het mogelijk om binnen te komen diverse informatie uit de IP-pakketheader. iptables -A FORWARD -p tcp -j LOG --log-ip-opties
en etc...

Dit concludeert de theorie over het netfilter/iptables-netwerkfilter. In het volgende artikel zal ik geven praktische voorbeelden om deze theorie te begrijpen.

Samenvatting

In dit artikel hebben we heel kort de basisconcepten onderzocht overspanningsbeveiliging onder Linux. Het netfilter/iptables-subsysteem maakt dus deel uit van de Linux-kernel en wordt gebruikt om verschillende filterschema's te organiseren en netwerkpakketten te manipuleren. In dit geval gaat elk pakket van de netwerkinterface waar het is aangekomen en verder langs een bepaalde ketenroute, afhankelijk van of het bedoeld is voor een lokaal of een “niet-lokaal” systeem. Elke keten bestaat uit een reeks tabellen die een opeenvolgende reeks regels bevatten. Elke regel bestaat uit een bepaald criterium/criteria voor het selecteren van een netwerkpakket en een actie met het pakket dat aan deze criteria voldoet. In overeenstemming met de gegeven regels kan elke actie op het pakket worden uitgevoerd (bijvoorbeeld overdracht naar de volgende/andere keten, pakketreset, wijziging van de inhoud of headers, enz.). Elke keten en elke tafel heeft zijn eigen doel, functionaliteit en plaats in het pakketpad. Om pakketten te filteren wordt bijvoorbeeld de filtertabel gebruikt, die is opgenomen in drie standaardketens en kan zijn opgenomen in ketens, gebruiker gedefinieerde. Het pad van het pakket eindigt bij de uitgaande netwerkinterface of bij levering aan een lokaal proces/toepassing.

Literatuur

Hier vindt u heel wat interessante informatie in het Russisch:

  • http://www.opennet.ru/docs/RUS/iptables/
  • http://ru.wikibooks.org/wiki/Iptables

Meer diepgaand materiaal is hier beschikbaar in burgerlijke taal:

  • http://www.frozentux.net/documents/ipsysctl-tutorial/
  • http://www.netfilter.org/documentation/index.html

Met vriendelijke groet, McSim!