Så här konfigurerar och hanterar du brandväggen på CentOS 8

en brandvägg är en metod för övervakning och filtrering av inkommande och utgående nätverkstrafik. Det fungerar genom att definiera en uppsättning säkerhetsregler som avgör om du vill tillåta eller blockera specifik trafik. En korrekt konfigurerad brandvägg är en av de viktigaste aspekterna av övergripande systemsäkerhet.

CentOS 8 levereras med en brandväggsdemon som heter firewalld. Det är en komplett lösning med ett D-Bus-gränssnitt som låter dig hantera systemets brandvägg dynamiskt.

i denna handledning kommer vi att prata om hur du konfigurerar och hanterar brandväggen på CentOS 8. Vi kommer också att förklara de grundläggande FirewallD-koncepten.

förutsättningar #

för att konfigurera brandväggstjänsten måste du vara inloggad som root eller användare med sudo-behörigheter.

grundläggande Firewalld-koncept #

firewalld använder begreppen zoner och tjänster. Baserat på de zoner och tjänster du konfigurerar kan du styra vilken trafik som tillåts eller blockeras till och från systemet.

Firewalld kan konfigureras och hanteras med kommandoradsverktyget firewall-cmd.

i CentOS 8 ersätts iptables med nftables som standard brandväggsbackend för firewalld-demonen.

Firewalld Zones #

zoner är fördefinierade uppsättningar regler som anger förtroendenivån för de nätverk som din dator är ansluten till. Du kan tilldela nätverksgränssnitt och källor till en zon.

nedan är de zoner som tillhandahålls av FirewallD beställda enligt zonens förtroendenivå från otillförlitlig till betrodd:

  • släpp: Alla inkommande anslutningar tappas utan någon anmälan. Endast utgående anslutningar är tillåtna.
  • block: alla inkommande anslutningar avvisas med ett icmp-host-prohibited – meddelande för IPv4 och icmp6-adm-prohibited för IPv6n. endast utgående anslutningar är tillåtna.
  • public: för användning i otillförlitliga allmänna utrymmen. Du litar inte på andra datorer i nätverket, men du kan tillåta valda inkommande anslutningar.
  • extern: för användning i externa nätverk med Nat masquerading aktiverat när ditt system fungerar som en gateway eller router. Endast valda inkommande anslutningar är tillåtna.
  • intern: för användning i interna nätverk när ditt system fungerar som en gateway eller router. Andra system i nätverket är i allmänhet betrodda. Endast valda inkommande anslutningar är tillåtna.
  • dmz: används för datorer i din demilitariserade zon som har begränsad åtkomst till resten av ditt nätverk. Endast valda inkommande anslutningar är tillåtna.
  • arbete: används för arbetsmaskiner. Andra datorer i nätverket är i allmänhet betrodda. Endast valda inkommande anslutningar är tillåtna.
  • hem: används för hemmaskiner. Andra datorer i nätverket är i allmänhet betrodda. Endast valda inkommande anslutningar är tillåtna.
  • betrodd: alla nätverksanslutningar accepteras. Lita på alla datorer i nätverket.

brandväggstjänster #

Firewalld-tjänster är fördefinierade regler som gäller inom en zon och definierar nödvändiga inställningar för att tillåta inkommande trafik för en viss tjänst. Tjänsterna gör att du enkelt kan utföra flera uppgifter i ett enda steg.

tjänsten kan till exempel innehålla definitioner om att öppna portar, vidarebefordra trafik och mer.

Firewalld Runtime och permanenta Inställningar #

Firewalld använder två separerade konfigurationsuppsättningar, runtime och permanent konfiguration.

runtime-konfigurationen är den faktiska körkonfigurationen och kvarstår inte vid omstart. När firewalld-demonen startar laddar den den permanenta konfigurationen, som blir runtime-konfigurationen.

som standard, när du gör ändringar i Firewalld-konfigurationen med verktyget firewall-cmd, tillämpas ändringarna på runtime-konfigurationen. För att göra ändringarna permanenta Lägg till alternativet --permanent till kommandot.

om du vill tillämpa ändringarna i båda konfigurationsuppsättningarna kan du använda någon av följande två metoder:

  1. ändra runtime-konfigurationen och gör den permanent:

    sudo firewall-cmd <options>sudo firewall-cmd --runtime-to-permanent
  2. ändra den permanenta konfigurationen och ladda om firewalld-demonen:

    sudo firewall-cmd --permanent <options>sudo firewall-cmd --reload

aktivera FirewallD #

på CentOS 8 är firewalld installerat och aktiverat som standard. Om det av någon anledning inte är installerat på ditt system kan du installera och starta demonen genom att skriva:

sudo dnf install firewalldsudo systemctl enable firewalld --now

du kan kontrollera statusen för brandväggstjänsten med:

sudo firewall-cmd --state

om brandväggen är aktiverad ska kommandot skriva ut running. Annars kommer du att se not running.

Firewalld Zones #

om du inte har ändrat den är standardzonen inställd på public och alla nätverksgränssnitt tilldelas den här zonen.

standardzonen är den som används för allt som inte uttryckligen tilldelas en annan zon.

du kan se standardzonen genom att skriva:

sudo firewall-cmd --get-default-zone
public

för att få en lista över alla tillgängliga zoner, skriv:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

för att se de aktiva zonerna och de nätverksgränssnitt som tilldelats dem:

sudo firewall-cmd --get-active-zones

utgången nedan visar att gränssnitten eth0 och eth1 tilldelas zonen public :

public interfaces: eth0 eth1

du kan skriva ut zonkonfigurationsinställningarna med:

sudo firewall-cmd --zone=public --list-all

public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

från utgången ovan kan vi se att den offentliga zonen är aktiv och använder standardmålet, vilket är REJECT. Utgången visar också att zonen används av gränssnitten eth0 och eth1 och tillåter DHCP-klient och SSH-trafik.

om du vill kontrollera konfigurationerna för alla tillgängliga zoner typ:

sudo firewall-cmd --list-all-zones

kommandot skriver ut en stor lista med inställningarna för all tillgänglig zon.

ändra zonmål #

målet definierar standardbeteendet för zonen för inkommande trafik som inte anges. Det kan ställas in på något av följande alternativ: default, ACCEPT, REJECT, och DROP.

för att ställa in zonens mål, ange zonen med alternativet --zone och målet med alternativet --set-target.

till exempel, för att ändra public zonens mål till DROP skulle du köra:

sudo firewall-cmd --zone=public --set-target=DROP

tilldela ett gränssnitt till en annan zon #

du kan skapa specifika uppsättningar regler för olika zoner och tilldela olika gränssnitt till dem. Detta är särskilt användbart när du flera gränssnitt på din maskin.

för att tilldela ett gränssnitt till en annan zon, ange zonen med alternativet --zone och gränssnittet med alternativet --change-interface.

följande kommando tilldelar till exempel gränssnittet eth1 till zonen work :

sudo firewall-cmd --zone=work --change-interface=eth1

verifiera ändringarna genom att skriva:

sudo firewall-cmd --get-active-zones
work interfaces: eth1public interfaces: eth0

ändra Standardzon #

för att ändra standardzon, använd alternativet --set-default-zone följt av namnet på den zon du vill göra standard.

om du till exempel vill ändra standardzonen till home kör du följande kommando:

sudo firewall-cmd --set-default-zone=home

verifiera ändringarna med:

sudo firewall-cmd --get-default-zone
home

skapa nya zoner #

Firewalld låter dig också skapa dina egna zoner. Detta är praktiskt när du vill skapa regler per ansökan.

i följande exempel skapar vi en ny zon med namnet memcached, öppnar porten 11211 och tillåter endast åtkomst från 192.168.100.30 IP-adressen:

  1. skapa zonen:

    sudo firewall-cmd --new-zone=memcached --permanent
  2. Lägg till reglerna i zonen:

    sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanentsudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanentsudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
  3. ladda om firewalld-demonen för att aktivera ändringarna:

    sudo firewall-cmd --reload

Firewalld Services #

med firewalld kan du tillåta trafik för specifika portar och/eller källor baserat på fördefinierade regler som kallas tjänster.

för att få en lista över alla standard tillgängliga tjänster typ:

sudo firewall-cmd --get-services

du kan hitta mer information om varje tjänst genom att öppna den tillhörande .xml-fil i katalogen /usr/lib/firewalld/services. Till exempel definieras HTTP-tjänsten så här:

/usr/lib/firewalld/services/http.xml
<?xml version="1.0" encoding="utf-8"?><service> <short>WWW (HTTP)</short> <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description> <port protocol="tcp" port="80"/></service>

för att tillåta inkommande HTTP-trafik (port 80) för gränssnitt i den offentliga zonen, bara för den aktuella sessionen (runtime configuration) typ:

sudo firewall-cmd --zone=public --add-service=http
om du ändrar standardzonen kan du utelämna alternativet --zone.

för att verifiera att tjänsten har lagts till, Använd alternativet --list-services :

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

för att hålla porten 80 öppen efter en omstart, kör samma kommando igen med alternativet --permanent eller kör:

sudo firewall-cmd --runtime-to-permanent

använd --list-services tillsammans med alternativet --permanent för att verifiera dina ändringar:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

syntaxen för att ta bort tjänsten är densamma som när du lägger till en. Använd bara --remove-service istället för --add-service flaggan:

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

kommandot ovan tar bort tjänsten http från den offentliga zonens permanenta konfiguration.

skapa en ny FirewallD-tjänst #

som vi redan har nämnt lagras standardtjänsterna i katalogen /usr/lib/firewalld/services. Det enklaste sättet att skapa en ny tjänst är att kopiera en befintlig servicefil till katalogen /etc/firewalld/services, som är platsen för användarskapade tjänster och ändra filinställningarna.

om du till exempel vill skapa en tjänstedefinition för Plex Media Server kan du använda SSH-servicefilen:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

öppna den nyskapade filen plexmediaserver.xml och ändra kortnamnet och beskrivningen för tjänsten inom taggarna <short> och <description>. Den viktigaste taggen du behöver ändra är port – taggen, som definierar portnummer och protokoll du vill öppna.

i följande exempel öppnar vi portar 1900 UDP och 32400 TCP.

/etc/firewalld/tjänster/plexmediaserver.xml
<?xml version="1.0" encoding="utf-8"?><service version="1.0"><short>plexmediaserver</short><description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description><port protocol="udp" port="1900"/><port protocol="tcp" port="32400"/></service>

spara filen och ladda om FirewallD-tjänsten:

sudo firewall-cmd --reload

du kan nu använda tjänsten plexmediaserver i dina zoner samma som alla andra tjänster.

öppna portar och käll-IPs #

Firewalld låter dig också snabbt aktivera all trafik från en betrodd IP-adress eller på en specifik port utan att skapa en tjänstedefinition.

öppna en källa IP #

för att tillåta all inkommande trafik från en specifik IP-adress (eller intervall), ange zonen med alternativet --zone och källan IP med alternativet --add-source.

till exempel, för att tillåta all inkommande trafik från 192.168.1.10 i zonen public, kör:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

gör den nya regeln ihållande:

sudo firewall-cmd --runtime-to-permanent

verifiera ändringarna med följande kommando:

sudo firewall-cmd --zone=public --list-sources
192.168.1.10

syntaxen för att ta bort en käll-IP är densamma som när du lägger till en. Använd bara --remove-source istället för alternativet --add-source :

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

öppna en källport #

för att tillåta all inkommande trafik på en viss port, ange zonen med alternativet --zone och porten och protokollet med alternativet --add-port.

till exempel för att öppna port 8080 i den offentliga zonen för den aktuella sessionen du sår kör:

sudo firewall-cmd --zone=public --add-port=8080/tcp

protokollet kan vara antingen tcp, udp, sctp, eller dccp.

kontrollera ändringarna:

sudo firewall-cmd --zone=public --list-ports
8080

för att hålla porten öppen efter en omstart, Lägg till regeln i de permanenta inställningarna genom att köra samma kommando med flaggan --permanent eller genom att köra:

sudo firewall-cmd --runtime-to-permanent

syntaxen för att ta bort en port är densamma som när du lägger till en port. Använd bara --remove-port istället för alternativet --add-port.

sudo firewall-cmd --zone=public --remove-port=8080/tcp

Vidarebefordringsportar #

för att vidarebefordra trafik från en port till en annan port, aktivera först maskering för önskad zon med alternativet --add-masquerade. Om du till exempel vill aktivera maskering för zonen external skriver du:

sudo firewall-cmd --zone=external --add-masquerade

vidarebefordra trafik från en port till en annan på IP-adressen #

i följande exempel vidarebefordrar vi trafiken från port 80 till port 8080 på samma server:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

vidarebefordra trafik till en annan IP-adress #

i följande exempel vidarebefordrar vi trafiken från port 80 till port 80 på en server med IP 10.10.10.2:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

vidarebefordra trafik till en annan server på en annan port #

i följande exempel vidarebefordrar vi trafiken från port 80 till port 8080 på en server med IP 10.10.10.2:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

för att göra framåtregeln beständig, använd:

sudo firewall-cmd --runtime-to-permanent

slutsats #

du har lärt dig hur du konfigurerar och hanterar firewalld-tjänsten på ditt CentOS 8-system.

se till att tillåta alla inkommande anslutningar som är nödvändiga för att ditt system ska fungera korrekt, samtidigt som du begränsar alla onödiga anslutningar.



+