22 augustus 2024

IPtables configureren

In dit artikel een instructie hoe de iptables te configureren voor een Linux Firewall. De Linux iptables helpen je ongewenst verkeer buiten de deur te houden en poorten te limiteren. Een Firewall is een beetje als een receptie van Center parks. Van te voren moet je eerst langs de receptie voordat je het park op kan. Dat geld ook voor een Firewall.

IPtables wat is dat?

IPtables biedt een basis firewall, eigenlijk net zoals de Windows Firewall. Het is het schild tussen jouw pc of server en de buitenwereld.

Waarom een iptables firewall:

  • Te voorkomen dat er vanuit het internet op een willekeurige poort verbinding gemaakt kan worden
  • Ongewenste verbindingen blokkeren, port scans voorkomen
  • Limiteren of dichtschroeven van overbodige poorten vanuit de buitenwereld

De firewall biedt een soort van schild tussen je server en het internet. Het is goed om zelf te bepalen wat voor verkeer er naar jouw server in en uit gaat. Dat kunnen we uitstekend doen met iptables. Hierbij gaan we een basis configuratie doen die alleen de benodigde poorten open stelt voor het internet. Ook maken we SSH poort slechts beschikbaar vanaf 1 ip adres. Zodat de rest van de wereld niet bij de SSH poort kan komen. Ik werk hier met iptables en nog niet firewalld. Waarom? De commando’s zijn weer veranderd bij firewalld.

Mijn server heeft het volgende geïnstalleerd:

  • CentOS 7.0
  • Apache webserver poort 80, 443
  • SNMPD poort 161 udp
  • DirectAdmin poort 2222 tcp
  • Dovecot IMAP poort 143, 993 tcp
  • Exim poort 25, 587, 465 tcp
  • ProFTP poort 21, passive poorts 10000 – 20000 tcp
  • MySQL = willen we alleen lokaal houden geen connecties vanuit buiten

Stap 1: Eerst even updaten

Commando: yum update -y

Als alle updates zijn geinstalleerd komt de volgende mededeling: “No packages marked for update”

Stap 2: Installeren van iptables

Standaard bij CentOS 7 is Firewalld ingesteld als Firewall. We willen Firewalld omwisselen met iptables.

Commando: sudo yum install iptables-services

Stap 3: Vervang Firewalld door iptables

In de vorige stap hebben we iptables geïnstalleerd we gaan iptables nu als standaard instellen.

Commando: sudo systemctl stop firewalld && sudo systemctl start iptables

Het commando stopt de firewalld service en start de iptables service
Om te controleren of iptables uit staat kun je het volgende commando gebruiken: systemctl status iptables

Als je nu in groene letters te zien krijgt active dan gaat het goed. Nu moeten we er alleen nog voor zorgen dat iptables bij het opstarten wordt opgestart. (en firewalld juist niet)

Commando: sudo systemctl disable firewalld
Commando: sudo systemctl enable iptables

Stap 4: Configureren van iptables

Nu we succesvol iptables hebben omgewisseld is het tijd om iptables te configureren. Dat gaan we in deze stap doen. Zoals bovenaan aangegeven wil ik de volgende poorten op de server open hebben. De rest van de poorten gebruiken we niet dus die wil ik ook geblokkeerd hebben.

  • Apache webserver poort 80, 443
  • SNMPD poort 161 udp
  • DirectAdmin poort 2222 tcp
  • Dovecot IMAP poort 143, 993 tcp
  • Exim poort 25, 587, 465 tcp
  • ProFTP poort 21, passive poorts 10000 – 20000 tcp

Commando: iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT
Commando: iptables -A INPUT -p udp -m udp –dport 161 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 143 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 587 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 993 -j ACCEPT
Commando: iptables -A INPUT -p tcp -m tcp –dport 2222 -j ACCEPT

Bovenstaand alle commando’s om de poort tcp en udp te openen. Afhankelijk van jouw server kan het natuurlijk zijn dat je nog meer poorten open moet trekken.
Commando: iptables -A INPUT -p tcp -s HIERJEIPADRES -m tcp –dport 22 -j ACCEPT

Het bovenstaande commando beperkt de SSH toegang tot slechts 1 ip adres. Vervang hierjeipadres door jou ip adres.

Commando: iptables -I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
Commando: sudo iptables -A INPUT -i lo -j ACCEPT
Commando: sudo iptables -A OUTPUT -o lo -j ACCEPT
Commando: iptables -P OUTPUT ACCEPTCommando: iptables -P INPUT DROP

Met de bovenstaande commando’s zetten we de loopback op alle pakketten accepteren. We accepteren alle uitgaande verkeer. We blokkeren alle overige poorten met het laatste commando.
Nu we een basis Firewall hebben geconfigureerd is het tijd om hem op te slaan. Dat gaat via het volgende commando:

Commando: iptables-save
Commando: sudo /etc/init.d/iptables save

Gefeliciteerd jouw basis Firewall is nu geconfigureerd. De laatste stap is het testen van je configuratie.

Stap 5: Testen van iptables configuratie

Nu de Firewall volledig actief is kunnen we de configuratie gaan testen. Ik gebruik zelf altijd de tool: http://www.yougetsignal.com/tools/open-ports/

Testen die je zou kunnen uitvoeren:

  • Is je poort 22 nog bereikbaar?
  • Welke poort moet geblokkeerd zijn? Bijvoorbeeld MySQL poort in mijn geval

Wil je een overzicht van jouw configuratie?

Commando: iptables -l -N

Heb je een fout gemaakt?

Herstellen van je firewall kan met het commando: sudo iptables -F . Houd er wel rekening mee dat dit commando tijdelijk alle Fireall regels weg haalt, start je je VPS opnieuw op dan worden de Firewall regels opnieuw ingeladen uit het configuratiebestand.