Рейтинг:0

Постоянные правила брандмауэра для Docker на основе DPORT (до выполнения NAT)

флаг ma

Борьба с правилами брандмауэра с контейнерами Docker.

Настройка следующая.

Тонкая установка Debian 11 с Docker (Standalone).
На Docker установлен Portainer и еще 4 веб-контейнера.
Все подключено к одной мостовой сети под названием dkr-lan.

Игнорируя контейнер portainer, другие контейнеры имеют следующие сопоставленные порты

  • web01 8081:80
  • web02 8082:80
  • web03 8083:80
  • web04 8084:80

web01 и web03 могут быть общедоступны из любого места через порты 8081 и 8083.
Однако доступ к web02 возможен только с двух общедоступных IP-адресов 1.2.3.4 и 1.2.3.5.
Точно так же к web04 можно получить доступ только с одного общедоступного IP-адреса 1.2.3.4.

Я использую iptables и сначала пытался настроить правила в цепочке DOCKER-USER, однако это, кажется, фильтрует пакеты только после того, как NAT имел место, и кажется, что все контейнеры после NAT используют порт 80. Я не мог понять, как ACCEPT web02 и web04 для этих IP-адресов и УДАЛИТЕ остальные.

После небольшого поиска я начал думать, что лучшим вариантом будет фильтрация в цепочке PREROUTING.

с правилами, как показано ниже

# Для веб01
iptables -t mangle -A PREROUTING -p TCP -s 0/0 --dport 8081 -j MARK --set-mark 1
# Для веб02
iptables -t mangle -A PREROUTING -p TCP -s 1.2.3.4 --dport 8082 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p TCP -s 1.2.3.5 --dport 8082 -j MARK --set-mark 1
# Для веб03
iptables -t mangle -A PREROUTING -p TCP -s 0/0 --dport 8083 -j MARK --set-mark 1
# Для веб04
iptables -t mangle -A PREROUTING -p TCP -s 1.2.3.4 --dport 8084 -j MARK --set-mark 1

# Разрешить весь трафик, отмеченный в PREROUTING
# Блокировать весь остальной трафик
iptables -A DOCKER-USER -m mark --mark 1 -j ПРИНЯТЬ
iptables -A DOCKER-USER -p TCP --dport 8082 -j DROP
iptables -A DOCKER-USER -p TCP --dport 8084 -j DROP

Я вижу, что входящий трафик попадает в правила PREROUTING, так как счетчики увеличиваются, и это выглядит нормально.

Но блоки не работают. Это связано с тем, что это делается в цепочке DOCKER-USER, и на этом этапе они находятся после NAT.

Итак, как я могу настроить правила, которые разрешают IP-адреса на основе DPORT, а затем блокируют сброс также на основе DPORT?

Угадайте, что это должно быть сделано в цепочке PREROUTING?

А еще нужно быть настойчивым. Как и сейчас, каждый раз, когда я останавливаюсь и запускаю контейнер, он, кажется, нарушает правила брандмауэра, и все снова открывается для ВСЕХ. Это делается в цепочке DOCKER. Итак, предполагаю, что мне нужно поместить свои правила в PREROUTING или DOCKER-USER.

Что мне не хватает?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.