Begyndervejledningen til iptables, Linux Firewall

Iptables er et ekstremt fleksibelt firewall-værktøj bygget til Linux-operativsystemer. Uanset om du er en nybegynder Linux-nørd eller en systemadministrator, er der sandsynligvis en måde, hvorpå iptables kan være en god brug 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 kommandolinjefirewall-værktøj, der bruger politikkæder til at tillade eller blokere trafik. Når en forbindelse forsøger at etablere sig på dit system, ser iptables efter en regel på listen, som den passer til. Hvis den ikke finder en, tyr den til standardhandlingen.

iptables kommer næsten altid forudinstalleret på enhver Linux-distribution. For at opdatere / installere det skal du bare hente iptables-pakken:

sudo apt-get install 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 ud, indtil den manuelt er rettet 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 kontrollere adfærd for indgående forbindelser. For eksempel, hvis en bruger forsøger at SSH ind på din pc / server, vil iptables forsøge at matche IP-adressen og porten til en regel i inputkæden.

Frem - Denne kæde bruges til indgående forbindelser, der faktisk ikke leveres lokalt. Tænk på en router - der sendes altid data til den, men sjældent faktisk bestemt til routeren selv; dataene videresendes bare til deres mål. Medmindre du laver en form for routing, NATing eller noget andet på dit system, der kræver videresendelse, bruger du ikke engang denne kæde.

Der er en sikker måde at kontrollere, om dit system bruger / har brug for den fremadgående kæde eller ej.

iptables -L -v

Skærmbilledet ovenfor er af en server, der har kørt i et par uger og ikke har nogen 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. Den forreste kæde har derimod ikke behov for at behandle en enkelt pakke. Dette skyldes, at serveren ikke foretager nogen form for videresendelse eller bruges som en gennemgående enhed.

Output - Denne kæde bruges til udgående forbindelser. For eksempel, hvis du prøver at pinge howtogeek.com, vil iptables kontrollere sin outputkæde for at se, hvad reglerne er for ping og howtogeek.com, inden de beslutter 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, at inputkæden også bruges til at returnere dataene. 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 almindelig protokol, som folk glemmer at tillade i begge kæder.

Politikadfærds standardadfærd

Inden du går ind og konfigurerer specifikke regler, vil du beslutte, hvad du vil have, at de tre kædes standardopførsel skal være. Med andre ord, hvad vil du have, at iptables skal gøre, hvis forbindelsen ikke matcher nogen eksisterende regler?

For at se, hvad dine politikkæder i øjeblikket er konfigureret til at gøre med uovertruffen trafik, skal du køre iptables -Lkommandoen.

Som du kan se, brugte vi også kommandoen grep til at give os renere output. I dette skærmbillede 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 er her kommandoen om at acceptere forbindelser som standard:

iptables --policy INPUT ACCEPT


iptables --policy OUTPUT ACCEPT


iptables --policy FORWARD ACCEPT

Som standard til acceptreglen kan du derefter bruge iptables til at nægte specifikke 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 nægte alle forbindelser og manuelt specificere, hvilke du vil tillade at oprette forbindelse, skal du ændre standardpolitikken for dine kæder til at falde. At gøre dette ville sandsynligvis kun være nyttigt for servere, der indeholder følsomme oplysninger og kun nogensinde har de samme IP-adresser tilsluttet sig.

iptables --policy INPUT DROP


iptables --policy OUTPUT DROP


iptables --policy FORWARD DROP

Forbindelsesspecifikke svar

Med dine standardkædepolitikker konfigureret kan du begynde at tilføje regler til iptables, så den ved, hvad den skal gøre, når den støder på en forbindelse fra eller til en bestemt IP-adresse eller port. I denne vejledning vil vi gennemgå de tre mest basale og mest anvendte “svar”.

Accepter - Tillad forbindelsen.

Drop - Slip forbindelsen, opfør dig som om det aldrig skete. Dette er bedst, hvis du ikke ønsker, at kilden skal indse, at dit system eksisterer.

Afvis - 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 dem til at vide, at din firewall blokerede dem.

Den bedste måde at vise forskellen på disse tre regler er at vise, hvordan det ser ud, når en pc prøver at pinge en Linux-maskine med iptables konfigureret til hver af disse indstillinger.

Tillader forbindelsen:

Afslutning af forbindelsen:

Afvisning af forbindelsen:

Tilladelse eller blokering af specifikke forbindelser

Med dine politikkæder konfigureret, kan du nu konfigurere iptables til at tillade eller blokere specifikke adresser, adresseområder og porte. I disse eksempler indstiller vi forbindelserne til DROP, men du kan skifte dem til ACCEPTeller REJECTafhængigt af dine behov og hvordan du konfigurerede dine politikæder.

Bemærk: I disse eksempler skal vi bruge iptables -Atil at føje regler til den eksisterende kæde. iptables starter øverst på listen og gennemgår hver regel, indtil den finder en, som den matcher. Hvis du har brug for at indsætte en regel over en anden, kan du bruge iptables -I [chain] [number]til at angive det nummer, det skal være på listen.

Forbindelser fra en enkelt IP-adresse

Dette eksempel viser, hvordan du blokerer 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 blokerer alle IP-adresser i netværksområdet 10.10.10.0/24. Du kan bruge en netmaske eller en standard skråstregsnotation til at specificere 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 blokerer 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. Den -p tcpdel af koden fortæller iptables, hvilken type forbindelse protokollen bruger. Hvis du blokerede en protokol, der bruger UDP i stedet for TCP, -p udpville det være nødvendigt i stedet.

Dette eksempel viser, hvordan du blokerer SSH-forbindelser fra enhver IP-adresse.

iptables -A INPUT -p tcp --dport ssh -j DROP

Tilslutningstilstande

Som vi nævnte tidligere, vil mange protokoller kræve tovejskommunikation. For eksempel, hvis du vil tillade SSH-forbindelser til dit system, skal input- og outputkæderne have en regel tilføjet dem. Men hvad hvis du kun vil have SSH, der kommer ind i dit system, for at være tilladt? Vil ikke tilføjelse af en regel til outputkæden også tillade udgående SSH-forsøg?

Det er her forbindelsestilstande kommer ind, som giver dig den mulighed, du har brug for for at tillade tovejskommunikation, men kun tillade, at der oprettes forbindelser på en måde. Se på dette eksempel, hvor SSH-forbindelser FRA 10.10.10.10 er tilladt, men SSH-forbindelser TIL 10.10.10.10 ikke er tilladte. Imidlertid tillades systemet at sende information tilbage 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 NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Gemmer ændringer

De ændringer, du foretager i dine iptables-regler, skrottes, næste gang 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 save

Eller

/etc/init.d/iptables save

Andre kommandoer

Liste over de aktuelt konfigurerede iptables-regler:

iptables -L

Tilføjelse af -vindstillingen giver dig pakke- og byteoplysninger, og tilføjelse -nviser alt numerisk. Med andre ord - værtsnavne, protokoller og netværk er angivet som tal.

For at rydde alle de aktuelt konfigurerede regler kan du udstede skyllekommandoen.

iptables -F