iptables: Hvordan konfigurere Linux-brannmuren for å beskytte serveren din

iptables: Hvordan konfigurere Linux-brannmuren

iptables er brannmur brukt på Linux-baserte operativsystemer. Selv om vi de siste årene har nftables installert som standard, kan du fortsatt bruke iptables-syntaksen til å konfigurere brannmuren i operativsystemet vårt, slik som Debian, Ubuntu og til og med brannmuren til ruteren hvis den er basert på Linux. Å kjenne til iptables er svært viktig for å holde vårt lokale nettverk beskyttet mot inntrenging, dette er fordi iptables vil gi oss muligheten til å tillate eller nekte trafikken vi ønsker. I dag i denne artikkelen skal vi forklare hvordan iptables fungerer, og avanserte brukseksempler.

Hovedtrekkene til iptables

iptables er programvare som er ansvarlig for å fungere som en brannmur eller brannmur på nettverket vårt. Det er en veldig viktig del av operativsystemer, og den er spesielt utviklet for å tillate autorisert tilgang og blokkere uautorisert tilgang. En brannmur etablerer et kontrollpunkt, både innkommende og utgående pakker. I tillegg er det svært viktig å indikere at en brannmur beskytter mot trafikk som krysser ulike nettverk, men den beskytter ikke det lokale nettverket mot angrep som skjer innenfor samme subnett. .

iptables er brannmuren inkludert i Linux-systemer siden versjon 2.4, derfor er den innebygd som standard i systemer som Debian, Ubuntu, Linux Mint og mange andre, selv om nftables for tiden brukes internt, fordi iptables anses som gammelt, selv om iptables i dag er fortsatt mye brukt i verden av Linux-systemadministrasjon og også i verden av nettverksadministrasjon.

Denne brannmuren har flere tabeller opprettet som standard, med sikte på i stor grad å lette muligheten for å legge til forskjellige kjeder og regler. En veldig viktig detalj er at vi som standard har alt satt til å "godta", det vil si at all trafikk er tillatt, det er ingen regel for å nekte trafikk, derfor er denne brannmuren først tillatt, men vi kan endre standardpolicyen veldig enkelt og raskt.

Når vi kjenner hovedkarakteristikkene, skal vi vise deg driften og arkitekturen til denne brannmuren.

Drift og arkitektur

Denne brannmuren er basert på regler som vi vil introdusere etter hverandre, driften er basert på å bruke regler som brannmuren selv er ansvarlig for å utføre. Selv om iptables kan virke enkle å bruke i begynnelsen, er det mer komplisert hvis du vil gjøre det på en avansert måte. Deretter kan du se et sammendrag av hvordan iptables fungerer.

Iptables-strukturen er basert på tabeller, hvorav mange allerede er opprettet som standard. Inne i tabellene har vi strengene, som vi også har noen laget som standard. Til slutt, inne i kjedene har vi de forskjellige reglene som vi kan konfigurere. På bildet nedenfor kan du se et lite skjema over hvordan arkitekturen til brannmuren vil se ut:

Som standard har vi totalt fire tabeller:

  • filtertabell : det er standardtabellen, hvis vi ikke definerer en tabell for å legge til en regel, vil den alltid gå til filtertabellen. I denne tabellen har vi totalt tre standardkjeder, avhengig av hva som interesserer oss, må vi bruke en eller annen kjede: INPUT (dette er pakkene i innkommende retning, til selve brannmuren), OUTPUT (de er utgående pakker, fra serveren ut), og FORWARD (brukes til å filtrere pakker som går fra ett nettverksgrensesnitt til et annet).
  • Nat tabell: denne tabellen er ansvarlig for å gjøre NAT, transformere den private IP-en til offentlig og omvendt. Innenfor NAT har vi tre kjeder: PREROUTING (endrer pakker før de rutes, her gjøres DNAT eller portvideresending), POSTROUTING (endrer pakker etter ruting av dem, her gjøres SNAT eller MASQUERADE) og OUTPUT (pakker generert av brannmuren som den konfigurerte NAT vil krysse).
  • Mangle tabell: denne tabellen er ansvarlig for å endre pakker, det er der QoS er konfigurert for servicekvalitet, endring av TCP-hoder osv. I denne tabellen har vi de fem kjedene: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
  • tabell – Denne tabellen brukes ikke ofte fordi pakker reiser uten tilkoblingstilstand. Vi har kjeden PREROUTING og OUTPUT.

I det følgende bildet kan du se en liten oppsummering av kjedene som vi har i de forskjellige tabellene:

Operasjonen når du legger til en regel er som følger:

  • Reglene som vi legger til kjedene har alltid et mål (-j i regelen).
  • Når brannmuren mottar en pakke, sjekker den om pakken samsvarer med en regel som vi har vervet. Hvis den samsvarer, utføres målkommandoen, ellers går den til neste regel til slutten av kjeden.
  • Reglene kontrolleres i sekvensiell rekkefølge, fra den første regelen til den siste. Rekkefølgen er veldig viktig, hvis vi blokkerer alt først og deretter tillater noe mer spesifikt, vil vi blokkere all trafikk og den mest spesifikke regelen vil ikke bli sjekket.
  • I tilfelle ingen regel tilfredsstiller pakken, vil policyen til kjeden som vi har (global regel) brukes.

Målene med de forskjellige reglene er følgende:

  • AKSEPT: aksepterer pakken og sender den til neste nivå, en webserver, SSH, FTP osv.
  • DROP: blokkerer pakken og sender den ikke til neste nivå.
  • KØ: er et spesielt mål, som sender pakken i en kø beregnet for behandling av brukerrom. Dette kan brukes til å kjøre andre eksterne programmer.
  • RETUR: har samme effekt som om vi hadde nådd slutten av kjeden. Hvis regelen var i en av standardkjedene, blir kjedens policy utført. For en regel som er i en brukerdefinert kjede, avsluttes den, fortsetter gjennom kjeden før hoppet, like etter regelen den ble hoppet med.

Når vi vet hvordan den fungerer og dens arkitektur, kommer vi til å se forskjellige kommandoer for å utføre forskjellige handlinger.

 

Viktige kommandoer for å bruke iptables

Det første vi må ta i betraktning når vi konfigurerer denne brannmuren er at vi trenger superbrukertillatelser for å utføre de forskjellige bestillingene. Det er helt nødvendig for dem å løpe, ellers går det ikke. Følgende kommandoer har ikke "sudo" fordi vi antar at du allerede er superbruker (sudo su).

I de nyeste versjonene av Linux er det ikke mulig å stoppe iptables-tjenesten, for å tillate all nettverkstrafikk og la brannmuren stå med standardparametrene, må vi utføre følgende kommandoer:

  • 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 VIDERE GODKJEN
  • sudo iptables -P OUTPUT ACCEPT

Når vi har gjort dette, vil vi få brannmuren "tilbakestilt" og tillate alt. Nå som vi vet hvordan vi tilbakestiller det, la oss se de forskjellige kommandoene.

 

Se gjeldende tabeller

Hvis du vil se innholdet i de forskjellige kjedene og reglene som vi har i en bestemt tabell, kan du se hvordan de vil se ut:

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

 

Hovedargumenter og hva de er til for

  • -t, –table table Velg tabellen vi ønsker
  • -A, –legg til kjederegelspesifikasjon Vi legger til en ny regel i en bestemt kjede
  • -C, –sjekk kjederegel-spesifikasjon Vi sjekker at det er en bestemt regel i en bestemt kjede
  • -D, –delete chain rule-spesifikasjon Vi sletter regelen som vi legger inn i en bestemt kjede
  • -D, –delete chain rulenum Vi sletter regelnummeret X i en viss kjede
  • -I, –insert chain [rulenum] regelspesifikasjon Vi setter inn en ny kjede med et tall i en bestemt tabell
  • -R, –erstatt kjede rulenum regel-spesifikasjon Erstatter en gitt kjede i en tabell, brukt til å flytte nummeret.
  • -L, –list [kjede] Vis listen over regler for en kjede
  • -F, –flush [kjede] Skyll alle regler fra en gitt kjede.
  • -Z, –null [kjede [regelnummer]] Setter tellerne for en gitt regel til 0.
  • -N, –ny-kjede-kjede Vi lager en ny kjede i en bestemt tabell
  • -X, –delete-chain [kjede] Vi sletter en viss kjede (tom) i en bestemt tabell
  • -P, –policykjedemål Vi bruker standardpolicyen, den er oppfylt når ingen regel for kjedene er oppfylt.
  • -E, –rename-chain old-chain new-chain Gi nytt navn til en tidligere lagt til kjede
  • -h, vis hjelp
  • -v, –verbose Output brukt i forbindelse med –L, for å vise mer informasjon enn kommandoen –L gir.
  • -n, -numeriske IP-adresser og portnumre vil vises som tall. For eksempel, hvis vi filtrerer port 80, med den typiske –L vil www vises, og ikke 80.
  • -x, –exact Vis den nøyaktige verdien til pakke- og byte-telleren, i stedet for å bruke K, M eller G for verdiene.
  • –line-numbers Når du viser listen over regler, vil den vise det nøyaktige nummeret på regelen. Ideell for å bruke –D og nummeret (slett) eller –I for å introdusere før eller etter nevnte regel.

 

Hovedforhold

  • -p , –protokollprotokoll. Filtrer pakken etter protokoll, den angitte protokollen kan være: tcp, udp, Idplite, icmp, esp, ah, sctp.
  • -s , –kildeadresse[/mask][,...] Kilde-IP-adressen til pakken. Vi kan ha en IP eller et subnett (som indikerer masken i CIDR-format). Vi kan også sette vertsnavn (domener, nettsider etc), men det er en dårlig idé fordi det ikke er effektivt. Flere kildeadresser kan spesifiseres (192.168.1.1,192.168.1.2), men det vil lage forskjellige regler for å tilfredsstille dem.
  • -d , –destinasjonsadresse[/mask][,...] Destinasjons-IP-adressen til pakken. Den oppfører seg akkurat som -s.
  • -m , –match match. Spesifiserer om vi vil kalle de utvidede modulene til iptables, for å utføre visse handlinger som:
    • Sett flere kilde- og destinasjonsporter (multiport-modul).
    • Styrekoblinger (koblingsmodul).
    • Unngå brute force (nylig modul, ideell for SSH).
    • Begrens antall tilkoblinger (modulo limit og connlimit).
    • IP-adresseområde (iprange).
  • -j , –hoppemål. Spesifiserer formålet med regelen, hvis vi ønsker å godta, avslå og til og med videresende pakken til en annen kjede for videre behandling. Alltid i enhver regel vil vi ha en -j for å fortelle den hva vi vil gjøre. Hvis vi ikke legger til en –j, vil regelen bli lagt til og den vil telle pakkene, men den vil ikke gjøre noe. Hvis vi bruker -j for å videresende til en annen kjede, vil den gå tilbake til originalen når den andre kjeden er ferdig.
  • -g , –goto kjede. Den brukes til å videresende trafikken til en annen kjede, men i motsetning til jump, vil den ikke gå tilbake til den opprinnelige kjeden der den kom inn.
  • -i , –navn i grensesnittet. Navn på grensesnittet som en pakke mottas gjennom. Det fungerer bare for inndatastrenger som INPUT, FORWARD og PREROUTING. Hvis vi sier betyr det alt unntatt det grensesnittet. Hvis vi setter + på slutten av navnet, vil et hvilket som helst grensesnitt med begynnelsen av navnet ta det for kontroll. La oss forestille oss eth0, eth1 og eth2. Hvis vi vil sette alle tre, er det nok å sette eth+.
  • -o , –ut-grensesnittnavn. Navnet på grensesnittet som en pakke går gjennom. Den er bare gyldig for utdatastrenger som OUTPUT, FORWARD og POSTROUTING.

 

Vilkår kun hvis du bruker TCP eller UDP

Hvis du bruker TCP- eller UDP-protokollen, kan det være lurt å filtrere etter kilde- og/eller destinasjonsportnummer, da har du de to argumentene du kan bruke:

  • –sport –kildeport. Velg kildeporter for å tillate eller avslå. Hvis vi bruker! ekskluderer.
  • –dport –destinasjon-port. Velg destinasjonsporter for å tillate eller avslå. Hvis vi bruker! ekskluderer.

Det er mange flere betingelser for en avansert konfigurasjon av brannmuren, men vi har allerede listet de elementære.

 

Angi standardpolicyen

Politikker brukes slik at når en regel ikke finnes i kjeden, kjøres standardpolicyen. Standardpolicyen for alle kjeder er ACCEPT, men det er to alternativer: ACCEPT eller DROP

-P, –politisk kjedemål

Eksempler:

  • iptables -P INNGANG DROP
  • iptables -P FORDARD DROP
  • iptables -P UTGANG DROP

Med dette vil vi gå tom for internett, så neste gang må vi begynne å lage tillatte regler.

Nedenfor kan du se alle retningslinjene vi har i de forskjellige tabellene:

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

 

Se brannmurstatus

-L-parameteren viser reglene som vi har konfigurert. V lar deg motta mer informasjon om tilkoblingene og N returnerer IP-adressene og deres korresponderende porter uten å gå gjennom en DNS server.

  • iptables -L -n -v

Dette er en av de viktigste kommandoene for å se statusen til brannmuren.

 

Moduler (-m match) av iptables

 

multiport

Det er en utvidelse av iptables som gir oss muligheten til å gruppere lignende regler med forskjellige TCP- og UDP-porter i én. Multiport lar deg sette flere porter hoppet over, og også flere porter på rad, maksimum er 15 portargumenter. Eksempel:

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

Takket være denne modulen har vi muligheten til å bruke flere porter i samme regel.

 

iprange

iprange lar oss legge inn flere kilde- eller destinasjons-IP-adresser samtidig, uten å måtte sette dusinvis av regler. Den lar deg også sette inn både kilde- og destinasjons-IP, syntaksen er som følger:

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

Driften av denne regelen er ganske enkel, vi setter ganske enkelt start-IP og slutt-IP.

 

Grense

Connlimit-modulen er ansvarlig for å begrense antall samtidige tilkoblinger laget av en IP-adresse, den er ideell for å begrense antall tilkoblinger for å unngå DoS.

  • –konngrense opp til n . Vi sjekker om antall tilkoblinger er lik eller mindre enn N (da kan vi tillate eller nekte).
  • –connlimit-over n . Vi sjekker om antall tilkoblinger er større enn N (da kan vi tillate eller nekte).
  • –connlimit-mask prefikslengde . Vi merker etter subnett-rekkevidde (det er det samme som en vert som lager 2 tilkoblinger, to verter på samme subnett som lager 1 tilkobling hver).
  • –connlimit-saddr . Bruk begrensningen på kildegruppen, det er standard hvis ingenting er spesifisert.
  • –connlimit-daddr . Gjelder begrensningen til målgruppen.

La oss for eksempel si at vi bare vil tillate to SSH-tilkoblinger per klient:

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

Imidlertid kan vi lage den komplementære regelen, og sette en aksept for opptil 2 tilkoblinger.

 

kontekst

Denne modulen brukes til å spore forbindelsene, den brukes til å administrere input og output av pakker før og etter etableringen av forbindelsen. Innenfor denne modulen er det flere alternativer, men det viktigste er -ctstate som lar oss godta eller nekte forskjellige typer pakker. Innenfor ctstate har vi flere stater, følgende skiller seg ut:

  • UGYLDIG: Den mottatte pakken er ugyldig og tilhører ikke noen tilkobling.
  • NYTT: Nye forbindelser som er opprettet, eller som er knyttet til en forbindelse som ennå ikke er toveis.
  • ETABLERT: Etablerte forbindelser går de gjennom NY først siden de har fått svar
  • RELATERT: En pakke som er relatert til, men ikke er en del av, en eksisterende tilkobling, for eksempel passiv FTP.

La oss forestille oss at vi ønsker å få tilgang til et hvilket som helst nettsted, men vi vil ikke at absolutt ingen skal få tilgang til oss.

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

 

Grense

Limitmodulen lar oss begrense både trafikk og antall logger som skal skrives til sysloggen som tilkoblingsforsøk. Den har to hovedargumenter:

  • –grense N . Dette argumentet spesifiserer det maksimale antallet gjennomsnittlige treff per sekund (N/s), minutt (N/m), time (N/t) eller dag (N/d) som skal tillates. N angir nummeret
  • –limit-burst N . Indikerer det lengste utbruddet som kan oppstå før grensegrensen kontrolleres.

Standardverdien hvis ingenting er spesifisert er 3 treff per time, i serier på 5. Tenk deg følgende regel: "iptables -A INPUT -m limit -j LOG", operasjonen er som følger:

  • Første gang denne regelen blir truffet, logges de første fem pakkene.
  • Etterpå vil det gå tjue minutter før en pakke registreres på nytt med denne regelen (3 kamper mellom 60 minutter tilsvarer 20 minutter, siden den er GJENNOMSNITT).
  • Hvert tjuende minutt som går uten at en pakke når regelen, vil burst hente en pakke.
  • Hvis ingenting skjer i løpet av 100 minutter, vil utbruddet bli fulladet; så tilbake til startsituasjonen.

 

Nylig

Den siste modulen brukes til å begrense antall tilkoblinger per sekund på IP-nivå, dette er ideelt for å beskytte oss mot angrep på SSH-porten fordi en angriper vil prøve flere passord. For eksempel, hvis vi ønsker å beskytte vår SSH, kan vi kjøre følgende regel:

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NYTT -m nylig –sett –navn ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m tilstand –state NYTT -m nylig –rsjekk –sekunder 60 –treffantall 4 –navn ssh –rsource -j DROP

Denne regelen tillater bare fire tilkoblingsforsøk innen 60 sekunder, det er et "glidende" vindu.

 

NAT

Denne brannmuren er også ansvarlig for NATing av tilkoblingen vår. For å lage NAT til vår offentlige IP (eller grensesnitt som har denne offentlige IP), må vi sette inn:

  • 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 normale er å bruke MASQUERADE til å gjøre NAT uavhengig av IP-adressen som det fysiske eller logiske grensesnittet har.

For å åpne porter må vi legge til en regel i PREROUTING-kjeden til NAT-tabellen.

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

PREROUTING-tabellen lar oss også endre portene i farten, slik at hvis vi mottar pakker på port 2121, kan vi transformere den til 21.

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

Når vi kjenner denne brannmuren i detalj, skal vi se de grunnleggende brukseksemplene og også de mest avanserte.

 

Eksempler på grunnleggende bruk

Denne brannmuren er veldig komplett og vi har hundrevis av kommandoer som vi kan utføre for å utføre forskjellige handlinger. I denne artikkelen skal vi gi deg noen enkle å forstå eksempler for en første tilnærming til denne brannmuren.

Blokker IP-adressen 192.168.1.10 fra å kommunisere til vår server:

  • iptables -A INPUT –s 192.168.1.10 –j DROP

Blokker IP-adressene 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 fra å kommunisere til 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

Blokker hele 192.168.2.0/24-undernettet fra å kommunisere med serveren vår, bortsett fra 192.168.2.20 IP-adressen, som ville være tillatt:

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

Blokker IP-adressen til 192.168.4.50 slik at vi ikke kan kommunisere:

  • iptables –A OUTPUT –d 192.168.4.50 –j DROP

Blokker IP-adressene 192.168.4.51 og 192.168.4.52 slik at vi ikke kan kommunisere:

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

Blokker tilgang til www.google.es fra iptables:

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

Vi ønsker å blokkere tilgang til serveren vår fra MAC 00:01:02:03:04:05, og resten tillater alt:

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

Vi ønsker å tillate tilgang til serveren vår til MAC-adressen MAC 00:01:02:03:04:06, og resten nekter alt:

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

Blokker IP-adressen 192.168.1.10 for pinging fra vår server:

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

Blokker IP-adressene 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 fra å PINGE serveren vår (i en enkelt 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

Blokker hele 192.168.2.0/24-undernettet slik at de ikke PING serveren vår, bortsett fra IP-adressen 192.168.2.20, som ville være tillatt:

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

Blokker IP-adressen til 192.168.4.50 slik at vi ikke kan pinge den.

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

Blokker IP-adressene 192.168.4.51 og 192.168.4.52 slik at vi ikke kan pinge dem.

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

Blokker tilgang til www.google.es fra iptables.

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

Som du kan se er operasjonen ganske enkel med reglene basert på IP med opprinnelse og destinasjon. Vi kan også bruke iprange-modulen til å konfigurere en rekke IP-er:

Blokker en rekke IP-adresser fra 192.168.5.1 til 192.168.5.50 fra å kunne pinge fra serveren vår.

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

Vi kan også filtrere ICMP-protokollen på en mer avansert måte. La oss forestille oss at vi har en bruker som ønsker å kunne pinge hvilken som helst vert, men som ikke vil at NOEN skal kunne pinge ham. Hvordan kan vi gjøre det med iptables hvis PING selv har toveis kommunikasjon?

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

Blokker all innkommende tilgang gjennom eth0-grensesnittet (kun), og tillater dermed eth1-tilgang.

  • iptables -A INPUT -i eth0 -j DROP
  • iptables -A INNGANG -i eth1 -j ACCEPT

Blokker utgående trafikk på eth0-grensesnittet (bare), og gir dermed eth1-tilgang.

  • iptables -A OUTPUT -o eth0 -j DROPPE
  • iptables -A OUTPUT -o eth1 -j AKSEPT

Tillat all innkommende og utgående trafikk på eth0, og nekt all innkommende eller utgående trafikk på eth1.

  • iptables -A INNGANG -i eth0 -j ACCEPT
  • iptables -A OUTPUT -o eth0 -j AKSEPT
  • iptables -A INPUT -i eth1 -j DROP
  • iptables -A OUTPUT -o eth1 -j DROPPE

Hvis du vil begynne å se hvordan TCP- og UDP-protokollen fungerer, her er noen eksempler:

Blokker nettilgang til www.google.es og tillat alt annet (ping) for eksempel.

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

Blokker FTP-tilgang til hvilken som helst IP eller domene, og tillat alt annet.

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

Blokker SSH-tilgang til IP 192.168.1.50, og tillat alt annet.

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

Blokker Telnet-tilgang til 192.168.2.0-undernettet, og tillat alt annet.

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

Blokker 192.168.1.50 tilgang til vår webserver.

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

Blokker 192.168.1.150 og 192.168.1.151 tilgang til vår SSH-server.

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

Blokker tilgang til hele 192.168.2.0/24-undernettet til vår telnet-tjeneste

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

Blokker alles tilgang til OpenVPN-serveren, bortsett fra IP-adressen 77.77.77.77 som er tillatt.

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

Blokker DNS-tilgang til 8.8.8.8 og tillat alt annet (ping) for eksempel.

  • 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

Blokker tilgang til port 1194 til hvilken som helst IP eller domene, og tillat alt annet.

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

Vi har en DNS-server på vår server. Vi ønsker at bare datamaskiner på 192.168.1.0/24-undernettet skal kunne kommunisere med det, og blokkere all annen tilgang.

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

Blokker tilgang til vår webserver, fra IP-området 192.168.100.0/24, som kommer fra eth0-grensesnittet.

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

Blokker tilgang til ssh-serveren vår, fra IP-området 192.168.100.0/24, som kommer fra eth1-grensesnittet.

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

 

Eksempler på avansert bruk

Hvis du ønsker å lære mer om iptables, her er noen eksempler hvor vi benytter oss av connlimit-modulen.

Tillat kun 10 Telnet-tilkoblinger per klient.

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

Nekt opp til tilkobling nummer 5 på nettet laget av en klient (det gir ikke mye mening, men det er et eksempel).

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

Tillat bare 10 Telnet-tilkoblinger per klient (gjør det annerledes enn ovenfor).

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-upto 10 –connlimit-maske 32 -j GODKJENNER
  • iptables -A INNGANG -p tcp –port 23 -j DROP

Tillat bare 10 nettforbindelser i 10.0.0.0/8 IP-området, og avslå hvis det overskrider dette tallet.

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

Tillat kun 20 HTTP-tilkoblinger for hver klient, så snart den er overskredet sender vi en TCP-tilbakestilling.

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

Eller på denne måten:

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

Som du kan se, er denne brannmuren virkelig komplett, og vi kan gjøre mye av svært avansert konfigurasjon, for å kontrollere alle innkommende og utgående tilkoblinger i detalj.