
Het Linux Foundation Certificeringsprogramma
Je herinnert je misschien nog uit Deel 1 – Over Iptables van deze LFCE (Linux Foundation Certified Engineer) serie dat we een basisbeschrijving gaven van wat een firewall is: een mechanisme om pakketten die het netwerk binnenkomen en verlaten te beheren. Met “beheren” bedoelen we eigenlijk:
- Bepaalde pakketten toestaan of voorkomen om ons netwerk binnen te komen of te verlaten.
- Ander pakketten doorsturen van het ene punt van het netwerk naar het andere.
op basis van vooraf bepaalde criteria.
In dit artikel zullen we bespreken hoe we basispakketfiltering kunnen implementeren en hoe we de firewall kunnen configureren met iptables, een frontend voor netfilter, dat een inheemse kernelmodule is die wordt gebruikt voor firewalling.
Houd er rekening mee dat firewallen een uitgebreid onderwerp is en dat dit artikel niet bedoeld is als een allesomvattende handleiding om alles te begrijpen wat erover te weten valt, maar eerder als een startpunt voor een diepgaande studie van dit onderwerp. We zullen echter terugkomen op het onderwerp in Deel 10 van deze serie wanneer we een paar specifieke gebruiksgevallen van een firewall in Linux verkennen.
Je kunt een firewall zien als een internationale luchthaven waar passagiersvliegtuigen bijna 24/7 komen en gaan. Op basis van een aantal voorwaarden, zoals de geldigheid van het paspoort van een persoon, of zijn/haar land van herkomst (om een paar voorbeelden te noemen), mag hij/zij wel of niet worden toegelaten om een bepaald land binnen te komen of te verlaten.
Tegelijkertijd kunnen luchthavenbeambten mensen instrueren om indien nodig van de ene plaats van de luchthaven naar de andere te verplaatsen, bijvoorbeeld wanneer ze door de douane moeten gaan.
We kunnen de luchthavenanalogie handig vinden tijdens de rest van deze tutorial. Houd gewoon de volgende relaties in gedachten terwijl we verder gaan:
- Personen = Pakketten
- Firewall = Luchthaven
- Land #1 = Netwerk #1
- Land #2 = Netwerk #2
- Luchthavenregels gehandhaafd door beambten = firewallregels
Iptables – De basis
Op laag niveau is het de kernel zelf die “beslist” wat te doen met pakketten op basis van regels gegroepeerd in ketens, of zinnen. Deze ketens definiëren welke acties moeten worden ondernomen wanneer een pakket voldoet aan de door hen gespecificeerde criteria.
De eerste actie die iptables zal ondernemen, bestaat uit het beslissen wat te doen met een pakket:
- Accepteren (het doorlaten in ons netwerk)?
- Weigeren (voorkomen dat het toegang krijgt tot ons netwerk)?
- Doorsturen (naar een andere keten)?
Voor het geval je je afvroeg waarom dit hulpprogramma iptables wordt genoemd, is dat omdat deze ketens zijn georganiseerd in tabellen, waarbij de filtertabel de bekendste is en degene die wordt gebruikt om pakketfiltering te implementeren met zijn drie standaardketens:
1. De INPUT-keten behandelt pakketten die het netwerk binnenkomen en bestemd zijn voor lokale programma’s.
2. De OUTPUT keten wordt gebruikt om pakketten te analyseren die afkomstig zijn uit het lokale netwerk en die naar buiten moeten worden verzonden.
3. De FORWARD keten verwerkt de pakketten die doorgestuurd moeten worden naar een andere bestemming (zoals bij een router).
Voor elk van deze ketens is er een standaardbeleid dat dicteert wat er standaard moet gebeuren wanneer pakketten niet overeenkomen met een van de regels in de keten. U kunt de regels die zijn gemaakt voor elke keten en het standaardbeleid bekijken door de volgende opdracht uit te voeren:
# iptables -L
De beschikbare beleidsregels zijn als volgt:
- ACCEPT → laat het pakket door. Elk pakket dat niet overeenkomt met regels in de keten, wordt toegelaten in het netwerk.
- DROP → laat het pakket vallen zonder melding. Elk pakket dat niet overeenkomt met regels in de keten, wordt verhinderd het netwerk binnen te komen.
- REJECT → weigert het pakket en geeft een informatieve melding terug. Deze werkt niet als standaardbeleid. In plaats daarvan is het bedoeld als aanvulling op de regels voor pakketfiltering.

Als het gaat om het beslissen welk beleid u zult implementeren, moet u de voor- en nadelen van elke benadering overwegen zoals hierboven uitgelegd – merk op dat er geen one-size-fits-all oplossing is.
Regels toevoegen
Om een regel toe te voegen aan de firewall, roept u het iptables commando als volgt aan:
# iptables -A chain_name criteria -j target
waar,
- -A staat voor Toevoegen (voeg de huidige regel toe aan het einde van de keten).
- keten_naam is ofwel INPUT, OUTPUT, of FORWARD.
- doel is de handeling of beleid dat moet worden toegepast in dit geval (ACCEPTEREN, VERWIJZEN of NEGEEREN).
- criteria is de set van voorwaarden waartegen de pakketten moeten worden onderzocht. Het bestaat uit minstens één (en waarschijnlijk meer) van de volgende vlaggen. Opties in haakjes, gescheiden door een verticale streep, zijn equivalent aan elkaar. Het overige vertegenwoordigt optionele schakelaars:
[--protocol | -p] protocol: specifies the protocol involved in a rule. [--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated. [--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined. [--source | -s] address[/mask]: represents the source address or network/mask. [--destination | -d] address[/mask]: represents the destination address or network/mask. [--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID. [--in-interface | -i] interface: specifies the input interface of the packet. [--out-interface | -o] interface: the output interface. [--jump | -j] target: what to do when the packet matches the rule.
Ons Testmilieu
Laat ons alles samenlijsten in 3 klassieke voorbeelden met behulp van het volgende testmilieu voor de eerste twee:
Firewall: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
Source: CentOS 7 Hostname: dev1.gabrielcanepa.com IP Address: 192.168.0.17
En dit voor het laatste voorbeeld
NFSv4 server and firewall: Debian Wheezy 7.5 Hostname: debian IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
Voorbeeld 1: Analyseren van de verschillen tussen de NEGEEREN en VERWIJZEN beleid
We zullen eerst een NEGEEREN beleid definiëren voor inkomende pingopdrachten naar onze brandmuur. D.w.z. pakketten van het type icmp zullen stilzwijgend worden negeerd.
# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Voordat we doorgaan met de VERWIJZEN gedeelte, zullen we alle regels uit de INPUT-keten verwijderen om er zeker van te zijn dat onze pakketten door deze nieuwe regel zullen worden getest:
# iptables -F INPUT # iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15

Voorbeeld 2: Uitschakelen / opnieuw inschakelen van ssh-login van dev2 naar dev1
We zullen ons bezig houden met de UITGAAND keten omdat we uitgaande verkeer handelen:
# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

Voorbeeld 3: Toestaan / voorkomen dat NFS-clients (van 192.168.0.0/24) NFS4-shares aankunnen monteren
Voer de volgende commando’s uit in het NFSv4-server / brandmuur om poorten 2049 en 111 voor alle soorten verkeer te sluiten:
# iptables -F # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Nu laten we deze poorten open en zien wat er gebeurt.
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Als u ziet, konden we de NFSv4-share monteren nadat we het verkeer hadden geopend.
Invoer, toevoegen en verwijderen van regels
In de voorgaande voorbeelden hebben we gezien hoe regels konden worden toegevoegd aan de ketens INPUT en OUTPUT. Als we ze in plaats daarvan wensen in een voorgedefinieerde positie in te voegen, moeten we de -I (hoofdletters I) optie gebruiken.
U moet erop vergeven dat regels een voor een worden beoordeeld, en dat de evaluatie stopt (of springt) wanneer een DROP of ACCEPT beleid wordt gematcht. Om die reden zou u zich misschien in nood kunnen krijgen om regels naar beneden of boven te verplaatsen in de lijst van ketens als nodig.
We zullen een triviaal voorbeeld gebruiken om dit te demonstreren:

Laat ons de volgende regel,
# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
op positie 2) in de INPUT-keten plaatsen (dus de vorige #2 als #3 verschuiven)

Met de bovenstaande setup, zal het verkeer worden gecontroleerd op of het naar poort 80 is gericht voordat het naar poort 2049 wordt gecontroleerd.
Als alternatief kunt u een regel verwijderen en de doelwit van de overige regels wijzigen in REJECT (gebruik makende van de -R optie):
# iptables -D INPUT 1 # iptables -nL -v --line-numbers # iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Tot slot moet u erop vergeven dat om de firewallregels persistent te maken, u ze naar een bestand moet opslaan en vervolgens automatisch bij het opstarten terug moet herstellen (gebruik makende van de gewenste methode of de beschikbare voor uw distributie).
Opslaan van firewallregels:
# iptables-save > /etc/iptables/rules.v4 [On Ubuntu] # iptables-save > /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Herstellen van regels:
# iptables-restore < /etc/iptables/rules.v4 [On Ubuntu] # iptables-restore < /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Hier zie we een gelijkaardige procedure (opslaan en herstellen van firewallregels handmatig) gebruiken met een dummybestand genaamd iptables.dump in plaats van het standaardbestand zoals hierboven getoond.
# iptables-save > iptables.dump

Om deze wijzigingen door te geven over het opstarten:
Ubuntu: Installeer het pakket iptables-persistent, dat de regels uit het bestand /etc/iptables/rules.v4 laadt.
# apt-get install iptables-persistent
CentOS: Voeg de volgende 2 regels toe aan het bestand /etc/sysconfig/iptables-config.
IPTABLES_SAVE_ON_STOP="yes" IPTABLES_SAVE_ON_RESTART="yes"
OpenSUSE: Maak een lijst van toegestane poorten, protocollen, adressen enzovoort (gescheiden door komma’s) in /etc/sysconfig/SuSEfirewall2.
Voor meer informatie raadpleeg het bestand zelf, dat zeer uitgebreid commentaar bevat.
Conclusie
De voorbeelden die in dit artikel worden gegeven, zijn niet bedoeld om alle functionaliteiten van iptables te beschrijven, maar om te illustreren hoe ingekomene en uitgaande trafiek kunnen worden ingeschakeld en uitgeschakeld.
Voor degenen onder u die een vuurwal fan zijn, onthoud dat we dit onderwerp in Deel 10 van deze LFCE reeks nog eens terug zullen nadenken met specifieke toepassingen.
Mocht u vragen of opmerkingen hebben, laat het me dan weten.
Source:
https://www.tecmint.com/configure-iptables-firewall/