Diferencia entre revisiones de «Pruebas OpenVPN»
(→Certificados) |
|||
(4 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 15: | Línea 15: | ||
=== CA Subordinada === | === CA Subordinada === | ||
− | Ya | + | Ya tenía una CA (Ardemans), para la VPN me he creado una SubCa para crear tanto el certificado de servidor como los certificados de clientes. Para crea la SubCA he seguido los pasos de [http://wiki.ardemans.com/index.php?title=Entidad_Certificadora_en_Ubuntu_Server#Generar_una_CA_Subordinada aqui] |
+ | |||
+ | Para mantener esta SubCA a parte, he creado la estructura de directorios de una CA dentro del directorio /etc/openvpn/ArdemansVPN_CA | ||
+ | |||
+ | El fichero de configuración de esta SubCA lo he copiado de la CA Ardemans que ya tenía de antes, pero he tenido que hacer algunos cambios, en cuanto al directorio raiz donde está la entidad certificadora y tambien en el CERT y la KEY resultado de la generacion de la SubCA. | ||
+ | |||
+ | También he tenido que cambiar de la configuracion de la CA las ubicaciones de las authorityInfoAccess y crlDistributionPoints, para que apunten a una nueva URL, ya que este tendrás las suyas propias. | ||
+ | |||
+ | <pre> | ||
+ | http://www.ardemans.com/ssl/ArdemansVPN_CA.crl | ||
+ | http://www.ardemans.com/ssl/ArdemansVPN_CA.crt | ||
+ | </pre> | ||
+ | |||
+ | Con esta subCA he creado un certificado para servidor, siguiendo los pasos de la página que he enlazado antes, y lo he dejado como server.key y server.crt en el directorio /etc/openvpn | ||
+ | |||
+ | Para los certificados de cliente he tenido que hacer alguna moficación mas en el fichero de configuración de la CA, y es que no había extensión definida para crear certificados de cliente, así que he añadido una propia: | ||
+ | |||
+ | <pre> | ||
+ | [ client_ext ] | ||
+ | nsCertType = client | ||
+ | nsComment = "Certificado generado con OpenSSL" | ||
+ | subjectKeyIdentifier = hash | ||
+ | authorityKeyIdentifier = keyid,issuer | ||
+ | |||
+ | authorityInfoAccess = @aia_sect | ||
+ | crlDistributionPoints = URI:http://www.ardemans.com/ssl/ArdemansVPN_CA.crl | ||
+ | </pre> | ||
+ | |||
+ | Es importante que el certificado sea de tipo cliente, ya que si intentamos conectarnos con otro certificado (por ejemplo de servidor) nos aparecerá un error en el log de openvpn diciendo que el certificado cliente no es apropiado. | ||
+ | |||
+ | |||
+ | ==== Cadena de certificacion ==== | ||
+ | Recalco esta parte, que también me dió problemas, y es que usando esta subCA para trabajar con OpenVPN me ha obligado a que en el fichero donde esta la clave pública de la CA '''tenemos que poner la cadena completa''', es decir, que deberá estar en el mismo fichero la clave pública tanto de ArdemansCA como de ArdemansVPN_CA | ||
+ | |||
+ | |||
+ | |||
+ | == Configuración == | ||
+ | |||
+ | Lo recomendado es empezar por copiar los ficheros de ejemplo que ya vienen en el paquete de openvpn: | ||
+ | |||
+ | <pre> | ||
+ | /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | ||
+ | </pre> | ||
+ | |||
+ | y lo he descomprimido. | ||
+ | |||
+ | Se puede configurar de dos formas, en modo Bridge o en modo Router. No he tenido tiempo para estudiarlo a fondo, pero creo que lo que a mi me conviene es el modo router, que abre un puerto UDP (por defecto el 1194) y así puedo crear una regla de NAT en mi router de fibra para acceder hasta la raspberry. De la otra forma no tengo claro que tendría que hacerlo y me lo apunto para cuando tenga más tiempo. | ||
+ | |||
+ | Además, el fichero de ejemplo ya viene con las configuraciones por defecto para que sea en modo router, y prácticamente no he tenido que personalizar nada, y he intentando dejar lo maximo posible el fichero sin tocar. | ||
+ | |||
+ | === SSL === | ||
+ | |||
+ | Realmente no he cambiado nada, pero si apuntar que he generado los ficheros server.key y server.crt y son los que vamos a usar. Lo que si he cambiado es el parámetro '''ca''' para hacer referencia al fichero cachain.crt, y ahi he metido la cadena de certificación de mi SubCA | ||
+ | |||
+ | === Diffie hellman === | ||
+ | Esto lo tengo por estudiar. Dentro del propio fichero de conf dice como crear este fichero. | ||
+ | |||
+ | <pre> | ||
+ | openssl dhparam -out dh1024.pem 1024 | ||
+ | </pre> | ||
+ | |||
+ | === Rutas y DNS en cliente === | ||
+ | |||
+ | Para añadir una ruta en el cliente, y que así este pueda acceder a máquinas de la red interna de la raspberry (192.168.1.X) he añadido esta entrada | ||
+ | |||
+ | <pre> | ||
+ | push "route 192.168.1.0 255.255.255.0" | ||
+ | </pre> | ||
+ | |||
+ | ''NOTA: Mi red interna no es muy recomendada para una VPN, ya que muchas redes internas de otros sitios desde donde conecte un cliente van a tener ese mismo direccionamiento, y seguramente entrará en conflicto'' | ||
+ | |||
+ | Para añadir la configuracion de DNS he puesto la siguiente línea: | ||
+ | |||
+ | <pre> | ||
+ | push "dhcp-option DNS 10.8.0.1" | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == Conexión desde clientes == | ||
+ | He probado de varias formas diferentes, pero al final desde todos ellos harán falta los ficheros de certificado y la cadena de certificación. | ||
+ | |||
+ | También hace falta el fichero de configuración de cliente, aunque no en todos los casos, en algunos casos se puede hacer la configuración de forma manual con ventanita y menus. | ||
+ | |||
+ | <pre> | ||
+ | client.key | ||
+ | client.crt | ||
+ | chain.crt | ||
+ | client.ovpn | ||
+ | </pre> | ||
+ | |||
+ | Para el fichero de cliente, hay varias formas de conseguirlo, pero lo mas normal es que cojamos el fichero de configuración de ejemplo que viene con openvpn, y a partir de ahí hacer las modificaciones que creamos oportunas. | ||
+ | |||
+ | <pre> | ||
+ | /usr/share/doc/openvpn/examples/sample-config-files/client.conf | ||
+ | </pre> | ||
+ | |||
+ | El ejemplo que he usado yo es como este: | ||
+ | |||
+ | <pre> | ||
+ | client | ||
+ | remote vpn.alcobendas.ardemans.com | ||
+ | ca chain.crt | ||
+ | cert client.crt | ||
+ | key client.key | ||
+ | comp-lzo yes | ||
+ | dev tun | ||
+ | proto udp | ||
+ | nobind | ||
+ | auth-nocache | ||
+ | script-security 2 | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | user nobody | ||
+ | group nogroup | ||
+ | </pre> | ||
+ | |||
+ | === Ubuntu desde línea de comandos === | ||
+ | Para conectar así he puesto los ficheros de certificado y configuración en un directorio, todos juntos. Desde ese directorio he ejecutado: | ||
+ | |||
+ | <pre> | ||
+ | sudo openvpn client.ovpn | ||
+ | </pre> | ||
+ | |||
+ | Y en consola va apareciéndo el log. | ||
+ | |||
+ | === Ubuntu desde network Manager === | ||
+ | En ubuntu hay un complemento del network manager que se puede instalar para que aparezca en las opciones de creación de una nueva red. |
Última revisión de 16:56 10 abr 2015
Contenido
Introducción
Apuntes sobre la instalación de OpenVPN de mi casa, para poder hacer el chorra y poder conectarme desde cualquier sitio a las cosas de casa, que en realidad no hay nada especial...
Instalación de OpenVPN
La instalación la voy a realizar en mi raspberryPI que ya está haciendo de DHCP y DNS para la casa. Como decía en la página de Ovpn, si lo tenemos disponible desde paquetería mejor instalarlo desde ahí, y eso es lo que he hecho
apt-get install openvpn
Certificados
Para la conexión de clientes vamos a hacerlo mediante certificados. He leido que hay métodos alternativos de autenticacion, y con autenticación por usuario y contraseña, pero de momento no me he querido complicar.
Como ya tengo mi propia Entidad Certificadora (CA) he decidido que voy a usar esta misma, pero se puede hacer mucho más fácil usando la utilidad easy-rsa que viene con el propio paquete de openVPN. Se puede leer más sobre esto aqui
CA Subordinada
Ya tenía una CA (Ardemans), para la VPN me he creado una SubCa para crear tanto el certificado de servidor como los certificados de clientes. Para crea la SubCA he seguido los pasos de aqui
Para mantener esta SubCA a parte, he creado la estructura de directorios de una CA dentro del directorio /etc/openvpn/ArdemansVPN_CA
El fichero de configuración de esta SubCA lo he copiado de la CA Ardemans que ya tenía de antes, pero he tenido que hacer algunos cambios, en cuanto al directorio raiz donde está la entidad certificadora y tambien en el CERT y la KEY resultado de la generacion de la SubCA.
También he tenido que cambiar de la configuracion de la CA las ubicaciones de las authorityInfoAccess y crlDistributionPoints, para que apunten a una nueva URL, ya que este tendrás las suyas propias.
http://www.ardemans.com/ssl/ArdemansVPN_CA.crl http://www.ardemans.com/ssl/ArdemansVPN_CA.crt
Con esta subCA he creado un certificado para servidor, siguiendo los pasos de la página que he enlazado antes, y lo he dejado como server.key y server.crt en el directorio /etc/openvpn
Para los certificados de cliente he tenido que hacer alguna moficación mas en el fichero de configuración de la CA, y es que no había extensión definida para crear certificados de cliente, así que he añadido una propia:
[ client_ext ] nsCertType = client nsComment = "Certificado generado con OpenSSL" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer authorityInfoAccess = @aia_sect crlDistributionPoints = URI:http://www.ardemans.com/ssl/ArdemansVPN_CA.crl
Es importante que el certificado sea de tipo cliente, ya que si intentamos conectarnos con otro certificado (por ejemplo de servidor) nos aparecerá un error en el log de openvpn diciendo que el certificado cliente no es apropiado.
Cadena de certificacion
Recalco esta parte, que también me dió problemas, y es que usando esta subCA para trabajar con OpenVPN me ha obligado a que en el fichero donde esta la clave pública de la CA tenemos que poner la cadena completa, es decir, que deberá estar en el mismo fichero la clave pública tanto de ArdemansCA como de ArdemansVPN_CA
Configuración
Lo recomendado es empezar por copiar los ficheros de ejemplo que ya vienen en el paquete de openvpn:
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
y lo he descomprimido.
Se puede configurar de dos formas, en modo Bridge o en modo Router. No he tenido tiempo para estudiarlo a fondo, pero creo que lo que a mi me conviene es el modo router, que abre un puerto UDP (por defecto el 1194) y así puedo crear una regla de NAT en mi router de fibra para acceder hasta la raspberry. De la otra forma no tengo claro que tendría que hacerlo y me lo apunto para cuando tenga más tiempo.
Además, el fichero de ejemplo ya viene con las configuraciones por defecto para que sea en modo router, y prácticamente no he tenido que personalizar nada, y he intentando dejar lo maximo posible el fichero sin tocar.
SSL
Realmente no he cambiado nada, pero si apuntar que he generado los ficheros server.key y server.crt y son los que vamos a usar. Lo que si he cambiado es el parámetro ca para hacer referencia al fichero cachain.crt, y ahi he metido la cadena de certificación de mi SubCA
Diffie hellman
Esto lo tengo por estudiar. Dentro del propio fichero de conf dice como crear este fichero.
openssl dhparam -out dh1024.pem 1024
Rutas y DNS en cliente
Para añadir una ruta en el cliente, y que así este pueda acceder a máquinas de la red interna de la raspberry (192.168.1.X) he añadido esta entrada
push "route 192.168.1.0 255.255.255.0"
NOTA: Mi red interna no es muy recomendada para una VPN, ya que muchas redes internas de otros sitios desde donde conecte un cliente van a tener ese mismo direccionamiento, y seguramente entrará en conflicto
Para añadir la configuracion de DNS he puesto la siguiente línea:
push "dhcp-option DNS 10.8.0.1"
Conexión desde clientes
He probado de varias formas diferentes, pero al final desde todos ellos harán falta los ficheros de certificado y la cadena de certificación.
También hace falta el fichero de configuración de cliente, aunque no en todos los casos, en algunos casos se puede hacer la configuración de forma manual con ventanita y menus.
client.key client.crt chain.crt client.ovpn
Para el fichero de cliente, hay varias formas de conseguirlo, pero lo mas normal es que cojamos el fichero de configuración de ejemplo que viene con openvpn, y a partir de ahí hacer las modificaciones que creamos oportunas.
/usr/share/doc/openvpn/examples/sample-config-files/client.conf
El ejemplo que he usado yo es como este:
client remote vpn.alcobendas.ardemans.com ca chain.crt cert client.crt key client.key comp-lzo yes dev tun proto udp nobind auth-nocache script-security 2 persist-key persist-tun user nobody group nogroup
Ubuntu desde línea de comandos
Para conectar así he puesto los ficheros de certificado y configuración en un directorio, todos juntos. Desde ese directorio he ejecutado:
sudo openvpn client.ovpn
Y en consola va apareciéndo el log.
Ubuntu desde network Manager
En ubuntu hay un complemento del network manager que se puede instalar para que aparezca en las opciones de creación de una nueva red.