Acceso a carpetas seguras

Introducción

Una página web segura o un sitio web seguro es un sitio web que utiliza el protocolo https en lugar de utilizar el protocolo http.

El protocolo https es idéntico al protocolo http con la excepción de que la transferencia de información entre el cliente (navegador web) y el servidor (servidor web) viaja a través de Internet cifrada utilizando robustos algoritmos de cifrado de datos proporcionados por el paquete OpenSSL.

Los algoritmos de cifrado utilizados reunen las características necesarias para garantizar que la información que sale desde el servidor hacia el cliente, esté cifrada y solamente pueda ser descifrada por el cliente y que la información que sale desde el cliente hacia el servidor, esté cifrada y solamente pueda ser descifrada por el servidor. Si durante la transferencia de la información un 'hacker' hiciera copia de los paquetes de datos e intentara descifrarlos, los algoritmos garantizarían que no podría hacerlo por fuerza bruta (probando todas las claves posibles) en un plazo mínimo de varios años.

Durante la transmisión, se utilizan algotirmos de cifrado simétricos, pero para intercambiar las claves de cifrado, hay una sesión inicial de cifrado asimétrico.

Módulo ssl para apache2

Al instalar apache2 se instala también el módulo ssl para apache2, por lo que no es necesario instalar ningún paquete adicional. Tan solo debemos generar un certificado para el servidor y activar el módulo ssl.

Generar el certificado

Para que nuestro servidor pueda servir páginas seguras con el protocolo https, necesita un certificado. Dicho certificado permitirá que nuestro servidor utilizar cifrado asimétrico para intercambiar las claves de cifrado con los clientes, antes de iniciar una trasmisión segura de información. Inicialmente, el cliente deberá aceptar el certificado del servidor, ya que generaremos un certificado autofirmado. Si queremos evitarlo, deberíamos contratar un certificado a una entidad certificadora confiable, pero tiene un coste que no merece la pena soportar en un entorno educativo. Para generar nuestro certificado autofirmado, ejecutaremos el comando:
// Generar certificado autofirmado
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/apache2.pem

Durante la ejecución de comando make-ssl-cert, quizás nos pregunte algunas sencillas preguntas como el nombre del servidor, el país, etc... y después se creará el archivo /etc/ssl/certs/apache.pem que contiene la claves que permitirán al servidor utilizar cifrado asimétrico. El siguiente paso será configurar un servidor virtual para que utilice dicho certificado.

Crear servidor virtual seguro en apache2

Primero crearemos una carpeta de nombre 'websegura' dentro de '/var/www'. Dicha carpeta será el raíz de documentos (DocumentRoot) de nuestro servidor virtual seguro, de modo que todo lo que coloquemos en dicha carpeta deba ser accedido vía 'https'. Eso lo indicaremos más adelante mediante el parámetro SSLRequireSSL. El protocolo https utiliza el puerto 443, por lo tanto, tendremos habilitar dicho puerto para que apache lo utilice. Si ya está habilitado el puerto 443, no hacer nada.

 // Habilitar puerto 443. Añadir en /etc/apache2/ports.conf
Listen 443

Después debemos crear el servidor virtual en apache. Dicho servidor virtual dispondrá de una url de acceso diferente a la de nuestra web principal (websegura.ieslapaloma.com en nuestro ejemplo) y será accesible mediante https, por tanto tendremos que habilitar SSL e indicar la ruta del archivo que contiene el certificado. Todo ello lo haremos editando el archivo /etc/apache2/sites-available/default:

// Añadir al final en /etc/apache2/sites-available/default
NameVirtualHost websegura.ieslapaloma.com:443 <VirtualHost websegura.ieslapaloma.com:443> ServerName websegura.ieslapaloma.com DocumentRoot /var/www/websegura SSLEngine On SSLCertificateFile /etc/ssl/certs/apache2.pem ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined </VirtualHost> <Directory "/var/www/websegura"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all SSLRequireSSL </Directory>

Posteriormente debemos habilitar el módulo ssl del servidor apache:

// Habilitar el módulo ssl 
# a2enmod ssl

Finalmente reiniciamos el servidor apache:

// Reinicio de apache
# /etc/init.d/apache2 restart

Probando el acceso a la página web segura

Nota: Si no tenemos un DNS funcionando, debemos incluir en /etc/hosts una línea para resolver localmente el nombre de nuestro servidor por su IP, porque en este caso, navegar con la dirección IP no funcionará. Ejemplo:
//Resolver el nombre localmente. Añadir en /etc/hosts
192.168.1.239 websegura.ieslapaloma.com
Para acceder a las páginas seguras de nuestro servidor web, tecleamos desde el navegador 'https://websegura.ieslapaloma.com'. Lo primero que se muestra es la alerta de seguridad que nos indica que el certificado no está emitido por una CA en la que confiamos:

Para continuar debemos ir a añadir una excepción > obtener certificado. Si pulsamos sobre el botón 'Ver' veremos la información tanto del certificado como de la entidad certificadora que lo firma:

Si aceptamos el certificado significa que, a pesar de estar firmado por una entidad certificadora que no es de confianza para el navegador (lo hemos firmado nosotros mismos), lo aceptamos. Tendremos que indicar al navegador si aceptamos el certificado para siempre o solo para ahora. Como tenemos la seguridad de que el certificado es bueno porque acabamos de crearle nosotros mismos, podemos aceptarlo para siempre y así el navegador no volverá a preguntarnos más sobre él ya que hemos indicado manualmente que confiamos en este certificado:

Ahora ya tenemos acceso a la web segura mediante el protocolo https lo que nos garantiza que la información de la página segura, antes de salir del servidor, ha sido cifrada y por tanto la trasferencia de datos desde el servidor a nuestro navegador se ha producido de forma segura. Al llegar a nuestro navegador, se han descifrado los datos. El candado cerrado que aparece abajo a la derecha en el navegador, indica que la trasferencia de datos se ha realizado de forma segura.

Como sabemos la ruta de la carpeta segura, si intentamos acceder a la carpeta segura utilizando el protocolo http yendo con el navegador a 'http://www.ieslapaloma.com/websegura', apache denegará el acceso ya que en '/etc/apache2/sites-available/default' se ha especificado que la carpeta debe ser accedida mediante https:

Carpetas seguras de usuario

Si en el centro existiera la necesidad de que los profesores dispongan de una carpeta web segura donde poder colocar contenidos accesibles vía SSL, como serán casos excepcionales, una solución sencilla es crear una carpeta dentro de la carpeta '/var/www/websegura' para dicho profesor y para que éste tenga acceso de forma autónoma a subir contenidos a dicha carpeta, se le puede crear un usuario adicional cuyo home sea la carpeta correspondiente, ejemplo, para el profesor Javier podemos crear otro usuario llamado javier-s (javier-seguro) cuyo home sea /var/www/websegura/javier. Podría subir contenidos por ftp utilizando el usuario javier-s. El acceso a los contenidos desde un navegador sería yendo a la dirección https://websegura.ieslapaloma.com/javier

Este proceso habría que hacerlo para todos los profesores o departamentos de nuestro centro que requieran de carpeta segura.

Archivos log de apache

Por defecto, apache utiliza dos archivos de registro: access.log y error.log que están almacenados en la carpeta /var/log/apache2.

En el archivo /var/log/apache2/access.log, apache va registrando todos los accesos que los PCs hacen al servidor web y en cada línea de dicho archivo va almacenando la IP, la fecha y la hora, el comando HTTP enviado por el cliente, la url solicitada y la versión del navegador y el sistema operativo. Analizando este archivo podemos ver las veces que se ha descargado una página o un archivo, o las IPs más activas. Este archivo de registro es utilizado por los programas que presentan estadísticas de acceso al servidor web como awstats.

En el archivo /var/log/apache2/error.log, apache registra todas las incidencias o errores que se van produciendo. Ejemplo, cuando un cliente solicita una página inexistente o cuando un cliente intenta entrar en una carpeta prohibida o protegida. Si estamos configurando algo en apache (carpetas privadas, carpetas seguras, servidores web virtuales, alias, etc...) y no funciona, una buena idea es hacer pruebas y examinar el archivo error.log ya que nos puede dar pistas para encontrar la solución a nuestro problema.

//Ver últimas 20 líneas del access.log para ver quien está accediendo
# tail -n 20 /var/log/apache2/access.log