Eu tenho um número de serviços em execução no meu servidor para o qual eu quero restringir o acesso apenas àqueles que se conectam através do OpenVPN. Consegui obter roteamento para trabalhar para um segundo IP que adicionei à máquina, mas isso não é ideal.
*.*.*.1
é o IP público principal. Está ligado ao IP local 172.31.20.102
. *.*.*.2
é o IP secundário na mesma máquina criada para teste. Está ligado ao IP local 172.31.20.103
. Isso é feito na interface do Amazon EC2, não no servidor.
Nota : Os * s são apenas para mascarar o endereço IP aqui. As configurações reais têm os IPs públicos reais.
Aqui estão os bits relevantes da configuração do servidor OpenVPN:
dev tun
server 172.16.128.32 255.255.255.240
#push "route *.*.*.1 255.255.255.255 net_gateway"
push "route *.*.*.2 255.255.255.255"
Eu tentei os dois com e sem a linha push "route *.*.*.1 255.255.255.255 net_gateway"
, e é por isso que eu comentei neste exemplo. Observe que o roteamento funciona para *.*.*.2
na configuração atual.
O IP do servidor na VPN é 172.16.128.33
.
Aqui está a linha relevante de sysctl.conf
:
net.ipv4.ip_forward = 1
Aqui estão os bits relevantes de iptables-save
:
*nat
-A PREROUTING -p tcp -m state --state NEW -m tcp --dport 22 -j DNAT --to-destination 172.16.128.33
-A POSTROUTING -s 172.16.128.32/28 -o eth0 -j MASQUERADE
COMMIT
*filter
-A FORWARD -i tun0 -s 172.16.128.32/28 -d *.*.*.1 -j ACCEPT
-A FORWARD -i tun0 -s 172.16.128.32/28 -d *.*.*.2 -j ACCEPT
-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 172.16.128.32/28 -j ACCEPT
-A INPUT -s 172.31.20.100/28 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
-A PREROUTING -p tcp -m state --state NEW -m tcp --dport 22 -j DNAT --to-destination 172.16.128.33
me permitiu acessar o SSH na interface alternativa. Adicionar uma dessas linhas para cada porta não é o ideal, mas seria aceitável se não houvesse outras opções.
Eu quero poder acessar a porta 22, por exemplo, em *.*.*.1
. Eu preferiria que a conexão se originasse de *.*.*.1
, em vez do meu IP público. Percebo que não posso rotear todo o tráfego através do túnel, pois o túnel em si deve ser mantido, mas quero que todo o resto passe pelo túnel.
Deixe-me saber se perdi alguma informação útil.