Firewalld is de standaard firewall voor CentOS (en de meeste Red-Hat systemen). Firewalld ondersteunt network/firewall zones, om zo het trust level van netwerkverbindingen / interfaces vast te stellen (zie de paragraaf zones). Naast de mogelijkheid specifiek poorten te beheren, ondersteunt het ook de mogelijkheid om services / applicaties direct toe te voegen.
Verbind via SSH / de vps-console en gebruik een root-user, of sudo bij het uitvoeren van de commando's in dit artikel.
Firewalld installeren
Firewalld installeer en schakel je eenvoudig in met de commando's:
yum -y install firewalld
systemctl enable firewalld
De status van Firewalld controleren
Voor je verder gaat met de configuratie van Firewalld is het verstandig te controleren dat hij inderdaad correct werkt. Dit doe je met het commando:
systemctl status firewalld
Wanneer er geen problemen zijn zal de input er als volgt uit zien:
Mocht hier niet staan dat Firewalld active is, probeer hem dan te herstarten met:
systemctl restart firewalld
Start Firewalld nog niet? Controleer dan op eventuele foutmeldingen om het probleem op te lossen met:
journalctl -xe -u firewalld
Zones
Firewalld gebruikt zones, maar wat betekent dit? Met een zone geef je eigenlijk aan in wat voor soort omgeving je internet verbinding zich bevindt en hoe zeer je die vertrouwt, bijvoorbeeld een public, home of work verbinding. Dit is dus vooral nuttig wanneer je bijvoorbeeld een private network gebruikt, of CentOS 7 op een laptop gebruikt en vanaf verschillende locaties werkt. Je kunt dan van tevoren verschillende zones configureren, en je actieve zone aanpassen afhankelijk van waar je je bevindt.
Door verschillende zones te configureren kun je onderscheid maken tussen tussen welke services / poorten er bereikbaar zijn, afhankelijk van waar je je bevindt en welke zone je daarvoor gebruikt. Op een VPS gebruik je vaak maar één zone omdat de VPS niet van thuis / werk / publieke omgeving verandert.
Firewalld komt out-of-the-box met de volgende zones:
-
drop: Alle inkomende verbindingen worden geweigerd. Uitgaande verbindingen zijn wel mogelijk.
-
block: Alle inkomende verbindingen worden geweigerd met een standaard bericht voor de bron van de inkomende verbinding. Voor IPv4 is dit icmp-host-prohibited en voor IPv6 icmp6-adm-prohibited (ICMP is een standaard om informatie en error meldingen in IP verkeer te versturen). Uitgaande verbindingen zijn wel mogelijk.
-
public: Gebruik deze zone voor publieke omgevingen waarbij je andere computers op het netwerk niet vertrouwd. Enkel van tevoren gedefinieerde verbindingen (i.e. poorten / services) worden geaccepteerd.
-
external: Dit is vooral gericht op wanneer je firewall als gateway werkt en er NAT-masquerading gebruikt wordt. Je vertrouwt andere computers op het netwerk niet en enkel vooraf geconfigureerde verbindingen worden geaccepteerd.
-
dmz: De demilitarized zone, waarbij de computer / server geïsoleerd is op het netwerk en geen toegang heeft tot andere computers / servers. Enkel specifieke verbindingen worden geaccepteerd.
-
work: Voor werkomgevingen. Doorgaans worden andere computers op hetzelfde netwerk vertrouwd. Ook hier worden alleen van tevoren gedefinieerde verbindingen geaccepteerd.
-
home: Voor thuisgebruik. Hiervoor geldt verder hetzelfde als bij de 'work' zone. Let wel dat verbindingen op werk vaak beter beveiligd zijn dan bij een thuisnetwerk.
-
internal: Voor gebruik met private networks. Computers op dit netwerk worden doorgaans vertrouwd. Alleen vooraf gedefinieerde verbindingen worden geaccepteerd.
- trusted: Alle verbindingen worden geaccepteerd.
Zones beheren
Firewalld komt met een scala aan nuttige commando's om je zones te beheren. In deze paragraaf lichten we de belangrijkste toe.
De default zone controleren
Standaard is de 'public' zone de default zone. Je controleert de default zone met het commando:
firewall-cmd --get-default-zone
De actieve zone controleren
Het kan gebeuren dat je de actieve zone wijzigt, maar niet de default zone. De actieve zone, en voor welke network interfaces die gebruikt wordt, controleer je met:
firewall-cmd --get-active-zones
De beschikbare zones controleren
Je controleert de beschikbare zones met het commando:
firewall-cmd --get-zones
Dit is vooral handig om te doen wanneer je van zone wil wisselen en eerst wil kijken wat je opties zijn.
Gedetailleerde zone informatie
Gedetailleerde informatie zoals toegestane services en porten, maar ook port forwarding e.d. bekijk je met:
firewall-cmd --zone=public --list-all
Verander hier 'public' door de gewenste zone, of bekijk de output voor alle zones met:
firewall-cmd --list-all-zones | less
De default zone wijzigen
Voor het wijzigen van de default zone heb je twee opties: voor alle interfaces de zone wijzigen, of per interface. Stel dat je één netwerk interface gebruikt (en niet ook een private network), dan volstaat het gebruik van één zone, en kun je bij het veranderen van zone net zo goed ook de default zone aanpassen.
-
De zone voor alle interfaces aanpassen:
firewall-cmd --set-default-zone=public
Vervang public door de naam van de gewenste zone
-
De zone voor pecifieke interfaces aanpassen:
firewall-cmd --zone=public --change-interface=eth0
Vervang public door de naam van de gewenste zone, en eth0 door de naam van de gewenste network interface. Zo kun je dus ook voor private networks de zones per interface veranderen, bijvoorbeeld:
firewall-cmd --zone=public --change-interface=eth0 firewall-cmd --zone=internal --change-interface=eth1
Poorten openen
Je kunt in Firewalld poorten openen, of services toevoegen om netwerktoegang aan applicaties te geven. Niet iedere applicatie komt met een service, of misschien heb je de default poort van de service verandert (e.g. bij SSH). In dat geval zet je een of meerdere specifieke poorten open.
Iedere wijziging in dit onderdeel is pas actief na een herstart van je VPS, of door je configuratie opnieuw te laden met:
firewall-cmd --reload
Een enkele poort openen
Je zet een poort open met het commando:
firewall-cmd --zone=public --permanent --add-port=1234/tcp
- Vervang public door de gewenste zone
- --permanent zorgt dat de wijziging ook na een herstart intact blijft
- Vervang 1234/tcp door de gewenste poort en het gewenste protocol (tcp of udp)
Ranges openen
Wil je liever een range open zetten? Dan gebruik je het commando:
firewall-cmd --zone=public --permanent --add-port=1234-1345/tcp
- Vervang 1234-1345 door de daadwerkelijke poort range die je wil openen
Toegang per IP
Je kunt in plaats van een poort voor de gehele wereld open te zetten hem ook openen voor specifieke IP's door onderstaande commando's te gebruiken:
Vervang 1.2.3.4 door je daadwerkelijke IP adres en 123 door het poortnummer. Je kunt deze stappen herhalen om meer IP's toegang te geven. Vergeet niet na deze stappen je firewall te herladen (firewall-cmd --reload) en als je de betreffende poort al open had staan, de algemene regel te verwijderen.
Let op: Gebruik je een Plesk-VPS? De default zone is in recente Plesk-versies niet public, maar plesk (--zone=plesk)
Open poorten controleren
In de loop van tijd vergeet je misschien welke poorten je open hebt staan. Je controleert ze met het commando:
firewall-cmd --zone=public --permanent --list-ports
Poorten sluiten
Het sluiten van poorten werkt bijna geheel hetzelfde als een poort openen en doe je met het commando:
firewall-cmd --zone=public --permanent --remove-port=1234/tcp
firewall-cmd --reload
- vervang 1234 door het gewenste poortnummer, of gebruik 1234-1345/tcp als syntax voor het verwijderen van een poort-range
- firewall-cmd --reload voert je configuratiewijziging direct door
Rechtstreeks de configuratie aanpassen
Naast de bovenstaande commando's kun je ook rechtstreeks het configuratiebestand van een specieke zone aanpassen. Je vindt de configuratiebestanden van de zones terug met:
ls /etc/firewalld/zones
Bij een nieuwe installatie zal hier alleen public.xml en public.xml.old in staan. Je kunt deze openen en bewerken met het commando:
nano /etc/firewalld/zones/public.xml
Services of poorten zet je open door respectievelijk de volgende toevoegingen te plaatsen in het bestand:
<service name="servicenaam"/>
<port protocol="tcp" port="1234"/>
- Vervang hier servicenaam door de daadwerkelijke naam van de service, bijvoorbeeld ssh
- Vervang 1234 door het gewenste nummer en tcp door udp als je zeker weet dat je de udp-poort open wil zetten.
Wil je een nieuw configuratiebestand aanmaken voor een andere zone, bijvoorbeeld home? Dan is de public.xml.old een prima startpunt. Je maakt van public.xml.old een bestand voor een andere zone door hem te kopiëren met:
cp /etc/firewalld/zones/public.xml.old /etc/firewalld/zones/home.xml
- Vervang hier home door de naam van de gewenste zone.
Services toevoegen
Naast het openen van poorten kun je ook specifieke services openen in Firewalld. Je voegt dan de service toe in Firewalld en een of meerdere poorten worden dan geopend. Er is hier wel een kanttekening bij:
Firewalld gebruikt configuratiebestanden (zie beschikbare services) waar de poorten van verschillende services in zijn vastgelegd. Bij het toevoegen van de service worden die poorten geopend. Verander je bijvoorbeeld je SSH-poort, dan zal als je de SSH-service hebt toegevoegd de nieuwe poort niet automatisch open staan, tenzij je de poort handmatig open zet, of de configuratie van de betreffende service in Firewalld aanpast.
Je opent services in Firewalld met onderstaand commando, waarbij je SSH vervangt door de betreffende service naam:
firewall-cmd --zone=public --permanent --add-service=ssh
firewall-cmd --reload
Beschikbare services controleren
Er zijn twee manieren om te zien welke services beschikbaar zijn voor gebruik met Firewalld:
- Met een rechtstreeks commando:
firewall-cmd --get-services
- In meer detail door de betreffende configuratie te bekijken. Je vindt de configuratiebestanden van de beschikbare service terug in de /usr/lib/firewalld folder met:De inhoud van de beschikbare bestanden bekijk je met:
ls /usr/lib/firewalld/services
Je kunt eventueel een van de configuratiebestanden bewerken met nano of vi om zo bijvoorbeeld de default-poort aan te passen.cat /usr/lib/firewalld/services/servicenaam.xml
Services verwijderen
Een service verwijder je even eenvoudig als je hem toevoegt in Firewalld:
firewall-cmd --zone=public --permanent --remove-service=ssh
firewall-cmd --reload
IP's blokkeren
Het kan gebeuren dat je VPS met bruteforce aanvallen bestookt wordt door bots. Wij raden aan dit op te lossen door Fail2Ban te gebruiken, maar daarnaast kun je uiteraard ook handmatig IP's blokkeren. Dit doe je met de commando's:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='123.123.123.0/24' reject"
firewall-cmd --reload
Vervang hier 123.123.123.0/24 door de specifieke IP range die je wil blokkeren, of door een specifiek IP-adres als je één IP wil blokkeren.
Alternatief kun je dit principe ook omdraaien en de toegang tot een poort voor iedereen blokkeren en enkel specifieke IP's toestaan. Je verwijdert dan eerst de betreffende poort:
firewall-cmd --zone=public --permanent --remove-port=1234/tcp
Vervang hierbij public door de betreffende zone, 1234 en tcp door de gewenste poort / protocol. Daarna geef je specifieke IP's toegang met de commando's:
firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4" source address="1.2.3.4" port protocol="tcp" port="1234" accept'
firewall-cmd --reload
Vervang eventueel public door de gewenste zone, 1.2.3.4. door het correcte IP en 1234 en tcp door het correcte poortnummer / protocol.
Geblokkeerde poorten controleren
Stel dat een IP-adres problemen heeft met het bereiken van een dienst op je VPS, dan is het handig om uit te sluiten of die geblokkeerd wordt op je VPs. Dit doe je met het commando:
firewall-cmd --list-all
IP's deblokkeren
Voor het deblokkeren van in Firewalld geblokkeerde IP's draai je in zekere zin de commando's uit het vorige onderdeel om. Stel dat je een IP/IP-range geblokkeerd hebt, dan gebruik je de syntax:
firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='123.123.123.0/24' reject"
firewall-cmd --reload
Vergeet hier niet het IP aan te passen. Heb je een specifiek IP-adres toegang gegeven tot een poort en wil je dat ongedaan maken? Gebruik dan:
firewall-cmd --permanent --zone=public --remove-rich-rule='
rule family="ipv4" source address="1.2.3.4" port protocol="tcp" port="1234" accept'
firewall-cmd --reload
Wil je nog meer weten over Firewalld? Laat het ons vooral weten en neem ook een kijkje in Firewalld's eigen documentatie.
Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.