Wprowadzenie do Firewalld w systemach Fedora 30 / CentOS 8 / RHEL 8
Strefy
Strefy to zestaw predefiniowanych reguł firewalla. Pliki z regułami dla każdej ze stref znajdują się w katalogu /usr/lib/firewalld/zones/.
$ ls -l /usr/lib/firewalld/zones/
-rw-r--r--. 1 root root 299 08-01 17:25 block.xml
-rw-r--r--. 1 root root 293 08-01 17:25 dmz.xml
-rw-r--r--. 1 root root 291 08-01 17:25 drop.xml
-rw-r--r--. 1 root root 304 08-01 17:25 external.xml
-rw-r--r--. 1 root root 343 08-01 17:25 FedoraServer.xml
-rw-r--r--. 1 root root 525 08-01 17:25 FedoraWorkstation.xml
-rw-r--r--. 1 root root 369 08-01 17:25 home.xml
-rw-r--r--. 1 root root 384 08-01 17:25 internal.xml
-rw-r--r--. 1 root root 340 08-01 17:25 public.xml
-rw-r--r--. 1 root root 162 08-01 17:25 trusted.xml
-rw-r--r--. 1 root root 336 08-01 17:25 work.xml
$ cat /usr/lib/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="mdns"/>
<service name="dhcpv6-client"/>
</zone>
Predefiniowane strefy:
- block - wszystkie przychodzące połączenia sieciowe są odrzucane. Możliwe są tylko połączenia sieciowe inicjowane z poziomu systemu,
- dmz - strefa zdemilitaryzowana (DMZ), która zapewnia ograniczony dostęp do sieci LAN i zezwala na ruch przychodzący na wybrane porty,
- drop - wszystkie przychodzące połączenia sieciowe są odrzucane, a dozwolone są tylko połączenia wychodzące,
- external - strefa wykorzystywana w zastosowaniach typu router dla interfejsu przychodzącego,
- home - strefa dla zastosowań takich jak stacja robocza, laptop, komputer stacjonarny w sieci LAN, w której ufamy innym komputerom. Zezwala na ruchu sieciowy na wybranych portach TCP/IP.
- internal - strefa do użytku w sieciach wewnętrznych LAN, gdy w większości ufamy innym serwerom lub komputerom,
- public - strefa, w której nie ufamy żadnym innym urządzeniom i zezwalamy na ruch sieciowy tylko na wymaganych portach i dla określonych usług,
- trusted - strefa gdzie wszystkie połączenia sieciowe są akceptowane,
- work - strefa do użytku w miejscu pracy, w którym ufasz współpracownikom i innym serwerom.
W systemie Fedora Linux dodatkowo znajdziemy strefy FedoraServer i FedoraWorkstation zawierające predefiniowane reguły dla tego typu zastosowań (w przypadku instalacji serwera, strefa FedoraSerwer jest strefą domyślną).
Przykłady użycia firewall-cmd
Wykaz wszystkich stref przy uruchomionym w systemie firewallu:
$ firewall-cmd --get-zones
Wyświetlenie domyślnej strefy firewalla:
$ firewall-cmd --get-default-zone
Informacja o aktywnych strefach i przypisanych do nich interfejsach sieciowych:
$ firewall-cmd --get-active-zones
Wyświetlenie reguł zapory i usług dla strefy public:
$ sudo firewall-cmd --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Przykład usuwania dostępu do usług dhcpv6-client i mdns:
$ sudo firewall-cmd --remove-service=dhcpv6-client --permanent
$ sudo firewall-cmd --remove-service=mdns --permanent
$ sudo firewall-cmd --reload
Listowanie aktywnych usług:
$ sudo firewall-cmd --list-services
Sprawdzenie dozwolonych usług i otwartych portów w bieżącej strefie:
$ sudo firewall-cmd --list-all
Sprawdzenie dozwolonych usług we wszystkich strefach:
$ sudo firewall-cmd --list-all-zones
Sprawdzenie stanu zapory:
$ sudo firewall-cmd --state
Polecenie ponownego załadowania konfiguracji firewalld po wprowadzeniu zmian w regułach:
$ sudo firewall-cmd --reload
Zmiany konfiguracji zapory do momentu dodania do stałego zestawu reguł są tymczasowe. Następujące polecenia tymczasowo otworzą porty TCP 80/443 (http/https). Powyższe reguły nie są zachowywane podczas ponownego uruchomienia systemu lub podczas restartowania usługi firewalld:
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https
Aby dodać regułę na stałe, należy na końcu dodać –permanent i ponownie przeładować reguły firewalld.
Aby znaleźć listę usług obsługiwanych przez firewalld można posłużyć się przykładowymi poleceniami:
$ sudo firewall-cmd --get-services
$ sudo firewall-cmd --get-services | grep https
$ ls -l /usr/lib/firewalld/services/
$ cat /usr/lib/firewalld/services/ssh.xml
Przykład dodania na stałe i usunięcia na stałe usługi dns (port TCP/UDP 53) z reguł firewalla:
$ sudo firewall-cmd --zone=public --add-service=dns --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --zone=public --remove-service=dns --permanent
$ sudo firewall-cmd --reload
Otwarcie portu TCP:
$ sudo firewall-cmd --zone=public --add-port=1313/tcp --permanent
Wyświetlenie portów dodanych do reguł firewalla:
$ sudo firewall-cmd --zone=internal --list-ports
Usunięcie na stałe portu z regul firewalla:
$ sudo firewall-cmd --zone=public --remove-port=1313/tcp --permanent
Przekierowanie i usunięcie przekierowania portu 80 do 8080 na tym samym systemie:
$ sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080 --permanent
$ sudo firewall-cmd --reload
Masquerading ruchu z portu 443 do portu 443 serwera o adresie IP 192.168.1.187
$ sudo firewall-cmd --zone=public --add-masquerade
$ sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.187 --permanent
Usunięcie powyższej reguły z reguł firewalla:
$ sudo firewall-cmd --zone=public --remove-masquerade
$ sudo firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.187 --permanent
Wyświetlenie listy reguł:
$ firewall-cmd --zone=public --list-all --permanent
Zezwolenie na dostęp do portu SSH 22 tylko z adresu IP 192.168.1.113:
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.113" port port=22 protocol=tcp accept'
Weryfikacja nowej reguły:
$ sudo firewall-cmd --list-rich-rules --permanent
Zezwolenie na dostęp do portu TCP 11111 z sieci 192.168.1.0/24:
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="11111" accept'
Usunięcie powyższych reguł:
$ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.1.113" port port=22 protocol=tcp accept' --permanent
$ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" port port="11111" protocol="tcp" accept' --permanent