Только что понял несколько дней назад, что Docker, похоже, обошел мои правила iptable. Я не невероятно знаком с Докером и iptables. Пробовал много разных вещей в последние дни. Также было видно, что в недавних версиях докеры произошли большие изменения со специальной цепочкой DOCKER, которая позволила бы мне это сделать. Однако не уверен, что я делаю неправильно, но он никогда не делает того, что я ожидаю от него.
Так что я хочу довольно просто. Я хочу, чтобы он вел себя так, как ожидалось. Это, если у меня есть правило ACCEPT, чтобы пройти, и если оно не заблокировано.
Мой iptable выглядел первоначально так (так перед моими неудачными попытками):
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [779:162776]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 1.2.3.4 -p tcp -m tcp --dport 123 -j ACCEPT
-A INPUT -j DROP
COMMIT
Надеюсь, что он делает именно то, что я хочу. Просто разрешите доступ к портам 22 и 80, а также разрешите порт 123 из ip 1.2.3.4. Однако, если я создаю контейнер с "-p 123: 123", каждый может получить к нему доступ. Может ли кто-нибудь помочь мне и рассказать мне, как мне изменить этот файл?
Спасибо!
Докер-версия: 1.6.2
Изменить:
Сначала изначально мои разные попытки не перекомпилировать вопрос. Однако добавление хотя бы одного из них может быть полезным.
*nat
:PREROUTING ACCEPT [319:17164]
:INPUT ACCEPT [8:436]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [16:960]
:DOCKER - [0:0]
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [779:162776]
:DOCKER - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER -s 1.2.3.4 -p tcp -m tcp --dport 123 -j ACCEPT
-A DOCKER -j DROP
-A INPUT -j DROP
COMMIT
Вышеупомянутые виды работ. Однако, тогда получится много других проблем. Например, возникают проблемы с привязкой контейнеров, DNS больше не работает и т.д. Итак, добавьте много дополнительных правил, чтобы исправить эти проблемы, но я не получаю ни одного состояния, в котором он работает правильно. Поэтому я предполагаю, что лучше всего лучше и проще решать проблемы.
Решение:
Закончилось делать более или менее точно то, что говорили ларски. Просто не добавили его в цепочку FORWARD, вместо этого я добавил его в цепочку DOCKER. Проблема с цепочкой FORWARD заключается в том, что Docker добавляет свой материал туда, когда он перезапускается в первом положении. Это приводит к тому, что мои правила сбрасываются и не оказывают никакого эффекта. Однако для цепи DOCKER кажется, что Docker добавляет только дополнительные правила, поэтому мое пребывание в действии. Поэтому, когда я сохраняю свои правила, а затем перезагружаю сервер, все работает нормально.
Итак, теперь это выглядит примерно так:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [779:162776]
:DOCKER - [0:0]
# That I can access from IP 1.2.3.4
-A DOCKER -s 1.2.3.4/32 -p tcp -m tcp --dport 123 -j ACCEPT
# That I can access from other Docker containers
-A DOCKER -o docker0 -p tcp -m tcp --dport 123 -j ACCEPT
# Does not allow it for anything else
-A DOCKER -p tcp --dport 123 -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
COMMIT