Zoeken op website

Firewalld installeren, configureren en gebruiken in CentOS en Ubuntu


Firewalld (firewall-daemon) is een alternatief voor de iptables-service, voor het dynamisch beheren van de firewall van een systeem met ondersteuning voor netwerk- (of firewall-)zones en biedt een D-Bus-interface voor het beheren van configuraties. Het is gemakkelijk te gebruiken en te configureren, en het is nu de standaard firewallbeheertool op RHEL/CentOS, Fedora en verschillende andere Linux-distributies.

In dit artikel bespreken we hoe u de systeemfirewall kunt configureren met firewalld en basispakketfiltering kunt implementeren in CentOS/RHEL 7 en Ubuntu.

De basisprincipes van Firewalld

Firewalld bestaat uit drie lagen, namelijk:

  • kernlaag: verantwoordelijk voor het afhandelen van de configuratie en de backends (hieronder vermeld).
  • D-Bus-interface: het belangrijkste middel om de firewallconfiguratie te wijzigen en aan te maken.
  • backends: voor interactie met netfilter (de native kernelmodule die wordt gebruikt voor firewalling). Ze omvatten iptables, ip6tables, ebtables, ipset, nft, linnftables; netwerkmanager; en modulen.

Het beheert firewallregels door netwerk-/firewallzones te implementeren die het vertrouwensniveau van netwerkverbindingen of interfaces definiëren. Andere ondersteunde firewallfuncties zijn onder meer services, directe configuratie (gebruikt om de syntaxis van onbewerkte iptables rechtstreeks door te geven), IPSets en ICMP-typen.

Er worden twee soorten configuratieomgevingen ondersteund door firewalld:

  • runtime-configuratie die alleen effectief is totdat de machine opnieuw is opgestart of de firewalld-service opnieuw is opgestart
  • permanente configuratie die wordt opgeslagen en permanent werkt.

Het opdrachtregelprogramma firewall-cmd wordt gebruikt om de runtime en permanente configuratie te beheren. Als alternatief kunt u de firewall-config grafische gebruikersinterface (GUI) configuratietool gebruiken om met de daemon te communiceren.

Bovendien biedt firewalld een goed gedefinieerde interface waarmee andere lokale services of applicaties rechtstreeks wijzigingen in de firewallregels kunnen aanvragen, als deze met rootrechten worden uitgevoerd.

Het algemene configuratiebestand voor firewalld bevindt zich op /etc/firewalld/firewalld.conf en de firewallfuncties zijn geconfigureerd in XML-formaat.

Belangrijke firewallfuncties begrijpen

Het centrale kenmerk van firewalld zijn netwerk-/firewallzones. Elk ander object is begrensd tot een zone. Een firewallzone beschrijft het vertrouwensniveau voor een verbinding, interface of bronadresbinding.

De standaardconfiguratie wordt geleverd met een aantal vooraf gedefinieerde zones, gesorteerd op basis van het standaard vertrouwensniveau van de zones, van niet-vertrouwd tot vertrouwd: neerzetten, blokkeren, openbaar, extern, dmz, werk, thuis, intern en vertrouwd. Ze worden gedefinieerd in bestanden die zijn opgeslagen in de map /usr/lib/firewalld/zones.

U kunt uw aangepaste zones configureren of toevoegen met behulp van de CLI-client, of eenvoudigweg een zonebestand maken of kopiëren in /etc/firewalld/zones van bestaande bestanden en dit bewerken.

Een ander belangrijk concept onder firewalld zijn services. Een service wordt gedefinieerd met behulp van poorten en protocollen; deze definities vertegenwoordigen een bepaalde netwerkdienst, zoals een webserver of een dienst voor externe toegang. Services worden gedefinieerd in bestanden die zijn opgeslagen in de map /usr/lib/firewalld/services/ of /etc/firewalld/services/.

Als u de basisconcepten van iptables/ip6tables/ebtables kent, kunt u ook de directe interface (of configuratie) gebruiken om directe toegang tot de firewall te krijgen. Maar voor degenen zonder enige kennis van iptables: u kunt de rijke taal gebruiken voor het maken van complexere firewallregels voor IPv4 en IPv6.

Hoe Firewalld-pakket in Linux te installeren

Op CentOS 7 is het firewalld-pakket vooraf geïnstalleerd en kunt u dit verifiëren met de volgende opdracht.

rpm -qa firewalld

Op Ubuntu 16.04 en 18.04 kun je het installeren met behulp van de standaard pakketbeheerder, zoals weergegeven.

sudo apt install firewalld

Hoe Firewalld-service in Linux te beheren

Firewalld is een reguliere systemd-service die kan worden beheerd via de opdracht systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

Nadat u de service firewalld hebt gestart, kunt u ook controleren of de daemon actief is of niet, met behulp van de tool firewall-cmd (als deze niet actief is, zal dit commando 'not rennen ").

sudo firewall-cmd --state

Als u wijzigingen permanent opslaat, kunt u firewalld opnieuw laden. Hierdoor worden de firewallregels opnieuw geladen en blijft de statusinformatie behouden. De huidige permanente configuratie wordt een nieuwe runtime-configuratie.

sudo firewall-cmd --reload

Werken met firewallzones in Firewalld

Voer deze opdrachten uit om een lijst met alle beschikbare firewallzones en -services te krijgen.

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

De standaardzone is de zone die wordt gebruikt voor elke firewallfunctie die niet expliciet aan een andere zone is begrensd. U kunt de standaardzone instellen voor netwerkverbindingen en interfaces door te rennen.

sudo firewall-cmd --get-default-zone

Om de standaardzone in te stellen, bijvoorbeeld op extern, gebruikt u de volgende opdracht. Houd er rekening mee dat het toevoegen van de optie --permanent de configuratie permanent instelt (of het opvragen van informatie uit de permanente configuratieomgeving mogelijk maakt).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

Laten we vervolgens kijken hoe we een interface aan een zone kunnen toevoegen. Dit voorbeeld laat zien hoe u uw draadloze netwerkadapter (wlp1s0) kunt toevoegen aan de zone thuis, die wordt gebruikt in thuisgebieden.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Een interface kan slechts aan één zone worden toegevoegd. Om het naar een andere zone te verplaatsen, gebruikt u de schakelaar --change-interface zoals weergegeven, of verwijdert u het uit de vorige zone met behulp van de schakelaar –remove-interface en voegt u het vervolgens toe naar de nieuwe zone.

Ervan uitgaande dat u verbinding wilt maken met een openbaar Wi-Fi-netwerk, moet u uw draadloze interface als volgt terugzetten naar de openbare zone:

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

Je kunt meerdere zones tegelijkertijd gebruiken. Om een lijst te krijgen van alle actieve zones met de ingeschakelde functies, zoals interfaces, services, poorten, protocollen, voert u het volgende uit:

sudo firewall-cmd --get-active-zones

Met betrekking tot het vorige punt: als u meer informatie wilt vinden over een bepaalde zone, dat wil zeggen alles wat eraan is toegevoegd of ingeschakeld, gebruikt u een van deze opdrachten:

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Een andere handige optie is --get-target, waarmee u het doel van een permanente zone kunt zien. Een doel is een van de volgende opties: standaard, ACCEPTEREN, DROP, WEIGEREN. U kunt het doel van verschillende zones controleren:

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Poorten openen en blokkeren in Firewalld

Om een poort (of poort/protocol-combinatie) in de firewall te openen, voegt u deze eenvoudigweg toe aan een zone met de optie --add-port. Als u de zone niet expliciet opgeeft, wordt deze ingeschakeld in de standaardzone.

Het volgende voorbeeld laat zien hoe u poort 80 en 443 toevoegt om inkomend webverkeer via HTTP en HTTPS toe te staan > protocollen, respectievelijk:

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Laad vervolgens firewalld opnieuw en controleer nogmaals de ingeschakelde functies in de openbare zone. U zou de zojuist toegevoegde poorten moeten kunnen zien.

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Het blokkeren of sluiten van een poort in de firewall is net zo eenvoudig: verwijder deze eenvoudigweg uit een zone met de optie --remove-port. Om bijvoorbeeld de poorten 80 en 443 in de openbare zone te sluiten.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

In plaats van een poort- of poort/protocol-combinatie te gebruiken, kunt u de servicenaam gebruiken waaraan een poort is toegewezen, zoals uitgelegd in de volgende sectie.

Services openen en blokkeren in Firewalld

Om een service in de firewall te openen, schakelt u deze in met de optie --add-service. Als de zone wordt overbrugd, wordt de standaardzone gebruikt.

Met de volgende opdracht wordt de http-service in de openbare zone permanent ingeschakeld.

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

De --remove-service optie kan worden gebruikt om een service uit te schakelen.

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

IP-maskering in- en uitschakelen met Firewalld

IP Masquerading (ook bekend als IPMASQ of MASQ) is een NAT (Network Address Translation) mechanisme in Linux-netwerken waarmee uw hosts in een netwerk, met privé-IP-adressen, kunnen communiceren met het internet via het aan uw Linux-server (IPMASQ-gateway) toegewezen openbare IP-adres.

Het is een één-op-veel mapping. Verkeer van uw onzichtbare hosts zal op andere computers op internet verschijnen alsof het afkomstig is van uw Linux-server.

U kunt IP-maskering inschakelen in een gewenste zone, bijvoorbeeld de openbare zone. Maar voordat u dat doet, moet u eerst controleren of maskering actief is of niet (een “nee” betekent dat deze is uitgeschakeld en een “ja” betekent anders).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Een typisch gebruiksscenario voor masquerading is het uitvoeren van port forwarding. Ervan uitgaande dat u SSH wilt gebruiken vanaf een externe machine naar een host in uw interne netwerk met het IP-adres 10.20.1.3, waarop de sshd-daemon luistert op poort 5000.

U kunt alle verbindingen naar poort 22 op uw Linux-server doorsturen naar de beoogde poort op uw doelhost door het volgende uit te voeren:

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Om maskerade in een zone uit te schakelen, gebruikt u de schakelaar --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Hoe u IMCP-berichten in Firewalld in- en uitschakelt

ICMP-berichten (Internet Control Message Protocol) zijn informatieverzoeken of antwoorden op informatieverzoeken of bevatten fouten.

U kunt ICMP-berichten in de firewall in- of uitschakelen, maar vermeld eerst alle ondersteunde icmp-typen.

sudo firewall-cmd --get-icmptypes

Om een gewenst bloktype toe te voegen of te verwijderen.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

U kunt alle icmp-typen bekijken die in een zone zijn toegevoegd met behulp van de schakelaar --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Hoe u de directe interface gebruikt om Raw iptables-opdrachten door te geven

De firewall-cmd biedt ook directe opties (--direct) waarmee u directere toegang tot de firewall kunt krijgen. Dit is handig voor mensen met basiskennis van iptables.

Belangrijk: u moet de directe opties alleen als laatste redmiddel gebruiken als het niet mogelijk is om de reguliere firewall-cmd opties te gebruiken die hierboven zijn uitgelegd.

Hier is een voorbeeld van hoe u de raw iptables-regel kunt doorgeven, met behulp van de --add-rules-schakelaar. U kunt deze regels eenvoudig verwijderen door --add-rule te vervangen door --remove-rule:

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Voor meer informatie over iptables raadpleegt u deze handleiding: Hoe u een Iptables-firewall instelt om externe toegang tot services in Linux mogelijk te maken.

Als u niet bekend bent met de syntaxis van iptables, kunt u kiezen voor de “rijke taal” van firewalld om op een gemakkelijk te begrijpen manier complexere firewallregels te maken, zoals hierna wordt uitgelegd.

Hoe u rijke taal in Firewalld kunt gebruiken

De rijke taal (ook bekend als rijke regels) wordt gebruikt om complexere firewallregels toe te voegen voor IPv4 en IPv6 zonder kennis van de syntaxis van iptables.

Het breidt de zonefuncties uit (service, poort, icmp-block, masquerade en forward-port) die we hebben behandeld. Het ondersteunt bron- en bestemmingsadressen, logboekregistratie, acties en limieten voor logboeken en acties.

De --add-rich-rule wordt gebruikt om rijke regels toe te voegen. Dit voorbeeld laat zien hoe u nieuwe IPv4- en IPv6-verbindingen voor service http en log 1 per minuut kunt toestaan met behulp van audit:

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Om de toegevoegde regel te verwijderen, vervangt u de optie --add-rich-rule door --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Met deze functie kunt u ook verkeer van een specifiek IP-adres blokkeren of toestaan. In het volgende voorbeeld ziet u hoe u verbindingen kunt weigeren vanaf het IP-adres 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Hoe u de paniekmodus in Firewalld in- en uitschakelt

Paniekmodus is een speciale modus onder firewalld, waarbij alle inkomende en uitgaande pakketten worden verwijderd en actieve verbindingen vervallen zodra ze zijn geactiveerd.
U kunt deze modus inschakelen in noodsituaties waarbij er sprake is van een bedreiging voor uw netwerkomgeving.

Om de paniekmodus op te vragen, gebruikt u de optie --query-panic.

sudo firewall-cmd --query-panic

Om de paniekmodus in te schakelen, gebruikt u de optie --panic-on. U kunt testen of het werkt met behulp van de ping-opdracht, zoals weergegeven. Omdat het pakket is verwijderd, kan de naam www.google.com niet worden opgelost, vandaar de weergegeven fout.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Om de paniekmodus uit te schakelen, gebruikt u de optie --panic-off.

sudo firewall-cmd --panic-off

Hoe Firewall te vergrendelen

Vergeet niet dat we onder de basisprincipes van firewalld hebben vermeld dat lokale applicaties of services de firewallconfiguratie kunnen wijzigen als ze met rootrechten draaien. U kunt bepalen welke toepassingen firewallwijzigingen kunnen aanvragen door deze op te geven in een witte lijst voor vergrendeling.

Deze functie is standaard uitgeschakeld. U kunt deze in- of uitschakelen met de schakelaar --lockdown-on of --lockdown.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

Houd er rekening mee dat het wordt aanbevolen om deze functie in of uit te schakelen door het hoofdconfiguratiebestand te bewerken, omdat de firewall-cmd mogelijk niet op de witte lijst voor vergrendeling staat wanneer u vergrendeling inschakelt.

sudo vim /etc/firewalld/firewalld.conf

Zoek de parameter Lockdown en wijzig de waarde ervan van nee (betekent uit) in ja (betekent aan).

Lockdown=yes

Om deze instelling permanent te maken, herlaadt u firewalld.

sudo firewall-cmd --reload
Samenvatting

Firewalld is een eenvoudig te gebruiken vervanging voor de iptables-service, die iptables als backend gebruikt. In dit artikel hebben we laten zien hoe u het firewalld-pakket kunt installeren, de belangrijke functies van firewalld uitgelegd en besproken hoe u deze kunt configureren in de runtime- en permanente configuratie-omgevingen.

Als u vragen of opmerkingen heeft, kunt u ons bereiken via het onderstaande opmerkingenformulier. Voor meer informatie kunt u de firewalld-handleidingpagina (man firewalld) of de firewalld-documentatie op de projectwebsite raadplegen.