Ga naar inhoud

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

  1. Een pakketje komt binnen in de juiste keten: INPUT, OUTPUT, FORWARD.
  2. Regels worden in volgorde geëvalueerd — zodra een overeenkomst wordt gevonden, wordt de gespecificeerde actie uitgevoerd.
  3. 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

iptables [opties] KETEN [criteria] -j ACTIE

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):

sudo iptables -L -n -v --line-numbers
- -n — geen namen oplossen (snelder); - -v — uitgebreide uitvoer; - --line-numbers — regelnummers weergeven (handig voor verwijdering).

Standaardbeleidsregels weergeven:

sudo iptables -S | grep '^:'
# Of:
sudo iptables -L | head -3

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:

sudo /sbin/service iptables save
# of
sudo iptables-save > /etc/sysconfig/iptables

Voor Debian / Ubuntu:

Installeer het persistentiepakket:

sudo apt update && sudo apt install iptables-persistent
Tijdens de installatie wordt je gevraagd om de huidige regels op te slaan — kies "Yes".

Bewaar regels later bijgewerkt:

sudo netfilter-persistent save
# of direct:
sudo iptables-save > /etc/iptables/rules.v4

Opmerking

Controleer de regels voordat je herstart:

sudo iptables-restore -t < /etc/iptables/rules.v4
De -t-vlag is alleen voor syntaxiscontrole, zonder toepassing.

Regels verwijderen

Verwijderen op nummer (zie --line-numbers):

sudo iptables -D INPUT 3   # verwijder regel #3 in de INPUT-keten

Verwijderen op exacte overeenkomst:

sudo iptables -D INPUT -s 198.51.100.77 -j DROP

Ketens wissen:

sudo iptables -F INPUT      # alleen INPUT
sudo iptables -F            # alle ketens

Standaardbeleidsregels resetten:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Informatie

  1. Test regels lokaal of via de console (niet via SSH!), vooral bij wijzigingen in INPUT.
  2. Gebruik screen of tmux zodat je de sessie niet verliest bij een fout.
  3. Overweeg de overstap naar modernere tools:

    • ufw — vereenvoudigde interface voor iptables (Ubuntu/Debian);
    • firewalld — dynamische firewall voor RHEL/CentOS;
    • nftables — de toekomst van de Linux-kernel (efficiëntere en beknoptere syntaxis).
question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×