Quiero agradecer a un amigo que me compartió algunas cuentas de servidores online para hacer practicar en cuestión de crear una VPN.
Aunque he escrito un post anterior, hoy vengo actualizarlo.
Vamos a empezar a crear la VPN instalando openvpn y easy-rsa con el siguiente comando:
Antes de empezar vamos a correr la VPN por root.
Aunque he escrito un post anterior, hoy vengo actualizarlo.
Vamos a empezar a crear la VPN instalando openvpn y easy-rsa con el siguiente comando:
apt-get install -y openvpn easy-rsa
Ahora vamos a pasar la carpeta de easy a openvpn
cp -r /usr/share/easy-rsa /etc/openvpn/
Configurar la autoridad de certificación
Easy RSA utiliza un conjunto de scripts para generar claves y certificados. Primero, deberá configurar la Autoridad de certificación en su sistema.Para hacerlo, cambie el directorio a /etc/openvpn/easy-rsa y cree un nuevo archivo de configuración de Easy RSA:
cd /etc/openvpn/easy-rsa
mv vars.example vars
Encuentre la configuración que establece los valores predeterminados de campo para los nuevos certificados. Se verá algo como esto:
. . .
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "[email protected]"
#set_var EASYRSA_REQ_OU "My Organizational Unit"
. . .
Elimine el comentario de estas líneas y actualice los valores resaltados a lo que prefiera, pero no los deje en blanco:
. . .
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "NewYork"
set_var EASYRSA_REQ_CITY "New York City"
set_var EASYRSA_REQ_ORG "DigitalOcean"
set_var EASYRSA_REQ_EMAIL "admin@example.com"
set_var EASYRSA_REQ_OU "Community"
. . .
Cuando haya terminado, guarde y cierre el archivo. Dentro del directorio EasyRSA hay un script llamado easyrsa que se llama para realizar una variedad de tareas relacionadas con la construcción y administración de la CA. Ejecute este script con la opción init-pki para iniciar la infraestructura de clave pública en el servidor de CA:
Ahora vamos en la carpeta para comenzar en crear el certificado del server.
root@VPNTEST:/etc/openvpn/easy-rsa#
Después de esto, vuelva a llamar al script easyrsa, siguiéndolo con la opción build-ca. Esto creará la CA y creará dos archivos importantes, ca.crt y ca.key, que conforman los lados público y privado de un certificado SSL.
./easyrsa init-pki
- ca.crt es el archivo de certificado público de la CA que, en el contexto de OpenVPN, el servidor y el cliente utilizan para informarse mutuamente que son parte de la misma red de confianza y no alguien que realiza un ataque de hombre en el medio . Por esta razón, su servidor y todos sus clientes necesitarán una copia del archivo ca.crt.
- ca.key es la clave privada que la máquina de CA usa para firmar claves y certificados para servidores y clientes. Si un atacante obtiene acceso a su CA y, a su vez, a su archivo ca.key, podrá firmar solicitudes de certificados y obtener acceso a su VPN, lo que impide su seguridad. Es por eso que su archivo ca.key solo debe estar en su máquina CA y que, idealmente, su máquina CA debe mantenerse fuera de línea cuando no se firman las solicitudes de certificado como medida de seguridad adicional.
Crear el certificado del servidor, la clave y los archivos de cifrado
Si no desea que se le solicite una contraseña cada vez que interactúa con su CA, puede ejecutar el comando build-ca con la opción nopass, de esta manera:./easyrsa build-ca nopass
Nota: Si elige un nombre que no sea "server" aquí, deberá ajustar algunas de las instrucciones a continuación. Por ejemplo, cuando copie los archivos generados en el directorio /etc/openvpn, deberá sustituir los nombres correctos. También tendrá que modificar el archivo /etc/openvpn/server.conf más adelante para señalar los archivos .crt y .key correctos.
./easyrsa gen-req server nopass
Ubicación: /etc/openvpn/easy-rsa/pki/private/server.key
Firme la clave del servidor con CA
Luego, firme la solicitud ejecutando el script easyrsa con la opción sign-req, seguido del tipo de solicitud y el nombre común. El tipo de solicitud puede ser cliente o servidor, por lo que para la solicitud de certificado del servidor OpenVPN, asegúrese de utilizar el tipo de solicitud del servidor:./easyrsa sign-req server server
A continuación, verifique el archivo de certificado generado con el siguiente comando:
openssl verify -CAfile pki/ca.crt pki/issued/server.crt
Si todo está bien, debería obtener el siguiente resultado:
pki/issued/tecadmin-server.crt: OK
A continuación, ejecute el siguiente comando para generar una clave fuerte de Diffie-Hellman para el intercambio de claves:
./easyrsa gen-dh
Ubicación: "/etc/openvpn/easy-rsa/pki/dh.pem"
Esto puede tardar unos minutos en completarse. Una vez que lo haga, genere una firma HMAC para fortalecer las capacidades de verificación de integridad TLS del servidor:
openvpn --genkey --secret ta.key
Después de crear todos los archivos de certificado, cópielos en el directorio /etc/openvpn/server/:
cp pki/ca.crt /etc/openvpn/server/
cp pki/dh.pem /etc/openvpn/server/
cp pki/private/server.key /etc/openvpn/server/
cp pki/issued/server.crt /etc/openvpn/server/
generar certificado de cliente y archivo de clave
A continuación, deberá generar la clave y el archivo de certificado para el cliente.Primero, ejecute el siguiente comando para compilar el archivo de clave del cliente:
./easyrsa gen-req creadpag
Podemos agregar una contraseña, como los certificado o trabajar sin password.
./easyrsa gen-req creadpag nopass
Ubicación: "/etc/openvpn/easy-rsa/pki/private/creadpag.key"
A continuación, firme la clave del cliente con su certificado de CA:
./easyrsa sign-req client creadpag
Ubicación: "/etc/openvpn/easy-rsa/pki/issued/creadpag.crt"
A continuación, copie todo el certificado del cliente y el archivo de clave en el directorio /etc/openvpn/client/:
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/creadpag.crt /etc/openvpn/client/
cp pki/private/creadpag.key /etc/openvpn/client/
Ahora vamos a descomprimir nuestro server.conf
root@VPNTEST:/etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee server.cnf
mv /etc/openvpn/server.cnf /etc/openvpn/server.conf
Editamos:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
tls-auth ta.key 0 # This file is secret
key-direction 0
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
explicit-exit-notify 0
Tambien configurar nuestros certificado del server
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
NO agregue "push "redirect-gateway def1"" porque va a conectarse con la DNS que yo le agregue como 8.8.8.8 o 8.8.4.4 y asi la vpn puede conectarse con la DNS de tu propia maquina
Ajuste de la configuración de red del servidor
Hay algunos aspectos de la configuración de red del servidor que deben modificarse para que OpenVPN pueda enrutar correctamente el tráfico a través de la VPN. El primero de ellos es el reenvío de IP, un método para determinar dónde debe enrutarse el tráfico de IP. Esto es esencial para la funcionalidad VPN que proporcionará su servidor. Ajuste la configuración predeterminada de reenvío de IP de su servidor modificando el archivo /etc/sysctl.conf:nano /etc/sysctl.conf
En el interior, busque la línea comentada que establece net.ipv4.ip_forward. Elimine el carácter "#" del principio de la línea para descomentar esta configuración:
net.ipv4.ip_forward=1
Para comprobar sobre el cambio vamos a usar lo siguiente:
sysctl -p
net.ipv4.ip_forward = 1
Configurar IPTABLES para nuestra VPN
iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
Para guardar nuestra configurar del IPTABLES usaremos iptables persistente.
Install:
apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
iptables-apply /etc/iptables/rules.v4
Vamos a inciar la VPN
systemctl start openvpn@server
Para comprobar el estado:
systemctl status openvpn@server
Ahora comprueba que la VPN genero la interfaz
ip a show tun0
Generar un script para el cliente de la configuración
mkdir -p ~/client-configs/files
chmod 700 client-configs/ -R
cd client-configs/
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./base.conf
nano base.conf
Aqui configuramos base.conf en este caso vamos a generarlo para usuarios con contraseña:
Comentar:
#ca ca.crt
#cert client.crt
#key client.key
Comenta y agrega:
#tls-auth ta.key 1
key-direction 1
auth-user-pass
Agregar
cipher AES-256-CBC
auth SHA256
Des comentar
user nobody
group nogroup
agregar la IP PUBLICA
remote your_server_ip 1194
Después crear un script, ejemplo "creadpag.sh" Podes descargar el script aquíLuego podemos ejecutar el comando para crear la VPN para su cliente.
chmod +x creadpag.sh
chmod 700 creadpag.sh
./creadpag.sh creadpag
Recuerda que las credenciales que estan en /etc/openvpn/client/ tiene que estar en ~/client-configs/keys
Y asi en la carpeta de file a generado tu propia
1 Comentarios
y como se borra un credencial creada?
ResponderBorrar