Hulpartikel overzicht

Hulpartikel

CentOS 7 Firewalld tutorial

CentOS 7 komt out-of-the-box met een firewall geïnstalleerd en geactiveerd, namelijk Firewalld.

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.


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:

centos 7 firewalld status

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:

firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="1.2.3.4"
port protocol="tcp" port="123" accept'

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:
    ls /usr/lib/firewalld/services
    De inhoud van de beschikbare bestanden bekijk je met:
    cat /usr/lib/firewalld/services/servicenaam.xml
    Je kunt eventueel een van de configuratiebestanden bewerken met nano of vi om zo bijvoorbeeld de default-poort aan te passen.

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.

Wil je dit artikel met andere gebruikers bespreken, laat dan vooral een bericht achter onder 'Reacties'.

Heb je ook een goed idee?

Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

Heeft dit artikel je geholpen?

Maak een account aan of log in om een beoordeling achter te laten.

Reacties

Maak een account aan of log in om een reactie te plaatsen.

Kom je er niet uit?

Ontvang persoonlijke hulp van onze supporters

Neem contact op