Begynderens Guide til iptables, Linux Firewall
Iptables er et ekstremt fleksibelt firewall utility bygget til Linux operativsystemer. Uanset om du er en nybegynder Linux-geek eller en systemadministrator, er der sandsynligvis en eller anden måde, at iptables kan være en stor fordel for dig. Læs videre, da vi viser dig, hvordan du konfigurerer den mest alsidige Linux-firewall.
Foto af ezioman.
Om iptables
iptables er et kommandolinje-firewallværktøj, der bruger politikkæder til at tillade eller blokere trafik. Når en forbindelse forsøger at etablere sig på dit system, søger iptables en regel på listen for at matche den til. Hvis den ikke finder en, henvender den sig til standardhandlingen.
iptables kommer næsten altid forudinstalleret på nogen Linux distribution. For at opdatere / installere det, hent bare iptables-pakken:
sudo apt-get installer iptables
Der er GUI alternativer til iptables som Firestarter, men iptables er ikke rigtig så svært, når du har et par kommandoer nede. Du vil være yderst forsigtig, når du konfigurerer iptables-regler, især hvis du er SSH'd til en server, fordi en forkert kommando permanent kan låse dig, indtil den er manuelt fastgjort på den fysiske maskine.
Typer af kæder
iptables bruger tre forskellige kæder: input, forward og output.
Input - Denne kæde bruges til at styre adfærden for indgående forbindelser. Hvis en bruger f.eks. Forsøger at sende SSH til din pc / server, forsøger iptables at matche IP-adressen og porten til en regel i inputkæden.
Frem - Denne kæde bruges til indgående forbindelser, der ikke rent faktisk leveres lokalt. Tænk på en router - data sendes altid til det, men sjældent faktisk bestemt til routeren selv; dataene er netop videresendt til sit mål. Medmindre du laver en form for routing, NATing eller noget andet på dit system, der kræver videresendelse, vil du ikke engang bruge denne kæde.
Der er en sikker brand måde at kontrollere, om dit system bruger eller har brug for fremadkæden.
iptables -L -v
Skærmbilledet ovenfor er af en server, der har kørt i et par uger, og har ingen begrænsninger for indgående eller udgående forbindelser. Som du kan se, har inputkæden behandlet 11 GB pakker, og outputkæden har behandlet 17 GB. Forkæden har på den anden side ikke behøvet at behandle en enkelt pakke. Dette skyldes, at serveren ikke gør nogen form for videresendelse eller bliver brugt som en pass-through enhed.
Produktion - Denne kæde bruges til udgående forbindelser. Hvis du for eksempel forsøger at pinge howtogeek.com, vil iptables kontrollere sin outputkæde for at se, hvad reglerne vedrører ping og howtogeek.com, før du træffer beslutning om at tillade eller nægte forbindelsesforsøget.
Advarslen
Selvom pinging af en ekstern vært virker som noget, der kun behøver at krydse outputkæden, skal du huske på, at for at returnere dataene, vil inputkæden også blive brugt. Når du bruger iptables til at låse dit system, skal du huske at mange protokoller kræver tovejskommunikation, så både input- og outputkæderne skal konfigureres korrekt. SSH er en fælles protokol, som folk glemmer at tillade på begge kæder.
Policy Chain Standard Adfærd
Før du går ind og konfigurerer specifikke regler, vil du gerne bestemme, hvad du vil have, at de tre kæder skal have standardadfærd. Med andre ord, hvad vil du have iptables at gøre, hvis forbindelsen ikke passer til eksisterende regler?
For at se, hvad dine politikkæder for øjeblikket er konfigureret til at gøre med uovertruffen trafik, skal du køre iptables -L
kommando.
Som du kan se, brugte vi også grep-kommandoen til at give os renere output. I det screenshot er vores kæder i øjeblikket beregnet til at acceptere trafik.
Flere gange end ikke, vil du have dit system til at acceptere forbindelser som standard. Medmindre du tidligere har ændret reglerne for politikkæden, skal denne indstilling allerede være konfigureret. Uanset hvad, her er kommandoen for at acceptere forbindelser som standard:
iptables - politik INPUT ACCEPT
iptables - politik OUTPUT ACCEPT
iptables - politik FORWARD ACCEPT
Ved at standardisere til acceptreglen kan du derefter bruge iptables til at nægte bestemte IP-adresser eller portnumre, mens du fortsætter med at acceptere alle andre forbindelser. Vi kommer til disse kommandoer om et øjeblik.
Hvis du hellere vil benægte alle forbindelser og manuelt angive, hvilke som du vil tillade at oprette forbindelse til, skal du ændre standardpolitikken for dine kæder for at droppe. Hvis du gør dette, ville det nok kun være nyttigt for servere, der indeholder følsomme oplysninger, og kun de samme IP-adresser har altid forbindelse til dem.
iptables - politik INPUT DROP
iptables - politik OUTPUT DROP
iptables - politik FORWARD DROP
Forbindelsesspecifikke svar
Når din standardkædepolitik er konfigureret, kan du begynde at tilføje regler til iptables, så den ved hvad man skal gøre, når den møder en forbindelse fra eller til en bestemt IP-adresse eller -port. I denne vejledning skal vi gå over de tre mest grundlæggende og almindeligt anvendte "svar".
Acceptere - Tillad forbindelsen.
Dråbe - Drop forbindelsen, fungere som det aldrig skete. Dette er bedst, hvis du ikke vil have kilden til at indse, at dit system eksisterer.
Afvise - Tillad ikke forbindelsen, men send en fejl tilbage. Dette er bedst, hvis du ikke vil have en bestemt kilde til at oprette forbindelse til dit system, men du vil have, at de skal vide, at din firewall blokerede dem.
Den bedste måde at vise forskellen mellem disse tre regler på er at vise, hvordan det ser ud, når en pc forsøger at pinge en Linux-maskine med iptables konfigureret for hver af disse indstillinger.
Tillad forbindelsen:
Afbryd forbindelsen:
Afvisning af forbindelsen:
Tilladelse eller blokering af bestemte forbindelser
Når dine politikkæder er konfigureret, kan du nu konfigurere iptables til at tillade eller blokere bestemte adresser, adresser og porte. I disse eksempler sætter vi forbindelserne til DRÅBE
, men du kan skifte dem til ACCEPTERE
eller AFVISE
, afhængigt af dine behov og hvordan du konfigurerede dine politikkæder.
Bemærk: I disse eksempler skal vi bruge iptables -A
at tilføje regler til den eksisterende kæde. iptables starter øverst på sin liste og går gennem hver regel indtil den finder en, der matcher. Hvis du skal indsætte en regel over en anden, kan du bruge iptables -I [kæde] [nummer]
at angive det nummer, det skal være på listen.
Forbindelser fra en enkelt IP-adresse
Dette eksempel viser, hvordan du blokkerer alle forbindelser fra IP-adressen 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Forbindelser fra en række IP-adresser
Dette eksempel viser, hvordan du blokkerer alle IP-adresserne i 10.10.10.0/24-netværksområdet. Du kan bruge en netmaske eller standard slash notation til at angive rækkevidden af IP-adresser.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
eller
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Forbindelser til en bestemt port
Dette eksempel viser, hvordan du blokkerer SSH-forbindelser fra 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Du kan erstatte "ssh" med enhver protokol eller portnummer. Det -p tcp
En del af koden fortæller iptables, hvilken slags forbindelse protokollen bruger. Hvis du blokerede en protokol, der bruger UDP snarere end TCP, så -p udp
ville være nødvendigt i stedet.
Dette eksempel viser, hvordan du blokkerer SSH-forbindelser fra en hvilken som helst IP-adresse.
iptables -A INPUT -p tcp --dport ssh -j DROP
Forbindelseslande
Som vi nævnte tidligere, vil mange protokoller kræve tovejskommunikation. Hvis du for eksempel vil tillade SSH-forbindelser til dit system, skal input- og outputkæderne have brug for en regel, der er tilføjet dem. Men hvad hvis du kun vil have SSH, der kommer ind i dit system for at få lov? Vil ikke tilføje en regel til outputkæden tillade også udgående SSH-forsøg?
Det er her forbindelsestilstande kommer ind, hvilket giver dig den kapacitet, du skal bruge til tovejskommunikation, men kun tillade envejsforbindelser at blive etableret. Se dette eksempel, hvor SSH-forbindelser FRA 10.10.10.10 er tilladt, men SSH-forbindelser til 10.10.10.10 er ikke. Systemet er dog tilladt at sende tilbage information over SSH så længe sessionen allerede er etableret, hvilket gør SSH-kommunikation mulig mellem disse to værter.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state -state NY, OPSTILLET -J ACCEPT
iptables -A OUTPUT -p tcp --port 22 -d 10.10.10.10 -m state -state OPSTILLET -J ACCEPT
Gem ændringer
De ændringer, du foretager i dine iptables-regler, bliver slettet næste gang, at iptables-tjenesten genstartes, medmindre du udfører en kommando for at gemme ændringerne. Denne kommando kan variere afhængigt af din distribution:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables gemme
Eller
/etc/init.d/iptables save
Andre kommandoer
Angiv de nuværende konfigurerede iptables regler:
iptables -L
Tilføjelse af -v
mulighed vil give dig pakke og byte oplysninger og tilføje -n
vil liste alt numerisk. Med andre ord er værtsnavne, protokoller og netværk opført som tal.
For at slette alle de aktuelt konfigurerede regler, kan du udstede flush-kommandoen.
iptables -F