Detaljert iptables-konfigurasjon. hvorfor så få? Stopp, start på nytt, start brannmur

Definisjon Jegptables- nytte kommandolinje, er et standard grensesnitt for å administrere driften av en brannmur (brannmur) nettfilter for kjerner Linux-versjoner 2,4, 2,6, 3,x, 4,x. Superbruker (root)-privilegier kreves for å bruke iptables-verktøyet.

Vi skal håndtere iptables og vi kan ikke klare oss uten en liten teoretisk introduksjon.

For å lage brannmurregler på riktig måte, må du forstå hvordan pakker generelt flyter og hva som skjer med dem.

Rekkefølgen for flytting av transittpakker

Steg Bord Kjede Merk
1
2 mangle PREROUTING Vanligvis brukes denne kjeden til å gjøre endringer i pakkehodet, for eksempel å endre biter T.O.S. etc..
3 nat PREROUTING Denne kjeden brukes til kringkasting nettverksadresser (). blir henrettet senere, i en annen kjede.
4 Beslutning om videre ruting, d.v.s. på dette tidspunktet er det bestemt hvor skal han gå plastpose - lokal applikasjon eller til en annen nettverksnode.
5 mangle FRAMOVER Pakken går deretter inn i kjeden FRAMOVER mangle bord.
6 Filter FRAMOVER I en kjede FRAMOVER Bare de pakkene som går til en annen vert mottas. All filtrering av transittrafikk skal utføres her. Ikke glem at trafikken går gjennom denne kjeden i begge retninger; husk å ta hensyn til dette når du skriver filtreringsregler.
7 mangle POSTRUTING Denne kjeden er ment å gjøre endringer i pakkehodet etter at den siste rutebeslutningen er tatt.
9 nat POSTRUTING Denne kjeden er primært beregnet på Oversettelse av kildenettverksadresse. Maskerading utføres også her ( Maskering).
9 Fridag nettverksgrensesnitt(f.eks. eth1).

For lokal applikasjon (innkommende pakker)

Steg Bord Kjede Merk
1 Inndatanettverksgrensesnitt (for eksempel eth0)
2 mangle PREROUTING Brukes vanligvis til å gjøre endringer i pakkehodet, for eksempel innstilling av biter T.O.S. etc.
3 nat PREROUTING Adresseoversettelse ( Oversettelse av destinasjonsnettverksadresse).
4 Ta rutebeslutninger.
5 mangle INNGANG Pakken går inn i kjeden INNGANG mangle bord. Det er her endringer gjøres i pakkehodet før det sendes videre til den lokale applikasjonen.
6 filter INNGANG Innkommende trafikk filtreres her. Husk at alle innkommende pakker adressert til oss går gjennom denne kjeden, uavhengig av hvilket grensesnitt de kom fra.
7 Lokal prosess/applikasjon (dvs. serverprogram eller klientprogram)

Fra lokale prosesser (utgående pakker)

Steg Bord Kjede Merk
1 Lokal prosess (dvs. serverprogram eller klientprogram).
2 Ta rutebeslutninger. Her bestemmes det hvor pakken skal gå videre - til hvilken adresse, gjennom hvilket nettverksgrensesnitt osv.
3 mangle PRODUKSJON Det er her endringer gjøres i pakkeoverskriften. Å utføre filtrering på denne kjeden kan ha negative konsekvenser.
4 nat PRODUKSJON Denne kjeden brukes til nettverksadresseoversettelse (NAT) i pakker som stammer fra lokale brannmurprosesser.
5 Filter PRODUKSJON Utgående trafikk filtreres her.
6 mangle POSTRUTING Kjede POSTRUTING Mangletabellen brukes først og fremst for regler som må gjøre endringer i pakkehodet før den forlater brannmuren, men etter at rutingbeslutningen er tatt. Alle pakker, både transitt og opprettet av lokale brannmurprosesser, faller inn i denne kjeden.
7 nat POSTRUTING Kjører her Oversettelse av kildenettverksadresse. Du bør ikke utføre pakkefiltrering i denne kjeden for å unngå uønskede bivirkninger. Men også her kan du stoppe pakker ved å bruke standardpolicyen MISTE.
8 Nettverksgrensesnitt (f.eks. eth0)

Som vi forstår, er det tre hovedtabeller:

  • mangleDette bordet er beregnet for operasjoner på klassifisering og merking av pakker og tilkoblinger, samt modifikasjon av pakkehoder (TTL- og TOS-felt).
  • filter— hovedtabellen for filtrering av pakker, brukt som standard. Det er faktisk i denne tabellen at pakkefiltrering skjer.
  • nat- gir nat-funksjonalitet hvis du vil bruke datamaskinen som ruter. Ruteregler er satt her.

For bord nat Handlinger gjelder:

  • MASKERADE

Handling DNAT(Destination Network Address Translation) konverterer destinasjonsadresser i pakkehoder. Med andre ord, denne handlingen omdirigerer pakker til andre adresser enn de som er spesifisert i pakkehodene.

SNAT(Source Network Address Translation) brukes til å endre kildeadressene til pakker. Ved å bruke denne handlingen deler du en enkelt ekstern IP-adresse mellom datamaskiner lokalt nettverk for å få tilgang til Internett. I dette tilfellet bruker brannmuren SNAT, utfører automatisk videreoversettelse og omvendt adresseoversettelse, og gjør det dermed mulig å koble til servere på Internett fra datamaskiner på det lokale nettverket.

Forkledning ( MASKERADE) brukes til samme formål som SNAT, men i motsetning til den siste, MASKERADE gir mer tung last på systemet. Dette skjer fordi hver gang denne handlingen er nødvendig, blir det bedt om en IP-adresse for nettverksgrensesnittet som er spesifisert i handlingen, mens for SNAT IP-adressen angis direkte. Men på grunn av denne forskjellen, MASKERADE kan fungere i tilfeller med en dynamisk IP-adresse, dvs. når du kobler til Internett, si gjennom OPS, SLIP eller DHCP.

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

Henrette MASKERADE for alle pakker som kommer fra nettverk 10.8.0.0 til grensesnitt eth0. For klarhetens skyld, la oss si at vi har to nettverkskort og to nettverk. Vi trenger et nettverk 10.8.0.0/24 (det første nettverkskortet) kunne få tilgang til for eksempel Internett via eth0( andre nettverkskort)

  • — Designet for å utføre handlinger med pakker før de behandles av systemet.

Selve standardtabellen filter.

  • INNGANG- behandler trafikk som kommer direkte til verten selv.
  • FRAMOVER- lar deg filtrere transittrafikk.
  • PRODUKSJON- lar deg filtrere trafikk som kommer fra verten selv.

Handling med pakken.

  • AKSEPTERER- pakkehopping. Pakken forlater den gjeldende basekjeden og går videre.
  • AVVIS- blokkere pakken og informere kilden om avslaget.
  • MISTE- blokkere pakken uten å informere kilden om avslaget. Det er mer å foretrekke når du filtrerer trafikk på grensesnitt koblet til Internett, da det reduserer informasjonsinnholdet i skanning av vertsporter av angripere.
  • LOGG— registrer pakken i loggfilen.

Det viser seg at vi har en kjede [tabell - filter] - [trafikk - INPUT] - [handling - DROP] logikken til handlingene virker bare komplisert. Jeg tror vi finner ut av det med eksempler og alt blir enkelt.

iptables kommando:

  • -EN legg til regelen på slutten av kjeden.
  • -D slette regelen.
  • -JEG sett inn regelen med ønsket nummer.
  • -L vise alle regler i gjeldende kjede.
  • -S vise alle regler.
  • -F fjerne alle regler.
  • -N lage en kjede.
  • -X slette kjeden.
  • -P angi standard handling.

La oss starte med konkrete eksempler.

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

-EN legg til en ny regel, INNGANG for innkommende pakker, -s protokoll, en av tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
mh, — — dport destinasjonsport 80 (bare protokollalternativ), -j velg en handling hvis regelen samsvarer, AKSEPTERER tillate. Det vil si tillate innkommende trafikk via tcp protokoll til port 80.

De oppførte nøklene støtter også konstruksjon ved hjelp av skiltet ! . Det inverterer tilstanden, for eksempel:

iptables -A INPUT -s ! 192.168.0.50 -j DROPPE

-s kildeadresse - vertsnavn (www.help.com), IP-adresse eller subnett i CIDR-notasjon (192.168.0.1/16), ! inversjon, MISTE forby. Avvis all innkommende trafikk unntatt kilden 192.168.0.50 (hvis det ikke var for ! , forby deretter bare fra 192.168.0.50)

iptables -A INPUT -s 192.168.0.50 -j DROP

Nekt innkommende trafikk fra ip - 192.168.0.50 .

Liste over regelkriterier:

  • -s Protokoll, Protokollen kan også spesifiseres med nummer eller navn som oppført i /etc/protocols. Verdien "en hvilken som helst protokoll" kan angis ved å bruke ordet alle eller tallet 0. Også for ordens skyld er det Ekstra alternativer : --sport(--kilde-port) Lar deg spesifisere utgående havn(eller en rekke derav). --dport(--destinasjon-port) Lar deg spesifisere destinasjonsporten (eller rekkevidden av denne).
  • -s Angir avsenderens adresse. Adressen kan være en IP-adresse (eventuelt med maske), Domenenavn(i de to siste tilfellene, før regelen legges til i kjeden, blir navnet løst til en IP-adresse).
  • -Jeg Definerer det innkommende nettverksgrensesnittet. Hvis spesifisert navn grensesnitt slutter med et "+"-tegn (for eksempel eth +), deretter samsvarer kriteriet med alle grensesnitt hvis navn begynner med det angitte navnet (etho,eth1).
  • -d Angir mottakerens adresse. Syntaksen er lik -s .
  • -o Definerer det utgående nettverksgrensesnittet. Syntaksen er lik -Jeg.

Kriteriene kan også kombineres.

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

Nekt innkommende pakker fra et grensesnitt eth0 Og IP 192.168.0.0. Og til grensesnittet eth1 pakkene vil gå gjennom.

Hva om du vet ikke på forhånd hvilken port du skal åpne vil du for eksempel FTP-server jobbet i passiv modus. Modul kobling Tilkoblingstilstanden vil hjelpe, og mer spesifikt, kriteriet - ctstate. Modulen er koblet sammen med tag -m.

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

iptables -A INPUT -m conntrack --ctstate NYTT -p tcp --dport 21 -j GODKJENNER # Tillat åpne tilkoblinger til 21 TCP-porter.

Mulige tilstander:

  • NY- forbindelsen er ikke åpen, det vil si at pakken er den første i forbindelsen.
  • ETABLERT- pakken refererer til en allerede etablert forbindelse. Vanligvis aksepteres slike pakker uten ekstra filtrering, som tilfellet er med RELATED.
  • I SLEKT- pakken åpner en ny tilkobling, logisk koblet til allerede etablerte, for eksempel åpner en datakanal i en passiv FTP-modus. Tilkoblingen mottar status I SLEKT hvis den er forbundet med en annen forbindelse som har karakteristikken ETABLERT.
  • UGYLDIG— Ugyldig-tegnet indikerer at pakken ikke kan identifiseres og derfor ikke kan ha en spesifikk status.

iptables -A INPUT -m state -state ETABLISHED,RELATED -j ACCEPT

S tate og den ideologiske forgjengeren til conntrack, har et enkelt --state-alternativ, lik --ctstate-alternativet til conntrack-modulen (men, i motsetning til det, støtter ikke DNAT- og SNAT-tilstander).

La oss ta en rask titt på taxisjåførtabellen, som finnes i filen /proc/net/ip_conntrack. Denne inneholder en liste over alle aktive tilkoblinger.

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

Den første, som det er klart, er protokollen, deretter desimaltallet (jeg vet ikke hva det betyr), deretter Tiden flyr forbindelseslivet. Deretter er tilstanden ETABLERT, det vil si at forbindelsen allerede er etablert; det er også UBEVART, noe som betyr at det ikke har vært noen responstrafikk ennå. Neste er avsender- og mottakeradressene, sender- og mottakerportene. Videre er alt omvendt, henholdsvis SIKKERT dette flagget indikerer at forbindelsen har blitt etablert trygt og denne posten vil ikke bli slettet når det maksimalt mulige antallet sporede forbindelser er nådd.

Noen funksjoner i protokollene.

En TCP-forbindelse etableres alltid ved å sende tre pakker, som initialiserer og etablerer en forbindelse som data senere vil bli overført gjennom. Økten starter med en overføring SYN pakke, som svar på som sendes SYN/ACK pakke og bekrefter tilkoblingsetableringspakken ACK .

Så snart sporeren så den første ( SYN)-pakken, og tildeler den deretter statusen NY. Så snart den andre pakken går gjennom sporstoffet ( SYN/ACK), så tildeles tilkoblingen statusen ETABLERT.

Med UDP-protokollen er alt litt annerledes; denne protokollen gir ikke mulighet for å etablere og lukke en forbindelse, men den største ulempen er mangelen på informasjon om rekkefølgen pakkene ankommer i. Men fra sporerens synspunkt er alt det samme som med TCP. Den første pakken som ankommer får statusen NY. Så snart du sender en svarpakke blir statusen tildelt ETABLERT. Den eneste forskjellen er at ASSURED-vedtekten kun tildeles når flere pakker allerede er utvekslet.

Loggingsreglerapplikasjoner.

iptables gjør det mulig å føre logger over individuelle pakker og hendelser. For å gjøre dette, bruk handlingen LOGG.

iptables -A INPUT -p tcp —syn -j LOG —log-level info —log-prefix "INPUT packets"

--logg-nivå Brukes til å stille inn loggnivået. Full liste nivåer finner du i manualen (man) for syslog.conf. Vanligvis kan du angi følgende nivåer: feilsøke, info, legge merke til, advarsel, varsle, feil, feil, crit, varsling, dukke opp Og panikk. Logger skrives til en fil syslog.

--log-prefiks Nøkkelen spesifiserer teksten (prefikset) som skal gå foran alle meldinger iptables. Meldinger med et spesifikt prefiks kan da enkelt finnes ved å f.eks. grep. Prefikset kan inneholde opptil 29 tegn, inkludert mellomrom.

1. juni 17:12:20 debian-kjerne: INPUT-pakker 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

Populære iptables-administrasjonskommandoer.

iptables -L -n --linjetallSe listen over regler.

-n antall porter og ip i digital form.

--linjetall linjenummer.

iptables -F Tilbakestill reglene fullstendig.

iptables -P INPUT ACCEPT Standardregler for INPUT-tabellen.
iptables -P OUTPUT ACCEPT Standardregler for OUTPUT-tabellen.
iptables -P FREMOVER DROP Standardregler for FORWARD-tabellen.

iptables -D INPUT 1Sletter en regel etter nummeret i kjeden.

iptables -D INPUT -s 123.45.67.89 -j DROP Fjern en regel basert på hva den gjør.

iptables -I INPUT ... Sett inn en regel i begynnelsen av en kjede.

iptables -I INPUT 3 ... Eller du kan spesifisere en bestemt posisjon.

OMDIREGERE

REDIRECT-handlingen er utformet for å omdirigere pakker fra ett sett med porter til et annet innenfor samme system, uten å forlate verten.
OMDIREKTERING fungerer kun i PEROUTING- og OUTPUT-kjedene i tabellen nat. Dermed reduseres anvendelsesområdet til kun omdirigering. Oftest brukes dette for en transparent proxy, når en klient fra det lokale nettverket kobler til port 80, og gatewayen omdirigerer pakker til lokal havn proxy:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j OMDIREKTERE --to-port 3128

Nye regler lagres ikke automatisk og trer ikke i kraft etter en omstart av serveren. Derfor, etter å ha endret iptables, må vi lagre endringene.

iptables - gjenopprett > /etc/iptablesLast inn regler fra en fil.

Måten å lagre og laste inn regler er opp til deg. Vi ble bare kjent med det grunnleggende om iptables-teori; selvfølgelig er det mye flere tilpasningsmuligheter. Vi vil snakke om dem mer detaljert i en annen artikkel.

Flere ganger har jeg vært borti det faktum at selv generelt intelligente mennesker gjør helt utilgivelige feil. For eksempel åpner de porten som databasen kjører på til hele Internett. Dette skjer ofte med DevOps-nybegynnere som har skrevet kode hele livet, og nå inkluderer deres ansvar også å sette opp servere. Det er gode tutorials på nettet grunnleggende oppsett brannmur i Linux og andre *nix, men ofte er dette ark på mange skjermer. Så jeg håper denne mer konsise opplæringen vil være nyttig for noen.

Viktig! Det er veldig enkelt å feilaktig brannmure en maskin så mye at du ikke lenger har tilgang til den. Spesielt gjelder det nettsky hosting. For eksempel, hvis du i AWS lukker alle porter fra 1024 til 65536, av en eller annen grunn viser det seg at maskinen er stengt etter en omstart alt generelt havner. Hvis du er vert i skyene, konfigurer bedre brannmur gjennom nettgrensesnittet levert av vertskapet.

En liten merknad om terminologi. Brannmur innebygd Linux-kjernen, kalles Netfilter, og iptables er et verktøy for å administrere denne brannmuren. Mange tror feilaktig at brannmuren kalles iptables. Dette er feil. Å si noe sånt som "Jeg filtrerer pakker med bruker iptables", du viser andre din analfabetisme.

Generelt, hva slags problemer kan løses med Netfilter:

  • Tillat/avvis innkommende trafikk til spesifikke porter over visse protokoller (IPv4/IPv6, TCP/UDP) med angitte adresser(IP, MAC) eller undernett;
  • Alt er likt for utgående trafikk;
  • Du kan for eksempel fullstendig ignorere alle ICMP-pakker;
  • Sette opp NAT, se artikkelen om en ruter basert på Raspberry Pi;
  • Jeg hørte at ekte guruer vet hvordan de setter opp beskyttelse mot DDoS og brute force, og begrenser tilgangen til nettverket spesifikke applikasjoner, brukere eller grupper, og gjør andre sprø ting;

Jeg vil merke at iptables-verktøyet personlig virket ekstremt upraktisk for meg i begynnelsen sammenlignet med ipfw i FreeBSD. Heldigvis, etter å ha jobbet med det en stund, blir alle disse mange flaggene som -A, -D, -j og andre kjent, så vær tålmodig. La oss se på de grunnleggende kommandoene.

Vis alle regler:

iptables -L -n

Du vil kanskje legge merke til at Netfilter har noen "kjeder" - i det minste INPUT, OUTPUT og FORWARD. Jeg personlig har også en DOCKER-kjede på maskinen min. Først kan du tenke på de to første som alt som kommer inn og utgående trafikk deretter, og midlertidig glemme resten. Sjansen er stor for at du aldri trenger dem i det hele tatt.

Fjern alle regler:

iptables -F

Endre policyen (standard oppførsel) til kjeden:

iptables -P INPUT DROP
iptables -P INPUT ACCEPT

Nekt tilgang fra vert/undernett:

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

Du kan også bruke domenenavn:

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

Forbud mot utgående forbindelser:

iptables -A OUTPUT -d 123.45.67.89 -j DROP

Du kan bruke negasjoner i reglene:

iptables -EN INNPUT! -s 123.45.67.89 -j DROPPE

Slette en regel etter nummeret i kjeden:

iptables -D INPUT 1

Fjerne en regel basert på hva den gjør:

iptables -D INPUT -s 123.45.67.89 -j DROP

Alternativet -p spesifiserer protokollen. Du kan bruke all, icmp, tcp, udp eller protokollnummeret fra /etc/protocols. Flagg - -sport indikerer porten som pakken ble sendt fra, og - -dport angir destinasjonsporten:

iptables -A INPUT -p tcp --sport 80 -j GODTAR
iptables -A INPUT -p tcp --dport 80 -j GODTAR

Sette inn en regel i begynnelsen av en kjede:

iptables -I INPUT ...

Eller du kan spesifisere en spesifikk stilling:

iptables -I INPUT 3 ...

iptables-save > /etc/ iptables.rules

Gjenopprett regler:

iptables-restore< / etc/ iptables.rules

La oss nå se på noen få praktiske eksempler. Dette er for eksempel hvordan netsplit-emulering ser ut i en test som sjekker oppførselen til en applikasjon som bruker Akka Cluster:

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

Restaurering skjer på nøyaktig samme måte, bare -A-flagget erstattes med -D-flagget.

Et annet eksempel. Du må finne ut hvilke porter som lytter på maskinen og lukke de unødvendige. Vi går inn i bilen og sier:

netstat -tuwpln

Eksempel utgang:

Aktive Internett-tilkoblinger (bare servere)
Proto Recv-Q Send-Q Lokal adresse Utenlandsk adresse Status PID/Prog navn
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LYTT 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 990/postgres

Nginx og SSHd ser på Internett, dette er normalt. PostgreSQL lytter bare lokalt grensesnitt, så det er ingen problemer med ham heller. Men epmd stikker ut (du kan sjekke det med telnet fra en annen maskin), og dette er ikke bra. Du kan bare lukke port 4369. Hvordan du gjør dette ble vist ovenfor. Eller du kan gå enda lenger og nekte alle forbindelser utenfra til port 81 og eldre.

Iptables er hovedansvarlig for pakkefiltrering. Å konfigurere Iptables manuelt er litt av en oppgave. Ikke forvent å finne ut av dette "i en hast." Heldigvis er det mange verktøy som kan hjelpe deg hvis du ennå ikke har funnet ut av iptables, men snarest trenger å sikre systemet: fwbuilder, firestarter, guarddog, arno brannmur - i hovedsak er dette en GUI for iptables. Det er ikke noe klart svar på hva som er best. Valget er ditt. Imidlertid er dagens artikkel dedikert spesifikt til iptables og er delt inn i to deler: teori og praksis. De mest utålmodige kan umiddelbart fullføre den praktiske delen, selv om denne tilnærmingen ikke anbefales.

Merk følgende! Alle handlinger med iptables utføres på vegne av en privilegert bruker!

Teori

iptables-oppføringsformat iptables [-t-tabell] [kommando] [handling] Eksempel: iptables -t filter -A INPUT ACCEPT

Handlinger

  • AKSEPTERT - Godta pakken
  • DROP - Slipp en pakke
  • DNAT - Konverter destinasjonsadresse
  • SNAT - Endre den utgående IP-adressen i pakkeoverskriften
  • LOGG - Logging av pakker og hendelser
  • MERK - Sett et merke på en pakke
  • MASQUERADE - Endre den utgående IP-adressen i pakkehodet (forskjell fra SNAT - arbeider med dynamiske IP-er)
  • KØ - Sett en pakke i kø for behandling
  • OMDIREKTERE - Omdirigere en pakke/flyt til en annen port
  • AVVIS - Slipp pakke + varsle eksternt system Om. at pakken hennes ble avvist
  • RETUR – Stopp pakken som beveger seg langs gjeldende kjede og returner den til anropskjeden

Lag

  • -A - Legg til en regel i kjeden
  • -D - Fjern en regel fra kjeden
  • -R - Bytt ut en regel med en annen
  • -I - Sett inn en ny regel
  • -L - List opp eksisterende regler
  • -F - Tilbakestill regler
  • -Z - Tilbakestill tellere i en gitt kjede
  • -N - Opprett en ny kjede med det gitte navnet
  • -X - Slett kjede
  • -P - Angi standardpolicyen for den valgte kjeden
  • -E - Gi nytt navn til brukerkjeden

Kriterier (generelt)

  • -p - Spesifiser protokolltype
  • -s - IP-adresse for pakkekilde
  • -d - IP-adressen til pakkemottakeren
  • -j - Spesifiser handlingen for regelen
  • -i - Grensesnitt som pakken ble mottatt fra
  • -o - Angi navnet på utdatagrensesnittet
  • -f - Forplant regelen til alle fragmenter av pakken

TCP-kriterier:

  • –tcp-flags - Definer pakkemaske og flagg

UDP-kriterier:

  • –sport - Port som pakken ble sendt fra
  • –dport - Port som pakken er adressert til

Flere detaljer i man iptables

Øve på

Se gjeldende konfigurasjon

$ sudo iptables -L Chain INPUT (policy ACCEPT) mål prot opt ​​kilde destinasjon Chain FORWARD (policy ACCEPT) mål prot opt ​​kilde destinasjon Kjede OUTPUT (policy ACCEPT) mål prot opt ​​kilde destinasjon

Hvis du ser noe slikt, betyr det at brannmuren din ennå ikke er konfigurert og tillater alt. La oss fikse situasjonen.

Angi standardpolicy

  • iptables -P INPUT DROP - blokkerer innkommende pakker
  • iptables -P OUTPUT ACCEPT - tillat utgående pakker
  • iptables -P FORWARD DROP - behandling av pakker som har nådd serveren fra en annen maskin og venter på videre videresending. I eksemplet er det blokkert. I dette tilfellet må du legge til regler for klarerte maskiner.

Siden innkommende INPUT-pakker er blokkert, vil vi skrive følgende regel:

$ sudo iptables -A INPUT -m stat --stat RELATED,ETABLISTERT -j AKSEPT

Dette vil tillate mottak av pakker fra tidligere etablert forbindelse og godta nye pakker generert av denne tilkoblingen.

Eller angir protokolltypen:

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

Nå det lokale grensesnittet:

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

  • NYTT - data starter en ny tilkobling.
  • ETABLERT - en pakke som kommer fra en allerede etablert tilkobling.
  • I SLEKT- ny pakke data, men skapt av en gammel etablert forbindelse
  • Ugyldig - så det er klart

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

Aktiver disse reglene:

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

Og se forskjellen:

$sudo iptables -L

Start iptables ved systemoppstart:

I katalogen /etc/init.d oppretter du en fil kalt iptables

$ sudo touch /etc/init.d/iptables

Vi skriver følgende i den:

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

Gjør iptables-filen kjørbar:

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

Legg den til autorun

$ sudo update-rc.d -n iptables standardinnstillinger

Start iptables når du er koblet til nettverket:

$ 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

Merk: du kan når som helst sjekke om reglene dine er lastet ved å skrive inn iptables-save som root

For archlinux gjøres lagring av iptables-regler med kommandoen:

$ sudo rc.d lagre iptables

IPTables er et verktøy som brukes til å administrere en brannmur i Linux. Den er kraftig og hendig verktøy for og uønskede tilkoblinger. Hele prosessen er inneholdt i iptables regler, som kan redigeres og vises. Mer detaljert informasjon presentert i artikkelen.

skapelseshistorie

Før IPTables i Linux system IPFW brannmur ble brukt, lånt fra BSD. Så, med versjon 2.4 av Linux-kjernen, begynte den å komme med Netfilter-brannmuren og IPTables-verktøyet for å administrere den. I metodikken for arbeidet ble alle aspekter bevart og litt utvidet funksjonelt.

Struktur og design av IPTables

Går inn brannmur, går pakken gjennom flere kontroller. Det kan være sjekk sum eller annen analyse på kjernenivå. Da er det på tide å gå gjennom PREROUTING-kjeden. Deretter sjekkes det i henhold til hvilken omdirigering til neste kjede skjer. Hvis pakken ikke har en adresse, som for eksempel i TCP, sendes den til FORWARD-kjeden. I tilfeller der det er en spesifikk adresse, følger INPUT-kjeden, og deretter til de demonene eller tjenestene den er ment for. Responsen fra dem skal også gå gjennom flere kjeder, for eksempel OUTPUT. Det siste leddet i denne prosessen er POSTROUTING-kjeden.

Nå litt om kjeder. Hver av dem inneholder flere tabeller. Navnene deres kan gjentas, men dette påvirker ikke arbeidet på noen måte, siden de ikke henger sammen.

Tabellene inneholder på sin side flere regler. I hovedsak er en regel en viss betingelse som pakken som kontrolleres må oppfylle. Avhengig av utfallet utføres en viss handling på pakken.

Når den passerer gjennom alle stadier av nettverket, besøker pakken sekvensielt alle kjeder og i hver blir sjekket for samsvar med betingelsen til en viss regel. Hvis tabellen ikke er opprettet av brukeren, utføres standardhandlingen, i utgangspunktet ACCEPT, som lar deg fortsette å gå fremover, eller DROP, som stopper pakken.

Forhåndsinnstilte kjeder kommer i følgende kategorier:

  • PREROUTING. Innledende behandling av alle innkommende pakker.
  • INNGANG. Dette inkluderer de pakkene som sendes direkte til den lokale datamaskinen.
  • FRAMOVER. Brukes for "transitpakker" som følger rutetabellen.
  • PRODUKSJON. Brukes til utgående pakker.
  • POSTRUTING. Siste etappe i passasjen av en utgående pakke gjennom alle kjeder.

I tillegg til de innebygde kjedene kan brukere opprette eller slette sine egne.

Se og administrer IPTables-regler

Som nevnt tidligere inneholder alle kjeder visse betingelser for pakker. IPTables-verktøyet brukes til å vise og administrere IPTables-regler. Hver enkelt regel er en linje med et sett med betingelser for pakker, samt handlinger på dem, avhengig av utfallet.

Kommandoformatet ser slik ut: iptables [-t navn på tabellen som behandles] kommando kalt [kriterier] [handling utført].

Alt som finnes i kan utelates. Hvis dette er en parameter som spesifiserer en tabell, vil filteret bli brukt. For å bruke et bestemt navn, må du legge til -t-bryteren. Den oppringte kommandoen lar deg ringe Nødvendig handling, for eksempel, legg til en IPTables-regel eller fjern den. "Kriterier" angir parameterne som valget vil finne sted etter. Og i «handling» er det en handling som må utføres dersom betingelsen er oppfylt.

Kommandoer for å lage og vise IPTables-regler

  • Legg til (-A). Når du bruker kommandoen, spesifiserer du kjeden og tabellen du vil legge til den nødvendige regelen til. Verdien av laget er at det gjør dette på slutten av listen.
  • Slett (-D). Som navnet antyder, sletter den en regel. Som parametere kan du spesifisere både det fulle navnet og numrene som er tildelt dem.
  • Gi nytt navn til kjede (-E). Endrer navnet på kjeden. Kommandoen spesifiserer det gamle navnet, deretter det nye navnet.
  • Skyll (-F). Fjerner absolutt alle regler for et bestemt bord.
  • Sett inn (-I). Denne kommandoen setter inn den nødvendige regelen på stedet angitt av nummeret.
  • Liste(-L). Se Iptables-reglene. Hvis ingen tabell er spesifisert, vil standardfilteret bli brukt.
  • Politikk (-P). Standardpolicyen for den angitte kjeden brukes.
  • Erstatt (-R). Endrer regelen under spesifisert antall, for det som er nødvendig.
  • Slett kjede (-X). Denne kommandoen sletter alle opprettede kjeder. Bare de forhåndsinstallerte vil bli igjen.
  • Null (-Z). Tilbakestiller tellerne for overførte data i den angitte kjeden.

Litt om parametere for pakkevalg

De kan deles inn i tre typer:

  • Generelle kriterier. De kan spesifiseres for alle regler. De krever ikke tilkobling av spesielle utvidelser og moduler, og er heller ikke avhengig av hvilken protokoll som skal brukes.
  • Ikke generelle kriterier. De blir tilgjengelige ved bruk av generelle kriterier.
  • Eksplisitt. For å bruke denne typen må du koble til spesielle plugins for netfilter. I tillegg må du bruke -m-bryteren i kommandoen.

Det er verdt å snakke litt om de ofte opptrådte parameterne som brukes når man analyserer pakker:

  • Protokoll (-p). Indikerer protokollen.
  • Kilde(-er). Denne parameteren bestemmer IP-adressen til kilden som pakken kom fra. Det kan spesifiseres på flere måter. En spesifikk vert, adresse eller et helt undernett.
  • Destinasjon (-d). Pakkedestinasjonsadresse. Akkurat som den forrige kan den beskrives på flere måter.
  • I-grensesnitt (-i). Spesifiserer det innkommende grensesnittet til pakken. Brukes hovedsakelig for NAT eller på systemer med flere grensesnitt.
  • Ut-grensesnitt (-o). Utgående grensesnitt.

Noen få eksempler

For å se IPTables nat-regler? du må bruke kommandoen - "iptables -L -t nat". Finn ut den generelle statusen til brannmuren - "iptables -L -n -v". I tillegg denne kommandoen lar deg se IPTables-reglene som er tilgjengelige i hele systemet. Sett inn en regel på et bestemt sted i tabellen, for eksempel mellom første og andre linje - "iptables -I INPUT 2 -s 202.54.1.2 -j DROP". Se deretter om det er lagt til - "iptables -L INPUT -n --line-numbers".

Å blokkere spesifikk adresse, for eksempel 12.12.12.12 - "iptables -A INPUT -s 12.12.12.12 -j DROP".

Hjelp for iptables - "mann iptables". Hvis du trenger informasjon om en bestemt kommando, bruk "iptables -j DROP -h".

Endelig

Bruk IPTables-kommandoer må gjøres med forsiktighet, som feil innstilling(uvitende) kan føre til nettverksfeil eller fullstendig feil. Derfor er det verdt å studere manualene og instruksjonene i detalj før konfigurasjon. I dyktige hender kan IPTables gjøres om til en pålitelig forsvarer nettverkstilkoblinger. Systemadministratorer bruke verktøyet aktivt for å opprette tilkoblinger isolert fra uautorisert tilgang.

Hver datamaskin som er koblet til nettverket er i potensiell fare. Det er mange trusler på nettverket, alt fra programmer som vil prøve å trenge inn i systemet på noen måte, til hackere som ønsker å få tilgang til datamaskinen de trenger. EN programvare installert på en datamaskin kan inneholde ukjente og ukorrigerte sårbarheter, som kan bli et sikkerhetshull.

Hvis dette ikke er veldig relevant for hjemmedatamaskiner, siden de er koblet til nettverket gjennom rutere og NAT, som skjuler dem for eksternt nettverk, så for servere er dette mer relevant enn noen gang. I operativsystem Linux har en svært fleksibel og pålitelig iptables-brannmur innebygd i kjernen.

Det er ved hjelp av dette programmet at systemet er beskyttet mot eksterne inntrengninger, portomdirigering og mange andre handlinger med trafikk. Men ulempen er at den er litt vanskelig å sette opp. Denne artikkelen vil diskutere oppsett av iptables for dumminger. Jeg håper at du etter dette vil kunne bruke det trygt grunnleggende evner iptables.

Iptables og Netfilter-undersystemet har vært innebygd i Linux-kjernen i ganske lang tid. Alle nettverkspakker Meldinger som går gjennom datamaskinen, sendes av datamaskinen, eller er bestemt til datamaskinen, rutes av kjernen gjennom iptables-filteret. Der kan disse pakkene sjekkes og deretter for hver kontroll, hvis den blir bestått, utføres handlingen som er spesifisert i den. For eksempel sendes pakken videre til kjernen for sending målprogram, eller kastes.

Typer pakker

Alle pakker er delt inn i tre typer: innkommende, utgående og bestått. Innkommende er de som ble sendt til denne datamaskinen, utgående er de som ble sendt fra denne datamaskinen til nettverket. Og passerende pakker er pakker som bare må videresendes, for eksempel hvis datamaskinen din fungerer som en ruter.

Følgelig, i iptables-filteret er alle pakker delt inn i tre lignende kjeder:

  • Inndata- behandler innkommende pakker og tilkoblinger. For eksempel, hvis noen ekstern bruker prøver å koble til datamaskinen din via ssh eller et hvilket som helst nettsted vil sende deg innholdet på nettleserens forespørsel. Alle disse pakkene vil havne i denne kjeden;
  • framover- denne kjeden brukes til å passere forbindelser. Dette inkluderer pakker som sendes til datamaskinen din, men som ikke er ment for det, de sendes ganske enkelt over nettverket til destinasjonen. Som jeg allerede har sagt, observeres dette på rutere eller for eksempel hvis datamaskinen din distribuerer wifi;
  • produksjon- Denne kjeden brukes til utgående pakker og tilkoblinger. Dette inkluderer pakker som ble opprettet da du prøvde å pinge et nettsted eller når du starter nettleseren og prøver å åpne et hvilket som helst nettsted.

Men hvis du tror at du ganske enkelt kan lukke Input-kjeden helt for å øke sikkerheten, så tar du veldig feil. Når nettverket er i drift, brukes både input- og output-kjeder. For eksempel, du prøver å pinge, dataene sendes gjennom utdata, men svaret kommer gjennom input. Det samme skjer når du surfer på nettsider og andre aktiviteter. Men den fremre kjeden kan ikke brukes i det hele tatt hvis datamaskinen din ikke er en ruter. Så konfigurering av iptables må gjøres veldig nøye.

Regler og handlinger

Før du går videre til å lage en liste over iptables-regler, må du vurdere hvordan de fungerer og hva de er. For hver type pakke kan du angi et sett med regler som vil bli sjekket etter tur for samsvar med pakken, og hvis pakken samsvarer, vil handlingen spesifisert i regelen bli brukt på den. Regler danner en kjede, så input, output og forward kalles kjeder, kjeder av regler. Det kan være flere handlinger:

  • AKSEPTERER- la pakken passere videre langs kjeden av regler;
  • MISTE- slette pakken;
  • AVVIS- avvis pakken, en melding vil bli sendt til avsenderen om at pakken ble avvist;
  • LOGG- lage en registrering om pakken i loggfilen;
  • - send pakken til brukerapplikasjonen.

Regler kan sjekke alle treff, for eksempel etter ip, etter mottaker- eller avsenderport, pakkehoder og mye mer. Hvis en pakke ikke samsvarer med noen av reglene, brukes standardhandlingen på den, vanligvis ACCEPT.

Når vi har funnet ut av reglene, kan vi gå tilbake til kjedene. I tillegg til de som er oppført ovenfor, er det to ekstra kjeder med regler:

  • forhåndsruting- pakken går inn i denne kjeden før den behandles av iptables, systemet vet ennå ikke hvor den vil bli sendt, for å legge inn, ut eller videresende;
  • postrouting- alle beståtte pakker som allerede har passert videresendingskjeden går hit.

Men det er ikke alt. Vi har også iptables-bord, som vi også ønsker å forholde oss til.

ipatables tabeller

Over regelkjedene i iptables er det et annet abstraksjonsnivå, og disse er tabeller. Det er flere tabeller i systemet og de har alle standard sett kjeder input, forward og output. Tabeller er laget for å fungere ulike handlinger over pakker, for eksempel for modifikasjon eller filtrering. Nå er ikke dette så viktig for deg, og det vil være nok å vite at iptables-pakkefiltrering utføres i filtertabellen. Men vi skal se på dem alle:

  • - designet for å fungere med råpakker før de har blitt behandlet;
  • mangle- beregnet for modifikasjon av pakker;
  • nat- gir nat-funksjonalitet hvis du vil bruke datamaskinen som en ruter;
  • filter- hovedtabellen for filtrering av pakker, brukt som standard.

Nesten alt med teorien, la oss nå se på kommandolinjeverktøyet iptables, ved hjelp av hvilket iptables-systemet administreres.

Iptables-verktøyet

Iptables og netfilter-undersystemet er innebygd i kjernen, men et sett med verktøy for å administrere alt dette leveres ikke alltid med systemet. For å installere verktøyet på Ubuntu, skriv inn:

sudo apt installer iptables

Og på Fedora-baserte distribusjoner, installeres iptables litt annerledes:

sudo yum installer iptables

Når iptables-installasjonen er fullført, kan du gå videre til konfigurasjonen, men la oss først se på syntaksen til verktøyet. Vanligvis har kommandoen noe sånt som dette generell form:

-t bord handling kjede Ekstra alternativer

La oss nå se på iptables-parametrene, tabellen indikerer tabellen du skal jobbe med, denne parameteren kan gå glipp av, handlingen er nødvendig handling, for eksempel opprette eller slette en regel, og tilleggsparametere beskriver handlingen og regelen som skal utføres.

Det gjenstår å vurdere hovedhandlingene som iptables lar deg utføre:

  • -EN- legg til en regel i kjeden;
  • -MED- sjekk alle reglene;
  • -D- slette regelen;
  • -JEG- sett inn en regel med ønsket nummer;
  • -L- vis alle regler i gjeldende kjede;
  • -S- Vis alle regler;
  • -F- slett alle regler;
  • -N- lage en kjede;
  • -X- slette kjeden;
  • -P- angi standard handling.

Ytterligere alternativer for regler:

  • -s- spesifiser protokollen, en av tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
    mh;
  • -s- spesifiser IP-adressen til enheten som sender pakken;
  • -d- angi mottakerens IP-adresse;
  • -Jeg- input nettverksgrensesnitt;
  • -o- utgående nettverksgrensesnitt;
  • -j- velg en handling hvis regelen samsvarer.

Nå kan du gå videre for å se på eksempler på hvordan iptables er konfigurert.

Iptables-konfigurasjonseksempler

Vi skal se på noen få grunnleggende eksempler slik at du kan forsterke det du har lest ovenfor.

Liste over regler

La oss først se på hvordan du ser iptables-regler, alternativet -L er nok for dette:

Du kan også spesifisere ønsket kjede for å vise regler bare for den:

iptables -L INPUT

Ryddingsregler

Du kan ikke bare deaktivere iptables ved å stoppe iptables-regeloppdateringstjenesten via systemd eller til og med ved å fjerne settet med konfigurasjonsverktøy. Undersystemet fungerer på kjernenivå og er ikke avhengig av hva du har installert der. Derfor, hvis du gjør noe galt, må du fjerne reglene. For å gjøre dette, kjør:

Eller bare for en bestemt kjede:

sudo iptables -F-inngang

La meg minne deg på at alle disse handlingene utføres for standardtabellen - filter.

Standard regler

Som jeg allerede sa, hvis ingen regel samsvarer med en pakke, blir standardhandlingen brukt på den. Det kan spesifiseres ved å bruke -p-alternativet:

sudo iptables -p INPUT ACCEPT
$ sudo iptables -p OUTPUT ACCEPT
$ sudo iptables -p FREMOVER

I dette eksemplet tillater vi INPUT- og OUTPUT-kjeder, men deaktiverer FORWARD.

Pakkeblokkering

For å blokkere pakker kan vi bruke DROP-handlingen; vi kan filtrere pakker som må blokkeres etter mange kriterier, for eksempel protokoll, IP-adresse, nettmaske, port og mye mer.

Slik vil kommandoen se ut, som lar deg legge til en iptables-regel for å blokkere alle innkommende pakker fra 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

Og nå utgående pakker til samme adresse:

Blokkering av IP-rekkevidde gjøres på lignende måte. For å gjøre dette må du bruke nettverksmasken 10.10.10.0/24. Dette vil være alle adresser fra 10.10.10.0 til 10.10.10.255:

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

Eller en utvidet versjon av masken:

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

Du kan også blokkere alle innkommende ssh-tilkoblinger:

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

Som du kan se, er det veldig enkelt å legge til en iptables-regel.

Sletter regler

Sletting av iptables-regler gjøres på samme måte som å lage nye, bare i stedet for alternativ A må du bruke alternativ D. Se først på listen over regler:

For eksempel, dette er hvordan du kan slette iptables-regelen som ble opprettet som andre:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Du kan også slette iptables fullstendig ved å kjøre kommandoen med -F-alternativet: