Может показаться глупым вопросом, но я пытаюсь заставить работать следующее:
Таким образом, теперь каждый хост может получить доступ к опубликованному порту из любого места.
Как я могу ограничить доступ через UFW к этому опубликованному порту докеров?
Конкретный порт, который использует эта служба: 3333
.
Я пытался заставить его работать, используя -p 127.0.0.1:3333:3333
чтобы привязать порт к localhost. Но тогда мне понадобится прокси, чтобы перейти от общедоступного порта с ограничением UFW к localhost:3333
. Я тоже пробовал использовать iptables -j REDIRECT
, но я не мог заставить его работать.
Таким образом, проблема не в том, что контейнер ограничивает доступ извне, это проблема в том, что он попадает в контейнер.
Я хотел бы сохранить текущую настройку UFW с явным внесением в белый список для обслуживания Dockerized.
Я нашел лучшее, более последовательное решение до появления нового решения docker iptables версии 1.5+.
Не используя FORWARD
цепочка, но другая, правила обрабатываются перед docker изменяет цепочки iptable и, таким образом, переживет перезапуски контейнера докеров. Если кому-то это понадобится: это решило мою проблему с настраиваемыми правилами iptable и докером на хосте:
iptables -I PREROUTING 1 -t mangle ! -s [SOURCEIP_TO_ALLOW] -p tcp --dport [PORT] -j ACCEPT
iptables -I PREROUTING 2 -t mangle -p tcp --dport [PORT] -j DROP
Хитрость заключается в том, чтобы выполнить ПРЕРЯДКУ и вырубку. Таким образом, я могу разрешить SOURCEIP_TO_ALLOW на PORT на хосте и запретить вход другим ...!
У вас есть три варианта публикации / открытия портов из докера:
Если у вас есть брандмауэр на хосте, который блокирует все входящие подключения к порту 3333, но вы хотите иметь доступ по всему миру, вы можете использовать UFW, чтобы открыть порт или открыть порт для указанных исходных хостов, например:
Обратите внимание, что вы также можете указать протокол, который будет использоваться с proto, иначе ufw откроется и для tcp, и для udp.