Iptables er et ekstremt fleksibelt brannmurverktøy bygget for Linux-operativsystemer. Enten du er en nybegynner av Linux-geek eller systemadministrator, er det sannsynligvis en måte at iptables kan være en god bruk for deg. Les videre når vi viser deg hvordan du konfigurerer den mest allsidige Linux-brannmuren.
Om iptables
iptables er et kommandolinjebrannmurverktøy som bruker policykjeder for å tillate eller blokkere trafikk. Når en tilkobling prøver å etablere seg på systemet ditt, ser iptables etter en regel i listen for å matche den med. Hvis den ikke finner en, tyr den til standardhandlingen.
iptables kommer nesten alltid forhåndsinstallert på alle Linux-distribusjoner. For å oppdatere / installere den, er det bare å hente iptables-pakken:
sudo apt-get install iptables
Det er GUI-alternativer til iptables som Brannstarter , men iptables er egentlig ikke så vanskelig når du har noen kommandoer nede. Du vil være ekstremt forsiktig når du konfigurerer iptables-regler, spesielt hvis du bruker SSH på en server, fordi en feil kommando permanent kan låse deg ut til den blir fikset manuelt på den fysiske maskinen.
Typer kjeder
iptables bruker tre forskjellige kjeder: input, forward og output.
Inngang - Denne kjeden brukes til å kontrollere oppførselen til innkommende forbindelser. For eksempel, hvis en bruker prøver å SSH inn i PCen / serveren din, vil iptables prøve å matche IP-adressen og porten til en regel i inngangskjeden.
Framover - Denne kjeden brukes til innkommende forbindelser som faktisk ikke blir levert lokalt. Tenk på en ruter - data blir alltid sendt til den, men sjelden faktisk bestemt for ruteren selv; dataene blir bare videresendt til målet. Med mindre du gjør noen form for ruting, NATing eller noe annet på systemet ditt som krever videresending, vil du ikke engang bruke denne kjeden.
Det er en sikker måte å kontrollere om systemet ditt bruker / trenger fremoverkjeden.
iptables -L -v
Skjermbildet ovenfor er av en server som har kjørt i noen uker og ikke har noen begrensninger for innkommende eller utgående tilkoblinger. Som du kan se, har inngangskjeden behandlet 11 GB pakker og utgangskjeden har behandlet 17 GB. Den fremre kjeden har derimot ikke trengt å behandle en eneste pakke. Dette skyldes at serveren ikke videresender eller blir brukt som en gjennomleveringsenhet.
Produksjon - Denne kjeden brukes til utgående forbindelser. For eksempel, hvis du prøver å pinge howtogeek.com, vil iptables sjekke utgangskjeden for å se hva reglene gjelder ping og howtogeek.com før de tar en beslutning om å tillate eller nekte tilkoblingsforsøket.
Advarselen
Selv om pinging av en ekstern vert virker som noe som bare trenger å krysse utgangskjeden, må du huske at inngangskjeden også vil brukes for å returnere dataene. Når du bruker iptables for å låse systemet, må du huske at mange protokoller vil kreve toveiskommunikasjon, så både inngangs- og utgangskjeder må konfigureres riktig. SSH er en vanlig protokoll som folk glemmer å tillate i begge kjeder.
Policy Chain Standard Behavior
Før du går inn og konfigurerer bestemte regler, vil du bestemme hva du vil at standardatferden til de tre kjedene skal være. Med andre ord, hva vil du at iptables skal gjøre hvis forbindelsen ikke samsvarer med noen eksisterende regler?
For å se hva policykjedene dine er konfigurert for å gjøre med uovertruffen trafikk, kjører du
iptables -L
kommando.
Som du ser, brukte vi også grep-kommandoen for å gi oss renere utdata. I det skjermbildet er kjedene våre for tiden antatt å akseptere trafikk.
Flere ganger enn ikke vil du at systemet ditt skal godta tilkoblinger som standard. Med mindre du har endret reglene for kjedekjedene tidligere, bør denne innstillingen allerede være konfigurert. Uansett, her er kommandoen for å godta tilkoblinger som standard:
iptables - policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables - policy FORWARD ACCEPT
Ved å standardisere aksepteringsregelen kan du bruke iptables til å nekte bestemte IP-adresser eller portnumre, mens du fortsetter å godta alle andre tilkoblinger. Vi kommer til disse kommandoene om et øyeblikk.
Hvis du heller vil nekte alle forbindelser og manuelt spesifisere hvilke du vil tillate å koble til, bør du endre standardreglene for kjedene dine for å slippe. Å gjøre dette vil sannsynligvis bare være nyttig for servere som inneholder sensitiv informasjon og bare har de samme IP-adressene som er koblet til seg.
iptables - policy INNGANG DROP
iptables - policy OUTPUT DROP
iptables - policy FORWARD DROP
Tilkoblingsspesifikke svar
Med standard kjedepolitikk konfigurert, kan du begynne å legge til regler i iptables, slik at den vet hva den skal gjøre når den støter på en forbindelse fra eller til en bestemt IP-adresse eller port. I denne veiledningen skal vi gå gjennom de tre mest grunnleggende og mest brukte "svarene".
Aksepterer - Tillat tilkoblingen.
Miste - Slipp forbindelsen, oppfør deg som om det aldri skjedde. Dette er best hvis du ikke vil at kilden skal innse at systemet ditt eksisterer.
Avvis - Ikke tillat tilkoblingen, men send en feil tilbake. Dette er best hvis du ikke vil at en bestemt kilde skal koble til systemet ditt, men du vil at de skal vite at brannmuren din blokkerte dem.
Den beste måten å vise forskjellen mellom disse tre reglene er å vise hvordan det ser ut når en PC prøver å pinge en Linux-maskin med iptables konfigurert for hver av disse innstillingene.
Tillater tilkoblingen:
Slipper tilkoblingen:
Avvise tilkoblingen:
Tillate eller blokkere spesifikke tilkoblinger
Med policy-kjedene dine konfigurert, kan du nå konfigurere iptables for å tillate eller blokkere bestemte adresser, adresseområder og porter. I disse eksemplene setter vi forbindelsene til
MISTE
, men du kan bytte dem til
AKSEPTERER
eller
AVSTÅ
, avhengig av dine behov og hvordan du konfigurerte policykjedene.
Merk: I disse eksemplene skal vi bruke
iptables -A
å legge regler til den eksisterende kjeden. iptables starter øverst på listen og går gjennom hver regel til den finner en som den samsvarer med. Hvis du trenger å sette inn en regel over en annen, kan du bruke
iptables -I [chain] [number]
for å spesifisere nummeret det skal være i listen.
Tilkoblinger fra en enkelt IP-adresse
Dette eksemplet viser hvordan du blokkerer alle tilkoblinger fra IP-adressen 10.10.10.10.
iptables -A INNGANG -s 10.10.10.10 -j DROP
Tilkoblinger fra en rekke IP-adresser
Dette eksemplet viser hvordan du blokkerer alle IP-adressene i 10.10.10.0/24 nettverksområdet. Du kan bruke en nettmaske eller standard skråstreknotasjon for å spesifisere IP-adressene.
iptables -A INNGANG -s 10.10.10.0/24 -j DROP
eller
iptables -A INNGANG -s 10.10.10.0/255.255.255.0 -j DROP
Tilkoblinger til en bestemt port
Dette eksemplet viser hvordan du blokkerer SSH-tilkoblinger fra 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Du kan erstatte “ssh” med hvilken som helst protokoll eller portnummer. De
-p tcp
en del av koden forteller iptables hva slags forbindelse protokollen bruker. Hvis du blokkerte en protokoll som bruker UDP i stedet for TCP, da
-p udp
ville være nødvendig i stedet.
Dette eksemplet viser hvordan du blokkerer SSH-tilkoblinger fra hvilken som helst IP-adresse.
iptables -A INNGANG -p tcp --dport ssh -j DROP
Tilkoblingsstatus
Som vi nevnte tidligere, vil mange protokoller kreve toveiskommunikasjon. For eksempel, hvis du vil tillate SSH-tilkoblinger til systemet ditt, vil inngangs- og utgangskjedene trenge en regel lagt til dem. Men hva om du bare vil at SSH skal komme inn i systemet ditt for å få lov? Vil du ikke legge til en regel i produksjonskjeden også tillate utgående SSH-forsøk?
Det er der tilkoblingsstatusene kommer inn, som gir deg muligheten du trenger for å tillate toveiskommunikasjon, men bare tillate at enveisforbindelser etableres. Se på dette eksemplet, der SSH-tilkoblinger FRA 10.10.10.10 er tillatt, men SSH-tilkoblinger TIL 10.10.10.10 er ikke tillatt. Imidlertid har systemet lov til å sende tilbake informasjon over SSH så lenge økten allerede er etablert, noe som gjør SSH-kommunikasjon mulig mellom disse to vertene.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Lagrer endringer
Endringene du gjør i iptables-reglene dine blir skrotet neste gang iptables-tjenesten blir startet på nytt med mindre du utfører en kommando for å lagre endringene. Denne kommandoen kan variere avhengig av distribusjonen din:
Ubuntu:
sudo / sbin / iptables-lagre
Red Hat / CentOS:
/ sbin / service iptables lagre
Eller
/etc/init.d/iptables lagre
Andre kommandoer
Liste over de nåværende konfigurerte iptables-reglene:
iptables -L
Legge til
-på
alternativet vil gi deg pakke- og byteinformasjon, og legge til
-n
vil liste opp alt numerisk. Med andre ord - vertsnavn, protokoller og nettverk er oppført som tall.
For å fjerne alle de nåværende konfigurerte reglene, kan du utstede flush-kommandoen.
iptables -F