OpenVPN ignorar em algumas portas

6

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!

    
por Leeroy Brun 12.06.2013 / 16:06

2 respostas

6

Depois de pesquisar um pouco mais, encontrei este tópico: link

Eu agora modifiquei meu script OpenVPN "route-up" como segue, e ele está finalmente funcionando! Eu removi todas as outras regras confusas (iptable PREROUTING, MASQUERADE, etc).

Aqui está o meu script final de "roteamento":

ip route flush table 100
ip route flush cache

ip rule add from x.x.x.x table 100
ip route add table 100 to y.y.y.y/y dev ethX
ip route add table 100 default via z.z.z.z

Onde x.x.x.x é o IP público do meu servidor, y.y.y.y / y é a sub-rede do endereço IP público do meu servidor, ethX é a interface pública do meu servidor, e z.z.z.z é o gateway padrão.

Espero que isso possa ajudar outra pessoa.

    
por 12.06.2013 / 17:18
2

Depois de passar pela mesma provação, encontrei pelo menos um problema com o roteiro de roteiro.

iptables -t mangle -A PREROUTING ...

deve ser:

iptables -t mangle -A OUTPUT ...

Leia sobre por que aqui: link

Eu não precisei ativar o encaminhamento de IP.

    
por 03.08.2015 / 20:00