Giter Club home page Giter Club logo

admin-redes's Introduction

OpenVPN

Instalación

En el servidor

Para configurar el servidor de VPN utilizaremos OpenVPN, mientras que para crear la Autoridad certificadora (CA) elegimos EasyRSA.

Ambos se pueden descargar directamente de los repositorios oficiales:

admin@equipo6:~$ sudo apt install openvpn easy-rsa

Creación de la Autoridad Certificadora

Con EasyRSA es más facil la creación de la autoridad que expedirá los certificados tanto para el servidor como para los clientes. De igual manera, ésta se encargará de firmar las peticiones de certificado (CSR - Certificate Signing Request) de cualquier cliente que se desee integrar a la VPN.

Para ello, ejecutamos:

admin@equipo6:~$ make-cadir ~/caroot

Lo cual nos creará un directorio con todo lo necesario para el funcionamiento de la CA, por ejemplo un directorio para llaves, los archivos de configuración de OpenSSL, directorios para requests y revocaciones y el archivo vars que contendrá la información necesaria para la expedicion de peticiones de certificado.

caroot-directory

Editamos el archivo vars para proveer los valores del CSR por defecto

admin@equipo6:~$ vim caroot/vars

Editamos las siguientes líneas del archivo:

export KEY_COUNTRY="MX"
export KEY_PROVINCE="Cd. de Mx."
export KEY_CITY="Coyoacan"
export KEY_ORG="Admin. de Redes"
export KEY_EMAIL="[email protected]"
export KEY_OU="Equipo6"
# X509 Subject Field
export KEY_NAME="equipo6"

Guardamos el archivo, lo leemos y limpiamos el workspace:

admin@equipo6:~$ source caroot/vars
admin@equipo6:~$ ./caroot/clean-all

Ahora, creamos la Autoridad Certificadora ejecutando el script de EasyRSA

admin@equipo6:~$ ./caroot/build-ca

En caso de que no se encuentre el archivo openssl.cnf, conviene hacer una liga del archivo que de configuración que viene dentro del directorio

admin@equipo6:~$ cd caroot/
admin@equipo6:~/caroot$ ln -s openssl-1.0.0.cnf openssl.cnf
admin@equipo6:~$ ./build-ca

build-ca

Creando la llave para el servidor

Una vez creada nuestra la CA, expediremos una llave y certificado para el servidor OpenVPN, hay que especificar el Common Name o nombre del equipo que lo utilizará, este nombre debe ser único

admin@equipo6:~/caroot$ ./build-key-server server

build-ley-server build-ley-server

Luego, creamos la llave Diffie-Helmann para la autenticacióny de igual manera generamos la firma HMAC que servirá para verificar la integridad TLS del servidor. Esto lo hacemos ejecutando los scripts

admin@equipo6:~/caroot$ ./build-dh
admin@equipo6:~/caroot$ openvpn --genkey --secret keys/ta.key

Generación de la llave del cliente

Para ello especificamos el CN del cliente, en este caso será cliente1

admin@equipo6:~/caroot$ ./build-key client1

build-ley-server build-ley-server

NOTA: Este último paso lo debemos realizar cada que se vaya a añadir un nuevo cliente a la vpn.

Una vez generadas las llaves y certificados para la CA, el servidor y el cliente, las colocamos en el directorio de openvpn.

admin@equipo6:~/caroot$ cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn/
admin@equipo6:~/caroot$ gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Editamos el archivo de configuración de OpenVPN

admin@equipo6:~/caroot$ sudo vim /etc/openvpn/server.conf

Y ponemos las siguientes líneas

tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup

Infraestructura del cliente

Creamos una carpeta para el archivo que se generará para el cliente, hay que darle permisos de manipulación solo al usuario actual

admin@equipo6:~$ mkdir -p client-configs/files
admin@equipo6:~$ chmod 700 client-configs/files/

Ahora, copiamos la configuración base para el cliente y le hacemos las modificaciones pertinentes:

admin@equipo6:~$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
admin@equipo6:~$ vim client-configs/base.conf 

El archivo debe quedar:

remote ip_del_servidor 1194
proto udp
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
cipher AES-256-CBC
auth SHA256
key-direction 1
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Y se comentan las lineas que apuntan al certificado de la CA y del cliente, ya que estos serán incluidos en el archivo para el cliente client1.ovpn

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Ahora, vamos a crear el script de generación de archivos de configuración para openVPN, el cual contendrá la llave de openVPN (ta.key) así como el certificado de la ca (ca.crt) y las llaves del cliente (client1.key, client1.crt).

#!/bin/bash

# $1: Client identifier

KEY_DIR=~/caroot/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
  <(echo -e '<ca>') \
  ${KEY_DIR}/ca.crt \
  <(echo -e '</ca>\n<cert>') \
  ${KEY_DIR}/${1}.crt \
  <(echo -e '</cert>\n<key>') \
        ${KEY_DIR}/${1}.key \
  <(echo -e '</key>\n<tls-auth>') \
        ${KEY_DIR}/ta.key \
  <(echo -e '</tls-auth>') \
        > ${OUTPUT_DIR}/${1}.ovpn

Lo ejecutamos junto con el nombre del cliente client1

admin@equipo6:~$ ./genConfigs.sh client1

Y con esto se genera el archivo de configuración para el cliente client1.ovpn el cual se encuentra en ~/client-configs/files.

Transferencia del archivo

Podemos transferir el archivo al cliente con un software para enviar de forma segura como WinSCP, o en linux con scp

admin@equipo6:~$ scp client-configs/files/client1.ovpn [email protected]:~/location

Con esto el servidor ya se encuentra listo para recibir la petición del cliente.

Iniciamos el servicio vía service o systemctl

admin@equipo6:~$ sudo systemctl start openvpn@server

Podemos revisar que la interfaz tun0 ya se fue registrada en nuestra configuración de red

ip add

interface-tun-server

Como podemos ver, por defecto nuestro servidor tiene la dirección ip 10.8.0.1

En el cliente

Para el cliente, basta con instalar openvpn y tener el archivo de configuración expedido por el servidor

$cliente@cliente:~$ sudo apt install openvpn

Para iniciar el servicio:

$cliente@cliente:~$ sudo openvpn --config client1.ovpn

Si está correcto, veremos los siguientes mensajes en la terminal:

Todo bien

Podemos ver que además de nuestra interfaz por defecto (en este caso la enp0s18u1u1), se creo una nueva interfaz de tunnel tun0 a la cual se le asignó la dirección ip 10.8.0.6

Interfaz por defecto:

default-interface

Interfaz VPN:

default-interface

Ahora para comprobar, hacemos un ping al servidor 10.8.0.1

doing-ping

Instalación en dispositivo Android

Para instalar el cliente en un dispositivo Android, existen diversas aplicaciones, nosotros elegimos OpenVPN Connect, la cual es basstante ligera y tiene alto ranking

android-install

Una vez descargada, tenemos que introducir el archivo de configuración del cliente client2.ovpn junto con la llave ta.key, la generación de estos archivos se hizo en los pasos previos.

key-attachment

Damos click en IMPORT y veremos que el cliente se conectó satisfactoriamente

android-vpn-dashboard

Para testear la conexión, levantamos un servidor con una pagina de inicio, el dispositivo fue capaz de acceder al sitio sobre la VPN, cuya ip es 10.8.0.1

android-settings web-server

Monitoreo

Para el monitoreo a través de SNMP, elegimos la herramienta de Nagios

##Instalación:

Descargamos de la pagina oficial, la máquina virtual de nagios XI, la cual viene con el software precargado sobre un RedHat

Descarga

Posteriormente, y una vez que ejecutemos la VM, accedemos a la interfaz de instalación del software:

Instalacion1 Instalacion2

Monitoreo

Una vez con Nagios instalado, iniciamos sesión a traves de la interfaz web en http://x.x.x.x/nagiosxi/login.php.

LoginScreen

Lo siguiente será dar de alta el equipo a monitorear (Servidor VPN).

Añadiendo el Host remoto

Para poder monitorear el host remoto, es necesario instalar el agente NRPE (Nagios Remote Plugin Executor) que nos va a permitir monitorear el equipo desde el exterior.

Para ello instalamos

admin@equipo6:~$ sudo apt install nagios-nrpe-server nagios-plugins

Npre-picture-install

Después, editamos el archivo de configuración de NRPE para indicar al dirección IP del servidor Nagios, así como para darle acceso al mismo

admin@equipo6:~$ sudo vim /etc/nagios/nrpe.cfg

Se editan las directivas server_address y allowed_hosts

server_address=192.168.42.76
allowed_hosts=127.0.0.1, 192.168.42.76

npre-server-address

Guardamos el archivo y reiniciamos el servicio de NRPE

admin@equipo6:~$ systemctl restart nagios-nrpe-server

Configuración en el Servidor de Nagios

De igual manera instalamos el plugin de NRPE en el servidor

Debemos añadir una ubicación para los archivos de configuración de los equipos que vamos a monitorear.

Para ello, editamos el archivo de configuración nagios.cfg

[root@localhost ~]# vim /usr/local/nagios/etc/nagios.cfg 

Y añadimos un directorio para servidores: cfg_dir=/usr/local/nagios/etc/servers

directives

Ahora, creamos el directorio recien especificado, y creamos el archivo de configuración para el servidor a monitorear

[root@localhost ~]# mkdir -p /usr/local/nagios/etc/servers
[root@localhost ~]# vim /usr/local/nagios/etc/servers/openvpn-server.cfg

En este archivo especificaremos la ip del servidor a monitorear, y algunos servicios como:

  • carga del servidor
  • usuarios logueados
  • procesos activos
  • estado de la partición root
  • uso de la memoria swap
define host{
            use                     linux-server
            host_name               openvpn-server
            alias                   openvpn-server
            address                 192.168.42.218

}

define hostgroup{
            hostgroup_name          linux-server
            alias                   Linux Servers
            members                 openvpn-server
}

define service{
            use                     local-service
            host_name               openvpn-server
            service_description     SWAP Uasge
            check_command           check_nrpe!check_swap

}

define service{
            use                     local-service
            host_name               openvpn-server
            service_description     Root / Partition
            check_command           check_nrpe!check_root

}
define service{
            use                     local-service
            host_name               openvpn-server
            service_description     Current Users
            check_command           check_nrpe!check_users
}

define service{
            use                     local-service
            host_name               openvpn-server
            service_description     Total Processes
            check_command           check_nrpe!check_total_procs
}

define service{
            use                     local-service
            host_name               openvpn-server
            service_description     Current Load
            check_command           check_nrpe!check_load
}

Una vez guardado el archivo, verificamos que no tenga errores

[root@localhost ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

check-file

Reiniciamos el servicio

[root@localhost ~]# systemctl restart nagios

Y ahora podemos ver que en la interfaz web ya aparece el servidor siendo monitoreado

nagios-hosts-list

Hacemos ping al servidor en cuestion

ping-al-servidor

Y asímismo podemos ver los servicios que están siendo monitoreados

nagios-services-list

Por ejemplo, revisamos el estado de la partición root, la cual ya se encuentra con poco espacio de almacenamiento disponible

nagios-almacena

admin-redes's People

Contributors

ferrusca avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.