TLDR; - Добавлены некоторые допустимые правила в контейнер докеров для ограничения доступа в Интернет. Работает нормально, за исключением того, что теперь я не могу получить доступ к приложению контейнера с хост-компьютера, но могу сделать это из самого контейнера
У меня есть контейнер с веб-приложением. Этот контейнер использует mysql
, redis
и т. Д. Каждая зависимость является удаленной, доступной по IP-адресу на конкретном порту.
Так, например, mysql доступен по ip 13.255.255.255
Я хочу, чтобы контейнер мог использовать только IP-адрес mysql, а не какой-либо другой. В коде есть несколько curl
запросов, которые я не хочу выходить за пределы сети моего хост-компьютера.
Я добавил сценарий точки входа в Docker, который добавляет некоторое правило iptables
в контейнер.
ALLOWED_CIDR1=172.0.0.0/16
ALLOWED_CIDR2=13.255.255.255 #For mysql access
#iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
iptables -A INPUT -s 0.0.0.0 -j ACCEPT
iptables -A INPUT -s ::1 -j ACCEPT
iptables -A OUTPUT -d ::1 -j ACCEPT
iptables -A INPUT -s $ALLOWED_CIDR1 -j ACCEPT
iptables -A INPUT -s $ALLOWED_CIDR1 -j ACCEPT
iptables -A OUTPUT -d $ALLOWED_CIDR2 -j ACCEPT
iptables -A OUTPUT -d $ALLOWED_CIDR2 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Когда я запускаю контейнер и выполняю
docker-compose exec <container-name> curl http://google.com
В ответ получаю:
curl: (6) Не удалось разрешить хост: google.com
что ожидается. Теперь, когда я делаю
docker-compose exec <container-name> curl http://0.0.0.0
Я получаю следующий ответ:
«Привет, мир!»
Что снова ожидается. Тем не менее, когда я выполняю curl http://0.0.0.0
со своего хост-компьютера, следующий вывод
* Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0
> User-Agent: curl/7.62.0
> Accept: */*
> // Hangs here
Итак, я не могу подключиться к http://0.0.0.0 с хост-компьютера, но могу подключиться изнутри док-станции.