Iptables stuurt voorbeelden door. Voorbeelden van het gebruik van Iptables. Standaardregels

Iptables is primair verantwoordelijk voor pakketfiltering. Het handmatig instellen van Iptables 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 - Registratie 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 daarover. dat haar pakket werd afgewezen
  • RETURN - Voorkom dat het pakket 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 - Specificeer de naam van de uitvoerinterface
  • -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

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 een 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. Zojuist dit formaat meestal te vinden in instructies en maakt de regels gemakkelijker te lezen.

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 ! . 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 ACCEPTEREN 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 UITGANGSDALING

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

Alles toestaan

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):

service iptables stopt

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

* V 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

Blokkeer een specifiek IP-adres voor verbinding op poort 25:

iptables -I INPUT 1 -s 1.1.1.1 -p tcp --dport 25 -j DROP

Poort doorsturen

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 — intern IP-adres waarnaar wij alle verzoeken overbrengen; 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 NIEUW, GEVESTIGD, GERELATEERD -j ACCEPT

Definitie itafels- nutsvoorziening opdrachtregel, is een standaardinterface voor het beheren van de werking van een firewall (firewall) netfilter voor kernen Linux-versies 2,4, 2,6, 3.x, 4.x. Te gebruiken iptables-hulpprogramma's Superuser-rechten (root) zijn vereist.

Wij zullen ermee omgaan iptables en we kunnen niet zonder een kleine theoretische introductie.

Om correct firewallregels te kunnen maken, moet u begrijpen hoe pakketten over het algemeen stromen en wat ermee gebeurt.

De volgorde van verplaatsing van transitpakketten

Stap Tafel Ketting Opmerking
1
2 mangel VOORROUTING Normaal gesproken wordt deze keten gebruikt om wijzigingen aan te brengen in de pakketkop, zoals het wijzigen van bits T.O.S. enz..
3 nat VOORROUTING Deze keten wordt gebruikt voor uitzendingen netwerkadressen (). wordt later, in een andere keten, uitgevoerd.
4 Beslissen over verdere routing, d.w.z. op dit punt wordt besloten waar zal hij heen gaan plastic zak - lokale toepassing of naar een ander netwerkknooppunt.
5 mangel VOORUIT Het pakket komt vervolgens in de keten terecht VOORUIT mangel tafels.
6 Filter VOORUIT In een ketting VOORUIT Alleen de pakketten die naar een andere host gaan, worden ontvangen. Alle filtering van transitverkeer moet hier worden uitgevoerd. Vergeet niet dat verkeer in beide richtingen door deze keten gaat; houd hier rekening mee bij het schrijven van filterregels.
7 mangel POSTROUTING Deze keten is bedoeld om wijzigingen aan te brengen in de pakketkop nadat de laatste routeringsbeslissing is genomen.
9 nat POSTROUTING Deze ketting is in de eerste plaats bedoeld voor Bronnetwerkadresvertaling. Maskerade wordt hier ook uitgevoerd ( Maskerade).
9 Uitgangsnetwerkinterface (bijvoorbeeld eth1).

Voor lokale toepassing (inkomende pakketten)

Stap Tafel Ketting Opmerking
1 Invoernetwerkinterface (bijvoorbeeld eth0)
2 mangel VOORROUTING Meestal gebruikt om wijzigingen aan te brengen in de pakketkop, zoals het instellen van bits T.O.S. enz.
3 nat VOORROUTING Adresvertaling ( Bestemmingsnetwerkadresvertaling).
4 Het nemen van routeringsbeslissingen.
5 mangel INGANG Het pakket komt de keten binnen INGANG mangel tafels. Hier worden wijzigingen aangebracht in de pakketheader voordat deze wordt doorgegeven aan de lokale applicatie.
6 filter INGANG Hier wordt inkomend verkeer gefilterd. Houd er rekening mee dat alle binnenkomende pakketten die aan ons zijn geadresseerd, door deze keten gaan, ongeacht van welke interface ze afkomstig zijn.
7 Lokaal proces/toepassing (d.w.z. serverprogramma of clientprogramma)

Van lokale processen (uitgaande pakketten)

Stap Tafel Ketting Opmerking
1 Lokaal proces (dat wil zeggen serverprogramma of clientprogramma).
2 Het nemen van routeringsbeslissingen. Hier wordt besloten waar het pakket naartoe gaat: naar welk adres, via welke netwerkinterface, enz.
3 mangel UITGANG Hier worden wijzigingen aangebracht in de pakketheader. Het uitvoeren van filtering op deze keten kan negatieve gevolgen hebben.
4 nat UITGANG Deze keten wordt gebruikt voor netwerkadresvertaling (NAT) in pakketten die afkomstig zijn van lokale firewallprocessen.
5 Filter UITGANG Uitgaand verkeer wordt hier gefilterd.
6 mangel POSTROUTING Ketting POSTROUTING De mangeltabel wordt voornamelijk gebruikt voor regels die wijzigingen moeten aanbrengen in de pakketheader voordat deze de firewall verlaat, maar nadat de routeringsbeslissing is genomen. Alle pakketten, zowel verzonden als aangemaakt door lokale firewallprocessen, vallen in deze keten.
7 nat POSTROUTING Loopt hier Bronnetwerkadresvertaling. U moet pakketten in deze keten niet filteren om ongewenste pakketten te voorkomen bijwerkingen. Maar ook hier kunt u pakketten tegenhouden door het standaardbeleid toe te passen DRUPPEL.
8 Netwerkinterface (bijv. eth0)

Zoals we begrijpen, zijn er drie hoofdtabellen:

  • mangelDeze tafel is bedoeld voor bewerkingen op het gebied van classificatie en markering van pakketten en verbindingen, evenals voor het wijzigen van pakketheaders (TTL- en TOS-velden).
  • filter— de hoofdtabel voor het filteren van pakketten, die standaard wordt gebruikt. Eigenlijk vindt in deze tabel pakketfiltering plaats.
  • nat- biedt nat-functionaliteit als u uw computer als router wilt gebruiken. Hier worden routeringsregels ingesteld.

Voor tafel nat Acties zijn van toepassing:

  • MASKERADE

Actie DNAT(Destination Network Address Translation) converteert bestemmingsadressen in pakketheaders. Met andere woorden: deze actie leidt pakketten om naar andere adressen dan die gespecificeerd in de pakketheaders.

SNAT(Source Network Address Translation) wordt gebruikt om de bronadressen van pakketten te wijzigen. Met deze actie kunt u één extern IP-adres delen tussen computers op het lokale netwerk om toegang te krijgen tot internet. In dit geval gebruikt de firewall SNAT, voert automatisch voorwaartse en achterwaartse adresvertaling uit, waardoor het mogelijk wordt verbinding te maken met servers op internet vanaf computers op het lokale netwerk.

Vermomming ( MASKERADE) wordt voor dezelfde doeleinden gebruikt als SNAT, maar in tegenstelling tot de vorige, MASKERADE geeft meer zware belasting op het systeem. Dit gebeurt omdat elke keer dat deze actie vereist is, er om een ​​IP-adres wordt gevraagd voor de netwerkinterface die in de actie is opgegeven, terwijl for SNAT Het IP-adres wordt direct opgegeven. Echter, vanwege dit verschil MASKERADE kan werken in gevallen met een dynamisch IP-adres, d.w.z. wanneer u verbinding maakt met internet, zegt u via PPP, SLIP of DHCP.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Uitvoeren MASKERADE voor alle pakketten die afkomstig zijn van netwerk 10.8.0.0 naar interface eth0. Laten we voor de duidelijkheid zeggen dat we twee netwerkkaarten en twee netwerken hebben. We hebben een netwerk nodig 10.8.0.0/24 (de eerste netwerkkaart) kon bijvoorbeeld toegang krijgen tot internet via eth0( tweede netwerkkaart)

  • rauw— Ontworpen om acties uit te voeren met pakketten voordat ze door het systeem worden verwerkt.

De standaardtabel zelf filteren.

  • INGANG- verwerkt verkeer dat rechtstreeks naar de host zelf komt.
  • VOORUIT- hiermee kunt u transitverkeer filteren.
  • UITGANG- hiermee kunt u verkeer filteren dat van de host zelf komt.

Actie met het pakket.

  • ACCEPTEREN- pakket overslaan. Het pakket verlaat de huidige basisketen en gaat verder.
  • AFWIJZEN- blokkeer het pakket en informeer de bron over de weigering.
  • DRUPPEL- blokkeer het pakket zonder de bron op de hoogte te stellen van de weigering. Het verdient meer de voorkeur bij het filteren van verkeer op interfaces die met internet zijn verbonden, omdat het de informatie-inhoud van het scannen van hostpoorten door aanvallers vermindert.
  • LOGBOEK— maak een aantekening over het pakket in het logbestand.

Het blijkt dat we een keten hebben [tabel - filter] - [verkeer - INPUT] - [actie - DROP] de logica van de acties lijkt alleen maar ingewikkeld. Ik denk dat we er met voorbeelden uit zullen komen en dat alles eenvoudig zal worden.

iptables-opdracht:

  • -A voeg een regel toe aan het einde van de keten.
  • -D verwijder de regel.
  • -I plaats de regel met het gewenste nummer.
  • -L toon alle regels in de huidige keten.
  • -S alle regels weergeven.
  • -F alle regels opruimen.
  • -N een ketting creëren.
  • -X verwijder de keten.
  • -P standaardactie instellen.

Laten we beginnen met specifieke voorbeelden.

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

-A een nieuwe regel toevoegen, INGANG voor inkomende pakketten, -P protocol, een van tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
mh, — — port bestemmingspoort 80 (alleen protocoloptie), -J selecteer een actie als de regel overeenkomt, ACCEPTEREN toestaan. Dat wil zeggen: toestaan inkomend verkeer via TCP-protocol op poort 80.

De vermelde sleutels ondersteunen ook de constructie met behulp van het bord ! . Het keert de voorwaarde om, bijvoorbeeld:

iptables -A INPUT -s! 192.168.0.50 -j DROP

-S bronadres - hostnaam (www.help.com), IP-adres of subnet in CIDR-notatie (192.168.0.1/16), ! inversie, DRUPPEL verbieden. Weiger al het binnenkomende verkeer behalve de bron 192.168.0.50 (als dat niet het geval was ! , en verbied dan alleen vanaf 192.168.0.50)

iptables -A INPUT -s 192.168.0.50 -j DROP

Binnenkomend verkeer van IP weigeren - 192.168.0.50 .

Lijst met regelcriteria:

  • -P Protocol. Het protocol kan ook worden gespecificeerd op nummer of naam, zoals vermeld in /etc/protocols. De waarde "elk protocol" kan worden opgegeven met het woord all of het getal 0. Ook voor de goede orde is er extra opties : --sport(--bronpoort) Hiermee kunt u de uitgaande poort (of het bereik daarvan) opgeven. --dport(--bestemmingshaven) Hiermee kunt u de bestemmingspoort (of het bereik daarvan) opgeven.
  • -S Specificeert het adres van de afzender. Het adres kan een IP-adres zijn (eventueel met masker), domeinnaam(in de laatste twee gevallen, voordat de regel aan de keten wordt toegevoegd, wordt de naam omgezet in een IP-adres).
  • -i Definieert de inkomende netwerkinterface. Als opgegeven naam interface eindigt met een “+” teken (bijvoorbeeld eth +), dan komt het criterium overeen met alle interfaces waarvan de naam begint met de opgegeven naam (etho,eth1).
  • -D Specificeert het adres van de ontvanger. De syntaxis is vergelijkbaar -S .
  • -O Definieert de uitgaande netwerkinterface. De syntaxis is vergelijkbaar -i.

De criteria kunnen ook gecombineerd worden.

iptables -A INPUT -i eth0 -s 192 .168.0.0 -j DROP

Binnenkomende pakketten van een interface weigeren eth0 En ip 192.168.0.0. En naar de interface eth1 de pakketjes gaan door.

Wat als je weet van tevoren niet welke poort je moet openen, waarin u bijvoorbeeld de FTP-server wilt laten werken passieve modus. Module aansluiten De verbindingsstatus zal helpen, en meer specifiek het criterium: ctstate. De module is verbonden via een tag -M.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT

iptables -A INPUT -m conntrack --ctstate NIEUW -p tcp --dport 21 -j ACCEPTEREN # Sta het openen van verbindingen met 21 TCP-poorten toe.

Mogelijke toestanden:

  • NIEUW- de verbinding is niet open, dat wil zeggen dat het pakket het eerste in de verbinding is.
  • GEVESTIGD- het pakket verwijst naar een reeds tot stand gebrachte verbinding. Normaal gesproken worden dergelijke pakketten geaccepteerd zonder extra filtering, zoals het geval is bij RELATED.
  • VERWANT- het pakket opent een nieuwe verbinding, logisch verbonden met reeds bestaande verbindingen, bijvoorbeeld door een datakanaal passief te openen FTP-modus. De verbinding krijgt status VERWANT als het verbonden is met een andere verbinding die het kenmerk heeft GEVESTIGD.
  • ONGELDIG— Het teken INVALID geeft aan dat het pakket niet kan worden geïdentificeerd en daarom geen specifieke status kan hebben.

iptables -A INPUT -m state —state ESTABLISHED,RATETED -j ACCEPT

S taat en de ideologische voorganger van conntrack heeft een enkele --state optie, vergelijkbaar met de --ctstate optie van de conntrack module (maar ondersteunt, in tegenstelling tot deze, geen DNAT- en SNAT-statussen).

Laten we even snel naar de tabel met taxichauffeurs kijken, die u kunt vinden in het bestand /proc/net/ip_conntrack. Hier vindt u een lijst met alle actieve verbindingen.

Tcp 6 300 GEVESTIGD src=128.*.*.* dst=194.*.*.* sport=52524 dport=2223 src=194.*.*.* dst=128.*.*.* sport=2223 dport =52524 mark=0 gebruik=2

De eerste, zoals duidelijk is, is het protocol, dan het decimale getal (ik weet niet wat dat betekent), en dan is er de levensduur van de verbinding. Vervolgens is de status GEVESTIGD, dat wil zeggen dat de verbinding al tot stand is gebracht; er is ook ONBEANTWOORD, wat betekent dat er nog geen antwoordverkeer is geweest. Vervolgens volgen de afzender- en ontvangeradressen, de afzender- en ontvangerpoorten. Verder is alles andersom, VERZEKERD dat deze vlag aangeeft dat de verbinding met vertrouwen tot stand is gebracht en dat dit record niet zal worden gewist zodra het maximaal mogelijke aantal getraceerde verbindingen is bereikt.

Enkele kenmerken van de protocollen.

Een TCP-verbinding wordt altijd tot stand gebracht door het verzenden van drie pakketten, die een verbinding initialiseren en tot stand brengen via welke vervolgens gegevens worden verzonden. De sessie begint met een transmissie SYN pakket, in reactie waarop wordt verzonden SYN/ACK pakket en bevestigt het pakket voor het tot stand brengen van de verbinding ACK .

Zodra de tracer de eerste zag ( SYN) -pakket en wijst er vervolgens de status aan toe NIEUW. Zodra het tweede pakket de tracer passeert ( SYN/ACK), dan krijgt de verbinding de status toegewezen GEVESTIGD.

Met het UDP-protocol is alles een beetje anders; dit protocol voorziet niet in het tot stand brengen en verbreken van een verbinding, maar het grootste nadeel is het gebrek aan informatie over de volgorde waarin pakketten aankomen. Maar vanuit het oogpunt van de tracer is alles hetzelfde als bij TCP. Het eerste pakket dat arriveert, krijgt de status toegewezen NIEUW. Zodra u een antwoordpakket verzendt, wordt de status toegewezen GEVESTIGD. Het enige verschil is dat het ASSURED-statuut alleen wordt toegekend als er al meerdere pakketten zijn uitgewisseld.

Toepassingen voor logboekregels.

iptables maakt het mogelijk om logs bij te houden van individuele pakketten en gebeurtenissen. Gebruik hiervoor de actie LOGBOEK.

iptables -A INPUT -p tcp —syn -j LOG —info op logniveau —log-prefix “INPUT-pakketten “

--log-niveau Wordt gebruikt om het logniveau in te stellen. Voor een volledige lijst met niveaus, zie de manpagina van syslog.conf. Meestal kun je instellen volgende niveaus: debuggen, informatie, kennisgeving, waarschuwing, waarschuwen, fout, fout, kritiek, alert, opduiken En paniek. Logboeken worden naar een bestand geschreven systeemlog.

--log-voorvoegsel De sleutel specificeert de tekst (prefix) die aan alle berichten voorafgaat iptables. Berichten met een specifiek voorvoegsel kunnen dan eenvoudig worden gevonden met behulp van bijvoorbeeld grep. Het voorvoegsel kan maximaal 29 tekens bevatten, inclusief spaties.

1 juni 17:12:20 debian kernel: INPUT-pakketten IN=eth0 OUT= MAC=02:1e:6d:00:e2:1c:00:01:e8:11:73:69:08:00 SRC=125.94. 12.95 DST=194.87.239.104 LEN=40 TOS=0x00 PREC=0x00 TTL=52 ID=38690 PROTO=TCP SPT=12557 DPT=23 WINDOW=1460$ RES=0x00 SYN URGP=0

Populaire iptables-beheeropdrachten.

iptables -L -n --regelnummersBekijk de lijst met regels.

-N aantal poorten en ip in digitale vorm.

--regelnummers lijnnummer.

iptables-F Reset de regels volledig.

iptables -P INGANG ACCEPTEREN Standaardregels voor de INPUT-tabel.
iptables -P UITGANG ACCEPTEREN Standaardregels voor de OUTPUT-tabel.
iptables -P VOORWAARTSE DROP Standaardregels voor de FORWARD-tabel.

iptables -D INGANG 1Een regel verwijderen op basis van het nummer in de keten.

iptables -D INPUT -s 123.45.67.89 -j DROP Verwijder een regel op basis van wat deze doet.

iptables -I VOER IN ... Voeg een regel in aan het begin van een keten.

iptables -I VOER 3 IN ... Of u kunt een specifieke positie opgeven.

OMLEID

De actie REDIRECT is ontworpen om pakketten van de ene set poorten naar de andere binnen hetzelfde systeem om te leiden, zonder de gastheer te verlaten.
REDIRECT werkt alleen in de PREROUTING- en OUTPUT-ketens van de tabel nat. Het toepassingsgebied wordt dus beperkt tot alleen omleiding. Meestal wordt dit gebruikt voor een transparante proxy, wanneer een client van het lokale netwerk verbinding maakt met poort 80 en de gateway pakketten omleidt naar de lokale proxypoort:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --naar-poort 3128

Nieuwe regels worden niet automatisch opgeslagen en worden niet van kracht nadat de server opnieuw is opgestart. Daarom moeten we, na het wijzigen van iptables, de wijzigingen opslaan.

iptables - herstel > /etc/iptablesRegels uit een bestand laden.

Een manier om naar eigen inzicht regels op te slaan en te laden. We hebben alleen kennis gemaakt met de basisprincipes van de iptables-theorie; er zijn natuurlijk veel meer aanpassingsmogelijkheden. We zullen er in meer detail over praten een andere artikel.

Sleutel iptables-concepten Zijn:

    Regel - bestaat uit een criterium, een actie en een teller. Als het pakket aan de criteria voldoet, wordt er actie op ondernomen en wordt het meegeteld in de teller. Mogelijk is er geen criterium; dan wordt impliciet uitgegaan van het criterium “alle pakketten”. Het is ook niet nodig om een ​​actie op te geven - als er geen actie is, werkt de regel alleen als teller. De regels voor elke keten worden geactiveerd in de volgorde waarin ze verschijnen, dus de volgorde is belangrijk.

    • Criterium - logische uitdrukking, dat de eigenschappen van een pakket en/of verbinding analyseert en bepaalt of dat specifieke pakket onder de huidige regel valt. De criteria zijn verbonden door een logische “EN”.

      Actie - een beschrijving van de actie die moet worden uitgevoerd met het pakket en/of de verbinding als deze binnen het bereik van deze regel vallen. Hieronder worden de acties nader beschreven.

      Een teller is een onderdeel van een regel die het aantal pakketten registreert dat onder de criteria van een bepaalde regel valt. De teller houdt ook rekening met het totale volume van dergelijke pakketten in bytes.

    Een keten is een geordende reeks regels. Ketens kunnen worden onderverdeeld in aangepast en basis.

    • De basisketen is de keten die standaard wordt gemaakt wanneer een tabel wordt geïnitialiseerd. Elk pakket moet, afhankelijk van of het voor de host zelf bedoeld is, erdoor gegenereerd is of doorvoer is, de reeks basisketens van verschillende tabellen doorlopen die eraan zijn toegewezen. Bovendien verschilt de basisketen van de gebruikersketen door de aanwezigheid van een “standaardbeleid”. Deze actie is van toepassing op pakketten die niet zijn verwerkt door andere regels in deze keten en de ketens die daaruit worden opgeroepen. Namen van basisketens worden altijd in hoofdletters geschreven (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

      Gebruikersketen - een keten die door een gebruiker is gemaakt. Kan alleen binnen de eigen tabel worden gebruikt. Het wordt aanbevolen om voor dergelijke ketens geen hoofdletters te gebruiken om verwarring met basisketens en ingebouwde acties te voorkomen.

    Tabel - een reeks basis- en gebruikersketens verenigd door een gemeenschappelijke functioneel doel. De namen van tabellen (evenals criteriamodules) zijn geschreven kleine letters, omdat ze in principe niet in conflict kunnen komen met de namen van gebruikersketens. Bij het aanroepen van de opdracht iptables wordt de tabel opgegeven in het formaat -t tabelnaam. Indien niet expliciet gespecificeerd, wordt de filtertabel gebruikt.

Parseren:

# Dump filtertabelregels$ sudo iptables-save -c -t filter # Tabelfilter * filter # INPUT-, FORWARD-, OUTPUT-ketens, hun beleid en tellers:INVOER ACCEPTEREN [ 19302 :9473669 ] :VOORUIT ACCEPTEREN [ 0 :0 ] :UITVOER ACCEPTEREN [ 5462736 :4247599532 ] # Regel: "" - regelteller, "-A INPUT" - keten, "-i em1 -p tcp -m tcp --dport 22" - criteria, "-j ACCEPT" - actie[ 17:1020 ] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPT COMMIT

Architectuur

In het netfiltersysteem worden pakketten door ketens geleid. Een keten is een geordende lijst met regels, en elke regel kan criteria en een actie of overgang bevatten. Wanneer een pakket de keten passeert, controleert het netfiltersysteem één voor één of het pakket aan alle criteria van de volgende regel voldoet, en zo ja, dan voert het een actie uit (als er geen criteria in de regel staan, wordt de actie uitgevoerd voor alle pakketten die de regel passeren). Er zijn veel mogelijke criteria. Een pakket voldoet bijvoorbeeld aan het criterium –source 192.168.1.1 als de pakketheader aangeeft dat de bron 192.168.1.1 is. Het eenvoudigste type sprong, –jump, stuurt het pakket eenvoudigweg door naar het begin van een andere keten. U kunt ook een actie opgeven met –jump. Standaardacties beschikbaar in alle ketens - ACCEPT (overslaan), DROP (verwijderen), QUEUE (verzenden voor analyse extern programma) en RETURN (terugkeren naar de vorige keten voor analyse). Commando's bijvoorbeeld

Iptables -A INPUT --source 192.168.1.1 --jump ACCEPT iptables -A INPUT --jump other_chain

betekent "toevoegen aan het einde van de INPUT-keten volgende regels: sla pakketten van 192.168.1.1 over, en alles wat overblijft wordt voor analyse naar de andere_keten verzonden."

Ketens

Er zijn 5 soorten standaardkettingen ingebouwd in het systeem:

    PREROUTING - voor de initiële verwerking van inkomende pakketten.

    INPUT - voor inkomende pakketten die rechtstreeks worden geadresseerd lokaal proces(client of server).

    FORWARD - voor binnenkomende pakketten die naar de uitgang worden doorgestuurd (merk op dat doorgestuurde pakketten eerst door de PREROUTING-keten gaan, daarna FORWARD en POSTROUTING).

    OUTPUT - voor pakketten die zijn gegenereerd door lokale processen.

    POSTROUTING - voor de definitieve verwerking van uitgaande pakketten.

Je kunt ook je eigen ketens maken en vernietigen met behulp van het hulpprogramma iptables.

Tafels

De ketens zijn onderverdeeld in 4 tabellen:

    Raw - bekeken voordat het pakket naar het statusdetectiesysteem wordt verzonden. Zelden gebruikt, bijvoorbeeld om pakketten te markeren die NIET door het statusdetectiesysteem mogen worden verwerkt. Om dit te doen, specificeert de regel de actie NOTRACK. Bevat PREROUTING- en OUTPUT-ketens.

    Mangle - bevat regels voor het wijzigen van (meestal de header) IP-pakketten. Het ondersteunt onder andere TTL (Time to Live), TOS (Type of Service) en MARK-acties (voor het wijzigen van de TTL- en TOS-velden, en voor het wijzigen van pakketmarkeringen). Zelden nodig en kan gevaarlijk zijn. Bevat alle vijf standaardketens.

    Nat - Kijkt alleen naar pakketten die een nieuwe verbinding tot stand brengen (volgens het statusdetectiesysteem). Ondersteunt DNAT-, SNAT-, MASQUERADE-, REDIRECT-acties. Bevat PREROUTING-, OUTPUT- en POSTROUTING-ketens.

    Filter - hoofdtabel, standaard gebruikt als de tabelnaam niet is opgegeven. Bevat de INPUT-, FORWARD- en OUTPUT-ketens.

Ketens met dezelfde naam, maar in verschillende tabellen, zijn volledig onafhankelijke objecten. Raw PREROUTING en mangel PREROUTING bevatten bijvoorbeeld meestal ander setje regels; pakketten gaan eerst door de onbewerkte PREROUTING-keten en vervolgens door de mangel PREROUTING-keten.

Staten

In het netfiltersysteem kan elk pakket dat door het statusdetectiemechanisme gaat er één hebben vier mogelijk luidt:

    NIEUW - het pakket opent een nieuwe sessie. Een klassiek voorbeeld is een TCP-pakket met de SYN-vlag.

    GEVESTIGD - Het pakket maakt deel uit van een reeds bestaande sessie.

    GERELATEERD - Het pakket opent een nieuwe sessie die is gekoppeld aan een reeds geopende sessie. Bijvoorbeeld tijdens een sessie passieve FTP maakt de client verbinding met poort 21 van de server, vertelt de server de client het nummer van een tweede, willekeurig geselecteerde poort, waarna de client verbinding maakt met de tweede poort om bestanden over te dragen. In dit geval wordt de tweede sessie (bestandsoverdracht op de tweede poort) gekoppeld aan een reeds bestaande sessie (de oorspronkelijke verbinding met poort 21).

    ONGELDIG - alle andere pakketten.

Diagram van de passage van tafels en kettingen

Vereenvoudigd diagram van de passage van tabellen en ketens:

Detaildiagram:

Basisconfiguratie

Hieronder ziet u een voorbeeld van een eenvoudige statische iptables-configuratie. Bij het opslaan en laden van een dergelijke configuratie moet u rekening houden met de mogelijkheid van wijzigingen daarin vanuit andere diensten, bijvoorbeeld Fail2ban. Bovendien moet bij gebruik van IPv6-adressering de configuratie voor IPv6 onafhankelijk van IPv4 worden uitgevoerd.

IPv4

sudo iptables-opslaan

Maak een script met een dump van iptables-regels:

sudo nano / etc/ netwerk/ if-up.d/ iptables-rules

Kopieer de volgende code:

#!/sbin/iptables-restore -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -m conntrack -- ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited #-A OUTPUT -p icmp -j ACCEPT #-A OUTPUT -o lo - j ACCEPTEER #-A OUTPUT -j REJECT --reject-met icmp-host-verboden VERBINDEN

Wij vullen aan met de nodige regels rekening houdend met iptables-save.

sudo chmod +x / etc/ netwerk/ if-up.d/ iptables-rules sudo / etc/ netwerk/ if-up.d/ iptables-rules

IPv6

Bekijk huidige configuratie:

sudo ip6tables-opslaan

Maak een script met een dump van ip6tables-regels:

sudo nano / etc/ netwerk/ if-up.d/ ip6tables-rules

Kopieer de volgende code:

#!/sbin/ip6tables-restore # De filtertabel en zijn ketens* filter:INPUT ACCEPTEREN [ 0 :0 ] :FORWARD ACCEPTEREN [ 0 :0 ] :OUTPUT ACCEPTEREN [ 0:0 ] # Sta verbonden en tot stand gebrachte verbindingen toe-A INPUT -m conntrack --ctstate GERELATEERD, GEVESTIGD -j ACCEPT # Sta service-icmp-verkeer toe-A INPUT -p ipv6-icmp -j ACCEPTEREN # Sta vertrouwd verkeer toe naar de loopback-interface-A INPUT -i lo -j ACCEPTEREN # U kunt hier invoegen aanvullende regels voor de INPUT-keten # Schakel al het andere uit voor INPUT-A INPUT -j REJECT --reject-met icmp6-adm-verboden # De volgorde en betekenis van de regels voor de FORWARD- en OUTPUT-ketens zijn vergelijkbaar met INPUT-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited # Het filteren van de OUTPUT-keten wordt sterk afgeraden #-A OUTPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT #-A UITVOER -p ipv6-icmp -j ACCEPTEREN#-A UITVOER -o lo -j ACCEPTEREN #-A OUTPUT -j REJECT --reject-met icmp6-adm-verboden VERBINDEN

Wij vullen aan met de nodige regels rekening houdend met ip6tables-save.

Opslaan en sluiten: Ctrl + O, Enter, Ctrl + X

Maak het script uitvoerbaar en laad de iptables-regels:

sudo chmod +x / etc/ netwerk/ if-up.d/ ip6tables-rules sudo / etc/ netwerk/ if-up.d/ ip6tables-rules

Aanvullende regels

Hieronder staan ​​enkele relatief veelgebruikte regels. INPUT/OUTPUT-ketens worden gebruikt om lokaal verkeer te filteren. Voor transitverkeer moet u de FORWARD-keten gebruiken.

Toegang op afstand

# remote.ssh -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT # remote.rdp -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 3389 -j ACCEPTEREN # remote.vnc -A INPUT -p tcp -m conntrack --ctstate NIEUW -m tcp --dport 5900 -j ACCEPTEREN

Web- en bestandsservices

# web.http, web.https -A INPUT -p tcp -m conntrack --ctstate NIEUW -m multiport -A INPUT -p tcp -m conntrack --ctstate NIEUW -m tcp --dport 21 -j ACCEPTEREN

E-mail en instant messages

# mail.pop3, mail.pop3s -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 110,995 -j ACCEPT # mail.imap, mail.imaps -A INPUT -p tcp -m conntrack -- ctstate NIEUW -m multiport --dports 143.993 -j ACCEPT # mail.smtp, mail.smtps -A INPUT -p tcp -m conntrack --ctstate NIEUW -m multiport --dports 25.465 -j ACCEPT # im. xmpp -A INPUT -p tcp -m conntrack --ctstate NIEUW -m multiport --dports 5222 ,5223 -j ACCEPT # im.icq.oscar -A INPUT -p tcp -m conntrack --ctstate NIEUW -m tcp -- dpoort 5190 -j ACCEPTEREN

Netwerkdiensten

# network.openvpn.vpn -A INPUT -p udp -m conntrack --ctstate NIEUW -m udp --dport 1194 -j ACCEPTEREN # network.squid.proxy -A INPUT -p udp -m conntrack --ctstate NIEUW -m udp --dport 3128 -j ACCEPT # netwerk.dns -A INPUT -p tcp -m conntrack --ctstate NIEUW -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m conntrack --ctstate NIEUW -m udp --dport 53 -j ACCEPTEREN # netwerk.ntp -A INPUT -p udp -m conntrack --ctstate NIEUW -A INPUT -p udp -m conntrack --ctstate NIEUW -m udp --dport 69 -j ACCEPTEREN # netwerk.dhserver.dhcp.discover-request-A INPUT -p udp -m conntrack --ctstate NIEUW -m udp --sport 68 --dport 67 -j ACCEPTEREN # netwerk.dhclient.dhcp.discover-request #-A UITGANG -p udp -m conntrack --ctstate NIEUW -m udp --sport 68 --dport 67 -j ACCEPTEREN # netwerk.dhserver.dhcp.offer-ack #-A UITGANG -p udp -m conntrack --ctstate NIEUW -m udp --sport 67 --dport 68 -j ACCEPTEREN

Testen en debuggen

Bekijk de huidige configuratie voor IPv4 en IPv6:

sudo iptables-opslaan sudo ip6tables-opslaan

Loggen

Traceren

Kernelmodules

Geladen modules bekijken:

lsmod |

grep -E "^ip|^nf" |

soort

Om extra modules te laden is het handig om gebruik te maken van automatisch aanvullen: 2x Tab

sudo modprobe nf sudo modprobe modules-load.d Inleiding en geschiedenis iptables 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(Voor IPv6 - ip6tabellen). Naar netfilter/iptables was Ipketens , dat was opgenomen in de Linux 2.2-kernels. Vóór ipchains in Linux waren er de zogenaamde, 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 protocolstack Linux-kernels, want vóór het uiterlijk 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 heeft iptables de mogelijkheden voor statusdetectie van Linux uitgebreid, waardoor firewalls kunnen worden gemaakt 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. Daarnaast kunnen, indien nodig, de instellingen CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (filtertabel), CONFIG_IP_NF_NAT (nat-tabel), CONFIG_BRIDGE_NETFILTER, evenals talrijke extra modules: CONFIG_IP_NF_CONNTRACK (verbinding volgen), CONFIG_IP_NF_FTP (hulpmodule voor volgen FTP-verbindingen), CONFIG_IP_NF_MATCH_* ( extra soorten pakketmatchingspatronen: LIMIT, MAC, MARK, MULTIPORT, TOS, TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (extra acties in regels: REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS), CONFIG_IP_NF_COMPAT_IPCHAINS voor compatibiliteit met ipchains, CONFIG_BRIDGE_NF_EB TABLES en CONFIG_BRIDGE_EBT_* voor het werken in bridge-modus, andere CONFIG_IP_NF_* en CONFIG_IP6_NF_*. Het is ook handig om CONFIG_PACKET op te geven.

Zoals je kunt zien, nat tafel En mangel kunt u de ontvanger of afzender wijzigen netwerk pakket. Dit is de reden waarom het netwerkpakket meerdere keren wordt gecontroleerd aan de hand van de routeringstabel.

Toestandsdetectiemechanisme (conntrack)

Hierboven in de tekst werd het concept ‘staatsdefinitie’ 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 naar " 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). Staten huidige verbindingen conntrack wordt opgeslagen 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 aangeeft 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). Bijvoorbeeld stelt selectieparameters in.

geeft aan welke actie moet worden ondernomen als de selectiecriteria in de regel overeenkomen (

: geef het pakket door aan een andere reeks regels, laat het pakket vallen, stuur een foutmelding naar de bron...). Beschrijving Hieronder staan ​​de opdrachten en parameters van het iptables-hulpprogramma:
Teams
Parameter 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.
--regelnummers 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, 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. De nieuwste versies van iptables (met name 1.4.3.2 en hoger) ondersteunen deze syntaxis echter 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:

: geef het pakket door aan een andere reeks regels, laat het pakket vallen, stuur een foutmelding naar de bron...). Beschrijving Hieronder staan ​​de opdrachten en parameters van het iptables-hulpprogramma:
Algemene instellingen
--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 een domeinnaam opgeeft die naar meerdere IP-adressen verwijst, 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)
Poortbron, alleen mogelijk voor protocollen --protocol tcp of --protocol udp iptables -A INPUT --protocol tcp --source-poort 25
--bestemmingshaven
(--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 behoren tot de tot stand gebrachte verbinding)
  • 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:

  • ACCEPTEREN- 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.
  • enz.

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:

: geef het pakket door aan een andere reeks regels, laat het pakket vallen, stuur een foutmelding naar de bron...). Beschrijving Hieronder staan ​​de opdrachten en parameters van het iptables-hulpprogramma:
DNAT (Destination Network Address Translation)
--naar-bestemming specificeert welk IP-adres moet worden vervangen als bestemmingsadres. In het voorbeeld in alle pakketten TCP-protocol, die op 1.2.3.4 kwam, 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 maximale logniveau ingesteld 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 wordt alles naar syslog verzonden TCP-pakketten in de filtertabel van de INPUT-keten met het INRUT-filtervoorvoegsel. iptables -A INPUT -p tcp -j LOG --log-voorvoegsel "INRUT-filter"
--log-ip-opties Maakt het mogelijk om binnen te treden diverse informatie uit de IP-pakketheader. iptables -A FORWARD -p tcp -j LOG --log-ip-opties
enz...

Dit concludeert de theorie over het netfilter/iptables-netwerkfilter. In het volgende artikel geef ik praktische voorbeelden om deze theorie onder de knie te krijgen.

Cv

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 te organiseren diverse schema's filteren en manipuleren van netwerkpakketten. 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. Voor het filteren van pakketten wordt bijvoorbeeld de filtertabel gebruikt, die is opgenomen in drie standaardketens en kan zijn opgenomen in door de gebruiker gespecificeerde ketens. Het pad van het pakket eindigt bij de uitgaande netwerkinterface of bij levering aan een lokaal proces/toepassing.

Literatuur

Een flink aantal interessante informatie in het Russisch vindt u hier:

  • 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!