Integracja Dockera z firewalld – kontrola ruchu bez iptables
Wprowadzenie
Docker zrewolucjonizował wdrażanie aplikacji dzięki konteneryzacji usług. Jednak domyślnie zarządza on regułami iptables, co może powodować konflikty z narzędziami takimi jak firewalld, które służą do centralnego zarządzania zaporą sieciową.
W tym przewodniku pokażemy, jak wyłączyć domyślne zarządzanie iptables przez Dockera i skonfigurować firewalld do obsługi ruchu sieciowego kontenerów.
Krok 1: Wyłączenie zarządzania iptables przez Dockera
Docker automatycznie dodaje własne reguły iptables, co może kolidować z firewalld. Aby temu zapobiec:
Edytuj lub utwórz plik konfiguracyjny demona Dockera:
// /etc/docker/daemon.json
{
"iptables": false
}
Zrestartuj Dockera:
sudo systemctl restart docker
Docker przestanie teraz dodawać własne reguły zapory.
Krok 2: Konfiguracja firewalld dla ruchu Docker
Teraz musisz utworzyć odpowiednie reguły w firewalld.
Przykład: Zezwól na ruch HTTP w strefie public
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Opcjonalnie: Utwórz dedykowaną strefę dla Dockera
Można przypisać interfejs docker0 do nowej strefy:
sudo firewall-cmd --permanent --new-zone=docker
sudo firewall-cmd --permanent --zone=docker --add-interface=docker0
Krok 3: Monitorowanie za pomocą dmesg
Użyj dmesg, aby monitorować wpisy REJECT wskazujące na zablokowany ruch:
sudo dmesg -T -w | grep -i REJECT
Przykładowy wynik:
[Tue Oct 31 18:43:42 2023] filter_FWD_FedoraServer_REJECT: IN=br-... SRC=172.18.0.4 DST=172.18.0.2 ...
Podsumowanie
Wyłączając iptables w Dockerze i zarządzając ruchem przez firewalld, zyskujesz:
Uniknięcie konfliktów między Dockerem a innymi zaporami
Centralne zarządzanie portami i usługami
Lepszą widoczność i możliwość audytu logów systemowych
Przed wprowadzeniem zmian zawsze wykonaj kopię zapasową reguł zapory i przetestuj konfigurację.