Я использую один прокси-контейнер 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-адрес.
Если вам нужна дополнительная информация, не стесняйтесь спрашивать.
Почему бы вам не настроить брандмауэр на хосте, а не в контейнере?
Полагаю, вы настроили прокси-устройство для переадресации портов 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.