Zapora sieciowa w systemie Linux odgrywa kluczową rolę w zabezpieczaniu systemu komputerowego. Działa jak bariera, kontrolując i filtrując ruch sieciowy, aby chronić system przed nieautoryzowanym dostępem, atakami i innymi zagrożeniami. Bez prawidłowo skonfigurowanej zapory sieciowej serwer może być podatny na różne rodzaje cyberataków, co może mieć poważne konsekwencje dla bezpieczeństwa i poufności danych.
W tym artykule przyjrzymy się dwóm głównym narzędziom do konfiguracji zapory sieciowej Linux: firewalld i iptables. Przeprowadzimy analizę porównawczą ich funkcji, funkcjonalności i zalet. Dodatkowo, przedstawimy szczegółowe instrukcje dotyczące konfiguracji i użytkowania każdego z tych narzędzi, a także omówimy najlepsze praktyki zabezpieczania systemu za pomocą zapory sieciowej na platformie Linux. Wszystkie czynności zostaną zademonstrowane na serwerze wirtualnym z dostępem do konta root.
Konfigurowanie firewalld w systemie Linux
Firewalld (Firewall Daemon) to program do zarządzania zaporą sieciową w systemach operacyjnych Linux. Zapewnia interfejs użytkownika do konfigurowania reguł zapory sieciowej, zezwalając lub blokując połączenia aplikacji sieciowych. Jest domyślnie preinstalowany w większości dystrybucji serwerowych. Jeśli Firewalld nie jest preinstalowany, można go zainstalować niezależnie z oficjalnych repozytoriów dystrybucji.
W przypadku systemów Red Hat (takich jak RHEL, CentOS, Fedora) instalację wykonuje się za pomocą polecenia:
yum install firewalld
Dla Debiana/Ubuntu:
apt-get install firewalld
Po zainstalowaniu można go natychmiast uruchomić i aktywować za pomocą polecenia:
systemctl start firewalld
Następnie należy dodać usługę do uruchomienia:
systemctl enable firewalld
W tym momencie zalecamy wyłączenie ufw, ponieważ jednoczesne używanie tego narzędzia z firewalld lub iptables nie jest zalecane. Sprawdź status:
systemctl status ufw
Aby zatrzymać ten proces wprowadź polecenie:
systemctl stop ufw
Aby dokonać całkowitej dezaktywacji:
ufw disable
Po wykonaniu tych czynności możesz przejść do konfiguracji firewalld.
Najpierw należy zdefiniować strefy zaufania. Firewalld używa koncepcji stref, aby określić poziom zaufania dla interfejsów sieciowych. Każdemu interfejsowi przypisana jest jedna strefa, a reguły zapory są stosowane na podstawie strefy. Listę wszystkich dostępnych stref otwiera się poleceniem:
firewall-cmd --get-zones
Zazwyczaj stosuje się 4 główne strefy:
- Publiczne:Ta strefa jest przeznaczona dla sieci, które uważasz za niebezpieczne;
- Prywatne:Dotyczy sieci domowych i innych zaufanych połączeń sieciowych;
- Wewnętrzne: Stosowany w sieciach wewnętrznych, np. sieciach w ramach organizacji lub sieciach korporacyjnych;
- DMZ:W tej strefie zazwyczaj umieszczane są serwery, do których dostęp powinien być możliwy z Internetu.
To jednak tylko jeden przykład. Możesz dodać własną strefę za pomocą polecenia:
firewall-cmd --permanent --new-zone=nameyourzone
Po dodaniu wymagane jest ponowne załadowanie:
firewall-cmd --reload
Aby usunąć strefę, stosuje się podobną metodę
firewall-cmd --permanent --delete-zone=nameyourzone
Po zdefiniowaniu stref konieczne jest zezwolenie na ruch dla potrzebnych usług i portów. Aby zezwolić na określoną usługę, użyj polecenia:
firewall-cmd --zone=public --add-service=name
Gdzie name to nazwa usługi. Na przykład, aby zezwolić na ruch dla Apache:
firewall-cmd --zone=public --add-service=http
Aby zdefiniować dozwolone porty, użyj polecenia:
firewall-cmd --zone=public --add-port=number/protocol
Na przykład standardowy port 22 dla protokołu SSH wyglądałby następująco:
firewall-cmd --zone=public --add-port=22/tcp
Na tym etapie główne reguły są już utworzone. Następnie określ sposób przetwarzania ruchu w zależności od źródła, celu, portu i innych kryteriów. Aby dodać regułę (na przykładzie strefy publicznej ):
firewall-cmd --zone=public rule
Na przykład, aby zezwolić na ruch przychodzący z dowolnego źródła na port 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
Aby usunąć regułę:
firewall-cmd --permanent --remove-rule=rule_specification
Gdzie rule to typ reguły (np. port, usługa, bogata reguła itd.), a rule_specification to specyfikacja samej reguły.
Po wprowadzeniu zmian w konfiguracji Firewalld konieczne jest ich zapisanie i zastosowanie. Aby zapisać zmiany, użyj polecenia:
firewall-cmd --runtime-to-permanent
Aby zastosować zmiany:
firewall-cmd --reload
Po zakończeniu konfiguracji możesz sprawdzić wybrane parametry, otwierając listę wszystkich reguł:
firewall-cmd --list-all
Jeśli wystąpią jakiekolwiek problemy, sprawdź logi Firewalld za pomocą polecenia:
journalctl -u firewalld
Uwaga: Omówiliśmy jedynie ogólny algorytm konfiguracji połączenia. Narzędzie oferuje rozbudowaną funkcjonalność. Aby uzyskać pełne informacje o wszystkich dostępnych opcjach, skorzystaj z oficjalnej dokumentacji lub otwartej pomocy:
firewall-cmd --help
Konfigurowanie iptables w systemie Linux
W przeciwieństwie do Firewalld, iptables jest starszym, ale wciąż szeroko stosowanym narzędziem w Linuksie do zarządzania zaporą. Zapewnia bardziej bezpośrednie i elastyczne podejście do reguł filtrowania pakietów na poziomie jądra Linuksa. Jednak iptables wymaga bardziej zaawansowanej wiedzy i doświadczenia w porównaniu do Firewalld, co czyni go mniej dostępnym dla początkujących. Sprawdź wstępnie zainstalowaną wersję narzędzia za pomocą polecenia:
iptables -V
Jeśli narzędzie nie jest zainstalowane, należy je zainstalować. Polecenie instalacji na Ubuntu, Debianie:
apt install iptables
W przypadku systemów Red Hat (np. CentOS, Fedora):
yum install iptables
Polecenie aktywacji po instalacji:
systemctl start iptables
Aby dodać do uruchamiania, wykonaj:
systemctl enable iptables
Przed rozpoczęciem konfiguracji iptables ważne jest zrozumienie, jak to działa. Pomaga w tym składnia programu. Wygląda ona następująco:
iptables -t table action chain additional_parameters
Przyjrzyjmy się bliżej każdemu elementowi.
Iptables ma cztery główne tabele: filter, nat, mangle i raw . Każda z nich jest przeznaczona do przetwarzania określonych typów pakietów i ma własne łańcuchy reguł:
- filtrować: To jest najczęściej używana tabela zawierająca reguły filtrowania pakietów. Służy do podejmowania decyzji, czy zezwolić na pakiety, czy je odrzucić.
- nat:Ta tabela jest używana do modyfikowania adresów sieciowych i portów w pakietach. Często jest używana do ustawiania maskarady (NAT).
- magiel: W tej tabeli możesz modyfikować nagłówki pakietów. Jest ona używana do specjalistycznych operacji pakietowych, takich jak znakowanie.
- surowy:Ta tabela służy do konfigurowania reguł, które mają zastosowanie przed przejściem przez system śledzenia połączeń. Zazwyczaj służy do konfigurowania reguł, które nie powinny być modyfikowane przez system śledzenia, takich jak porzucanie pakietów z określonych adresów.
Każda tabela zawiera zestaw łańcuchów. Łańcuchy to sekwencja reguł, które są sprawdzane sekwencyjnie. Istnieją trzy predefiniowane łańcuchy:
- WEJŚCIE (przychodzące)Reguły w tym łańcuchu określają, co zrobić z przychodzącymi pakietami.
- WYJŚCIE (wychodzące)Ten łańcuch dotyczy wszystkich pakietów, które Twój komputer wysyła do innych urządzeń lub komputerów w sieci.
- PRZEKAZANIE DO DALEJ (przekazywanie)Reguły w tym łańcuchu określają, co zrobić z przekazanymi pakietami.
Wreszcie każdy łańcuch posiada jakąś akcję (cel). W praktyce używa się 5 głównych akcji:
- AKCEPTUJĘ:Pozwól pakietowi przejść przez zaporę.
- DROP: Odrzuć pakiet i usuń go bez żadnej odpowiedzi.
- ODRZUCAĆ: Odrzuć pakiet i wyślij nadawcy komunikat o błędzie ICMP.
- LOG: Zarejestruj pakiet w dzienniku systemowym i wykonaj inną czynność (np. AKCEPTUJ lub ODRZUĆ).
- POWRÓT: Zatrzymaj sprawdzanie reguł w bieżącym łańcuchu i wróć do łańcucha wywołującego (jeśli dotyczy).
Aby rozpocząć instalację, otwórz listę istniejących reguł za pomocą polecenia:
iptables -L
Jako przewodnik po konfiguracji Iptables, przyjrzyjmy się praktycznym przykładom najczęściej używanych poleceń. Dla wygody podzielimy przykłady na 3 grupy, w zależności od konkretnego łańcucha.
WEJŚCIE ŁAŃCUCHA :
- Zezwól na ruch przychodzący za pomocą protokołu TCP na porcie 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Zezwól na ruch przychodzący przez protokół UDP na porcie 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Zablokuj ruch przychodzący z określonego adresu IP:
iptables -A INPUT -s 192.168.1.100 -j DROP
WYJŚCIE ŁAŃCUCHA :
- Zezwól na ruch wychodzący poprzez protokół TCP na porcie 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Zezwól na ruch wychodzący przez protokół UDP na porcie 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Zablokuj ruch wychodzący do określonego portu (na przykład 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Łańcuch DO PRZODU :
- Zablokuj przekazywany ruch z określonego zakresu adresów IP:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Zablokuj przekazywanie pakietów z określonego interfejsu sieciowego:
iptables -A FORWARD -i eth1 -j DROP
3. Ogranicz liczbę jednoczesnych połączeń dla określonego portu (w tym przykładzie 10 połączeń na minutę na porcie 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Jak widać, w każdym oddzielnym przypadku używany jest dodatkowy argument (polecenie). Aby uzyskać pełną listę możliwych argumentów i ogólne wsparcie dla funkcjonalności narzędzia, wprowadź:
iptables -h
Aby mieć pewność, że ustawienia są prawidłowe, wprowadź ponownie polecenie, aby wyświetlić listę reguł:
iptables -L
Aby usunąć konkretną regułę, użyj polecenia:
iptables -D chain rule_number
Na przykład, jeśli chcesz usunąć regułę numer 1 z łańcucha INPUT, polecenie będzie wyglądać następująco:
iptables -D INPUT 1
Aby usunąć wszystkie reguły za pomocą jednego polecenia:
iptables -F
Ważna uwaga : reguły iptables nie są zapisywane automatycznie po ponownym uruchomieniu systemu lub usługi. Aby zapisać reguły, należy je dodać do pliku konfiguracyjnego i przywrócić po ponownym uruchomieniu. Narzędzia iptables-save i iptables-restore mogą w tym pomóc. Aby zapisać reguły, wpisz polecenie:
iptables-save > /etc/iptables/rules.v4
Zapisuje bieżące reguły iptables w pliku rules.v4. Aby przywrócić po ponownym uruchomieniu, wprowadź:
iptables-restore < /etc/iptables/rules.v4
To polecenie przywraca reguły z pliku rules.v4.
Wniosek
Konfigurowanie zapory sieciowej w systemie Linux przy użyciu firewalld lub iptables jest ważnym aspektem zapewnienia bezpieczeństwa serwera. Oba narzędzia oferują niezawodne sposoby zarządzania ruchem sieciowym i ochrony systemu przed nieautoryzowanym dostępem i cyberatakami. Wybór między firewalld a iptables zależy od konkretnych potrzeb i preferencji użytkownika, biorąc pod uwagę ich różne funkcjonalności i mocne strony.