Como configurar o servidor OpenVPN no Debian para rotear o tráfego VPN para a Internet

Como configurar o servidor OpenVPN no Debian para rotear o tráfego VPN para a Internet

Estou configurando um servidor OpenVPN no Debian.

Eu tenho o servidor configurado e os clientes podem se conectar - eles recebem endereços IP no intervalo 10.11.22.0/24.

Eu tenho o seguinte no meu arquivo server.conf:

client-to-client
status /var/log/openvpn-status.log
verb 3

server 10.11.22.0 255.255.255.0

# This ensures Internet-bound traffic to-from clients can pass through the VPN
push "redirect-gateway def1"
push "dhcp-option DNS (my DNS address)"

Eu tenho o encaminhamento de IP ativado (definido em /etc/sysctl.conf)

Acho que preciso adicionar uma regra NAT ao iptables, provavelmente no formato

iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE

(correções são bem-vindas!)

Minha pergunta é: para onde essa regra deve ir, para torná-la persistente (para sobreviver às reinicializações)?

Eu acho que, em um mundo ideal, a regra seria adicionada quando o servidor VPN fosse ativado e removida quando ele caísse, mas o servidor está configurado para inicialização automática no systemctl de qualquer maneira, então provavelmente não importa.

Eu só quero fazer isso no lugar certo, para que outro administrador de sistema não fique surpreso e possa encontrá-lo.

Responder1

Em geral, o firewall deve ser independente da VPN. No Debian ele pode ser gerenciado (salvo e restaurado) usando pacotes netfilter-persistente iptables-persistent(ambos são necessários).

Porém, é possível executar qualquer comando quando o servidor OpenVPN é inicializado ou desligado, para o qual possui uma interface de script. Neste caso, não use netfilter-persistente iptables-persistentcaso contrário seu firewall pode inchar (considere o seguinte cenário: o script adicionou uma regra, então o firewall é salvo, então o script remove a regra, reinicialize - firewall carregadosalvouestado com a regra, então o script é executado e adicionaoutroregra; depois de algumas repetições, você verá várias regras iguais no firewall).

Primeiro, adicione à configuração do OpenVPN:

script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh

script-securityé necessário para que ele execute scripts.

É muito provável que você não tenha root usere/ou esteja groupna configuração do servidor (o que é bom!), então seu downscript será executado com esses privilégios de usuário/grupo. Portanto, você precisa obter privilégios novamente para poder remover a regra. Crie um arquivo /etc/sudoers.d/openvpn-remove-ruleque contenha a seguinte linha que permitirá a este usuário executar o referido comando:

<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh

(substitua <user>por qualquer usuário definido na configuração do OpenVPN, provavelmente nobody). Caso chmod 0400 /etc/sudoers.d/openvpn-remove-rulecontrário, o sudo se recusará a carregá-lo.

Explicaçãopor que precisamos de um scripte não apenas colocar uma chamada de comando iptables via sudo diretamente na configuração do OpenVPN. Resumindo: segurança.

Pelo contrário, upo comando é executado antes de eliminar os privilégios de root, mas para consistência, sugiro usar script para ele também.

O conteúdo desses scripts é óbvio, basta colocar os comandos do iptables que precisam ser executados na inicialização e no desligamento do servidor. (Em princípio, você pode usar qualquer comando lá, não apenas iptables.) Torne ambos os scripts executáveis.

Leia man openvpnpara referência de sua interface de script.

informação relacionada