Translate

miércoles, febrero 25, 2015

Configurar servidor VPN en Linux para clientes Windows/Linux

El servidor VPN (Virtual Private Network) brinda la tecnología de red que nos permitirá extender las capacidades de alcance de nuestra red local sobre Internet, un gran ejemplo de esto sería la posibilidad de que dos sucursales se comuniquen utilizando como único medio el internet.
Una Solución VPN nos reporta un mar de beneficios, como por ejemplo la reducción de costos, comunicación sin fronteras, integridad, confidencialidad, y seguridad de los datos.
Con la tecnología VPN podremos conectar redes locales sin importar la zona geográfica, con el simple hecho de estar conectado a internet, nos ahorraremos los grandes costos de los enlaces físicos, y nos proporcionaría una conexión sumamente segura.
Podemos mencionar los distintos tipos de Redes Privadas Virtuales (VPN):
VPN de Acceso Remoto: Este tipo de VPN consiste en brindar a los colaboradores externos la posibilidad de conectarse a la red desde sitios remotos a través de internet, al ser autenticados con una relación de confianza, mayormente tienen los mismos accesos que un colaborador interno.
VPN Punto a Punto: Este tipo de VPN consiste en proporcionar un tunel para la conexión de puntos remotos (Sucursales) a una sede central, para así eliminar los costosos enlaces Punto a Punto tradicionales (Utilizando medios físicos).
VPN sobre Red Local: Este tipo de VPN, también denominado "VPN OVER LAN" consiste en un VPN de Acceso remoto, pero en vez de utilizar internet como vínculo de acceso, utilizaría la misma red Local. Normalmente esto se usa para proporcionar seguridad extra a ciertas zonas de la red, como por ejemplo que ciertos usuarios que tengan las relaciónes de confianzas necesarias puedan acceder a la VPN.
Ahora que ya tenemos algunos conceptos básicos de la tecnología VPN, podemos hablar de la solución que vamos a implementar en este artículo, la cual se denomina OpenVPN, y según Wikipedia es:
OpenVPN es una solución de conectividad basada en software: SSL (Secure Sockets Layer) VPN Virtual Private Network (red virtual privada), OpenVPN ofrece conectividad punto-a-punto con validación jerárquica de usuarios y host conectados remotamente, resulta una muy buena opción en tecnologías Wi-Fi (redes inalámbricas EEI 802.11) y soporta una amplia configuración, entre ellas balanceo de cargas. Está publicado bajo la licencia GPL, de software libre.
En esta guía vamos a configurar un Servidor VPN básico, donde un cliente se conectará desde el exterior a nuestro servidor, en pocas palabras realizaremos un VPN de Acceso Remoto, antes de poner en práctica la guía deben de tener conocimientos de Shorewall como requisito (Así como tenerlo instalado y configurado - GUIA DE SHOREWALL), ya que será utilizado.
Lo primero que tenemos que hacer es instalar los paquetes necesarios, lo podemos hacer con el siguiente comando:
yum install openvpn lzo 
Nos dirigimos al directorio de OpenVPN:
cd /etc/openvpn/
Para facilitar la tarea de configuración vamos a copiar la carpeta de easy-rsa 2.0 en /etc/openvpn/:
cp -r /usr/share/openvpn/easy-rsa/ /etc/openvpn
Entramos a la carpeta easy-rsa/2.0 (La que está en /etc/openvpn) y modificamos las últimas líneas de el archivo vars de acuerdo a nuestros casos, en mi caso a quedado así:
export KEY_COUNTRY="RD"
export KEY_PROVINCE="ST"
export KEY_CITY="SantoDomingo"
export KEY_ORG="punto-libre.org"
export KEY_EMAIL="usuario@direccioncorreo.com" 
Tras guardar el archivo vars, vamos a cargar las variables modificadas
(Cada vez que queramos generar un nuevo certificado con datos diferentes, deberemos ejecutar el comando), con el comando (Ojo: deberemos estar en el directorio /etc/openvpn):
source /etc/openvpn/easy-rsa/2.0/./vars
Luego limpiamos todas las firmas digitales presentes:
sh /etc/openvpn/easy-rsa/2.0/clean-all
Creamos el certificado del servidor, dejando todo por defecto:
sh /etc/openvpn/easy-rsa/2.0/build-ca
Creamos el fichero dh1024.pem, el cual tiene los parámetros del protocolo Diffie-Hellman DE 1024 Bits:
sh /etc/openvpn/easy-rsa/2.0/build-dh
Generamos la firma digital del servidor:
sh /etc/openvpn/easy-rsa/2.0/build-key-server server
Generamos las llaves de los clientes, en este caso solamente generaremos una llave para un cliente:
sh /etc/openvpn/easy-rsa/2.0/build-key cliente1
Las llaves que generemos las encontraremos en la carpeta keys que esta dentro de la carpeta easy-rsa.
El siguiente paso sería crear el archivo de configuración del servidor VPN, para su hacerlo creamos en el directorio /etc/openvpn el archivo servidorvpn-tcp-1194.conf (Es primordial que termine con .conf) y en el copiamos los siguientes parámetros:
port 1194
proto tcp
dev tun
#---- Seccion de llaves -----
ca easy-rsa/2.0/keys/ca.crt
cert easy-rsa/2.0/keys/server.crt
key easy-rsa/2.0/keys/server.key
dh easy-rsa/2.0/keys/dh1024.pem
#----------------------------
server 192.168.50.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status-servidorvpn-udp-1194.log
verb 3

client-to-client

duplicate-cn

max-clients 20
Aquí una descripción de la configuración
port: el puerto por donde escuchara el servidor VPN.
proto: el protocolo que se usará para la conexión.
dev: tipo de interfaz de conexión virtual que se usará.
ca: ubicación del fichero de Autoridad certificadora.
cert: ubicación del fichero .crt generado por nosotros.
key: ubicación del fichero .key de llave generado por nosotros.
dh: ubicación del fichero .pen generado por nosotros.
server: rango de red virtual que se utilizará.
ifconfig-pool-persist: fichero donde se registran las máquinas conectadas.
keepalive 10 120: envía un paquete cada diez segundos y si no es respondido antes de los 120 segundos, dará por caida la conexión.
comp-lzo: los datos que se manejan por el tunel VPN serán compactados.
persist-key: resuelve el problema de las llaves que persisten
persist-tun: permite que no se cierren y se vuelvan abrir los dispositivos TAP/TUN al correr up/down.
status: fichero donde se almacenará el log de estado
verb: nivel de información deseado
Hay una cosa que tenemos que tener en cuenta, y es que en el parámetro server no podemos especificar un rango de red el cual probablemente tenga el cliente VPN, ya que causaría conflictos... elijan rangos de red pocos usuales como por ejemplo
192.168.50.0/24.
client-to-client: Sin éste parámetro los clientes VPN no podrán comunicarse con los otros clientes VPN.
duplicate-cn: Con éste parámetro estamos especificando que los clientes pueden conectarse al mismo tiempo con el mismo certificado.
max-clients: Clientes máximos que se pueden conectar al mismo tiempo.
Tenemos que hacer unas configuraciones del sistema... cargamos el módulo:
modprobe tun
Habilitamos Ip Forwarding, para ello abrimos el archivo /etc/sysctl.conf y verificamos que el siguiente parámetro este así:
net.ipv4.ip_forward = 1
Y luego ejecutamos el siguiente comando:
echo 1 > /proc/sys/net/ipv4/ip_forward
Comprobamos que tenemos /dev/net/tun, si no existe lo creamos:
mknod /dev/net/tun c 10 200

Configuracion en Shorewall:

En shorewall vamos a tener que agregar unos cuantos parámetros, y empezaremos por agregar la zona, que como ya sabemos se encuentra en /etc/shorewall/zones, independientemente de la configuración que tengamos deberemos agregar lo siguiente:
#ZONE                DISPLAY 
vpn                       ipv4
Luego le asignamos a la interfaz tun0 (este fue mi caso, puedes verificar con el comando ifconfig) la zona vpn (Archivo /etc/shorewall/interfaces):
#ZONE                INTERFACE             BROADCAST             OPTIONS

vpn                       tun0                     detect                     dhcp
Independientemente de la configuración que tengamos vamos crear las políticas para esta zona (archivo /etc/shorewall/policy), por ejemplo si tenemos la zona net(Internet),fw(Firewall/Server),loc(Red Local), una configuración de ejemplo sería:
#SOURCE         DEST         POLICY

fw                       all         ACCEPT

loc                      all         ACCEPT

net                      all         DROP

vpn                     all         ACCEPT
Estamos aceptando todas las conexiones menos las que vengan desde internet, ahora independientemente de nuestra reglas en shorewall deberemos abrir el puerto 1194 (Puerto escogido anteriormente) a las conexiones que vengan desde interior para poder permitir que los clientes se conecten, editamos el archivo rules de /etc/shorewall:
#ACTION       SOURCE          DEST           PROTO   DEST PORT
ACCEPT          net                     fw                tcp          1194
ACCEPT          fw                      net               tcp          1194
Y para finalizar con shorewall editamos el archivo tunnels de /etc/shorewall, en este archivo deberemos definir las conexiones VPN, tenemos que especificar el puerto que utilizaremos y la dirección de red donde se encuentra el servidor, en mi caso 192.168.1.0/24.
#TYPE                         ZONE       GATEWAY ZONE
openvpnserver:1194      vpn            192.168.1.0/24

Configuracion de clientes Linux:

Para la configuración de los clientes VPN en plataformas Linux utilizaremos el mismo OpenVPN (También es posible utilizar NetworkManager), para empezar debemos tener en nuestra máquina cliente Linux los ficheros generados previamente:
    ca.crt

    cliente1.crt

    cliente1.csr

    cliente1.key
Como sabemos todos estos ficheros se generaron en la carpeta keys en /etc/openvpn/easy-rsa/2.0/keys. Cuando tengamos los ficheros en nuestra máquina, instalamos openvpn:
yum install openvpn
Luego creamos dentro de la carpeta /etc/openvpn otra carpeta llamada keys, y en esta copiaremos los ficheros mencionados anteriormente, y creamos un archivo de configuración en /etc/openvpn llamado cliente1-udp-1194.ovpn, con el siguiente contenido:
client
dev tun
proto tcp

remote "dominio o ip del servidor vpn" 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun
#------ SECCION DE LLAVES --------
ca keys/ca.crt
cert keys/cliente.crt
key keys/cliente.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3 
Aquí una descripción de cada parámetro:
client: especifica que openvpn será utilizado como cliente.
dev: tipo de interfaz virtual que se usará.
proto: protocolo que se usará para la conexión.
remote: se especifica el dominio o ip del servidor VPN con su puerto.
float: acepta paquetes desde cualquier dirección, no solo los
especificados en --remote.
resolv-retry: si la resolución falla hace una re-comprobación en los segundos especificados.
nobind: no agrega bind a la dirección local o al puerto.
persist-key: resuelve el problema de las llaves que persisten.
persist-tun: permite que no se cierren y se vuelvan abrir los dispositivos TAP/TUN al correr up/down.
ca: ubicación del fichero de Autoridad certificadora.
cert: ubicación del fichero .crt generado por nosotros.
key: ubicación del fichero .key de llave generado por nosotros
comp-lzo: Compacta los datos transmitidos.
Cargamos el módulo, activamos ip forwarding y comprobamos que tenemos /dev/net/tun (Ya explicamos anteriormente como realizarlo).
Y para finalizar de configurar el cliente, reiniciamos openvpn:
service openvpn restart
Con esto tendríamos conexión solamente con las máquinas que tengamos dentro de la VPN, en caso de querer conectividad con la red local deberemos de agregar a el archivo de configuración del cliente lo siguiente:
route 192.168.1.0 255.255.255.0
Esto es en caso de que la red local sea esa, también si queremos ponerle un servidor
DNS, lo hacemos con el siguiente parámetro:
dhcp-option DNS 192.168.1.100
Donde 192.168.1.100 es la IP del servidor DNS, al finalizar el archivo de configuración quedaría así:
client
dev tun
proto tcp
remote "dominio o ip del servidor vpn" 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun

route 192.168.1.0 255.255.255.0

dhcp-option DNS 192.168.1.100
#------ SECCION DE LLAVES --------
ca keys/ca.crt
cert keys/cliente.crt
key keys/cliente.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3 
Luego reiniciamos el servicio OpenVPN y podremos tener conectividad con las máquinas de la red local, y poder hacer consultas al servidor DNS.

Configuración de un cliente Windows:

Para configurar un cliente Windows deberemos instalar un programa denominado OpenVPN-GUI, lo podemos descargar desde http://openvpn.se, luego lo instalamos y vamos a la carpeta C:/Program Files/openvpn/config.
En esta carpeta copiaremos los archivos:
    ca

    cliente1.crt

    cliente1.csr

    cliente1.key
Y crearemos el archivo cliente1-udp-1194.ovpn con el siguiente contenido:
client
dev tun
proto tcp
remote "dominio o ip del servidor vpn" 1194
float
resolv-retry infinite
nobind
persist-key
persist-tunroute 192.168.1.0 255.255.255.0dhcp-option DNS 192.168.1.100
#------ SECCION DE LLAVES --------
ca ca.crt
cert cliente.crt
key cliente.key
ns-cert-type server
#---------------------------------
comp-lzo
verb 3 
Ya el significado de cada parámetro fue explicado anteriormente al configurar un cliente Linux, luego guardamos y podemos ejecutamos el cliente OpenVPN, al ejecutarlo se pondra en tray bar, le damos click derecho, y luego a connect.
Al conectarse se pondra verde y aparecera una notificacion con la IP virtual, tengan en cuenta que los niveles de seguridad de Windows 7 son mayores a los de XP, y esto significa que no podremos lograr la conexión VPN si no ejecutamos OpenVPN como administrador, dandole click derecho y "Run as administrator" o dirigiendonos a las propiedades, pestañá Compatibilidad, y activar la casílla "Run as administrator".
Si no hacemos esto, dira que se a conectado bien pero no podremos comunicarnos con los equipos remotos ya que se conecta pero no agrega las rutas de comunicación (El comando route solo puede ser corrido como administrador), esto solo pasa con Windows 7.
Y Listo, con esto concluyo esta guía para la configuración de un Servidor VPN.

martes, febrero 17, 2015

mklivestatus -configuración en Nagios

Despues de mis grandes peleas conseguí hacer funcionar esta gran herramienta, tanto el el S.o (debian lenny 5) como en nagios 4.0.8.

Web de este broker: http://mathias-kettner.de/

Descarga http://mathias-kettner.de/download/


Instalación.

La instalación de check_mk es muy sencilla. Nos bajamos el paquete de la versión adecuada de la página de descargas de CMK que en este caso debe ser superior a 1.2.5i2, lo descomprimimos y ejecutamos el instalador:
./setup
La única complejidad es tener claro la ruta de todos los componentes que nos va preguntando en el caso de que no los detecte ( y con Nagios 4 detecta poco…). Para facilitar la  instalación solo tienes que crear una archivo “.check_mk_setup.conf” en el home del usuario con el que estés instalando. Dicho archivo es el que crea el instalador la primera vez y usa en sucesivas instalaciones o actualizaciones para guardar los valores proporcionados previamente:
# Written by setup of check_mk 1.2.5i2 at Sun Apr 6 19:44:47 CEST 2014
bindir='/usr/bin'
confdir='/etc/check_mk'
sharedir='/usr/share/check_mk'
docdir='/usr/share/doc/check_mk'
checkmandir='/usr/share/doc/check_mk/checks'
vardir='/var/lib/check_mk'
agentslibdir='/usr/lib/check_mk_agent'
agentsconfdir='/etc/check_mk'
nagiosuser='nagios'
wwwuser='apache'
wwwgroup='nagcmd'
nagios_binary='/usr/local/nagios/bin/nagios'
nagios_config_file='/usr/local/nagios/etc/nagios.cfg'
nagconfdir='/usr/local/nagios/etc/objects'
nagios_startscript='/etc/init.d/nagios'
nagpipe='/usr/local/nagios/var/rw/nagios.cmd'
check_result_path='/usr/local/nagios/var/spool/checkresults'
nagios_status_file='/usr/local/nagios/var/status.dat'
check_icmp_path='/usr/local/nagios/libexec/check_icmp'
url_prefix='/'
apache_config_dir='/etc/httpd/conf.d'
htpasswd_file='/usr/local/nagios/etc/htpasswd.users'
nagios_auth_name='Nagios Access'
pnptemplates='/usr/local/pnp4nagios/share/templates'
rrd_path='/var/lib/nagios/rrd'
rrdcached_socket='/tmp/rrdcached.sock'
enable_livestatus='yes'
nagios_version='4'
libdir='/usr/lib/check_mk'
livesock='/usr/local/nagios/var/rw/live'
livebackendsdir='/usr/share/check_mk/livestatus'
enable_mkeventd='no'
Dicho archivo es para la instalación de Nagios 4 + PNP4Nagios que nos sirve de referencia como indicamos previamente. Durante la instalación vemos que al instalar livestatus tenemos que indicarle si será para nagios 3 o 4.
Nagios / Icinga version
The version is required for the compilation of the livestatus module.
Depending on the major version (3 or 4) different nagios headers are included:
( default --> 3.5.0): 4
Una vez realizada la instalación debemos asegurarnos de incluir (si no lo hizo el instalador) la ejecución del broker de check_mk en nuestro fichero de configuración de nagios, nagios.cfg:
# en nagios.cfg
# Load Livestatus Module
 broker_module=/usr/lib/check_mk/livestatus.o /usr/local/nagios/var/rw/live
 event_broker_options=1
Debemos reiniciar entonces apache y nagios para que funcione ya check_mk como siempre en http://nuestro_host/check_mk. Si tenemos algún problema lo primero será asegurarnos que al iniciar nagios se carga correctamente el módulo de livestatus:
# tail /usr/local/nagios/var/nagios.log
[1396806973] livestatus: Livestatus 1.2.5i2 by Mathias Kettner. Socket: '/usr/local/nagios/var/rw/live'
[1396806973] livestatus: Please visit us at http://mathias-kettner.de/
[1396806973] livestatus: Hint: please try out OMD - the Open Monitoring Distribution
[1396806973] livestatus: Please visit OMD at http://omdistro.org
[1396806973] livestatus: Finished initialization. Further log messages go to /usr/local/nagios/var/livestatus.log
[1396806973] Event broker module '/usr/lib/check_mk/livestatus.o' initialized successfully.
[1396806974] Successfully launched command file worker with pid 4873
Ahora que ya tenemos Livestatus para Nagios Core 4 podremos plantearnos los que consideramos imprescindible check_mk el migrar por fín nuestras instalaciones a Nagios 4 :-)

Puedes bajarte este articulo y otros en PDF desde la Guía de artículos.

Gestionando logs de terceras aplicaciones en GNU/Linux

Muchas veces, los logs de determinadas aplicaciones o servidores de aplicaciones crecen sin control, para este caso voy a realizar un rotado de los logs creados por el tomcat de alfresco (catalina.out), me interesa que, diariamente rote dicho fichero con fecha y lo comprima, posteriormente los logs de 1 semana de antigüedad serán eliminados.


En el caso del gestor documental Alfresco existen dos logs importantes:
catalina.out (log de tomcat) y alfresco.log (log de la pp WAR, alfresco), en mi instalación están situados en la siguiente carpeta:

/opt/alfresco-4.1.1.27/tomcat/logs/


Preparamos el software "logrotate", dicho software está incluido en la mayoria de distros linux, la mía es una Red Hat Enterprise Linux, supongo que todo es aplicable al menos a Centos y fedora:

1-Editamos el fichero de configuración de logrotate:

 # vim /etc/logrotate.conf

weekly
 # rotar logs semanalmente
rotate 1
 # crear un nuevo fichero para el log 
create
# Usar fecha con subfijo del rotado
dateext
# Para  que los logs se roten comprimidos
compress
# Directorio en el cual incluiremos los ficheros de configuracion de cada servicio para rotacion de logs
include /etc/logrotate.d

2-Creamos el fichero /etc/logrotate.d/alfresco:

/opt/alfresco-4.1.1.27/tomcat/logs/alfresco.log.????-??-?? {
 daily
 nocreate
 rotate 7
 compress
 missingok

}

Con estos dos pasos ya tenemos preparado el rotado de uno de los logs (alfresco.log) para 1 semana, ahora hay que pasar por preparar el crontab para que se ejecute todo de una manera programada:

3-Ejecutamos crontab en modo edición:
#crontab -e

#Ejecuto tareas de ROTADO DE Logs -alfresco -t odos los dias a las 23:55
55 23  * * *  su -l root -c '/usr/sbin/logrotate /etc/logrotate.conf  -f'

4-Podemos decirle a crontab que "busque" logs de cierta antiguedad para que los elimine y no deje basura, para este caso, buscará ficheros de mas de 30 dias y los eliminará ala 1:00 de la mañana:

#Borramos todos los logs que tienen mas de 30 dias todos los dias a las 1:00
00 01  * * *  su -l root -c '/usr/bin/find /opt/alfresco-4.1.1.27/tomcat/logs/*.gz -mtime +30 -type f -exec rm -f  \{\} \;'


Guardamos con control +x y ya tenemos el rotado de log preparado.


Nota: para alfresco haymas log (share.log, host-anager.log, etc..) hay que hacer un fichero de rotado en /etc/logrotate.d/ para cada fichero.








lunes, febrero 16, 2015

Configurar ulimit y dejarlo permanente.

Los programas ulimit y sysctl permiten limitar todo el sistema de uso de los recursos. Esto puede ayudar mucho en la administración del sistema, por ejemplo, cuando un usuario inicia demasiados procesos y por lo tanto hace que el sistema deje de responder a otros usuarios, y al revés, para deslimitar.
AÑADIR PARAMETROS A ULIMIT TEMPORALMENTE
1.- Para cambiar los parámetros del sistema temporalmente, hasta que la máquina se reinicie, ejecutaremos el comando “ulimit” seguido del parámetro necesario para realizar el cambio en la variable que queramos de sistema.

# ulimit -n 102400
# ulimit -l 131072
# ulimit -c "unlimited"
Esto nos cambiará el valor de limits the core file size a unlimited
2.- Para ver todos los parámetros que podemos cambiar podemos ejecutar el comando siguiente.
EN EL CASO DE TENER UN ENTORNO VIRTUALIZADO, DEBEREMOS TENER EN CUENTA, QUE AL HACER LOS CAMBIOS EN NUESTROS VPS, SI ACCEDEMOS DESDE EL ANFITRIÓN, NO VEREMOS LOS CAMBIOS, AUNQUE SE HAYAN REALIZADO EN EL CONTAINER
CAMBIAR LOS PARÁMETROS DE ULIMIT PERMANENTEMENTE
1.-Editamos el siguiente fichero para añadir los parámetros que queremos que tengan un valor permanente.
2.- A continuación una lista de los tipos que hay, el item al que hace referencia y el valor en el que están.