iptables: Hur man konfigurerar Linux-brandväggen för att skydda din server

iptables: Hur man konfigurerar Linux-brandväggen

iptables är brandvägg Använd på Linux-baserade operativsystem. Även om vi på senare år har nftables installerade som standard, kan du fortfarande använda iptables-syntaxen för att konfigurera brandväggen i vårt operativsystem, som Debian, ubuntu och även routerns brandvägg om den är baserad på Linux. Att känna till iptables är mycket viktigt för att hålla vårt lokala nätverk skyddat från intrång, detta beror på att iptables kommer att ge oss möjligheten att tillåta eller neka den trafik som vi vill ha. Idag i den här artikeln kommer vi att förklara hur iptables fungerar och exempel på avancerad användning.

Huvuddragen hos iptables

iptables är programvara som ansvarar för att fungera som en brandvägg eller brandvägg i vårt nätverk. Det är en mycket viktig del av operativsystem, och det är speciellt utformat för att tillåta auktoriserad åtkomst och blockera obehörig åtkomst. En brandvägg upprättar en kontrollpunkt, både inkommande och utgående paket. Dessutom är det mycket viktigt att ange att en brandvägg skyddar från trafik som korsar olika nätverk, men den skyddar inte det lokala nätverket från attacker som sker inom samma subnät. .

iptables är brandväggen som ingår i Linux-system sedan version 2.4, därför är den inbyggd som standard i system som Debian, Ubuntu, Linux Mint och många andra, även om för närvarande nftables används internt, eftersom iptables anses gammalt, även om iptables idag är används fortfarande i stor utsträckning i Linux-systemadministrationens värld och även i nätverksadministrationens värld.

Denna brandvägg har flera tabeller skapade som standard, med syftet att i hög grad underlätta möjligheten att lägga till olika kedjor och regler. En mycket viktig detalj är att vi som standard har allt inställt på "acceptera", det vill säga all trafik är tillåten, det finns ingen regel för att neka trafik, därför är den här brandväggen först tillåten, men vi kan ändra standardpolicyn mycket enkelt och snabbt.

När vi väl känner till de viktigaste egenskaperna kommer vi att visa dig driften och arkitekturen för denna brandvägg.

Drift och arkitektur

Denna brandvägg är baserad på regler som vi kommer att införa en efter en, dess funktion bygger på att tillämpa regler som brandväggen själv ansvarar för att exekvera. Även om iptables kan verka enkla att använda till en början, om du vill göra det på ett avancerat sätt är det mer komplicerat. Därefter kan du se en sammanfattning av hur iptables fungerar.

Iptables-strukturen är baserad på tabeller, av vilka många redan är skapade som standard. Inuti tabellerna har vi strängarna, som vi också har några skapade som standard. Slutligen, inne i kedjorna har vi de olika reglerna som vi kan konfigurera. På följande foto kan du se ett litet schema över hur brandväggens arkitektur skulle se ut:

Som standard har vi totalt fyra tabeller:

  • filtertabell : det är standardtabellen, om vi inte definierar en tabell för att lägga till en regel, kommer den alltid att gå till filtertabellen. I den här tabellen har vi totalt tre standardkedjor, beroende på vad som intresserar oss, måste vi använda en eller annan kedja: INPUT (detta är paketen i inkommande riktning, till själva brandväggen), OUTPUT (de är utgående paket, från servern ut) och FORWARD (används för att filtrera paket som går från ett nätverksgränssnitt till ett annat).
  • nat tabell: denna tabell är ansvarig för att göra NAT, omvandla den privata IP till offentlig och vice versa. Inom NAT har vi tre kedjor: PREROUTING (ändrar paket innan de dirigeras, här görs DNAT eller portvidarebefordran), POSTROUTING (ändrar paket efter att de dirigerats, här görs SNAT eller MASQUERADE) och OUTPUT (paket genererade av brandväggen som den konfigurerade NAT kommer att passera).
  • Mangel tabell: den här tabellen är ansvarig för att ändra paket, det är där QoS konfigureras för tjänstens kvalitet, ändra TCP-huvuden, etc. I den här tabellen har vi de fem kedjorna: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
  • obehandlad tabell – Den här tabellen används inte ofta eftersom paket färdas utan anslutningstillstånd. Vi har kedjan PREROUTING och OUTPUT.

I följande bild kan du se en liten sammanfattning av de kedjor som vi har i de olika tabellerna:

Åtgärden när du lägger till en regel är som följer:

  • Reglerna som vi lägger till i kedjorna har alltid ett mål (-j i regeln).
  • När brandväggen tar emot ett paket, kontrollerar den om paketet matchar en regel som vi har tagit in. Om det matchar exekveras målkommandot, annars går det till nästa regel till slutet av kedjan.
  • Reglerna kontrolleras i sekventiell ordning, från den första regeln till den sista. Ordningen är väldigt viktig, om vi blockerar allt först och sedan tillåter något mer specifikt kommer vi att blockera all trafik och den mest specifika regeln kommer inte att kontrolleras.
  • I händelse av att ingen regel uppfyller paketet, kommer policyn för kedjan som vi har (global regel) att användas.

Syftet med de olika reglerna är följande:

  • ACCEPTERAR: accepterar paketet och skickar det till nästa nivå, en webbserver, SSH, FTP etc.
  • DROP: blockerar paketet och skickar det inte till nästa nivå.
  • QUEUE: är ett speciellt mål, som skickar paketet i en kö avsedd för bearbetning av användarutrymme. Detta kan användas för att köra andra externa program.
  • RETURN: har samma effekt som om vi hade nått slutet av kedjan. Om regeln fanns i en av standardkedjorna exekveras kedjans policy. För en regel som finns i en användardefinierad kedja, avslutas den och fortsätter genom kedjan före hoppet, precis efter regeln den hoppades med.

När vi väl vet hur det fungerar och dess arkitektur kommer vi att se olika kommandon för att utföra olika åtgärder.

 

Viktiga kommandon för att använda iptables

Det första vi måste ta hänsyn till när vi konfigurerar denna brandvägg är att vi behöver superanvändarbehörigheter för att utföra de olika beställningarna. Det är absolut nödvändigt för dem att springa, annars fungerar det inte. Följande kommandon har inte "sudo" eftersom vi antar att du redan är superanvändare (sudo su).

I de senaste versionerna av Linux är det inte möjligt att stoppa iptables-tjänsten, för att tillåta all nätverkstrafik och lämna brandväggen med standardparametrarna måste vi köra följande kommandon:

  • sudo iptables -F
  • sudo iptables -X
  • sudo iptables -t nat -F
  • sudo iptables -t nat -X
  • sudo iptables -t mangle -F
  • sudo iptables -t mangle -X
  • sudo iptables -P INPUT ACCEPT
  • sudo iptables -P FRAMÅT ACCEPTERA
  • sudo iptables -P OUTPUT ACCEPTERAR

När vi har gjort detta kommer vi att få brandväggen "återställd" och tillåta allt. Nu när vi vet hur man återställer det, låt oss se de olika kommandona.

 

Se aktuella tabeller

Om du vill se innehållet i de olika kedjorna och reglerna som vi har i en viss tabell, så kan du se hur de skulle se ut:

  • iptables -t filter –lista
  • iptables -t mangle -lista
  • iptables -t nat –lista
  • iptables -t raw -lista

 

Huvudargument och vad de är till för

  • -t, –table table Välj den tabell vi vill ha
  • -A, –lägg till kedja regel-specifikation Vi lägger till en ny regel i en viss kedja
  • -C, –kolla kedjans regelspecifikation Vi kontrollerar att det finns en viss regel i en viss kedja
  • -D, –delete chain rule-specification Vi tar bort regeln som vi lägger i en viss kedja
  • -D, –delete chain rulenum Vi tar bort regelnumret X i en viss kedja
  • -I, –insert chain [rulenum] regelspecifikation Vi infogar en ny kedja med ett nummer i en viss tabell
  • -R, –replace chain rulenum regel-specifikation Ersätter en given kedja i en tabell, som används för att flytta numret.
  • -L, –list [kedja] Visa listan över regler för en kedja
  • -F, –flush [kedja] Spola alla regler från en given kedja.
  • -Z, –noll [kedja [regelnum]] Ställer in räknarna för en given regel till 0.
  • -N, –ny kedja Vi skapar en ny kedja i ett visst bord
  • -X, –delete-chain [kedja] Vi tar bort en viss kedja (tom) i en viss tabell
  • -P, –policykedjemål Vi tillämpar standardpolicyn, den är uppfylld när ingen regel för kedjorna är uppfylld.
  • -E, –rename-chain old-chain new-chain Byt namn på en tidigare tillagd kedja
  • -h, visa hjälp
  • -v, –verbose Output används tillsammans med –L, för att visa mer information än kommandot –L ger.
  • -n, -numeriska IP-adresser och portnummer visas som nummer. Till exempel, om vi filtrerar port 80, med den typiska –L kommer www att visas, och inte 80.
  • -x, –exact Visa det exakta värdet på paket- och byteräknaren istället för att använda K, M eller G för värdena.
  • –line-numbers När listan med regler visas, kommer den att visa regelns exakta nummer. Idealisk för att använda –D och numret (radera) eller –I för att införa före eller efter nämnda regel.

 

Huvudförhållanden

  • -p , –protokollprotokoll. Filtrera paketet efter protokoll, det angivna protokollet kan vara: tcp, udp, Idplite, icmp, esp, ah, sctp.
  • -s , –källadress[/mask][,...] Käll-IP-adress för paketet. Vi kan ha en IP eller ett subnät (som indikerar masken i CIDR-format). Vi kan också lägga in värdnamn (domäner, webbplatser etc), men det är en dålig idé eftersom det inte är effektivt. Flera källadresser kan specificeras (192.168.1.1,192.168.1.2) men det kommer att skapa olika regler för att uppfylla dem.
  • -d , –destinationsadress[/mask][,...] Destinations-IP-adressen för paketet. Den beter sig precis som -s.
  • -m , –match match. Anger om vi vill anropa de utökade modulerna för iptables för att utföra vissa åtgärder som:
    • Sätt flera käll- och destinationsportar (multiportmodul).
    • Styranslutningar (anslutningsmodul).
    • Undvik brute force (nyare modul, idealisk för SSH).
    • Begränsa antalet anslutningar (modulo limit och connlimit).
    • IP-adressintervall (iprange).
  • -j , –hoppmål. Specificerar syftet med regeln, om vi vill acceptera, neka och till och med vidarebefordra paketet till en annan kedja för vidare behandling. Alltid i någon regel kommer vi att ha ett -j för att berätta vad vi vill göra. Om vi ​​inte lägger till ett –j kommer regeln att läggas till och den kommer att räkna paketen, men den gör ingenting. Om vi ​​använder -j för att vidarebefordra till en annan kedja, när den andra kedjan är klar, kommer den att återgå till originalet.
  • -g , –goto kedja. Den används för att vidarebefordra trafiken till en annan kedja, men till skillnad från jump kommer den inte att gå tillbaka till den ursprungliga kedjan där den kom in.
  • -i , –namn i gränssnittet. Namnet på gränssnittet genom vilket ett paket tas emot. Det fungerar bara för inmatningssträngar som INPUT, FORWARD och PREROUTING. Om vi ​​uttrycker det betyder det allt utom det gränssnittet. Om vi ​​sätter ett + i slutet av namnet, kommer alla gränssnitt med början av namnet att ta tag i det för kontroll. Låt oss föreställa oss eth0, eth1 och eth2. Om vi ​​vill sätta alla tre räcker det med att bara sätta eth+.
  • -o , –ut-gränssnittsnamn. Namnet på gränssnittet genom vilket ett paket lämnar. Den är endast giltig för utdatasträngar som OUTPUT, FORWARD och POSTROUTING.

 

Villkor endast om du använder TCP eller UDP

Om du använder TCP- eller UDP-protokollet kanske du vill filtrera efter käll- och/eller destinationsportnummer, då har du två argument som du kan använda:

  • –sport –källa-port. Välj källportar för att tillåta eller neka. Om vi ​​använder! utesluter.
  • –dport –destination-port. Välj destinationsportar att tillåta eller neka. Om vi ​​använder! utesluter.

Det finns många fler villkor för en avancerad konfiguration av brandväggen, men vi har redan listat de elementära.

 

Ställ in standardpolicyn

Principer används så att när en regel inte hittas i kedjan, exekveras standardpolicyn. Standardpolicyn för alla kedjor är ACCEPT, men det finns två alternativ: ACCEPT eller SLÄPP

-P, –mål för policykedjan

Exempel:

  • iptables -P INPUT DROP
  • iptables -P FRAMÅT DROP
  • iptables -P OUTPUT DROP

Med detta kommer vi att få slut på internet, så härnäst måste vi börja skapa tillåtande regler.

Nedan kan du se alla policyer vi har i de olika tabellerna:

  • iptables -t filter -P (INPUT | OUTPUT | FRAMÅT) (ACCEPTERA | SLAPP)
  • iptables -P (INPUT | OUTPUT | FRAMÅT) (ACCEPTERA | SLÄPP)
  • iptables -t mangle -P (INGÅNG | UTGÅNG | FRAMÅT | FÖRUTSÄTTNING | POSTROUTING) (ACCEPTERA | SLAPP)

 

Visa brandväggsstatus

Parametern -L visar reglerna som vi har konfigurerat. V låter dig få mer information om anslutningarna och N returnerar IP-adresserna och deras motsvarande portar utan att gå igenom en DNS servern.

  • iptables -L -n -v

Detta är ett av de viktigaste kommandona för att se brandväggens status.

 

Moduler (-m match) av iptables

 

multiport

Det är en förlängning av iptables som ger oss möjligheten att gruppera liknande regler med olika TCP- och UDP-portar i en. Multiport låter dig lägga flera portar överhoppade, och även flera portar i rad, det maximala är 15 portargument. Exempel:

  • iptables –A INPUT –p tcp –m multiport –dports 80,81,1000:1200 –j ACCEPTERA

Tack vare denna modul har vi möjlighet att använda flera portar i samma regel.

 

iprange

iprange tillåter oss att sätta flera käll- eller destinations-IP-adresser samtidigt, utan att behöva sätta dussintals regler. Det låter dig också sätta både käll- och destinations-IP, syntaxen är som följer:

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

Driften av denna regel är ganska enkel, vi sätter helt enkelt start-IP och slut-IP.

 

Begränsa

Connlimit-modulen är ansvarig för att begränsa antalet samtidiga anslutningar som görs av en IP-adress, den är idealisk för att begränsa antalet anslutningar för att undvika DoS.

  • –anslutningsgräns upp till n . Vi kontrollerar om antalet anslutningar är lika med eller mindre än N (då kan vi tillåta eller neka).
  • –connlimit-above n . Vi kontrollerar om antalet anslutningar är större än N (då kan vi tillåta eller neka).
  • –connlimit-mask prefix_length . Vi markerar efter subnätsintervall (det är samma sak som en värd som gör 2 anslutningar, två värdar på samma subnät gör 1 anslutning vardera).
  • –connlimit-saddr . Tillämpa begränsningen på källgruppen, det är standard om inget anges.
  • –connlimit-daddr . Tillämpar begränsningen på målgruppen.

Låt oss till exempel säga att vi bara vill tillåta två SSH-anslutningar per klient:

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

Däremot kan vi göra den kompletterande regeln, sätta ett acceptera upp till 2 anslutningar.

 

conntrack

Denna modul används för att spåra anslutningarna, den används för att hantera inmatning och utmatning av paket före och efter upprättandet av anslutningen. Inom denna modul finns det flera alternativ, men det viktigaste är -ctstate som låter oss acceptera eller neka olika typer av paket. Inom ctstate har vi flera stater, följande sticker ut:

  • INVALID: Det mottagna paketet är ogiltigt och tillhör inte någon anslutning.
  • NYTT: Nya anslutningar som görs, eller som är associerade med en anslutning som ännu inte är dubbelriktad.
  • ETABLERADE: Etablerade förbindelser, de går igenom NY först sedan de har fått svar
  • RELATERAT: Ett paket som är relaterat till, men inte är en del av, en befintlig anslutning, till exempel passiv FTP.

Låt oss föreställa oss att vi vill komma åt vilken sida som helst, men vi vill inte att absolut ingen ska komma åt oss.

  • iptables –P INPUT DROP
  • iptables -A INPUT -m conntrack –ctstate ETABLISHED,RELATED -j ACCEPT

 

Begränsa

Limitmodulen tillåter oss att begränsa både trafik och antalet loggar som ska skrivas till sysloggen som anslutningsförsök. Den har två huvudargument:

  • –gräns N . Detta argument anger det maximala antalet genomsnittliga matchningar per sekund (N/s), minut (N/m), timme (N/h) eller dag (N/d) som ska tillåtas. N anger numret
  • –limit-burst N . Indikerar den längsta skuren som kan inträffa innan du kontrollerar limit –limit.

Standardvärdet om inget anges är 3 matchningar per timme, i skurar om 5. Föreställ dig följande regel: "iptables -A INPUT -m limit -j LOG", operationen är som följer:

  • Första gången denna regel träffas loggas de första fem paketen.
  • Efteråt kommer det att dröja tjugo minuter innan ett paket omregistreras med denna regel (3 matcher mellan 60 minuter är lika med 20 minuter, eftersom det är MEDEL).
  • Dessutom, var tjugonde minut som går utan att ett paket når regeln, kommer skuren att hämta ett paket.
  • Om inget händer under 100 minuter kommer skuren att laddas upp helt; sedan tillbaka till utgångsläget.

 

Senaste

Den senaste modulen används för att begränsa antalet anslutningar per sekund på IP-nivå, detta är idealiskt för att skydda oss från attacker på SSH-porten eftersom en angripare kommer att prova flera lösenord. Om vi ​​till exempel vill skydda vår SSH kan vi köra följande regel:

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m recent –set –name ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m state –state NYTT -m nyligen –rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j DROP

Denna regel tillåter endast fyra anslutningsförsök inom 60 sekunder, det är ett "glidande" fönster.

 

NAT

Denna brandvägg är också ansvarig för NATing av vår anslutning. För att göra NAT för vår publika IP (eller gränssnitt som har denna offentliga IP), måste vi sätta:

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

Det normala är att använda MASQUERADE för att göra NAT oavsett vilken IP-adress det fysiska eller logiska gränssnittet har.

För att öppna portar måste vi lägga till en regel i PREROUTING-kedjan i NAT-tabellen.

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

Tabellen PREROUTING tillåter oss också att modifiera portarna i farten, så att om vi tar emot paket på port 2121 kan vi transformera det till 21.

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

När vi känner till denna brandvägg i detalj kommer vi att se de grundläggande exemplen på användning och även de mest avancerade.

 

Exempel på grundläggande användning

Denna brandvägg är mycket komplett och vi har hundratals kommandon som vi kan utföra för att utföra olika åtgärder. I den här artikeln kommer vi att ge dig några lättförståeliga exempel för en första inställning till denna brandvägg.

Blockera IP-adressen 192.168.1.10 från att göra någon kommunikation till vår server:

  • iptables -A INPUT –s 192.168.1.10 –j DROP

Blockera IP-adresserna 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 från att göra någon kommunikation till vår server:

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

Blockera hela 192.168.2.0/24-undernätet från att göra någon kommunikation till vår server, förutom IP-adressen 192.168.2.20, som skulle vara tillåten:

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

Blockera IP-adressen 192.168.4.50 så att vi inte kan kommunicera:

  • iptables –A OUTPUT –d 192.168.4.50 –j DROP

Blockera IP-adresserna 192.168.4.51 och 192.168.4.52 så att vi inte kan kommunicera:

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

Blockera åtkomst till www.google.es från iptables:

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

Vi vill blockera åtkomst till vår server från MAC 00:01:02:03:04:05, och resten tillåter allt:

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

Vi vill tillåta åtkomst till vår server till MAC-adressen MAC 00:01:02:03:04:06, och resten nekar allt:

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ACCEPTERA
    iptables -A INGÅNG -j DROP

Blockera IP-adressen 192.168.1.10 för ping från vår server:

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

Blockera IP-adresser 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 från att PINGA vår server (i en enda regel):

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

Blockera hela 192.168.2.0/24-undernätet så att de inte PINGAR vår server, förutom IP-adressen 192.168.2.20, som skulle vara tillåten:

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

Blockera IP-adressen 192.168.4.50 så att vi inte kan pinga den.

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

Blockera IP-adresserna 192.168.4.51 och 192.168.4.52 så att vi inte kan pinga dem.

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

Blockera åtkomst till www.google.es från iptables.

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

Som du kan se är operationen ganska enkel med reglerna baserade på IP med ursprung och destination. Vi kan också använda iprange-modulen för att konfigurera en rad IP-adresser:

Blockera en rad IP-adresser från 192.168.5.1 till 192.168.5.50 från att kunna pinga från vår server.

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

Vi kan även filtrera ICMP-protokollet på ett mer avancerat sätt. Låt oss föreställa oss att vi har en användare som vill kunna pinga vilken värd som helst, men som inte vill att NÅGON ska kunna pinga honom. Hur kan vi göra det med iptables om PING själv har dubbelriktad kommunikation?

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

Blockera all inkommande åtkomst via eth0-gränssnittet (endast), vilket tillåter eth1-åtkomst.

  • iptables -A INPUT -i eth0 -j DROP
  • iptables -A INGÅNG -i eth1 -j ACCEPTERA

Blockera utgående trafik på eth0-gränssnittet (endast), vilket tillåter eth1-åtkomst.

  • iptables -A OUTPUT -o eth0 -j DROPPA
  • iptables -A OUTPUT -o eth1 -j ACCEPTERA

Tillåt all inkommande och utgående trafik på eth0 och neka all inkommande eller utgående trafik på eth1.

  • iptables -A INGÅNG -i eth0 -j ACCEPTERA
  • iptables -A OUTPUT -o eth0 -j ACCEPTERA
  • iptables -A INPUT -i eth1 -j DROP
  • iptables -A OUTPUT -o eth1 -j DROPPA

Om du vill börja se hur TCP- och UDP-protokollet fungerar, här är några exempel:

Blockera webbåtkomst till www.google.es och tillåt allt annat (ping) till exempel.

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

Blockera FTP-åtkomst till valfri IP eller domän och tillåt allt annat.

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

Blockera SSH-åtkomst till IP 192.168.1.50 och tillåt allt annat.

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

Blockera Telnet-åtkomst till undernätet 192.168.2.0 och tillåt allt annat.

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

Blockera 192.168.1.50 åtkomst till vår webbserver.

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

Blockera 192.168.1.150 och 192.168.1.151 åtkomst till vår SSH-server.

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

Blockera åtkomst av hela 192.168.2.0/24-undernätet till vår telnet-tjänst

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

Blockera allas åtkomst till OpenVPN-servern, förutom IP-adressen 77.77.77.77 som är tillåten.

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

Blockera DNS-åtkomst till 8.8.8.8 och tillåt allt annat (ping) till exempel.

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

Blockera åtkomst till port 1194 till valfri IP eller domän och tillåt allt annat.

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

Vi har en DNS-server på vår server. Vi vill att endast datorer på undernätet 192.168.1.0/24 ska kunna kommunicera med det och blockera all annan åtkomst.

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

Blockera åtkomst till vår webbserver, från IP-intervallet 192.168.100.0/24, som kommer från eth0-gränssnittet.

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

Blockera åtkomst till vår ssh-server, från IP-intervallet 192.168.100.0/24, som kommer från eth1-gränssnittet.

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

 

Exempel på avancerad användning

Om du vill lära dig mer om iptables, här är några exempel där vi använder oss av connlimit-modulen.

Tillåt endast 10 Telnet-anslutningar per klient.

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

Neka upp till anslutning nummer 5 på webben som gjorts av en klient (det är inte mycket meningsfullt men det är ett exempel).

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

Tillåt endast 10 Telnet-anslutningar per klient (gör det annorlunda än ovan).

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

Tillåt endast 10 webbanslutningar i 10.0.0.0/8 IP-intervallet och neka om det överskrider detta antal.

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

Tillåt endast 20 HTTP-anslutningar för varje klient, så snart den överskrids skickar vi en TCP-återställning.

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

Eller så här:

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

Som du kan se är denna brandvägg verkligen komplett och vi kan göra en hel del mycket avancerad konfiguration, för att kontrollera alla inkommande och utgående anslutningar i detalj.