El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

openvpn user+pass

| Comments

Si bien, openvpn con una llave estática es algo bastante sencillo de configurar; tiene un grave problema: Que solo un cliente puede conectarse a la vez. En un escenario donde por ejemplo, queremos crear una vpn para múltiples servidores que deben conectarse, usar un clave estática se vuelve un problema. Una topología de anillo podría ayudarnos resolverlo, pero cada servidor debería ser cliente y servidor a la vez. Una VPN autenticada por usuario y contraseña resuelve el problema de la manera más simplificada posible.

Creamos la infraestructura de certificados:

“aprovisionando easy-rsa”
1
2
3
[lazaro@artema ~]$ mkdir Downloads/vpn
[lazaro@artema ~]$ cd Downloads/vpn
[lazaro@artema vpn]$ cp -r /etc/easy-rsa/* ./

Si quieres, si te da la mariconería, edita los parámetros del fichero que acabas de copiar, pa que pongas los parámetros bonitillos, si no, espera a que openssl los pregunte; a lo mejor ni los pregunta.

“aprovisionamiento de certificados”
1
2
[lazaro@artema vpn]$ easyrsa init-pki
[lazaro@artema vpn]$ easyrsa build-ca nopass

Note que la cadena de texto tuservidor debe ser remplazada por el nombre de tu actor asiático preferido o, por algún nombre de tu agrado para el servidor.

“creando el certificado del servidor”
1
[lazaro@artema vpn]$ easyrsa build-server-full tuservidor nopass

Ahora el Diffie Hellman, MUY importante. Ponte cómodo que va pa largo:

“creando el diffie hellman”
1
[lazaro@artema vpn]$ easyrsa gen-dh

Tiramos todo eso para /etc/openvpn en un directorio que designaremos con el nombre de “servidor” (por una cuestión de orden).

“/etc/openvpn/”
1
2
3
4
5
[lazaro@artema vpn]$ mkdir /etc/openvpn/servidor
[lazaro@artema vpn]$ cp pki/ca.crt /etc/openvpn/servidor
[lazaro@artema vpn]$ cp pki/dh.pem /etc/openvpn/servidor
[lazaro@artema vpn]$ cp -r pki/private/*.* /etc/openvpn/servidor/
[lazaro@artema vpn]$ cp -r pki/issued/tuservidor.* /etc/openvpn/servidor/

Ya tenemos todo listo pa armar el muñeco. Ahora vamos a crear la configuración del servidor. A mi me quedó así:

“servidor.conf”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[lazaro@artema vpn]$ cd /etc/openvpn/
[lazaro@artema openvpn]$ cat servidor.conf
# como y por donde escuhan
port 1194
proto udp
dev tun

# los certificados
ca /etc/openvpn/servidor/ca.crt
cert  /etc/openvpn/servidor/tuservidor.crt
key /etc/openvpn/servidor/tuservidor.key

# el diffie hellman
dh /etc/openvpn/servidor/dh.pem

# la red que vamos a operar
server 10.8.0.0 255.255.255.0

# manda un ping cada 10 segundos
# y tumba el tunel si a los 120 no hay respuesta
keepalive 10 120

# usa la compresión lzo
comp-lzo

# opera con los siguientes privilegios
#user nobody
#group nogroup

# esto es para reforzarlo
persist-key
persist-tun

# que tan elocuente será
verb 3

# mándale estos parámetros al cliente
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

# y he aquí el truco de la autenticación
plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so login
client-cert-not-required
username-as-common-name

Con eso tenemos el servidor pinchando. Ahora vamos a hacer un fichero .ovpn genérico, para dar a entender como sería la configuración de nuestro cliente.

OJO El certificado que se le dará al cliente será el ca.crt

A mi me quedó así:

“cliente.ovpn”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[lazaro@artema openvpn]$ cat tuservidor.ovpn
client
dev tun
proto udp
remote 192.168.0.1 1194
remote-cert-tls server
auth-user-pass ~/autenticacion.conf
comp-lzo
<ca>
-----BEGIN CERTIFICATE-----
Lorem ipsum ad his scripta blandit partiendo, eum fastidii
accumsan euripidis in, eum liber hendrerit an. Qui ut wisi
vocibus suscipiantur, quo dicit ridens inciderint id. Quo mundi
lobortis reformidans eu, legimus senserit definiebas an eos. Eu
sit tincidunt incorrupte definitionem, vis mutat affert
percipit cu, eirmod consectetuer signiferumque eu per. In usu
latine equidem dolores. Quo no falli viris intellegam, ut fugit
veritus placerat per.  Ius id vidit volumus mandamus, vide
veritus democritum te nec, ei eos debet libris consulatu. No
mei ferri graeco dicunt, ad cum veri accommodare. Sed at malis
omnesque delicata, usu et iusto zzril meliore. Dicunt maiorum
eloquentiam cum cu, sit summo dolor essent te. Ne quodsi
nusquam legendos has, ea dicit voluptua eloquentiam pro, ad sit
quas qualisque. Eos vocibus deserunt quaestio ei.
-----END CERTIFICATE-----
</ca>

Cada cliente de OpenVPN tiene su librito… Pero ese .ovpn genérico, debe ser capaz de ser importado sin problema.

Por una cuestión de orden y seguridad, yo borro la base con la que se creó todo:

“clear area”
1
[lazaro@artema ~]$ rm -rf Downloads/vpn

Por cierto, cada configuración que pongas en /etc/openvpn cuya extensión sea .conf se puede echar a andar con systemd.

“systemctl
1
2
3
4
5
[root@artema ~]# systemctl status openvpn@servidor
● openvpn@servidor.service - OpenVPN connection to servidor
   Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:openvpn(8)

OJO!

En versiones recientes de archlinux, la unit del cliente y del servidor, son distintas. Por tanto, en el caso del servidor, que ha de estar en /etc/openvpn/server/fulanito usarás una unit llamda openvpn-server@fulanito

Si este artículo te resultó interesante, considere donar 0.08 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

Comments