martes, 12 de enero de 2016

CREACIÓN DE CERTIFICADOS SSL AUTOFIRMADOS EN APACHE

En anteriores tutoriales vimos como instalar algunos programas como "Zabbix" o "Daloradius" en las que utilizamos "Apache" para administrarlos remotamente.
El problema reside en que por defecto estábamos utilizando el protocolo "HTTP" en donde los datos circulan por la red en texto plano. Esto es un gran riesgo en la seguridad ya que permite a cualquier hacker que se cuele en nuestra red, hacer un "sniffing" y conseguir acceso a nuestros datos sensibles como contraseñas,...
En esta captura vemos como no es difícil hacerse con el usuario y la password a través del programa "Wireshark".














Para resolver este problema, utilizaremos el protocolo "HTTPS" en nuestro servicio "Apache", que como sabemos maneja el puerto 443 por defecto.
"HTTPS" utiliza un cifrado basado en "SSL/TLS" con el objetivo de crear un canal cifrado para la comunicación de los datos más sensibles entre cliente y servidor.
"SSL" permite que el tráfico se envíe de forma segura entre las dos partes sin la posibilidad de que sea interceptado en la red, pero también permite la validación de la identidad del servidor por una autoridad certificadora "CA" que verifica su identidad a través de una firma.
Por lo que cumple dos de los características mas importantes en la seguridad: Autenticación y Confidencialidad.
En este sentido, para crear certificados digitales que son firmados por terceros tenemos 3 opciones:
  • Enviar la solicitud a una autoridad de confianza oficial para que nos firme nuestro certificado como Symantec,... que lógicamente son de pago y bastante caros en su mayoría.
  • Crear nuestro propia autoridad certificadora "CA" y firmar el certificado con esa autoridad creada, lo que implica que tendremos que instalar el certificado de la autoridad de confianza en los diferentes navegadores que utilizemos.
  • Autofirmar nuestro propio certificado al crearlo. Con ello los navegadores advertirán que no pueden verificar la validez del certificado a través de la "CA".
Esta última opción es la que vamos a implementar en nuestra "LAN" doméstica, ya que es la más sencilla de crear y porque nuestro objetivo final es la encriptación de la comunicación, no la validación del certificado a través de un tercero.

Lo primero que debemos hacer es conectarnos a nuestra Raspberry por SSH, RPD,..
Seguidamente abriremos el terminal y habilitaremos el módulo "SSL" en "Apache":

$ sudo a2enmod ssl

Reiniciamos el servicio para que la configuración surta efecto y nuestra Raspberry pueda manejar "SSL":

$ sudo service apache2 restart

Crearemos ahora una carpeta en el directorio de "Apache" para almacenar la clave y el certificado.

$ sudo mkdir /etc/apache2/ssl

Ahora generaremos nuestro certificado y clave utilizando "OpenSSL":

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/raspberry2.key -out /etc/apache2/ssl/raspberry2.crt

Las opciones utilizadas son:
  • x509: Especifica que queremos hacer un archivo de certificado autofirmado.
  • nodes: nuestro archivo de clave no tendrá "Passphrase", ya que cada vez que reiniciemos "Apache" nos la pediría, por lo que sería bastante molesto. 
  • days: Caducidad en días de nuestro certificado.
  • newkey rsa:2048: Se creará una solicitud de certificado y una clave privada nueva con un cifrado "RSA" de 2048 bits.
  • keyout: Destino del archivo de salida para el archivo de la clave privada.
  • out: Destino del archivo de salida para el certificado.


Rellenamos los datos que nos piden para el certificado según queramos. Es importante que en "Common Name" indiquemos en nombre de nuestro dominio o en su defecto la ip de nuestra Raspberry.














Ya tenemos nuestro certificado autofirmado creado. Ahora nos queda configurar los host virtuales en "Apache" editando el siguiente archivo:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf

Cambiamos o añadimos los siguientes parámetros:

ServerName nuestrodominio o ip de la Raspberry:443
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/raspberry2.crt
SSLCertificateKeyFile /etc/apache2/ssl/raspberry2.key

Como vemos, hemos introducido nuestro dominio o ip como servidor, y hemos activado "SSL" indicando la ruta de la clave y el certificado correspondiente.

A continuación activaremos nuestro nuevo host virtual:

$  sudo a2ensite default-ssl

Reiniciamos el servicio:

$ sudo service apache2 reload

Para probar que todo está configurado correctamente, nos conectaremos en el navegador de cualquier cliente:

https://192.168.0.102/

Nos advertirá que nuestro certificado no está firmado por una entidad autorizada CA.
En la parte inferior pinchamos en "acceder" .


















Ya podremos acceder a la pagina sin problemas y añadirá una excepción para la próxima vez que entremos.
Si pinchamos en la parte donde figura la dirección web, podremos comprobar que nuestra comunicación está cifrada y verificar los parámetros de nuestro certificado.
























Y eso es todo, si tenéis algún problema no dudéis en contactar conmigo.
Hasta otra.....





domingo, 15 de noviembre de 2015

INSTALAR UN SERVIDOR RADIUS EN RASPBERRY PI 2

En el anterior tutorial vimos como configurar un punto de acceso en nuestra Raspberry. Lo complementaremos hoy añadiendo un servidor "Radius" para implementar un poco mas de seguridad en la red doméstica.
"RADIUS" (Remote Authentication Dial-In User Server") es un protocolo AAA (Autenticación, Autorización y  registro de Auditoria) empleado  para controlar el acceso a los servicios de red. Nosotros lo utilizaremos para nuestro punto de acceso "Wifi", reemplazando a los famosos e inseguros métodos de clave compartida. 
El dispositivo cuando se intenta conectar a cualquier punto de acceso, enviará un nombre y una contraseña al cliente del servicio (NAS), que será la propia "AP". Este consultará las credenciales en el servidor "Radius", el cual, utilizando esquemas de autenticación como PAP, CHAP o EAP,  autorizará o denegará el acceso.

Para implementar este servicio, utilizaremos el programa "FreeRadius" y lo integraremos en una base de datos "MySQL". Instalaremos también el programa "DaloRadius", que nos facilitará la administración de nuestro servidor "Radius" via "Browser".

Primero instalaremos los paquetes para "FreeRadius" y su módulo para "MySQL":

$ sudo apt-get install freeradius freeradius-mysql freeradius-utils

Posteriormente, instalaremos las dependencias necesarias para "FreeRadius", entre ellas el servidor "MySQL" y "apache2":

$ sudo apt-get install apache2 php5 php5-gd php-pear php-db libapache2-mod-php5 php-mail php5-mysql mysql-server

Por último, descargaremos "DaloRadius" desde su código fuente:

$ sudo wget http://sourceforge.net/projects/daloradius/files/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz

Descomprimiremos el archivo:

$ sudo tar xzf daloradius-0.9-9.tar.gz 

Moveremos el contenido y añadiremos un directorio nuevo llamado "daloradius" dentro del directorio raíz web de "Apache":

$ sudo mv -f daloradius-0.9-9 /var/www/daloradius/

Crearemos ahora la base de datos en "MySQL" con los esquemas pertinentes:

$ mysqladmin -u root -p create radius
$ cd /var/www/daloradius/contrib/db
$ mysql -u root -p radius < fr2-mysql-daloradius-and-freeradius.sql

Añadiremos el usuario "radius" y le otorgamos los permisos oportunos en "MySQL" para que "Freeradius" pueda administrar la base de datos que acabamos de crear:

$ mysql -u root -p

>GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY 'radpass';
>quit

Una vez configurada la base de datos, pasaremos a modificar los archivos pertinentes en "FreeRadius".

Abrimos el archivo principal "/etc/freeradius/radiusd.conf" y descomentamos la siguiente línea para habilitar el archivo de configuración "sql.conf":

$INCLUDE sql.conf

Editaremos ahora el archivo "/etc/freeradius/sql.conf" y modificamos estos parámetros:

server = "localhost"
login = "radius"
password = "radpass"
readclients = yes

Posteriormente, ediatremos el archivo "default" y "inner-tunnel", habilitando las opciones "sql" para que "Freeradius" pueda conectar con la base de datos.

$ sudo nano /etc/freeradius/sites-enabled/default

En los apartados "authorize", "accouting" y "post-auth" descomentamos las líneas "sql".

$ sudo nano /etc/freeradius/sites-enabled/inner-tunnel

También descomentamos en este archivo la opción "sql" en la sección "authorize".

Nos queda permitir que "DaloRadius" pueda también acceder a la base de datos con el usuario "radius", por lo que editamos el archivo " /var/www/daloradius/library/daloradius.conf.php":

$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'radpass';

Reiniciamos "FreeRadius" y "Apache2" para que nuestra configuración surta efecto:

$ sudo /etc/init.d/freeradius restart
$ sudo /etc/init.d/apache2 restart


Ahora haremos un "test" para confirmar que todos los programas funcionan correctamente.
Abrimos nuestro navegador e introducimos:

http://ip_o_nombre_Raspberry/daloradius

Introducimos las credenciales por defecto que son "administrator/radius":
















Vamos a "management > new user" y creamos el usuario "prueba" con password "prueba".















Testearemos la conexión en el t:

$ radtest prueba prueba 127.0.0.1 1581 testing123

Si nos devuelve el mensaje "Access-Accept" es que es la conexión es correcta.

Ya solo nos falta configurar el cliente "NAS", que en nuestro caso es el punto de acceso "Wifi".

Abriremos el archivo de configuración "/etc/hostapd/hostapd.conf" y modificaremos o añadiremos estos parámetros:


interface=wlan0

driver=rtl871xdrv
country_code=ES

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd

ssid=castillo_movil
macaddr_acl=0
hw_mode=g
channel=11

wme_enabled=1 # Habilitta el modo n
ieee80211n=1 # Requerire autorización IEEE 802.1X

auth_algs=3

ieee8021x=1 # Ip de nuestra interfaz
eapol_version=2 # Version EAP
eap_message="bienvenidos al castillo" # Mensaje de bienvenida
eapol_key_index_workaround=1

wpa=3 # Tipo de WPA 
wpa_key_mgmt=WPA-EAP # Controla  los algoritmos de gestión de claves del #cliente. 
wpa_pairwise=TKIP # Controla el cifrado de datos WPA
wpa_group_rekey=600 # Intervalo de tiempo para  el cambio de claves GTK en segundos
wpa_gmk_rekey=86400 # Intervalo de tiempo para  el cambio de claves GMK en segundos
rsn_pairwise=CCMP
eap_server=0 # Es necesario si nuestro hostapd está configurado para actuar #como un servidor RADIUS

own_ip_addr=192.168.0.102 # La dirección IP del punto de acceso
nas_identifier=castilloAP # Identificador de nuestro NAS

auth_server_addr=192.168.0.102 # Ip del servidor RADIUS para la #autentificación
auth_server_port=1812 # Puerto de comunicación de RADIUS
auth_server_shared_secret=clave # Clave compartida entre NAS y RADIUS

acct_server_addr=192.168.0.102 # Ip del servidor RADIUS para la #cuentas de usuario
acct_server_port=1813 # Puerto de comunicación de RADIUS
acct_server_shared_secret=clave # Clave compartida entre NAS y RADIUS

En este archivo podemos observar que está configurado de forma que nuestro servidor "Radius" corresponde en ip con que nuestro "NAS", ya que La Raspberry va a desempeñar esos dos roles.


A continuación reiniciaremos "hostapd":

$ sudo /etc/init.d/hostapd restart

Añadiremos ahora nuestra "AP" como cliente "NAS". Accederemos via "web" a "Daloradius" y vamos a "management>nas>new nas".














Solo nos queda conectarnos a la "AP" introduciendo nuestras credenciales de prueba de manera automática desde un pc Windows 8/10, un móvil "Android", o un mac...
Si tenemos un pc con Windows 7 o anterior, deberemos configurar nuestra conexión de red de la siguiente forma:
































Podremos observar en el archivo de registro "syslog" de nuestra Raspberry que nos hemos auntentificado correctamente.


 




Ya tendremos por tanto nuestro servidor "RADIUS" activo. Con la amigable interface web "DaloRadius" podremos configurar y administrar todos los párametros relativos al servidor como control de usuarios, grupos, visualizar logs, vigencia de las cuentas, monitorizar el tráfico,... y muchas opciones más.

Hasta una nueva entrada...

viernes, 6 de noviembre de 2015

UTILIZAR LA RASPBERRY COMO PUNTO DE ACCESO WIFI

En este nuevo tutorial, utilizaremos la Raspberry como un punto de acceso "Wifi" y como un servidor "DHCP" para asignar una configuración de red a los clientes que se conecten a él, una vez que se hayan autentificado mediante la clave compartida.

Para ello, necesitaremos dos interfaces de red:
  • Una interfaz de red "Ethernet" que redirigirá el tráfico al router con una ip 192.168.0.101/24.
  • Una interfaz "Wifi" donde los clientes se conectarán con una ip 192.168.2.1/24.
En resumen, nuestro esquema de red será el siguiente:













Para nuestra misión instalaremos el programa que servirá de punto de acceso ("hostapd") y otro que servirá para asignar una ip a los distintos clientes que se conecten al punto de acceso ("isc-dhcp-server").


Pero antes de nada tendremos que modificar las diferentes interfaces de red para asignales una ip estática, si no las tenemos ya configuradas.

$ sudo nano /etc/network/interfaces

Dejamos la configuración de la siguiente forma:
















Reiniciamos nuestra Raspberry y procedemos a instalar los programas pertinentes.

$ sudo apt-get install hostapd isc-dhcp-server

Una vez hecho pasaremos a configurar el servicio "DHCP".

Elegimos la interface que escuchara las peticiones y asignará las direcciones a los clientes. En nuestro caso será "wlan0":

$ sudo nano /etc/default/isc-dhcp-server

Modificamos la última línea:

INTERFACES="wlan0"

Ahora pasaremos a declarar las opciones de la subred "Wifi" en el archivo de configuración general:

$ sudo nano /etc/dhcp/dhcpd.conf

Añadimos las siguientes opciones al final del archivo:


subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.150;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
default-lease-time 1200;
max-lease-time 8500;
option domain-name-servers 192.168.0.1, 8.8.8.8;
}

Si queréis saber mas detalles sobre la instalación y configuración de un servidor "DHCP" en Raspbian, podéis consultarlos en este tutorial que hice al respecto.

Guardado el archivo, procedemos a reiniciar el servicio:

$ sudo /etc/init.d/isc-dhcp-server restart

Si no nos devuelve ningún error, pasaremos a configurar el punto de acceso:

$ sudo nano /etc/hostapd/hostapd.conf

En este nuevo archivo creado, lo rellenamos con los siguientes parámetros:


interface=wlan0
 # Interface para crear el AP.
driver=rtl871xdrv
 # Driver de la tarjeta Wifi.
ssid=Castillo_movil
 # Nombre de la SSID. 
hw_mode=g 
# Modo WIFI.
channel=6
 # Canal WIFI.
macaddr_acl=0 
# No habilitamos las ACL de los filtros MAC de los clientes.
auth_algs=1 
# Para autentificación por clave compartida.
ignore_broadcast_ssid=0
 # Activamos la difusión del SSID.
wpa=2 
# Tipo de WPA 
wpa_passphrase=Nuestra_contraseña
 # Password compartida del punto de acceso.
wpa_key_mgmt=WPA-PSK 
# Controla  los algoritmos de gestión de claves del cliente. 
wpa_pairwise=TKIP 
# Controla el cifrado de datos WPA.
rsn_pairwise=CCMP
# Controla la encriptación de datos WPA2.
max_num_sta=15 
# Número máximo de estaciones que se pueden conectar.
#Activar los registros logs en el archivo syslog.
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

Modificamos la ruta donde se encuentra el archivo de configuración para el demonio en el siguiente archivo:

$ sudo nano /etc/default/hostapd

Incluimos la ruta y descomentamos:

DAEMON_CONF= "/etc/hostapd/hostapd.conf"

Si los drivers y el demonio no nos funcionan, actualizaremos a la última versión del programa a través del código fuente:

$ sudo wget http://adafruit-download.s3.amazonaws.com/adafruit_hostapd_14128.zip
$ sudo unzip adafruit_hostapd_14128.zip

Una vez descomprimido el archivo renombramos el archivo antiguo:

$ sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.old

Trasladamos el demonio de la nueva versión:

$ sudo mv hostapd /usr/sbin

Cambiamos los permisos:

$ sudo chmod 755 /usr/sbin/hostapd



Reiniciamos "hostapd" y si no nos devuelve ningun error, ya podremos conectarnos como clientes desde cualquier dispositivo.

$ sudo /etc/init.d/hostapd restart

Los clientes podrán conectarse a la "AP" mediante la contraseña compartida, pero no podrán conectarse a internet. Para ello deberemos activar la Raspberry para que actúe como router y configurar unas cuantas reglas en "iptables" para que el tráfico de los clientes de la "AP" puedan llegar al exterior.

Lo primero que debemos activar es el bit "IP_FOWARD":

$ sudo nano /etc/sysctl.conf

Descomentamos la siguiente línea:

net.ipv4.ip_forward=1

En nuestro caso, tenemos instalado "UFW" como firewall por lo que editaremos:

$ sudo nano /etc/ufw/sysctl.conf

Modificamos el parámetro:

net/ipv4/ip_forward=1

El siguiente paso será configurar las reglas de tráfico para que sea enrutado de manera correcta.

Abrimos el archivo:

$ sudo nano /etc/default/ufw

Modificando esta línea habilitamos la política del firewall para que acepte por defecto los reenvíos de paquetes:

DEFAULT_FORWARD_POLICY="ACCEPT"

A continuación vamos a añadir la reglas "UFW" adicionales para la traducción de direcciones de red y el enmascaramiento de los clientes VPN:

$ sudo nano /etc/ufw/before.rules

Introducimos esta configuración justo después de esta línea:


# Don't delete these required lines, otherwise there will be error
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Permitir el tráfico WIFI a través de la interface eth0
-A POSTROUTING  -o eth0 -j MASQUERADE
COMMIT 

Para que se apliquen los cambios desactivamos y activamos "UFW":

$ sudo ufw disable
$ sudo ufw enable

Si no tenemos instalado "UFW", basta con aplicar estas reglas mediante "iptables":
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
$ sudo sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Por último, solo nos queda comprobar que el punto wifi está activo y que, una vez autentificados como clientes, tenemos conexión a internet.

























En el servidor, podremos comprobar también que la autentificación del usuario y la asignación de su ip es correcta:

$ sudo tail -f var/log/syslog





En el próximo tutorial configurar un servidor Radius con "freeradius" y así aumentar nuestra seguridad en nuestro punto de acceso "Wifi".

Hasta otra....

miércoles, 4 de noviembre de 2015

INSTALACION DE LOS AGENTES ZABBIX EN WINDOWS Y LINUX

En el anterior tutorial conseguimos configurar nuestro servidor "Zabbix" para que este pueda monitorizar los "host" de nuestra red doméstica. Ahora sólo nos falta instalar los agentes en los dispositivos  para que puedan comunicar la información que recolecta los "ítems" al servidor.


INSTALACIÓN DEL AGENTE EN WINDOWS

Lo primero que debemos hacer es descargar el autoinstalador desde este enlace.
En el proceso de instalación dejamos lo siguiente:



















A continuación indicaremos:

  • Nombre o ip del servidor "Zabbix": será el nombre o ip de nuestra Raspberry.
  • Hostname: Nombre de nuestro dispositivo Windows.
  • Puerto de escucha: dejamos el puerto 10050, que es el que usa por defecto.
  • Servidor activo "Zabbix": ip de la Raspberry.
















Elegimos la ruta donde se instalará los binarios y la configuración del agente.


















Si nos equivocamos al introducir los datos de configuración del agente, podemos editar el archivo "zabbix_agentd.conf", que se encuentra en el directorio que hemos elegido en la instalación.

Una vez instalado, podremos comprobar que el agente está activo en los servicios de Windows:







Por último, debemos crear una regla en nuestro firewall para que no nos bloquee el puerto de escucha.
Abrimos "Panel de control>Sistema y seguridad>Firewall de Windows>configuración avanzada".
Creamos una regla de entrada llamada "zabbix_agente" que permita la conexión udp/tpc por el puerto 10050:


























De esta forma tan sencilla ya tendremos nuestro agente instalado y configurado en Windows.



INSTALACIÓN DEL AGENTE EN UBUNTU Y DEBIAN

Los paquetes del agente "Zabbix" ya se encuentra en la mayoría de los repositorios de Debian, Ubuntu y últimamente en Raspbian, por lo que solo tendremos que instalar estos paquetes como hacemos habitualmente:

$ sudo apt-get install zabbix-agent

Una vez instalado, procedemos a editar el archivo de configuración:

$ sudo nano /etc/zabbix/zabbix_agentd.conf

Modificamos los mismos parámetros que utilizamos con el agente Windows:

LogFile=/var/log/zabbix-agent/zabbix_agentd.log #Archivo log de registro.
Server= ip_zabbix # Ip del servidor Zabbix.
Hostname= agente_linux # Hostname del host.
ListenPort=10050 # Puerto de escucha del agente

Una vez guardado el archivo, reiniciamos el agente:

$ sudo /etc/init.d/zabbix-agent restart

Podemos ver que el agente está activo mediante el comando "ps":

$ sudo ps aux | grep zabbix









No olvidemos que si tenemos un cortafuegos activo, deberemos abrir el puerto 10050 para que el agente pueda comunicarse con "Zabbix". En mi caso, tenemos instalado el cortafuegos "UFW", por lo que permitiremos el tráfico al puerto 10050:

$ sudo ufw allow 10050

Con esto ya tendremos nuestro agente funcionando en Linux.


CONFIGURAR LOS "HOST" EN ZABBIX

Una vez configurados los agentes y el servidor, pasaremos a añadir los host en el "frontend" de "Zabbix" para monitorizarlos.
Accedememos via "browser" a través de la ip o el nombre de nuestra Raspberry:

http:\\ip_o_nombre_de_Raspberry\

Metemos nuestras credenciales y accederemos a "Configuration>Hosts". Pinchamos en en el icono "create host" y dejamos esta configuración:















En la pestaña "templates" escogeremos una pantilla predefinida, según nuestro S.O:











Una vez seleccionada y añadida nuestra plantilla, pinchamos en "update" para que apliquen los cambios.
Por último, solo nos queda activar el "host" clickeando en la ventana "status" para cambiarlo al estado "enable".






Si en la fila titulada "availabity" el color del agente es verde, significa que la comunicación entre servidor y agente es correcta.

Podremos ahora configurar las gráficas, las alertas,.. según querramos administrarlas.












Hasta una nueva entrada..