Hvordan installere, konfigurere og bruke brannmur i CentOS og Ubuntu


Firewalld (brannmurdemon) er et alternativ til iptables-tjenesten, for dynamisk administrasjon av et systems brannmur med støtte for nettverk (eller brannmur) soner og gir et D-Bus-grensesnitt for administrasjon av konfigurasjoner. Det er enkelt å bruke og konfigurere, og det er nå standard brannmuradministrasjonsverktøy på RHEL/CentOS, Fedora og flere andre Linux-distribusjoner.

I denne artikkelen vil vi diskutere hvordan du konfigurerer systembrannmur med brannmur og implementerer grunnleggende pakkefiltrering i CentOS/RHEL 7 og Ubuntu.

Grunnleggende om brannmur

Brannmur består av tre lag, som er:

  • kjernelag: ansvarlig for å håndtere konfigurasjonen og bakenden (oppført nedenfor).
  • D-Bus-grensesnitt: den primære måten å endre og opprette brannmurkonfigurasjonen på.
  • backends: for samhandling med netfilter (den opprinnelige kjernemodulen som brukes til brannmur). De inkluderer iptables, ip6tables, ebtables, ipset, nft, linnftables; nettverkssjef; og moduler.

Den administrerer brannmurregler ved å implementere nettverks-/brannmursoner som definerer tillitsnivået til nettverkstilkoblinger eller grensesnitt. Andre støttede brannmurfunksjoner inkluderer tjenester, direkte konfigurasjon (brukes til direkte å sende rå iptables-syntaks), IPS-sett samt ICMP-typer.

To typer konfigurasjonsmiljøer støttes av brannmur:

  • kjøretidskonfigurasjon som kun er effektiv til maskinen har blitt startet på nytt eller brannmurtjenesten er startet på nytt
  • permanent konfigurasjon som er lagret og fungerer vedvarende.

Kommandolinjeverktøyet brannmur-cmd brukes til å administrere kjøretid og permanent konfigurasjon. Alternativt kan du bruke konfigurasjonsverktøyet for brannmur-konfigurasjon grafisk brukergrensesnitt (GUI) for å samhandle med daemonen.

I tillegg tilbyr brannmur et veldefinert grensesnitt for andre lokale tjenester eller applikasjoner for å be om endringer i brannmurreglene direkte, hvis de kjører med root-privilegier.

Den globale konfigurasjonsfilen for brannmur er plassert på /etc/firewalld/firewalld.conf og brannmurfunksjoner er konfigurert i XML-format.

Forstå viktige brannmurfunksjoner

Den sentrale funksjonen til brannmur er nettverks-/brannmursoner. Annenhver funksjon er avgrenset til en sone. En brannmursone beskriver tillitsnivået for en tilkobling, grensesnitt eller kildeadressebinding.

Standardkonfigurasjonen kommer med en rekke forhåndsdefinerte soner sortert i henhold til standard tillitsnivå for sonene fra uklarert til klarert: slipp, blokker, offentlig, ekstern, dmz, arbeid, hjemme, intern og klarert. De er definert i filer som er lagret under katalogen /usr/lib/firewalld/zones.

Du kan konfigurere eller legge til dine egendefinerte soner ved å bruke CLI-klienten eller ganske enkelt opprette eller kopiere en sonefil i /etc/firewalld/zones fra eksisterende filer og redigere den.

Et annet viktig konsept under brannmur er tjenester. En tjeneste er definert ved hjelp av porter og protokoller; disse definisjonene representerer en gitt nettverkstjeneste, for eksempel en webserver eller fjerntilgangstjeneste. Tjenester er definert i filer som er lagret i katalogen /usr/lib/firewalld/services/ eller /etc/firewalld/services/.

Hvis du kjenner grunnleggende iptables/ip6tables/ebtables-konsepter, kan du også bruke det direkte grensesnittet (eller konfigurasjonen) for å få direkte tilgang til brannmuren. Men for de uten kunnskap om iptables, kan du bruke det rike språket for å lage mer komplekse brannmurregler for IPv4 og IPv6.

Hvordan installere Firewalld Package i Linux

CentOS 7 kommer brannmuren-pakken forhåndsinstallert, og du kan bekrefte ved å bruke følgende kommando.

rpm -qa firewalld

Ubuntu 16.04 og 18.04 kan du installere den ved å bruke standard pakkebehandling som vist.

sudo apt install firewalld

Hvordan administrere brannmurtjenesten i Linux

Brannmur er en vanlig systemtjeneste som kan administreres 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

Etter å ha startet firewalld-tjenesten, kan du også sjekke om daemonen kjører eller ikke, ved å bruke firewall-cmd-verktøyet (i tilfelle det ikke er aktivt, vil denne kommandoen sende ut "ikke" løping ").

sudo firewall-cmd --state

Hvis du tilfeldigvis lagrer endringer permanent, kan du laste brannmuren på nytt. Dette vil laste inn brannmurregler på nytt og beholde statlig informasjon. Den nåværende permanente konfigurasjonen vil bli ny kjøretidskonfigurasjon.

sudo firewall-cmd --reload

Hvordan jobbe med brannmursoner i brannmur

For å få en liste over alle tilgjengelige brannmursoner og tjenester, kjør disse kommandoene.

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

Standardsonen er sonen som brukes for hver brannmurfunksjon som ikke er eksplisitt avgrenset til en annen sone. Du kan få standardsonen satt for nettverkstilkoblinger og grensesnitt ved å kjøre.

sudo firewall-cmd --get-default-zone

For å sette standardsonen, for eksempel til ekstern, bruk følgende kommando. Merk at å legge til alternativet --permanent setter konfigurasjonen permanent (eller muliggjør spørring av informasjon fra det permanente konfigurasjonsmiljøet).

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

Deretter, la oss se på hvordan du legger til et grensesnitt til en sone. Dette eksemplet viser hvordan du legger til det trådløse nettverkskortet ditt (wlp1s0) til sone hjem, som brukes i hjemmeområder.

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

Et grensesnitt kan bare legges til en enkelt sone. For å flytte den til en annen sone, bruk --change-interface-bryteren som vist, eller fjern den fra forrige sone ved å bruke –remove-interface-bryteren, og legg den deretter til til den nye sonen.

Forutsatt at du vil koble til et offentlig WI-FI-nettverk, bør du flytte det trådløse grensesnittet tilbake til den offentlige sonen, slik:

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

Du kan bruke mange soner samtidig. For å få en liste over alle aktive soner med de aktiverte funksjonene som grensesnitt, tjenester, porter, protokoller, kjør:

sudo firewall-cmd --get-active-zones

I forhold til forrige punkt, hvis du vil finne mer informasjon om en bestemt sone, det vil si alt som er lagt til eller aktivert i den, bruk en av disse kommandoene:

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

Et annet nyttig alternativ er --get-target, som viser deg målet for en permanent sone. Et mål er ett av: default, ACCEPT, DROP, REJECT. Du kan sjekke målet for forskjellige soner:

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

Hvordan åpne og blokkere porter i brannmur

For å åpne en port (eller port/protokoll-kombinasjon) i brannmuren, legg den til i en sone med --add-port-alternativet. Hvis du ikke spesifiserer sonen eksplisitt, vil den bli aktivert i standardsonen.

Følgende eksempel viser hvordan du legger til port 80 og 443 for å tillate innkommende nettrafikk via HTTP og HTTPS > protokoller, henholdsvis:

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

Deretter laster du inn brannmuren på nytt og kontrollerer de aktiverte funksjonene i den offentlige sonen en gang til, du bør kunne se de nettopp lagt til portene.

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

Blokkering eller lukking av en port i brannmuren er like enkelt, bare fjern den fra en sone med --remove-port-alternativet. For eksempel for å stenge portene 80 og 443 i den offentlige sonen.

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

I stedet for å bruke port eller port/protokoll-kombinasjon, kan du bruke tjenestenavnet som en port er tildelt som forklart i neste avsnitt.

Hvordan åpne og blokkere tjenester i brannmur

For å åpne en tjeneste i brannmuren, aktiver den ved å bruke --add-service-alternativet. Hvis sonen utelates, brukes standardsonen.

Følgende kommando vil permanent aktivere http-tjenesten i den offentlige sonen.

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

Alternativet --remove-service kan brukes til å deaktivere en tjeneste.

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

Slik aktiverer og deaktiverer du IP-maskering ved hjelp av brannmur

IP Masquerading (også kjent som IPMASQ eller MASQ) er en NAT (Network Address Translation) mekanisme i Linux-nettverk som lar vertene dine i et nettverk, med private IP-adresser, kommunisere med Internett ved å bruke Linux-serverens (IPMASQ-gateway) tildelte offentlige IP-adresse.

Det er en en-til-mange-kartlegging. Trafikk fra de usynlige vertene dine vil vises til andre datamaskiner på internett som om den kom fra din Linux-server.

Du kan aktivere IP-maskering i en ønsket sone, for eksempel den offentlige sonen. Men før du gjør det, sjekk først om maskering er aktiv eller ikke (et “nei” betyr at det er deaktivert og et “ja” betyr noe annet).

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

Et typisk bruksområde for maskering er å utføre portvideresending. Forutsatt at du ønsker å SSH fra en ekstern maskin til en vert i ditt interne nettverk med IP-en 10.20.1.3, som sshd-demonen lytter til på port 5000.

Du kan videresende alle tilkoblinger til port 22 på Linux-serveren til den tiltenkte porten på målverten ved å utstede:

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

For å deaktivere maskering i en sone, bruk --remove-masquerade-bryteren.

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

Slik aktiverer og deaktiverer du IMCP-melding i brannmur

ICMP (Internet Control Message Protocol)-meldinger er enten informasjonsforespørsler eller svar på informasjonsforespørsler eller i feiltilstander.

Du kan aktivere eller deaktivere ICMP-meldinger i brannmuren, men før det først liste alle støttede icmp-typer.

sudo firewall-cmd --get-icmptypes

For å legge til eller fjerne en blokktype du ønsker.

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 lagt til i en sone ved å bruke --list-icmp-blocks-bryteren.

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

Slik bruker du direkte grensesnitt for å sende Raw iptables-kommandoer

Brannmur-cmd gir også direkte alternativer (--direct) for å få mer direkte tilgang til brannmuren. Dette er nyttig for de med grunnleggende kunnskap om iptables.

Viktig: Du bør bare bruke de direkte alternativene som en siste utvei når det ikke er mulig å bruke de vanlige brannmur-cmd-alternativene som er forklart ovenfor.

Her er et eksempel på hvordan du overfører rå iptables-regelen ved å bruke --add-rules-bryteren. Du kan enkelt fjerne disse reglene ved å 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 mer informasjon om iptables, se denne veiledningen: Slik konfigurerer du en Iptables-brannmur for å aktivere ekstern tilgang til tjenester i Linux.

Hvis du ikke er kjent med iptables-syntaks, kan du velge brannmurens «rike språk» for å lage mer komplekse brannmurregler på en lettfattelig måte som forklart nedenfor.

Hvordan bruke rikt språk i brannmur

Det rike språket (også kjent som rike regler) brukes til å legge til mer komplekse brannmurregler for IPv4 og IPv6 uten kunnskap om iptables syntaks.

Det utvider sonefunksjonene (service, port, icmp-block, masquerade og forward-port) som vi har dekket. Den støtter kilde- og destinasjonsadresser, logging, handlinger og grenser for logger og handlinger.

--add-rich-regelen brukes til å legge til rike regler. Dette eksemplet viser hvordan du tillater nye IPv4- og IPv6-tilkoblinger for tjeneste http og logg 1 per minutt ved å bruke revisjon:

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

For å fjerne den tilføyde regelen, erstatte --add-rich-rule-alternativet med --remove-rich-rule.

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

Denne funksjonen gjør det også mulig å blokkere eller tillate trafikk fra en spesifikk IP-adresse. Følgende eksempel viser hvordan du avviser tilkoblinger fra IP-en 10.20.1.20.

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

Hvordan aktivere og deaktivere panikkmodus i brannmur

Panikkmodus er en spesiell modus under brannmur der alle innkommende og utgående pakker blir droppet, og aktive tilkoblinger vil utløpe når de er aktivert.
Du kan aktivere denne modusen i nødssituasjoner der en trussel mot nettverksmiljøet forsvinner.

For å spørre panikkmodus, bruk --query-panic-alternativet.

sudo firewall-cmd --query-panic

For å aktivere panikkmodus, bruk --panikk-på-alternativet. Du kan teste om det fungerer ved å bruke ping-kommandoen som vist. Fordi pakken er slettet, kan ikke navnet www.google.com løses, derav feilen som vises.

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

For å deaktivere panikkmodus, bruk --panikk-av-alternativet.

sudo firewall-cmd --panic-off

Hvordan låse brannmuren

Husk at vi nevnte under det grunnleggende om brannmur at lokale applikasjoner eller tjenester er i stand til å endre brannmurkonfigurasjonen hvis de kjører med root-privilegier. Du kan kontrollere hvilke applikasjoner som kan be om endringer i brannmuren, ved å spesifisere deretter i en hviteliste for låsing.

Denne funksjonen er slått av som standard, du kan aktivere eller deaktivere den med --lockdown-on eller --lockdown bryteren mottakelig.

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

Merk at det anbefales å aktivere eller deaktivere denne funksjonen ved å redigere hovedkonfigurasjonsfilen, fordi brannmur-cmd kanskje ikke eksisterer på hvitelisten når du aktiverer låsing.

sudo vim /etc/firewalld/firewalld.conf

Finn parameteren Lockdown og endre verdien fra no (betyr av) til yes (betyr på).

Lockdown=yes

Last inn brannmuren på nytt for å gjøre denne innstillingen permanent.

sudo firewall-cmd --reload
Sammendrag

Brannmur er en enkel å bruke erstatning for iptables-tjenesten, som bruker iptables som en backend. I denne artikkelen har vi vist hvordan du installerer firewalld-pakken, forklart firewallds viktige funksjoner og diskutert hvordan du konfigurerer dem i kjøretids- og permanente konfigurasjonsmiljøer.

Hvis du har spørsmål eller kommentarer, kontakt oss gjerne via kommentarskjemaet nedenfor. Du kan se brannmurens manualside (man firewalld) eller brannmurdokumentasjonen på prosjektets nettside for mer informasjon.