Estoy configurando un servidor OpenVPN en Debian.
Tengo el servidor configurado y los clientes pueden conectarse; se les asignan direcciones IP en el rango 10.11.22.0/24.
Tengo lo siguiente en mi archivo 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)"
Tengo el reenvío de IP activado (configurado en /etc/sysctl.conf
)
Creo que necesito agregar una regla NAT a iptables, probablemente de la forma
iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE
(¡se aceptan correcciones!)
Mi pregunta es, ¿dónde debería ir esta regla para que sea persistente (para sobrevivir a los reinicios)?
Supongo que, en un mundo ideal, la regla se agregaría cuando el servidor VPN se active y se eliminaría cuando se caiga, pero el servidor está configurado para iniciarse automáticamente en systemctl de todos modos, por lo que probablemente no importe.
Solo quiero hacerlo en el lugar correcto, para que otro administrador de sistemas no se sorprenda y pueda encontrarlo.
Respuesta1
En general, el firewall debe ser independiente de la VPN. En Debian se puede gestionar (guardar y restaurar) utilizando los paquetes netfilter-persistent
y iptables-persistent
(ambos son necesarios).
Sin embargo, es posible ejecutar cualquier comando cuando el servidor OpenVPN se inicia o se apaga, para lo cual tiene una interfaz de secuencias de comandos. En este caso, no lo use netfilter-persistent
; iptables-persistent
de lo contrario, su firewall podría inflarse (considere el siguiente escenario: el script agregó una regla, luego el firewall se guarda, luego el script elimina la regla, reinicie y el firewall se cargó).salvadoestado con la regla, luego el script se ejecuta y agregaotroregla; después de algunas repeticiones verás varias reglas iguales en el firewall).
Primero, agregue a la configuración de OpenVPN:
script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh
script-security
es necesario para que pueda ejecutar scripts.
Es muy probable que tenga una configuración no root user
y/o group
en el servidor (¡lo cual es bueno!), por lo que su down
script se ejecutará con esos privilegios de usuario/grupo. Por lo tanto, deberá volver a obtener privilegios para poder eliminar la regla. Cree un archivo /etc/sudoers.d/openvpn-remove-rule
que contenga la siguiente línea que permitirá a este usuario ejecutar dicho comando:
<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh
(reemplace <user>
con cualquier usuario configurado en la configuración de OpenVPN, probablemente nobody
). De chmod 0400 /etc/sudoers.d/openvpn-remove-rule
lo contrario, sudo se negará a cargarlo.
Explicaciónpor qué necesitamos un guióny no simplemente poner una llamada de comando de iptables a través de sudo directamente en la configuración de OpenVPN. En resumen: seguridad.
Por el contrario, up
el comando se ejecuta antes de perder los privilegios de root, pero para mantener la coherencia, sugiero usar un script también.
El contenido de esos scripts es obvio, simplemente coloque los comandos de iptables que deben ejecutarse al iniciar y apagar el servidor. (En principio, puede usar cualquier comando allí, no solo iptables). Haga que ambos scripts sean ejecutables.
Lea man openvpn
como referencia su interfaz de secuencias de comandos.