РЕШЕНИЕ:
iptables -F DOCKER-USER
iptables -I DOCKER-USER -j RETURN
iptables -I DOCKER-USER -p tcp -m multiport --dports http,https -j DROP
for i in `curl -s https://www.cloudflare.com/ips-v4`;\
do iptables -I DOCKER-USER -p tcp -i eth0 -m multiport --dports http,https -s $i -j RETURN;\
done
iptables -I DOCKER-USER -o eth0 -d 0.0.0.0/0 -j ACCEPT
Результат iptables -L
для DOCKER -ПОЛЬЗОВАТЕЛЬ:
ACCEPT all -- anywhere anywhere
RETURN tcp -- <ACCEPTED IPs> anywhere multiport dports http,https
DROP tcp -- anywhere anywhere multiport dports http,https
RETURN all -- anywhere anywhere
Пояснение:
Первая часть (ACCEPT
) ПРИНИМАЕТ исходящий трафик c от веб-сервера (docker контейнер).
Вторая часть (RETURN
) описывает разрешенные IP-адреса для подключения к порту 80 или 443.
Третья часть (DROP
) отбрасывает пакеты соединений на порт 80/443, которые НЕ указаны в части RETURN
.
Четвертая часть (RETURN
) является правилом по умолчанию в цепочке DOCKER -USER . Это позволяет обрабатывать соединения на других портах по следующим правилам вместо того, чтобы отбрасывать все соединения на порте, отличном от 80/443 (например, порт 22 - s sh).