Wstęp
Myśląc o zaporze ogniowej w Windowsie, zazwyczaj pierwsza przychodzi na myśl firewall wbudowany w system, czyli Zapora Windows Defender. W systemach linuksowych sprawy mają się trochę inaczej – możemy wybrać jeden z kilku programów, który pozwala nam ustalić reguły zapory ogniowej. Są nimi m.in. iptables lub UFW, o których pisałem wcześniej.
Firewalld również pozwala na tworzenie reguł zapory. Wyróżnia się np. dużą ilością stref (ang. zone), które można konfigurować. Tworzenie reguł w firewalld nie jest takie proste jak w UFW, lecz reguły mogą być bardziej sprecyzowane.
Firewalld jest wbudowany w takie dystrybucje Linuksa jak:
- RHEL (od wersji 7)
- CentOS (od wersji 7)
- Fedora (od wersji 18)
- SUSE (od wersji 15)
Można go również używać na innych, popularnych dystrybucjach z rodziny Debiana (Ubuntu, Kali).
Źródło: https://pixabay.com/pl/vectors/%C5%9Bciana-ceg%C5%82y-czerwony-ogie%C5%84-159844/
Instalacja firewalld
Instalacja firewalld jest identyczna jak w przypadku wielu innych programów przeznaczonych dla linuksowych systemów. Aby zainstalować firewalld, należy użyć polecenia:
sudo apt install firewalld
Muszę również podkreślić, że Kali Linux nie jest dystrybucją, która z założenia jest przeznaczona do instalacji takich pakietów, dlatego w przypadku Kaliego konieczne jest doinstalowanie dużej ilości pakietów. Jeśli chcesz eksperymentować (czyt. uczyć się w praktyce) konfigurowania firewalla z wykorzystaniem firewalld, zdecydowanie polecam pracę z Ubuntu lub Debianem.
Firewalld z racji na to jaki może mieć wpływ na działanie systemu wymaga uprawnień superużytkownika (ang. superuser), które można uzyskać za pomocą polecenia sudo.
Jeśli zapomnimy o sudo, zostanie nam wyświetlony powyższy komunikat.
Kolejnym krokiem jest dodanie firewalld do autostartu, a następnie uruchomienie i sprawdzenie statusu serwisu. Możemy to zrobić za pomocą poleceń:
sudo systemctl enable –now firewalld
sudo systemctl start firewalld
sudo systemctl status firewalld
Jeżeli firewalld jest aktywny czyli w zakładce Active posiada zielony wpis active (running), możemy przejść do konfiguracji zapory ogniowej.
Funkcje firewalld
Zacznijmy od sprawdzenia czy firewalld działa bez używania systemctl. Aby to zrobić, możemy użyć polecenia:
sudo firewall-cmd –state
Zgodnie z oczekiwaniami, firewalld działa. Wylistujmy więc obecne ustawienia firewalld. Można tego dokonać za pomocą polecenia:
sudo firewall-cmd –list-all
Jak widać powyżej, firewalld wita nas wieloma parametrami możliwymi do skonfigurowania. Posiada on również wiele stref, które możemy konfigurować. Możemy je wyświetlić za pomocą polecenia:
sudo firewall-cmd –get-zones
Firewalld pozwala na skonfigurowanie aż dziesięciu stref – trochę więcej niż GUFW, które zakłada wykorzystanie trzech domyślnych stref.
Instrukcja firewalld
Firewalld posiada bardzo rozbudowaną instrkucję – posiada ona prawie 1300 linijek (!).
Moim zdaniem warto zwrócić uwagę na wpis o parametrze –permanent. Należy go użyć jedynie gdy jesteśmy pewni wprowadzonej konfiguracji. Zmiany wprowadzone z użyciem tego parametru wymagają przeładowania serwisu lub ponownego uruchomienia systemu. Dzięki temu zmiany zostaną wprowadzone na stałe do naszej zapory ogniowej.
Instrukcję firewalld można zobaczyć online (np. tutaj) lub za pomocą polecenia man firewall-cmd.
Ustalanie reguł w firewalld
Przejdźmy do konfigurowania pierwszej reguły. Moim celem jest zezwolenie na korzystanie z ssh tylko jednemu urządzeniu o adresie IP 192.168.25.150. Reszta urządzeń nie powinna mieć możliwości korzystania z ssh.
Dodaję dwie reguły – pierwsza z nich zezwala adresowi 192.168.25.150 na komunikację z wykorzystaniem portu 22 (domyślnego portu dla ssh), zaś druga blokuje wszystkim pozostałym urządzeniom korzystanie z ssh na porcie 22.
Pierwsza reguła wygląda następująco:
sudo firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”192.168.25.150″ port port=22 protocol=tcp accept’
Powyższa reguła:
- Określa źródłowy adres IP, którego dotyczy reguła (192.168.25.150)
- Określa port (22)
- Określa protokół (tcp)
- Zezwala na połączenie (accept)
Teraz pora dodać regułę, która nie pozwala innym urządzeniom na komunikację z wykorzystaniem portu 22. Wygląda ona następująco:
sudo firewall-cmd –add-rich-rule=’rule family=”ipv4″ port port=22 protocol=tcp drop’
Powyższa reguła:
- Nie określa źródłowego IP – dotyczy wszystkich połączeń, jeśli żadna wcześniejsza reguła tego nie zmienia
- Określa port (22)
- Określa protokół (tcp)
- Odmawia połączenia (deny)
Wyświetlmy konfigurację za pomocą wspomnianego wcześniej polecenia: sudo firewall-cmd –list-all
Taka konfiguracja powinna zezwalać jedynie na połączenia ssh (port 22, na którym działa ten serwis) jedynie urządzeniu o adresie IP 192.168.25.150. Sprawdźmy czy tak jest w praktyce!
Sprawdzenie działania reguły
Sprawdźmy działanie reguły w praktyce. Na potrzeby tego przykładu przypiszę nazwy do adresów IP:
- PC Kali – komputer o adresie 192.168.25.165, na którym zostały ustalane reguły firewalld
- PC1 – komputer o adresie 192.168.25.150, który wg reguł zapory ogniowej powinien mógł komunikować się z wykorzystaniem portu 22.
- PC2 – komputer o adresie 192.168.25.155, który wg reguł zapory ogniowej nie powinien mieć możliwości komunikowania się z wykorzystaniem portu 22.
Zacznijmy więc od próby połączenia się z wykorzystaniem ssh z PC1.
Zgodnie z ustawieniami zapory ogniowej udało mi się połączyć po ssh z PC Kali. Spróbujmy więc połączyć się z PC Kali z PC2.
Firewall działa! PC2 o adresie 192.168.25.155 nie może korzystać z ssh na porcie 22.
Jak najprościej tworzyć reguły? Czy ChatGPT mi pomoże?
Odpowiadając na pytanie powyżej – tak, ChatGPT może pomóc w tworzeniu reguł. Nie można jednak w 100% na nim polegać – może tworzyć dziurawe konfiguracje narażając nas na ataki.
Spytałem ChatGPT o stworzenie mi dwóch reguł – pierwsza z nich dotyczyła zezwolenia adresowi 192.168.25.150 na korzystanie z ssh. Druga miała odmówić innym urządzeniom niż tym o wspomnianym adresie na korzystanie z ssh.
Pierwsza reguła była zgodna z moimi oczekiwaniami:
firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”192.168.25.150″ port port=22 protocol=tcp accept’
To faktycznie zezwala na korzystanie z ssh danemu adresowi IP. Gdybym jednak posłuchał się go odnośnie reguły, która nie pozwala innym urządzeniom na korzystanie z ssh… nie wyszedłbym na tym najlepiej.
firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”!192.168.25.150″ port port=22 protocol=tcp drop’
Reguła taka po prostu nie istnieje .
Zapewne to kwestia dobrego prompta, lecz chcę zwrócić uwagę na to, że AI nie może zastąpić krytycznego myślenia, kiedy ułatwia nam pracę. ChatGPT może nam znacząco pomóc, lecz nie opierajmy się na nim w 100%.
Źródło: https://pixabay.com/pl/vectors/anatomia-biologia-m%C3%B3zg-my%C5%9Bl-umys%C5%82-1751201/
Podsumowanie
Firewalld to dobry, rozbudowany firewall. Polecam go przetestować każdemu, kto ma za zadanie zarządzać firewallem dla urządzeń o więcej niż jednym interfejsie sieciowym.
Pisał dla Was Oskar Klimczuk.