Docker i iptables na Ubuntu

Po uruchomieniu dockera pojawia się pytanie jak ograniczyć dostęp do niektórych usług. O ile takie aplikacje jak np. WordPress powinny być widoczne dla wszystkich to np. MySQL już niekoniecznie. Poniżej pozwoliłem sobie skrótowo opisać jak ograniczyć dostęp do wybranego serwisu wyłącznie dla jednego hosta w sieci lokalnej.

W systemie Ubuntu zaporą sieciową jest ufw / iptables. Konfiguracja dockera powinna się znaleźć w łańcuchu „DOCKER-USER”. Nie zaleca się modyfikowanie łańcucha „DOCKER”. Kolejność ról jest taka, że te znajdujące się wyżej w łańcuchu nadpisują te poniższe. W przykładzie najniżej znajduje się reguła blokująca wszystkich, a nad nią reguła pozwalająca na dostęp z wybranego IP. Aby uzyskać następujący efekt wywołaj poniższe komendy.

Zezwolenie hostowi „192.168.27.7” na dostęp do portu „3306”.
iptables -A DOCKER-USER -s 192.168.27.7/32 -d 172.18.0.3/32 ! -i br-d49ded88470c -o br-d49ded88470c -p tcp -m tcp --dport 3306 -j ACCEPT

Blokada wszystkich hostów na porcie „3306”.
iptables -A DOCKER-USER -d 172.18.0.3/32 ! -i br-d49ded88470c -o br-d49ded88470c -p tcp -m tcp --dport 3306 -j DROP

Pamiętaj aby podmienić IP oraz nazwę interfejsu na właściwą, taka jaka występuje u Ciebie. U mnie jest to „br-d49ded88470c”. Aby uzyskać nazwę interfejsu możesz użyć komendy iptables -L DOCKER gdzie widać podstawową konfigurację.

PRZYDATNE KOMENDY

Podgląd konfiguracji łańcucha.
iptables -L DOCKER-USER;
iptables -L DOCKER

docker-iptables-2

Lista ról wykorzystanych do skonfigurowania łańcucha. Na jej podstawie można w łatwy sposób odbudować konfigurację.
iptables -S DOCKER-USER;
iptables -S DOCKER

docker-iptables-1

Uwaga! Należy usunąć

iptables -L DOCKER-USER
RETURN all -- anywhere anywhere

iptables -S DOCKER-USER
-A DOCKER-USER -j RETURN

WIĘCEJ O SAMYM DOCKERZE

Opis przydatnych komend znajduje się w artykule PRZYGODA Z DOCKEREM