Instellen van basis Linux-firewall met iptables¶
In dit artikel
iptables is het ingebouwde framework voor het filteren en beheren van netwerkverkeer in de Linux-kernel. Het biedt flexibele controle over inkomend, uitgaand en transitverkeer op basis van regels.
Opmerking
iptables is standaard geïnstalleerd op vrijwel alle Linux-distributies.
In nieuwere systemen (RHEL 8+, Ubuntu 20.04+) kan nftables (het nft-commando) de standaard zijn, maar iptables blijft compatibel via de legacy-interface iptables-legacy.
Voor cloud- of VPS-servers is het instellen van iptables van cruciaal belang voor de beveiliging.
Kernconcepten¶
Drie ketens (chains)¶
| Ketens | Doel |
|---|---|
INPUT | Inkomend verkeer naar de server (SSH, HTTP, etc.) |
OUTPUT | Uitgaand verkeer vanaf de server (updates, API-aanroepen) |
FORWARD | Verkeer dat door de server loopt (alleen bij routing/NAT) |
Opmerking
Wees voorzichtig met INPUT!
Het blokkeren van poort 22 zonder toestemming kan je verbinding met de server verbreken. Controleer regels altijd voordat je ze toepast.
Hoe het werkt¶
- Een pakketje komt binnen in de juiste keten:
INPUT,OUTPUT,FORWARD. - Regels worden in volgorde geëvalueerd — zodra een overeenkomst wordt gevonden, wordt de gespecificeerde actie uitgevoerd.
- Als geen overeenkomst wordt gevonden, wordt het standaardbeleid (
policy) toegepast.
Acties (targets)¶
| Actie | Gedrag | Aanbeveling |
|---|---|---|
ACCEPT | Pakketje toestaan | Voor vertrouwde services (SSH, HTTP) |
DROP | Pakketje stil weggooien (geen antwoord) | ****Beste keuze voor beveiliging**** — verbergt het bestaan van de poort |
REJECT | Afwijzen met een ICMP-fout (bijv. port-unreachable) | Gebruik als je feedback nodig hebt (bijv. voor debugging) |
Opmerking
Beveiligingsregel
Standaard — alles weigeren, en alleen toestaan wat nodig is.
Basiscommandosyntaxis¶
Belangrijkste opties:¶
| Optie | Doel |
|---|---|
-A | Regel aan het einde van de keten toevoegen |
-I | Regel aan het begin invoegen (of op een specifiek nummer: -I INPUT 1) |
-D | Regel verwijderen (op nummer of door de regel te kopiëren) |
-L | Regels weergeven |
-F | Alle regels in de keten wissen |
-P | Standaardbeleid instellen (ACCEPT, DROP) |
Vaak gebruikte criteria:¶
| Optie | Voorbeeld | Beschrijving |
|---|---|---|
-p tcp/udp/icmp | -p tcp | Protocol |
--dport N | --dport 22 | Bestemmingspoort |
-s IP/MASK | -s 192.168.1.5-s 203.0.113.0/24 | Bron (IP of subnet) |
-i interface | -i eth0 | Inkomende interface |
-m state --state NEW,ESTABLISHED | -m state --state NEW | Verbindingsstatus |
-m connlimit | --connlimit-above 5 | Verbindingslimiet |
Weergeven en probleemoplossing¶
Alle regels weergeven (leesbaar):¶
--n — geen namen oplossen (snelder); - -v — uitgebreide uitvoer; - --line-numbers — regelnummers weergeven (handig voor verwijdering). 
Standaardbeleidsregels weergeven:¶
Praktische voorbeelden van regels¶
1. Veilige basisconfiguratie (aanbevolen!)¶
# 1. Sta alle verkeer op loopback toe
sudo iptables -A INPUT -i lo -j ACCEPT
# 2. Sta reeds gevestigde verbindingen toe (belangrijk!)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 3. Sta SSH toe (vervang 22 door je poort als deze is gewijzigd!)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 4. Sta HTTP/HTTPS toe
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 5. Gooi alles else standaard weg
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # ← meestal uitgaand verkeer toestaan
2. Toegangsbeperking¶
# Sta MySQL (3306) alleen toe vanaf één IP
sudo iptables -A INPUT -s 203.0.113.15 -p tcp --dport 3306 -j ACCEPT
# Blokkeer alle verkeer van een verdachte IP
sudo iptables -A INPUT -s 198.51.100.77 -j DROP
3. Bescherming tegen aanvallen¶
# Blokkeer misvormde/ongeldige pakketjes
sudo iptables -A INPUT -m state --state INVALID -j DROP
# Bescherm tegen SYN-flood
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
# Beperk verbindingen naar HTTP (niet meer dan 20 gelijktijdig vanaf één IP)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP
4. Loggen¶
# Log pogingen om verbinding te maken met gesloten poorten (maximaal 5 per minuut)
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 \
-m limit --limit 5/min -j LOG --log-prefix "PORT-SCAN: " --log-level 4
# Vervolgens weggooien
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 -j DROP
Regels opslaan na herstart¶
iptables-regels worden niet automatisch opgeslagen — ze verkeren alleen in het kernelgeheugen.
Voor RHEL / CentOS 7 en eerder:¶
Voor Debian / Ubuntu:¶
Installeer het persistentiepakket:
Tijdens de installatie wordt je gevraagd om de huidige regels op te slaan — kies "Yes".Bewaar regels later bijgewerkt:
Opmerking
Controleer de regels voordat je herstart:
De-t-vlag is alleen voor syntaxiscontrole, zonder toepassing. Regels verwijderen¶
Verwijderen op nummer (zie --line-numbers):¶
Verwijderen op exacte overeenkomst:¶
Ketens wissen:¶
Standaardbeleidsregels resetten:¶
Informatie
- Test regels lokaal of via de console (niet via SSH!), vooral bij wijzigingen in
INPUT. - Gebruik
screenoftmuxzodat je de sessie niet verliest bij een fout. -
Overweeg de overstap naar modernere tools: