Eu tenho dois nós em um cluster Docker Swarm. Um desses nós tem uma conexão de cliente OpenVPN com um provedor de VPN na interface tun0
. Meus objetivos são,
- Quaisquer serviços atribuídos a este nó usam exclusivamente a conexão VPN
- Sem vazamentos (ou seja, DNS ou outro tráfego)
- Se a VPN se desconectar, todo o tráfego será descartado
- Permitir descoberta de serviço e conexões com outros contêineres no Swarm
Para DNS, adicionei uma dns
entrada /etc/docker/daemon.json
que usa os servidores DNS do provedor de VPN que só podem ser acessados por meio da VPN.
Aqui estão as regras do iptable que eu criei:
iptables -I DOCKER-USER 1 -o tun0 -j ACCEPT
iptables -I DOCKER-USER 2 -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I DOCKER-USER 3 -j DROP
A cadeia resultante DOCKER-USER
se parece com isso:
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * tun0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- tun0 * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
A partir de testes básicos como rodar nslookup
e curl
com a conexão VPN ligada e desligada essas regras parecem funcionar, mas tenho muito pouca experiência com iptables. Esta é a maneira correta de fazer isso?