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.
Uwaga: ustawienie
"iptables": falsewyłącza automatyczne reguły Dockera, ale firewalld nie przejmuje automatycznie ich funkcji. Jeśli wybierzesz ten wariant, musisz samodzielnie zapewnić między innymi forwarding, NAT lub masquerading oraz filtrowanie ruchu kontenerów. Poniższy artykuł opisuje eksperymentalne podejście do pełnej ręcznej kontroli i nie powinien być traktowany jako kompletna konfiguracja produkcyjna.
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ę.
