Introductie
Iptables is een command-line firewall hulpprogramma. Dit betekent dat het software is waarmee u een firewall op uw systeem kunt configureren. Het is doorgaans standaard beschikbaar op Linux-systemen. In deze handleiding zullen we enkele van de veelvoorkomende regels en commando's bespreken die bij de iptables-firewall horen. Telkens wanneer een verbinding tot stand probeert te komen met uw systeem, zal de firewall deze regels raadplegen om te bepalen wat de volgende actie moet zijn.
Iptables-commando's
In deze handleiding introduceren we enkele van de meest essentiële iptables-commando's. Om de handleiding te volgen, moet u een basisbegrip hebben van wat iptables is en hoe het werkt. Dit helpt u om een beter inzicht te krijgen in de regels die u met de volgende commando's implementeert. Onthoud dat elk van de onderstaande commando's afzonderlijk kan worden gebruikt. Aan de andere kant kunt u ze ook combineren en aanpassen aan uw specifieke behoeften.
Dingen om in gedachten te houden
Voordat u verder leest, zijn hier enkele dingen die u in gedachten moet houden:
- De volgorde van de regels in iptables is belangrijk.
- Om een nieuwe regel aan het einde van een chain toe te voegen, moet uw
iptablescommand het volgende gebruiken:-A. - Als u de regel op een andere positie wilt toevoegen, moet u de optie
-Igebruiken. Met deze optie kunt u de exacte locatie van de regel specificeren. Als u de regel aan het begin van de chain wilt plaatsen, voert u simpelweg geen regelnummer in. - Om ervoor te zorgen dat u consistente toegang tot uw server heeft, blokkeert u SSH-verkeer op poort 22 standaard.
- Mocht u dit niet doen en de toegang tot uw server verliezen, dan kunt u opnieuw verbinding maken via de console. Sta SSH-verkeer toe om de firewall-instellingen te wijzigen.
- Als u de momenteel actieve regelset wilt bekijken, gebruikt u de commando's
sudo iptables -S en sudo iptables -L.
Daarnaast hebben we een gedetailleerde handleiding over het weergeven en verwijderen van iptables-firewallregels, die u verder zal helpen om uw iptables-firewall optimaal te gebruiken.
Nu we de voorbereidingen hebben getroffen, gaan we dieper in op enkele van de veelvoorkomende iptables-commando's:
Hoe u uw regels kunt opslaan
We beginnen met te bepalen hoe u uw regels kunt opslaan. Het is belangrijk om te weten dat iptables-regels vluchtig zijn. Dit betekent dat ze verloren gaan nadat u uw systeem opnieuw opstart - tenzij u ze opslaat. Hier leest u hoe u uw nieuwe regels handmatig kunt opslaan op respectievelijk een Ubuntu en CentOS-server:
-
Ubuntu
De eenvoudigste manier om uw nieuwe regels op een Ubuntu-server op te slaan, is door het iptables-persistent-pakket te gebruiken. U kunt eenvoudig een Ubuntu-server maken door deze handleiding te volgen.
De eerste stap om uw nieuwe iptables-regels op te slaan, is het installeren van het iptables-persistent -pakket met behulp van apt-get. Hier leest u hoe u dit kunt verkrijgen:
|
1 |
sudo apt-get install iptables-persistent |

Tijdens het installatieproces moet u beslissen of u de momenteel actieve firewallregels wilt opslaan. Om in plaats daarvan de regels bij te werken en de wijzigingen op te slaan, gebruikt u dit commando:
|
1 |
sudo netfilter-persistent save |

Het bovenstaande commando werkt doorgaans voor Ubuntu-versies na 16.04. Als u een oudere versie gebruikt, gebruikt u in plaats daarvan dit commando:
|
1 |
sudo invoke-rc.d iptables-persistent save |
-
CentOS
U kunt uw firewall configureren met iptables op CentOS 6 of oudere versies. CentOS 7 gebruikt in plaats daarvan FirewallD. Volg deze handleiding om te leren hoe u FirewallD instelt op CentOS 7.
U kunt uw nieuwe regels op CentOS opslaan met behulp van het iptables init-script. Zie het volgende commando:
|
1 |
sudo service iptables save |
Dit commando slaat uw nieuwe regels voor de iptables-firewall op. De momenteel actieve iptables-regels zijn te vinden in het /etc/sysconfig/iptables -bestand.
Handige iptables-commando's
Laten we nu overgaan naar enkele zeer handige iptables-firewallcommando's die u mogelijk op uw server moet gebruiken.
-
Loopback-verbindingen
Eerst zullen we onderzoeken hoe u loopback-verbindingen kunt toestaan. Uw systeem gebruikt een loopback-interface om verbindingen naar zichzelf te sturen. Stel dat u bijvoorbeeld dit commando heeft uitgevoerd: ping localhost of ping 127.0.0.1. Je server gebruikt een loopback-interface, of een lo, om in feite zichzelf te pingen. In andere gevallen kan de server deze gebruiken als je applicatieserver is geconfigureerd om verbinding te maken met het 'localhost'-adres.
Ongeacht de situatie moet je ervoor zorgen dat je iptables-firewall deze verbindingen niet blokkeert. Daarom moet je loopback-verbindingen toestaan om deze functies te laten werken.
Hier zijn de commando's die je uitvoert om al het verkeer op de loopback-interface toe te staan:
|
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |

-
Gevestigde en gerelateerde inkomende verbindingen
Een ander type verbinding dat je mogelijk moet toestaan, is de uitgaande verbinding. Om ervoor te zorgen dat je server respectievelijk zowel inkomend als uitgaand verkeer ontvangt en verzendt, moet je gevestigde en gerelateerde inkomende verbindingen toestaan. Hiermee kan de server retourverkeer naar uitgaande verbindingen sturen. Gebruik dit commando om zowel gevestigde als gerelateerde inkomende verbindingen toe te staan:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
![]()
-
Gevestigde uitgaande verbindingen
De server stuurt doorgaans antwoorden op inkomende verbindingen in de vorm van uitgaand verkeer van gevestigde verbindingen. Gebruik het volgende commando om deze toe te staan:
|
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
![]()
-
Intern naar extern
Soms moet je zelfs je firewall configureren om het interne netwerk toegang te geven tot het externe netwerk. Standaard zou je externe netwerk eth0 en eth1 je interne netwerk moeten zijn. Als dit het geval is, gebruik dan dit commando om toegang in te schakelen:
|
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |

-
Ongeldige pakketten droppen
Soms worden sommige netwerkverkeerspakketten als ongeldig gemarkeerd. Meestal kun je deze ongeldige pakketten gewoon droppen. Gebruik hiervoor het volgende commando:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Regels voor het blokkeren van IP-adressen
Vervolgens kijken we naar enkele commando's die je kunt gebruiken om verbindingen van bepaalde IP-adressen te blokkeren. Om het makkelijker te maken, gebruiken we het 15.15.15.51 IP-adres als voorbeeld in onze commando's. Je kunt deze waarde vervangen door jouw specifieke IP-adres.
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j DROP |
In -s 15.15.15.51, staat de -s voor source. Het commando specificeert dus het bron-IP-adres '15.15.15.51'. Op dezelfde manier kun je het bron-IP-adres in elke firewallregel specificeren. Dit geldt ook voor de 'allow'- en 'reject'-regels.
Als je de verbinding wilt weigeren, gebruik je REJECT in plaats van DROP in het commando, zoals dit:
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j REJECT |
Hierdoor geeft je server een 'connection refused'-foutmelding telkens wanneer dat specifieke IP-adres een verbindingsverzoek verzendt.
-
Verbindingen met een specifieke interface blokkeren
Het is mogelijk om alle verbindingsverzoeken van een specifiek IP-adres naar een specifieke netwerkinterface te blokkeren. In ons voorbeeld is het IP-adres 15.15.15.51 en de netwerkinterface is eth0. Gebruik dit commando om de verbindingen te blokkeren:
|
1 |
iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP |
Het mooie is dat je de netwerkinterface in elke regel kunt specificeren. Dit betekent dat elke regel kan worden toegepast op en beperkt tot alleen een specifiek netwerk.
Regels voor service: SSH
SSH wordt relevant als je een cloudserver gebruikt. In dit geval moet je inkomende SSH-verbindingen op poort 22 toestaan. Door deze verbindingen in te schakelen, kun je verbinding maken met je server en deze beheren. Hier bespreken we een aantal veelvoorkomende regels met betrekking tot SSH.
-
Alle inkomende SSH toestaan
De volgende commando's staan alle inkomende SSH-verbindingen toe:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
In de bovenstaande set hoeft u het tweede commando alleen te gebruiken als het OUTPUT-beleid niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte SSH-verbindingen toe.
-
Inkomende SSH vanaf een subnet toestaan
Het vorige commando staat alle inkomende verbindingen toe. U kunt de volgende commando's gebruiken om alleen inkomende verbindingen vanaf een specifiek IP-adres of subnet toe te staan. Stel dat u alleen inkomende verbindingen wilt toestaan vanaf het 15.15.15.0/24 subnet:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Net als voorheen hoeft u het tweede commando alleen te gebruiken als het OUTPUT-beleid niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte SSH-verbindingen toe.
-
Uitgaande SSH toestaan
Gebruik deze commando's als het firewall-OUTPUT-beleid niet is ingesteld op ACCEPT en u SSH-verbindingen wilt inschakelen. Hiermee kan uw server SSH-verbindingen met andere servers tot stand brengen:
|
1 2 |
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Om SSH verder te benutten op uw cloudservers, kunt u onze handleidingen bekijken over hoe u SSH gebruikt om verbinding te maken met een externe server in Ubuntu en hoe u uw Linux-server configureert om SSH-authenticatie op basis van sleutels te gebruiken.
-
Inkomende Rsync vanaf een subnet toestaan
Rsync is een functie die u kunt gebruiken om bestanden van het ene systeem naar het andere over te dragen. Het draait op poort 873. Dus als u inkomende Rsync-verbindingen op poort 873 vanaf een specifiek IP-adres of subnet wilt toestaan, gebruikt u de volgende commando's:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Zoals u kunt zien, hebben we het bron-IP-adres samen met de bestemmingspoort gespecificeerd. U gebruikt het tweede commando alleen als het firewall-OUTPUT-beleid niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte Rsync-verbindingen toe. Daarnaast kunt u een kijkje nemen in onze handleiding over hoe u Rsync kunt gebruiken om lokale en externe mappen op een VPS te synchroniseren.
Regels voor service: webserver
HTTP-verbindingen worden doorgaans ontvangen op poort 80. Similarly, HTTPS usually comes on port 443. Web servers like Apache en Nginx luisteren naar deze poorten om verbindingsverzoeken op te vangen. Soms kunnen de standaardinstellingen ervoor zorgen dat uw server deze inkomende verzoeken weigert of weggooit. Daarom moet u nieuwe regels instellen om het verkeer toch toe te staan.
-
Alle inkomende HTTP-verbindingen toestaan
U kunt alle inkomende HTTP-verbindingen op poort 80 toestaan met deze commando's:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
U gebruikt het tweede commando alleen als het firewall-OUTPUT -beleid niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte HTTP-verbindingen toe.
-
Alle inkomende HTTPS-verbindingen toestaan
Gebruik deze commando's om alle inkomende HTTPS-verbindingsverzoeken op poort 443 toe te staan:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Je gebruikt het tweede commando alleen als het iptables-firewallbeleid OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte HTTP-verbindingen toe.
-
Alle inkomende verbindingen van HTTP en HTTPS toestaan
Je kunt de multiport-module gebruiken als je verkeer van zowel HTTP- als HTTPS-poorten wilt toestaan. Gebruik deze commando's als dat het geval is:
|
1 2 |
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Je gebruikt het tweede commando alleen als het firewallbeleid OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte HTTP- en HTTPS-verbindingen toe.
Regels voor service: MySQL
Soms gebruikt een client een externe server om toegang te krijgen tot je MySQL-databaseserver. In dat geval moet je inkomend verkeer van de relevante poort handmatig toestaan. MySQL luistert naar verbindingsverzoeken op poort 3306.
-
Inkomende MySQL-verbindingen van een subnet toestaan
Je moet de bron specificeren als je MySQL-verbindingen van een specifiek subnet wilt toestaan. In ons voorbeeld staan we inkomend verkeer toe van het 15.15.15.0/24-subnet met behulp van deze commando's:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Je gebruikt het tweede commando alleen als het firewallbeleid OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte MySQL-verbindingen toe.
-
MySQL-verbindingen naar een interface inschakelen
Als je ook wilt specificeren welke netwerkinterface de MySQL-verbindingen moet ontvangen, kun je deze commando's gebruiken:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
In dit geval staan we de verbindingen toe naar een privé-netwerkinterface genaamd eth1.
Je gebruikt het tweede commando alleen als het firewallbeleid OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte MySQL-verbindingen toe.
Je kunt onze handleiding volgen voor een eenvoudige installatie van MySQL op je server.
Regels voor service: PostgreSQL
Je client gebruikt mogelijk een externe server om toegang te krijgen tot je PostgreSQL-databaseserver. In dat geval moet je deze inkomende verbindingen toestaan. Deze verbindingen komen binnen via poort 5432.
-
Inkomende PostgreSQL-verbindingen van een subnet toestaan
Je kunt de volgende commando's gebruiken om inkomende PostgreSQL-verbindingen van een specifiek subnet of IP-adres toe te staan. Zoals je kunt zien, hebben we de bron gespecificeerd, namelijk het 15.15.15.0/24 subnet.
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Je gebruikt het tweede commando alleen als het firewallbeleid OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte PostgreSQL-verbindingen toe.
-
PostgreSQL-verbindingen naar een specifieke interface inschakelen
Als u alleen PostgreSQL-verbindingen naar een specifieke netwerkinterface wilt toestaan, gebruikt u deze commando's:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
In dit geval staan we verbindingen toe naar een privé-netwerkinterface genaamd eth1. U gebruikt het tweede commando alleen als het firewall-beleid voor OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte PostgreSQL-verbindingen toe.
Volg deze handleiding om PostgreSQL op uw Ubuntu-server te installeren.
Regels voor service: Mail
Mogelijk moet u uw firewall ook configureren in overeenstemming met de mailserver die u gebruikt. Bijvoorbeeld, Sendmail en Postfix kunnen verbindingen ontvangen op een aantal verschillende poorten. Dit hangt af van het protocol dat u gebruikt voor de e-mailbezorging. Om bepaalde e-mailverbindingen te blokkeren en toe te staan, moet u weten welk protocol u gebruikt.
-
Inkomende SMTP-verbindingen toestaan
SMTP-verbindingen komen doorgaans binnen op poort 25. Hoewel SMTP ook vaak poort 587 gebruikt voor uitgaande e-mail. Om uw server op deze verbindingen te laten reageren, gebruikt u de volgende commando's:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
U gebruikt het tweede commando alleen als het firewall-beleid voor OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte SMTP-verbindingen toe.
-
Alle inkomende IMAP toestaan
Om uw server te laten reageren op alle inkomende IMAP-verbindingen op poort 143, typt en voert u dit uit:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
U gebruikt het tweede commando alleen als het firewall-beleid voor OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte IMAP-verbindingen toe.
-
Alle inkomende IMAPS toestaan
Gebruik deze commando's om uw server te laten reageren op IMAPS-verbindingen op poort 993:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
U gebruikt het tweede commando alleen als het firewall-beleid voor OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte IMAPS-verbindingen toe.
-
Alle inkomende POP3 toestaan
Deze verbindingen komen binnen op poort 993. Als u wilt dat uw server reageert op IMAPS-verbindingsverzoeken, gebruikt u de volgende commando's:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
U gebruikt het tweede commando alleen als het firewall-beleid voor OUTPUT niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte POP3-verbindingen toe.
-
Alle inkomende POP3S toestaan
Gebruik deze commando's om uw server verbinding te laten maken met POP3S-verzoeken die binnenkomen op poort 995:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Je gebruikt het tweede commando alleen als het firewall-OUTPUT beleid niet is ingesteld op ACCEPT. Het staat het uitgaande verkeer van tot stand gebrachte POP3S-verbindingen toe.
-
Uitgaande SMTP-mail blokkeren
In plaats van inkomende verbindingen toe te staan en serverreacties in te schakelen, wil je wellicht uitgaande e-mail helemaal blokkeren. Je kunt alle uitgaande SMTP-mail op poort 25 blokkeren met dit commando:
|
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
Hierdoor wordt al het uitgaande verkeer op poort 25 geweigerd door de iptables-firewall. Je kunt dezelfde commandostructuur gebruiken als je een andere service wilt weigeren. Het enige wat je hoeft te doen is poort 25 te vervangen door het relevante poortnummer.
Conclusie
Deze gids behandelt de essentiële iptables-firewallcommando's. Het biedt je de essentiële hulpmiddelen die je nodig hebt om je iptables-firewall effectief te configureren. Houd er rekening mee dat er geen pasklare oplossing is. Deze commando's zijn uiterst flexibel. Dit betekent dat je ze kunt gebruiken op de manier die het beste bij jou en je vereisten past.
Veel computerplezier!

Reacties
Nog geen reacties. Wees de eerste.