@JS's Notes

Site with notes from my work.

Wprowadzenie do Firewalld w systemach Fedora 30 / CentOS 8 / RHEL 8

2019-10-05 System @JS
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