Заставить брандмауэр работать внутри контейнеров LXD с помощью NAT?

Я использую один прокси-контейнер NGINX (с proxy_protocol = true) вместе с несколькими веб-контейнерами, что прекрасно работает. Однако единственная проблема заключается в том, что при использовании прокси-протокола брандмауэр внутри прокси-контейнера не работает, потому что он не получает IP реальных пользователей, за исключением nginx, из-за обратного прокси.

Теперь я хочу изменить протокол прокси. к NAT, чтобы брандмауэр заработал. Но это мгновенно ломает nginx, что, как я предполагаю, связано с тем, что мне нужно написать правило iptables для правильной пересылки материалов. Кто-нибудь может мне с этим помочь?

И я использую UFW для тех, кому интересно. У меня только 1 IP-адрес, и в настоящее время я использую профиль по умолчанию:

description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic

Контейнер прокси nginx уже имеет статический IP-адрес.

Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

0
задан 18 July 2020 в 11:04
1 ответ

Почему бы вам не настроить брандмауэр на хосте, а не в контейнере?

Полагаю, вы настроили прокси-устройство для переадресации портов HTTP и HTTPS в контейнер примерно так:

lxc config device add nginx myport80 proxy listen=tcp:yourpublicip:80 proxy_protocol=true connect=tcp:127.0.0.1:80

Если вы хотите сделать то же самое с помощью iptables, вы можете использовать эту команду:

iptables -t nat -A PREROUTING -d yourpublicip -p tcp --dport 80 -j DNAT --to-destination nginxcontainerip

Не забудьте удалить прокси-устройство. Вы можете сохранить это предложение в скрипте, который является корневым при загрузке, или сделать его постоянным с помощью iptables-save (https://www.thomas-krenn.com/en/wiki/Saving_Iptables_Firewall_Rules_Permanently). Вы также можете использовать скрипт брандмауэра, например arno-iptables-firewall.

0
ответ дан 9 October 2020 в 09:14

Теги

Похожие вопросы