Serverbeheer en firewallconfiguratie

IPtables: wat is dat?

IPtables biedt een basisfirewall, eigenlijk net als de Windows Firewall. Het is het schild tussen jouw pc of server en de buitenwereld. Redenen om een iptables-firewall te gebruiken:

  • Voorkomen dat er vanuit het internet op een willekeurige poort verbinding gemaakt kan worden
  • Ongewenste verbindingen blokkeren en port scans voorkomen
  • Overbodige poorten vanuit de buitenwereld limiteren of dichtschroeien

De firewall biedt een schild tussen je server en het internet. Het is goed om zelf te bepalen welk verkeer naar jouw server in en uit gaat, en dat kan uitstekend met iptables. Hieronder maken we een basisconfiguratie die alleen de benodigde poorten openstelt voor het internet. Ook maken we de SSH-poort slechts beschikbaar vanaf één IP-adres, zodat de rest van de wereld er niet bij kan. We gebruiken hier iptables en nog niet firewalld, omdat de commando's daarbij weer zijn veranderd.

Deze 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, passieve poorten 10000–20000 tcp
  • MySQL: willen we alleen lokaal houden, geen connecties van buitenaf

Stap 1: eerst even updaten

yum update -y

Zijn alle updates geïnstalleerd, dan krijg je de melding "No packages marked for update".

Stap 2: installeren van iptables

Standaard staat bij CentOS 7 firewalld ingesteld als firewall. We wisselen firewalld om voor iptables.

sudo yum install iptables-services

Stap 3: vervang firewalld door iptables

In de vorige stap hebben we iptables geïnstalleerd; nu stellen we het als standaard in.

sudo systemctl stop firewalld && sudo systemctl start iptables

Dit commando stopt de firewalld-service en start de iptables-service. Controleer of iptables actief is met:

systemctl status iptables

Zie je in groene letters "active" staan, dan gaat het goed. Zorg er vervolgens voor dat iptables bij het opstarten automatisch start, en firewalld juist niet:

sudo systemctl disable firewalld
sudo systemctl enable iptables

Stap 4: configureren van iptables

Nu iptables actief is, gaan we het configureren. We willen de hierboven genoemde poorten open hebben op de server; de rest blokkeren we.

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

Dit zijn de commando's om de genoemde tcp- en udp-poorten te openen. Afhankelijk van jouw server kan het zijn dat je nog meer poorten open moet zetten.

iptables -A INPUT -p tcp -s HIERJEIPADRES -m tcp --dport 22 -j ACCEPT

Dit commando beperkt SSH-toegang tot slechts één IP-adres. Vervang HIERJEIPADRES door jouw eigen IP-adres.

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

Met deze commando's accepteren we al het loopback-verkeer en alle uitgaand verkeer, en blokkeren we met het laatste commando alle overige poorten. Nu de basisfirewall is geconfigureerd, slaan we deze op:

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

Gefeliciteerd, je basisfirewall is nu geconfigureerd. De laatste stap is het testen van je configuratie.

Stap 5: testen van de iptables-configuratie

Nu de firewall volledig actief is, kun je de configuratie testen. Hiervoor kun je bijvoorbeeld de tool yougetsignal.com/tools/open-ports gebruiken. Test onder andere:

  • Is poort 22 (SSH) nog bereikbaar vanaf je eigen IP?
  • Zijn poorten die geblokkeerd moeten zijn, zoals MySQL, ook echt dicht?

Wil je een overzicht van je configuratie?

iptables -L -n

Heb je een fout gemaakt? Herstel je firewall met:

sudo iptables -F

Houd er rekening mee dat dit commando tijdelijk alle firewallregels verwijdert. Start je de VPS opnieuw op, dan worden de firewallregels weer ingeladen uit het configuratiebestand.