Eu tenho um servidor rodando Debian 7 e gostaria de me conectar a uma VPN e deixar todo o tráfego passar pela VPN, exceto algumas portas (SSH, sites hospedados, etc).
Eu pesquisei há algum tempo na Internet, mas nada parece funcionar como esperado.
Eu não sou um especialista em iptables / network, então talvez eu esteja perdendo alguma coisa ...
Aqui estão meus scripts:
Antes do script de VPN
Aqui está o script iniciado antes da VPN, ele é usado para bloquear todo o tráfego de entrada / saída sem passar pela VPN, exceto por algumas portas (SSH aqui).
Se eu começar apenas este roteiro, ele faz o trabalho dele. Eu posso me conectar ao meu servidor via SSH, mas todas as outras portas estão bloqueadas e o servidor não pode ir na Internet (porque a VPN não é lançada).
#!/bin/bash
# Flush iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Default policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Accept packets through VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT
# Accept local connections
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Accept connection to/from VPN servers
iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT
# Disable Reverse Path Filtering on all network interfaces
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
echo 0 > $i
done
# Open ports on iptable
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
Script de roteamento OpenVPN
Aqui está o script chamado através da opção "route-up" do OpenVPN. Este é o script que deve fazer com que as portas ignorem a VPN.
#!/bin/bash
WAN_GATEWAY="xxx.xxx.xxx.xxx"
echo 1 > /proc/sys/net/ipv4/ip_forward
# Delete table 100 and flush all existing rules
ip route flush table 100
ip route flush cache
iptables -t mangle -F PREROUTING
# Table 100 will route all traffic with mark 1 to WAN (no VPN)
ip route add default table 100 via $WAN_GATEWAY dev eth0
ip rule add fwmark 1 table 100
ip route flush cache
# Mark packets on port 22
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
arquivo de configuração OpenVPN
Aqui está o arquivo de configuração do cliente OpenVPN.
client
dev tun
proto udp
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
comp-lzo
verb 3
redirect-gateway def1
user nobody
group nogroup
script-security 2
auth-user-pass /path/to/config/login.conf
route-up /path/to/scripts/vpn_up.sh
remote xxx.xxx.xxx.xxx 443
ca /path/to/config/certs/ch.crt
Meu problema é que, quando a VPN é ativada, não consigo mais acessar meu servidor.
O que estou fazendo de errado?
Muito obrigado pela sua ajuda!