Articles

Linux iptables Firewall vereenvoudigde voorbeelden

in het vorige bericht hebben we gesproken over hoe je Linux Server kunt beveiligen met behulp van Best Practices voor Hardening. Sommige mensen vroegen me naar de firewall sectie, die een korte introductie was tot de iptables firewall. Vandaag zullen we in detail de Linux iptables firewall bespreken en hoe je je serververkeer kunt beveiligen met behulp van die geweldige firewall.

inhoudsopgave

Iptables op CentOS 7

Als u CentOS 7 gebruikt, zult u merken dat firewalld iptables beheert, dus als u terug wilt naar iptables, moet u firewalld stoppen en maskeren.

$ systemctl stop firewalld$ systemctl mask firewalld

Installeer dan iptables service en activeer het:

$ yum install iptables-services$ systemctl enable iptables

dan kunt u het starten:

$ systemctl start iptables

hoe Linux firewall werkt

iptables firewall functies zijn gebouwd op het netfilter framework dat beschikbaar is in de Linux Kernel voor het filteren van pakketten.

Firewalltypen

Er zijn twee typen firewalls:

Stateless firewall verwerkt elk pakket op zijn eigen, dit betekent dat het geen andere pakketten met dezelfde verbinding ziet.

Stateful firewall dit type firewall geeft om alle pakketten die er doorheen gaan, dus het kent de status van de verbinding. Het geeft meer controle over het verkeer.

Netfilter bevat tabellen. Deze tabellen bevatten ketens en ketens bevatten individuele regels.

als een pakket overeenkomt met een regel, zullen de iptables de regelactie op dat pakket toepassen.

de acties kunnen: accepteer, weiger, negeer of geef het pakket door aan andere regels voor meer verwerking.

Netfilter kan inkomend of uitgaand verkeer verwerken met behulp van het IP-adres en poortnummer.

het iptables commando beheert en configureert Netfilter.

voordat we beginnen met het schrijven van firewallcommando ‘ s, moeten we de firewallstructuur een beetje begrijpen zodat we gemakkelijk firewallregels kunnen schrijven.

iptables firewall tabellen

Netfilter heeft drie tabellen die regels kunnen bevatten voor verwerking.

De filtertabel iptables is de hoofdtabel voor het verwerken van het verkeer.

de tweede is de NAT-tabel, die NAT-regels behandelt.

de derde tabel is de mangeltabel voor het mangelen van pakketten.

Tabelketens

elke tabel van de bovengenoemde tabellen bevat ketens; deze ketens zijn de container van de regels van iptables.

De filtertabel bevat voorwaartse, invoer-en UITVOERKETENS. U kunt een aangepaste keten maken om uw regels op te slaan.

als een pakket naar de host komt, zal iptables het verwerken door regels voor de invoerketen.

als het pakket naar een andere host gaat, betekent dit dat de regels van de OUTPUTKETEN het zullen verwerken.

de iptables gebruiken de FORWARD keten voor het afhandelen van pakketten die de host hebben benaderd maar bestemd zijn voor een andere host.

Ketenbeleid

elke keten in de filtertabel heeft een beleid. Het beleid is de standaardactie die iptables uitvoert.

het beleid kan DROP, REJECT en ACCEPT zijn.

het ACCEPT beleid staat toe dat de pakketten de firewall passeren. Het DROP beleid laat een pakket vallen zonder de client te informeren. Het WEIGERBELEID laat ook het pakket vallen en informeert de afzender.

vanuit een beveiligingsperspectief moet u alle pakketten die naar de host komen laten vallen en alleen de pakketten accepteren die afkomstig zijn van vertrouwde bronnen.

iptables regels toevoegen

U kunt een nieuwe regel toevoegen met het iptables commando als volgt:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

laten we dit commando in stukken breken zodat we er alles over kunnen begrijpen.

De-A betekent dat we een nieuwe regel toevoegen. Standaard voegt iptables alle nieuwe regels toe aan de filtertabel, tenzij je een andere tabel opgeeft.

de vlag-i geeft het apparaat aan waarop de regel zal worden toegepast. Als u geen apparaat opgeeft, zal iptables de regel toepassen op al het inkomende verkeer, ongeacht de apparaten.

de vlag-p specificeert het Protocol van het pakket dat u wilt verwerken, wat in ons geval TCP is.

de vlag –dport geeft de doelpoort aan, die 80 is.

de-d specificeert het doel-IP-adres, dat 1.2.3.4 is. Als er geen doelip-adres is opgegeven, is de regel van toepassing op al het inkomende verkeer op eth1, ongeacht het IP-adres.

de-j specificeert de actie of de sprong actie te doen. Hier zijn we het accepteren van de pakketten met behulp van het accepteren beleid.

de bovenstaande regel staat inkomend HTTP-verkeer toe, dat zich op poort 80 bevindt.

hoe zit het met het toestaan van uitgaand verkeer?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

u kunt de vlag-A gebruiken om regels toe te voegen aan de uitvoerketen.

de vlag-o wordt gebruikt voor het apparaat dat wordt gebruikt voor uitgaand verkeer.

de vlag-sport geeft de bronpoort aan.

u kunt de servicenaam gebruiken zoals http of https in plaats van het numerieke poortnummer op sport of dport. Alle services namen staan in/etc / services bestand.

u moet de service naam gebruiken in plaats van een poortnummer, wat het lezen van regels makkelijker maakt.

iptables regels volgorde

de iptables plaatsen nieuwe regels aan het einde van de keten. U kunt het toevoegen aan de top met behulp van-I optie.

De volgorde van de regels is belangrijk zoals u nu zult zien. U kunt uw regels precies invoegen waar u wilt met behulp van de I-vlag.

Kijk naar de volgende regels om te begrijpen hoe regels ordenen belangrijk is:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

de eerste regel accepteert al het UDP-verkeer komt op eth1, en het nummer 3 is de regelvolgorde.

de tweede regel verlaagt het verkeer dat poort 80 binnenkomt.

de eerste regel zal al het verkeer accepteren, dan zal de tweede regel die het verkeer zou moeten laten vallen niets doen omdat iptables het verkeer in de eerste regel passeert.

uw regels zouden zinvol moeten zijn omdat de volgorde van de regels in de keten van belang is.

List iptables rules

U kunt de regels in een keten weergeven met behulp van –L vlag:

$ iptables -L INPUT

u kunt de regelnummers voor regels weergeven met behulp van-line-numbers:

$ iptables -L INPUT --line-numbers

de lijst toont de namen van de diensten. U kunt poortnummers in plaats daarvan weergeven met de optie-n:

$ iptables -L INPUT -n --line-numbers

de bovenstaande regel zal de lijst sneller maken omdat het iptables voorkomt van DNS-resolutie en service lookups.

u kunt alle regels voor alle ketens als volgt weergeven:

$ iptables -L -n --line-numbers

om het aantal pakketten te krijgen dat door elke regel wordt verwerkt, kunt u de vlag-v gebruiken:

$ iptables -L -v

ook kunt u de tellers resetten naar nul met de vlag-Z.

nu kunnen we een nieuwe regel toevoegen aan elke keten die we willen, we kunnen de regel in een specifieke volgorde invoegen, en we kunnen de regels voor elke keten of alle ketens weergeven, maar hoe zit het met het verwijderen van een regel?

regels verwijderen

u kunt een regel verwijderen met de vlag-D:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Dit commando verwijdert de HTTP-regel die u eerder hebt opgegeven.

voordat u een regel verwijdert, moet u eerst de regelspecificatie controleren door deze op te sommen en vervolgens verwijderen.

u kunt de regel verwijderen door het ordernummer te gebruiken in plaats van de regelspecificaties te schrijven.

$ iptables -D INPUT 2

u kunt alle regels in een specifieke keten verwijderen met de vlag-F, wat betekent dat alle regels worden gewist.

$ iptables -F INPUT

Als u vergeet de chain name te vermelden bij het gebruik van-F vlag, dan zullen alle chain rules verwijderd worden.

regels vervangen

u kunt bestaande regels vervangen door uw eigen regel met behulp van-R vlag:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

Dit commando zal de eerste regel in de INVOERKETEN vervangen door de getypte regel.

specifieke tabel

om een specifieke tabel weer te geven, gebruikt u de vlag-t met de tabelnaam als volgt:

$ iptables -L -t nat

Hier geven we een overzicht van de regels in de NAT-tabel.

iptables door de gebruiker gedefinieerde keten

om een door de gebruiker gedefinieerde keten aan te maken, gebruikt u de vlag-N.

$ iptables -N MY_CHAIN

U kunt het ook hernoemen met de vlag-E.

$ iptables -E MY_CHAIN NEW_NAME

en u kunt de door de gebruiker gedefinieerde keten verwijderen met de vlag-X.

$ iptables -X MY_CHAIN

Als u de kettingnaam niet vermeldt bij het gebruik van-X vlag, zal het alle door de gebruiker gedefinieerde ketens verwijderen. U kunt ingebouwde ketens zoals INPUT en OUTPUT niet verwijderen.

omleiding naar een door de gebruiker gedefinieerde keten

u kunt pakketten omleiden naar een door de gebruiker gedefinieerde keten zoals ingebouwde ketens met de vlag-j.

$ iptables -A INPUT -p icmp -j MY_CHAIN

de bovenstaande regel zal al het ICMP-verkeer omleiden naar de keten MY_CHAIN.

het standaardbeleid instellen voor ketens

u kunt de vlag-P gebruiken om het standaardbeleid voor een specifieke keten in te stellen. Het standaardbeleid kan accepteren, afwijzen en laten vallen zijn.

$ iptables -P INPUT DROP

dus nu zal de invoerketen elk pakket laten vallen tenzij u een regel schrijft om inkomend verkeer toe te staan.

syn Flooding

de aanvaller verzendt alleen SYN-pakketten zonder de TCP-handshake te voltooien en als gevolg daarvan zou de ontvangende host veel geopende verbindingen hebben, en uw server wordt te druk om te reageren op andere clients.

we kunnen de limit module van iptables firewall gebruiken om ons te beschermen tegen syn flooding.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

Hier specificeren we slechts 10 syn-pakketten per seconde. U kunt deze waarde aanpassen aan uw netwerkbehoeften.

als dit uw netwerk verstoort, kunt u SYN-cookies gebruiken.

SYN Cookies

In

/etc/sysctl.conf

bestand en voeg deze regel toe:

net.ipv4.tcp_syncookies = 1

opslaan en herladen.

$ sysctl -p

ongeldige Statuspakketten neerzetten

De ongeldige statuspakketten zijn pakketten die niet tot een verbinding behoren en u laat ze vallen.

$ iptables -A INPUT -m state --state INVALID -j DROP

deze regel zal alle binnenkomende ongeldige status pakketten laten vallen.

Drop gefragmenteerde pakketten

gefragmenteerde pakketten zijn gebroken stukken van grote misvormde pakketten, en u moet regels schrijven om ze te laten vallen.

de vlag-f vertelt de iptables firewall om alle fragmenten te selecteren. Dus als je iptables niet als router gebruikt, kun je gefragmenteerde pakketten laten vallen.

$ iptables -A INPUT -f -j DROP

Save iptables Rules

Als u uw server herstart, verliest u alle regels die u schreef, Dus hoe kunt u ze aanhouden?

je kunt al je regels opslaan met het iptables-save commando als je CentOS of Red Hat gebruikt.

iptables-save > /etc/sysconfig/iptables

op CentOS 7 kunt u regels als volgt opslaan:

$ service iptables save

u kunt specifieke tabel opslaan zoals filtertabel alleen:

$ iptables-save -t filter

ook kunt u iptables-restore gebruiken om regels te herstellen.

op Debian gebaseerde distributies kunt u het pakket iptables-persistent gebruiken om regels op te slaan en te herstellen.

Installeer het eerst:

$ apt-get install iptables-persistent

dan kunt u regels opslaan en herstellen:

$ netfilter-persistent save
$ netfilter-persistent reload

Ik hoop dat u de iptables firewall gemakkelijk vindt. Blijf terugkomen.

Dank u.

oprichter van LikeGeeks. Ik werk sinds 2010 als Linux systeembeheerder. Ik ben verantwoordelijk voor het onderhouden, beveiligen en oplossen van problemen met Linux-servers voor meerdere clients over de hele wereld. Ik hou van het schrijven van shell en Python scripts om mijn werk te automatiseren.