Configuración de OpenVPN para usar Firewalld en lugar de iptables en Centos 7

14

Necesito configurar OpenVPN en Centos 7 usando firewalld.

Usé iptables en Centos 6.5 y solo tuve que agregar las siguientes líneas a /etc/sysconfig/iptables:

-A POSTROUTING -s "10.0.0.0/24" -o "wlan0" -j MASQUERADE 
-A FORWARD -p tcp -s 10.0.0.0/24 -d 0.0.0.0/0 -j ACCEPT 
run the command: echo 1 > /proc/sys/net/ipv4/ip_forward 
open port 443.
Fxbaez
fuente

Respuestas:

31

Usa el firewall-cmdcomando.

Suponiendo que está abriendo el firewall a OpenVPN en la zona predeterminada, ejecute los siguientes comandos. Si lo está ejecutando en una zona no predeterminada, agréguelo --zone=<zone>a los comandos.

Nota: Si utiliza la publiczona predeterminada para su adaptador de red externo, su interfaz de bucle invertido también podría enmascararse (dependiendo de la versión firewalldque esté ejecutando), lo que puede causar problemas si está ejecutando un servicio (como mySQL) al que se accede en la zona.

Primero, enumere lo que está abierto actualmente:

# firewall-cmd --list-services
http https ssh

A continuación, agregue el openvpnservicio:

# firewall-cmd --add-service openvpn
success

Un chequeo rápido:

# firewall-cmd --list-services
http https openvpn ssh

Lo anterior permitirá openvpn trabajar, lo que ahora puede probar. Sin embargo, no durará más que se reinicia. Para hacerlo permanente, agregue la --permanentopción:

# firewall-cmd --permanent --add-service openvpn`
success

Tenga en cuenta que este último comando no abre el puerto hasta el próximo reinicio, por lo que debe usar ambos comandos.

Finalmente, agregue la mascarada:

# firewall-cmd --add-masquerade
success

Y hacerlo permanente después de un reinicio:

# firewall-cmd --permanent --add-masquerade
success

Confirmalo:

# firewall-cmd --query-masquerade
yes

Tenga en cuenta que si su conexión entrante de OpenVPN está en una zona diferente a la conexión a Internet, la mascarada debería estar en la última y deberá usar la --zone=<zone>opción con los --add-masqueradecomandos.

garethTheRed
fuente
¿Cómo saber cuál es la definición del servicio openvpn en firewalld? Por ejemplo, ¿cómo puede verificar que está permitiendo openvpn sobre TCP 443?
Christopher
@Christopher: los archivos de servicio se encuentran en /lib/firewalld/services/. En su caso, estará openvpn.xmldentro de ese directorio. Los servicios definidos por el usuario entran /etc/firewalld/services. Tenga en cuenta que el puerto predeterminado para openvpn es UDP/1194.
garethTheRed
1
Gracias. Estaba teniendo un problema y pensé que podría ser un cortafuegos. Lo único que hice de manera diferente de las instrucciones anteriores fue usar "https" en lugar de "openvpn" como el nombre del servicio para agregar. Resulta que el problema no fue firewalld. Estaba siendo tonto y olvidé configurar mi cliente correctamente para usar "tun" en lugar de "tap". Las instrucciones anteriores funcionan perfectamente.
Christopher
1
He notado un problema al agregar mascarada a toda la zona. Esto intenta NAT mis conexiones a la interfaz de bucle invertido, cuando estoy ejecutando otros servicios en localhost. Me gustaría limitar el enmascaramiento a solo 10.8.0.0/16. ¿Alguna idea de cómo podrías hacer eso?
Christopher
1
Este error puede ser la causa. Básicamente, si su zona predeterminada es la publiczona, entonces enmascara la interfaz de bucle invertido. Resulta que previamente había configurado mi zona predeterminada para ser external, así que nunca enfrenté el problema que estás viendo. Intente mover los servicios y el adaptador a otra zona para ver si eso ayuda. Déjame saber :-)
garethTheRed