Eu executo um servidor com um servidor web rodando como um contêiner podman sem root. Isso expõe as portas 10080 e 10443 porque, como um contêiner sem raiz, não é permitido expor as portas 80 e 443.
Para que meu site possa ser acessado de fora, eu uso o ufw como firewall e configurei o encaminhamento de porta lá. Para fazer isso, adicionei as seguintes linhas ao início do /etc/ufw/before.rules
arquivo:
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 10080
-A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 10443
COMMIT
Até agora tudo funciona.
Agora quero executar outro contêiner que execute um servidor Wireguard. Isso gera o seguinte em seu log e parece definir isso como regras no firewall:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.13.13.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.13.13.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
Se eu executar o contêiner Wireguard sem o firewall ufw ativado - especialmente sem o encaminhamento de porta definido - tudo funcionará. Posso me conectar a um cliente e seu tráfego é roteado pelo túnel e chega à Internet.
Se, por outro lado, eu ativar o firewall ufw incluindo o encaminhamento de porta definido e depois conectar-me à VPN Wireguard com um cliente, todas as visualizações de página parecerão chegar ao meu próprio servidor - pelo menos recebo mensagens de erro como esta:
This server could not prove that it is www.google.de. Its security certificate comes from <myServer>.de
Como posso configurar o firewall ufw para que
- Solicitações externas para a porta 80 ou 443 são encaminhadas para as portas 10080 ou 10443 e assim chegam ao meu servidor web
- As solicitações do meu cliente VPN chegam à Internet através do túnel WireGuard e não do meu próprio servidor?
(Em outro servidor eu executo o WebServer e o WireGuard no docker - tudo funciona porque o Docker WebServer expõe diretamente as portas 80 e 443 e, portanto, não preciso de nenhum encaminhamento de porta.)
Muito obrigado pela sua ajuda.
Depois de repensar a solução é simples: basta fazer o encaminhamento de porta somente quando o destino for o IP dos meus servidores, então mudei before.rules para: