RHCSA-serien: Firewall Essentials og netværkstrafikkontrol ved hjælp af FirewallD og Iptables - Del 11


Med enkle ord er en firewall et sikkerhedssystem, der styrer den indgående og udgående trafik i et netværk baseret på et sæt foruddefinerede regler (f.eks. Pakkedestination/kilde eller trafiktype).

I denne artikel gennemgår vi det grundlæggende i firewalld, standarddynamisk firewall-dæmon i Red Hat Enterprise Linux 7 og iptables-tjenesten, den ældre firewall-tjeneste til Linux, som de fleste system- og netværksadministratorer er velkendte med, og som også er tilgængelig i RHEL 7.

En sammenligning mellem FirewallD og Iptables

Under hætten taler både firewalld og iptables-tjenesten til netfilter-rammen i kernen gennem den samme grænseflade, ikke overraskende kommandoen iptables. I modsætning til iptables-tjenesten kan firewalld dog ændre indstillingerne under normal systemdrift uden at eksisterende forbindelser går tabt.

Firewalld skal installeres som standard i dit RHEL-system, selvom det muligvis ikke kører. Du kan bekræfte med følgende kommandoer (firewall-config er konfigurationsværktøjet til brugergrænsefladen):

# yum info firewalld firewall-config

og,

# systemctl status -l firewalld.service

På den anden side er iptables-tjenesten ikke inkluderet som standard, men kan installeres via.

# yum update && yum install iptables-services

Begge dæmoner kan startes og aktiveres til start ved opstart med de sædvanlige systemd-kommandoer:

# systemctl start firewalld.service | iptables-service.service
# systemctl enable firewalld.service | iptables-service.service

Læs også: Nyttige kommandoer til at styre Systemd Services

Med hensyn til konfigurationsfilerne bruger iptables-tjenesten /etc/sysconfig/iptables (som ikke findes, hvis pakken ikke er installeret i dit system). På en RHEL 7-boks, der bruges som en klyngenode, ser denne fil ud som følger:

Mens firewalld gemmer sin konfiguration i to mapper, /usr/lib/firewalld og /etc/firewalld :

# ls /usr/lib/firewalld /etc/firewalld

Vi vil undersøge disse konfigurationsfiler yderligere senere i denne artikel, efter at vi har tilføjet et par regler her og der. Nu er det tilstrækkeligt at minde dig om, at du altid kan finde mere information om begge værktøjer med.

# man firewalld.conf
# man firewall-cmd
# man iptables

Bortset fra det, skal du huske at tage et kig på Reviewing Essential Commands & System Documentation - Part 1 i den aktuelle serie, hvor jeg beskrev flere kilder, hvor du kan få oplysninger om de pakker, der er installeret på dit RHEL 7-system.

Brug af Iptables til at kontrollere netværkstrafik

Det kan være en god idé at henvise til Konfigurer Iptables Firewall - Del 8 i serien Linux Foundation Certified Engineer (LFCE) for at opdatere din hukommelse om internt iptables, inden du fortsætter videre. Således vil vi være i stand til at hoppe ind lige ind i eksemplerne.

TCP-porte 80 og 443 er standardporte, der bruges af Apache-webserveren til at håndtere normal (HTTP) og sikker (HTTPS) webtrafik. Du kan tillade indgående og udgående webtrafik gennem begge porte på enp0s3-grænsefladen som følger:

# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Der kan være tidspunkter, hvor du har brug for at blokere al (eller en eller anden) type trafik, der stammer fra et specifikt netværk, f.eks. 192.168.1.0/24:

# iptables -I INPUT -s 192.168.1.0/24 -j DROP

vil slippe alle pakker, der kommer fra 192.168.1.0/24 netværket, mens,

# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT

tillader kun indgående trafik gennem port 22.

Hvis du bruger din RHEL 7-boks ikke kun som en softwarefirewall, men også som den egentlige hardwarebaserede, så den sidder mellem to forskellige netværk, skal IP-videresendelse allerede være aktiveret i dit system. Hvis ikke, skal du redigere /etc/sysctl.conf og indstille værdien af net.ipv4.ip_forward til 1 som følger:

net.ipv4.ip_forward = 1

gem derefter ændringen, luk din teksteditor og kør endelig følgende kommando for at anvende ændringen:

# sysctl -p /etc/sysctl.conf

For eksempel har du muligvis en printer installeret i en intern boks med IP 192.168.0.10, hvor CUPS-tjenesten lytter på port 631 (både på printserveren og din firewall). For at videresende udskrivningsanmodninger fra klienter på den anden side af firewallen skal du tilføje følgende iptables-regel:

# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631

Husk, at iptables læser dens regler sekventielt, så sørg for, at standardpolitikkerne eller de senere regler ikke tilsidesætter dem, der er beskrevet i eksemplerne ovenfor.

Kom godt i gang med FirewallD

En af de ændringer, der blev introduceret med firewalld, er zoner. Dette koncept gør det muligt at adskille netværk i forskellige zoner af tillidsniveau, som brugeren har besluttet at placere på enhederne og trafik inden for dette netværk.

Sådan vises en liste over de aktive zoner:

# firewall-cmd --get-active-zones

I eksemplet nedenfor er den offentlige zone aktiv, og enp0s3-grænsefladen er automatisk tildelt den. Sådan får du vist alle oplysninger om en bestemt zone:

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

Da du kan læse mere om zoner i RHEL 7-sikkerhedsguiden, vil vi kun nævne nogle specifikke eksempler her.

Brug for at få en liste over de understøttede tjenester.

# firewall-cmd --get-services

For at tillade http- og https-webtrafik gennem firewallen, der træder i kraft straks og efterfølgende støvler:

# firewall-cmd --zone=MyZone --add-service=http
# firewall-cmd --zone=MyZone --permanent --add-service=http
# firewall-cmd --zone=MyZone --add-service=https
# firewall-cmd --zone=MyZone --permanent --add-service=https
# firewall-cmd --reload

Hvis kode> –zone udelades, bruges standardzonen (du kan kontrollere med firewall-cmd –get-standardzone).

For at fjerne reglen skal du erstatte ordet add med remove i ovenstående kommandoer.

Først skal du finde ud af, om maskering er aktiveret for den ønskede zone:

# firewall-cmd --zone=MyZone --query-masquerade

På billedet nedenfor kan vi se, at maskering er aktiveret for den eksterne zone, men ikke for offentligheden:

Du kan enten aktivere maskering for offentligheden:

# firewall-cmd --zone=public --add-masquerade

eller brug maskering i eksternt. Her er hvad vi ville gøre for at replikere eksempel 3 med firewalld:

# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10

Og glem ikke at genindlæse firewallen.

Du kan finde flere eksempler på del 9 i RHCSA-serien, hvor vi forklarede, hvordan man tillader eller deaktiverer de porte, der normalt bruges af en webserver og en ftp-server, og hvordan man ændrer den tilsvarende regel, når standardporten for disse tjenester ændres. Derudover kan du henvise til firewalld wiki for yderligere eksempler.

Læs også: Nyttige FirewallD Eksempler til konfiguration af Firewall i RHEL 7

Konklusion

I denne artikel har vi forklaret, hvad en firewall er, hvad er de tilgængelige tjenester til implementering af en i RHEL 7 og leveret et par eksempler, der kan hjælpe dig med at komme i gang med denne opgave. Hvis du har kommentarer, forslag eller spørgsmål, er du velkommen til at give os besked ved hjælp af nedenstående formular. Tak på forhånd!