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-persistent
e 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-persistent
e iptables-persistent
caso 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 user
e/ou esteja group
na configuração do servidor (o que é bom!), então seu down
script 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-rule
que 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-rule
contrá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, up
o 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 openvpn
para referência de sua interface de script.