Sådan installeres, konfigureres og bruges Firewalld i CentOS og Ubuntu


Firewalld (firewall-dæmon) er et alternativ til iptables-tjenesten til dynamisk styring af et systems firewall med understøttelse af netværk (eller firewall) zoner og giver en D-Bus-interface til styring af konfigurationer. Det er let at bruge og konfigurere, og det er nu standardværktøj til firewallhåndtering på RHEL/CentOS, Fedora og flere andre Linux-distributioner.

I denne artikel vil vi diskutere, hvordan du konfigurerer system firewall med firewalld og implementerer grundlæggende pakkefiltrering i CentOS/RHEL 7 og Ubuntu.

Grundlæggende om Firewalld

Firewalld består af tre lag, som er:

  • kernelag: ansvarlig for håndtering af konfigurationen og bagenden (angivet nedenfor).
  • D-Bus-interface: det primære middel til at ændre og oprette firewallkonfigurationen.
  • backends: til interaktion med netfilter (det oprindelige kernemodul, der bruges til firewalling). De inkluderer iptables, ip6tables, ebtables, ipset, nft, linnftables; netværksleder; og moduler.

Det styrer firewallregler ved at implementere netværk/firewall-zoner, der definerer tillidsniveauet for netværksforbindelser eller grænseflader. Andre understøttede firewallfunktioner inkluderer tjenester, direkte konfiguration (bruges til direkte at overføre rå iptables-syntaks), IPS-sæt såvel som ICMP-typer.

To slags konfigurationsmiljøer understøttes af firewalld:

  • runtime-konfiguration, som kun er effektiv, indtil maskinen er genstartet eller firewalld-tjenesten er genstartet
  • permanent konfiguration, der gemmes og fungerer vedvarende.

Firewall-cmd kommandolinjeværktøjet bruges til at styre runtime og permanent konfiguration. Alternativt kan du bruge konfigurationsværktøjet firewall-config grafisk brugergrænseflade (GUI) til at interagere med dæmonen.

Derudover tilbyder firewalld en veldefineret grænseflade til andre lokale tjenester eller applikationer til at anmode om ændringer i firewallreglerne direkte, hvis de kører med root-rettigheder.

Den globale konfigurationsfil for firewalld findes på /etc/firewalld/firewalld.conf, og firewallfunktioner er konfigureret i XML-format.

Forståelse af vigtige Firewalld-funktioner

Det centrale i firewalld er netværk/firewall-zoner. Hver anden funktion er afgrænset til en zone. En firewallzone beskriver tillidsniveauet for en forbindelse, interface eller kilde-adressebinding.

Standardkonfigurationen leveres med et antal foruddefinerede zoner sorteret efter standardtillidsniveauerne for zoner fra ikke-betroet til betroet: slip, blok, offentlig, ekstern, dmz, arbejde, hjem, intern og betroet. De defineres i filer, der er gemt i/usr/lib/firewalld/zones-biblioteket.

Du kan konfigurere eller tilføje dine brugerdefinerede zoner ved hjælp af CLI-klienten eller blot oprette eller kopiere en zonefil i/etc/firewalld/zoner fra eksisterende filer og redigere den.

Et andet vigtigt koncept under firewalld er tjenester. En tjeneste defineres ved hjælp af porte og protokoller; disse definitioner repræsenterer en given netværkstjeneste såsom en webserver eller fjernadgangstjeneste. Tjenester defineres i filer, der er gemt under/usr/lib/firewalld/services/eller/etc/firewalld/services/directory.

Hvis du kender grundlæggende iptables/ip6tables/ebtables-koncepter, kan du også bruge den direkte grænseflade (eller konfiguration) til at få direkte adgang til firewallen. Men for dem uden nogen viden om iptables, kan du bruge det rige sprog til at skabe mere komplekse firewallregler til IPv4 og IPv6.

Sådan installeres Firewalld-pakke i Linux

På CentOS 7 kommer firewalld-pakken forudinstalleret, og du kan bekræfte ved hjælp af følgende kommando.

$ rpm -qa firewalld

På Ubuntu 16.04 og 18.04 kan du installere det ved hjælp af standardpakkehåndteringen som vist.

$ sudo apt install firewalld

Sådan styres Firewalld Service i Linux

Firewalld er en regelmæssig systemd-tjeneste, der kan styres via systemctl-kommandoen.

 
$ 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

Efter start af firewalld-tjeneste kan du også kontrollere, om dæmonen kører eller ej, ved hjælp af firewall-cmd-værktøjet (i tilfælde af at det ikke er aktivt, vil denne kommando output "kører ikke").

$ sudo firewall-cmd --state

Hvis du tilfældigvis gemmer ændringer permanent, kan du genindlæse firewalld. Dette vil genindlæse firewallreglerne og gemme tilstandsoplysninger. Den aktuelle permanente konfiguration bliver ny runtime-konfiguration.

$ sudo firewall-cmd --reload

Sådan arbejder du med Firewall Zones i Firewalld

For at få en liste over alle tilgængelige firewall-zoner og -tjenester skal du køre disse kommandoer.

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

Standardzonen er den zone, der bruges til hver firewall-funktion, der ikke eksplicit er afgrænset til en anden zone. Du kan få standardzonen indstillet til netværksforbindelser og grænseflader ved at køre.

$ sudo firewall-cmd --get-default-zone

For at indstille standardzonen, f.eks. Til ekstern, skal du bruge følgende kommando. Bemærk, at tilføjelse af indstillingen --permanent indstiller konfigurationen permanent (eller muliggør forespørgsel om information fra det permanente konfigurationsmiljø).

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

Lad os derefter se på, hvordan du tilføjer en grænseflade til en zone. Dette eksempel viser, hvordan du tilføjer din trådløse netværksadapter (wlp1s0) til zonehjemmet, som bruges i hjemområder.

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

En grænseflade kan kun føjes til en enkelt zone. For at flytte den til en anden zone skal du bruge --change-interface -kontakten som vist eller fjerne den fra den forrige zone ved hjælp af –remove-interface-kontakten og derefter tilføje den til den nye zone.

Forudsat at du vil oprette forbindelse til et offentligt WI-FI-netværk, skal du flytte din trådløse grænseflade tilbage til den offentlige zone som denne:

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

Du kan bruge mange zoner på samme tid. For at få en liste over alle aktive zoner med de aktiverede funktioner såsom grænseflader, tjenester, porte, protokoller, kør:

$ sudo firewall-cmd --get-active-zones

I forhold til det foregående punkt, hvis du vil finde flere oplysninger om en bestemt zone, dvs. alt tilføjet eller aktiveret i den, skal du bruge en af disse kommandoer:

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

En anden nyttig mulighed er --get-target , som viser dig målet for en permanent zone. Et mål er et af: standard, ACCEPT, DROP, REJECT. Du kan kontrollere målet for forskellige zoner:

$ 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

Sådan åbnes og blokeres porte i Firewalld

For at åbne en port (eller en kombination af port/protokol) i firewallen skal du blot tilføje den i en zone med indstillingen --add-port . Hvis du ikke eksplicit angiver zonen, aktiveres den i standardzonen.

Følgende eksempel viser, hvordan du tilføjer port 80 og 443 for at tillade indbundet webtrafik via henholdsvis HTTP- og HTTPS-protokollerne:

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

Dernæst skal du genindlæse firewalld og kontrollere de aktiverede funktioner i den offentlige zone igen, du skal kunne se de lige tilføjede porte.

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

Det er lige så let at blokere eller lukke en port i firewallen. Du skal blot fjerne den fra en zone med indstillingen --remove-port . For eksempel at lukke havne 80 og 443 i den offentlige zone.

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

I stedet for at bruge en port- eller port/protokolkombination kan du bruge det servicenavn, som en port tildeles som forklaret i det næste afsnit.

Sådan åbnes og blokeres tjenester i Firewalld

For at åbne en tjeneste i firewallen skal du aktivere den ved hjælp af indstillingen --add-service . Hvis zone udelades, vil standardzone blive brugt.

Den følgende kommando aktiverer http-tjenesten permanent i den offentlige zone.

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

Indstillingen --remove-service kan bruges til at deaktivere en tjeneste.

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

Sådan aktiveres og deaktiveres IP-maskering ved hjælp af Firewalld

IP Masquerading (også kendt som IPMASQ eller MASQ) er en NAT-mekanisme (Network Address Translation) i Linux-netværk, der giver dine værter i et netværk med private IP-adresser til at kommunikere med Internettet ved hjælp af din Linux-server (IPMASQ gateway) tildelt offentlig IP adresse.

Det er en en-til-mange kortlægning. Trafik fra dine usynlige værter vises på andre computere på internettet, som om den kommer fra din Linux-server.

Du kan aktivere IP-maskering i en ønsket zone, for eksempel den offentlige zone. Men inden du gør det, skal du først kontrollere, om maskering er aktiv eller ej (et "nej" betyder, at det er deaktiveret, og et "ja" betyder ellers).

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

En typisk brugssag til maskering er at udføre portvideresendelse. Forudsat at du vil SSH fra en fjernmaskine til en vært i dit interne netværk med IP 10.20.1.3, som sshd-dæmonen lytter til på port 5000.

Du kan videresende alle forbindelser til port 22 på din Linux-server til den tilsigtede port på din målhost ved at udstede:

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

For at deaktivere maskering i en zone skal du bruge kontakten --remove-masquerade .

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

Sådan aktiveres og deaktiveres IMCP-meddelelse i Firewalld

ICMP-meddelelser (Internet Control Message Protocol) er enten informationsanmodninger eller svar på informationsanmodninger eller i fejltilstande.

Du kan aktivere eller deaktivere ICMP-meddelelser i firewallen, men før denne liste først alle understøttede icmp-typer.

$ sudo firewall-cmd --get-icmptypes

For at tilføje eller fjerne den ønskede bloktype.

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

Du kan se alle icmp-typer tilføjet i en zone ved hjælp af --list-icmp-blocks -kontakten.

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

Sådan bruges direkte interface til at overføre rå iptables-kommandoer

Firewall-cmd giver også direkte muligheder ( --direct ), så du får mere direkte adgang til firewallen. Dette er nyttigt for dem med grundlæggende viden om iptables.

Vigtigt: Du skal kun bruge de direkte indstillinger som en sidste udvej, når det ikke er muligt at bruge de almindelige firewall-cmd-indstillinger, der er forklaret ovenfor.

Her er et eksempel på, hvordan man overfører rå iptables-reglen ved hjælp af --add-rules switch. Du kan nemt fjerne disse regler ved at erstatte --add-rule med --remove-rule :

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

For mere information om iptables, se denne vejledning: Sådan opsættes en Iptables-firewall for at muliggøre fjernadgang til tjenester i Linux.

Hvis du ikke er bekendt med iptables-syntaksen, kan du vælge firewallds "rige sprog" til at oprette mere komplekse firewallregler på en letforståelig måde som beskrevet nedenfor.

Sådan bruges rig sprog i Firewalld

Det rige sprog (også kendt som rige regler) bruges til at tilføje mere komplekse firewallregler til IPv4 og IPv6 uden kendskab til iptables-syntaksen.

Det udvider de zonefunktioner (service, port, icmp-blok, maskerade og forward-port), som vi har dækket. Det understøtter kilde- og destinationsadresser, logning, handlinger og grænser for logfiler og handlinger.

--add-rich-rule bruges til at tilføje rige regler. Dette eksempel viser, hvordan du tillader nye IPv4- og IPv6-forbindelser til service http og log 1 pr. Minut ved hjælp af audit:

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

For at fjerne den tilføjede regel skal du erstatte indstillingen --add-rich-rule med --remove-rich-rule .

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

Denne funktion tillader også blokering eller tilladelse af trafik fra en bestemt IP-adresse. Følgende eksempel viser, hvordan du afviser forbindelser fra IP 10.20.1.20.

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

Sådan aktiveres og deaktiveres paniktilstand i Firewalld

Paniktilstand er en speciel tilstand under firewalld, hvor alle indbundne og ud-bundne pakker slettes, og aktive forbindelser udløber, når de er aktiveret.
Du kan aktivere denne tilstand i nødsituationer, hvor en trussel mod dit netværksmiljø udløber.

For at forespørge paniktilstand skal du bruge indstillingen - query-panic .

$ sudo firewall-cmd --query-panic

For at aktivere paniktilstand skal du bruge indstillingen --panic-on . Du kan teste, om det fungerer ved hjælp af ping-kommandoen som vist. Da pakken tabes, kan navnet www.google.com ikke løses, hvorfor den viste fejl vises.

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

For at deaktivere paniktilstand skal du bruge indstillingen - panic-off .

$ sudo firewall-cmd --panic-off

Sådan låses Firewalld

Husk, vi nævnte under det grundlæggende om firewalld, at lokale applikationer eller tjenester er i stand til at ændre firewallkonfigurationen, hvis de kører med root-rettigheder. Du kan kontrollere, hvilke applikationer der er i stand til at anmode om firewallændringer, ved derefter at angive dem i en hvidliste til låsning.

Denne funktion er som standard slået fra, du kan aktivere eller deaktivere den med kontakten --lockdown-on eller --lockdown .

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

Bemærk, at det anbefales at aktivere eller deaktivere denne funktion ved at redigere hovedkonfigurationsfilen, fordi firewall-cmd muligvis ikke findes på hvidliste til lockdown, når du aktiverer lockdown.

$ sudo vim /etc/firewalld/firewalld.conf

Find parameteren Lockdown, og skift dens værdi fra nej (betyder off) til ja (betyder til).

Lockdown=yes

For at gøre denne indstilling permanent genindlæs firewalld.

$ sudo firewall-cmd --reload

Firewalld er en brugervenlig erstatning for iptables-tjenesten, der bruger iptables som backend. I denne artikel har vi vist, hvordan man installerer firewalld-pakken, forklarede firewallds vigtige funktioner og diskuteret, hvordan man konfigurerer dem i runtime og permanente konfigurationsmiljøer.

Hvis du har spørgsmål eller kommentarer, er du velkommen til at kontakte os via nedenstående kommentarformular. Du kan se firewalllds manuelle side (man firewalld) eller firewalldokumentationen på projektets websted for at få flere oplysninger.