sábado, 23 de mayo de 2009

SITIO WEB CON APACHE2 Y SSL


La aplicación de seguridad en nuestros sitios Web debe ser una práctica constante y sobretodo cuando existen ambientes hostiles como Internet o Intranets.

En este artículo, muestro cómo realizar la instalación de un certificado autofirmado en un sitio web creado en mi máquina local.

Para este ejemplo consideramos la siguiente información:





  • Sistema operativo: Por supuesto! ... GNU/Linux Debian Lenny :D
  • hostname: jgdu-laptop
  • ip: 192.168.1.114
  • Sólo se puede configurar un sitio seguro por cada dirección IP configurada en el sistema.
  • Suponemos que está instalado el servidor web "Apache 2".
A continuación los pasos necesarios:
  1. Identificar correctamente la máquina que tiene tendrá el sitio Web seguro:
    Esto es necesario revisarlo dado que es probable que nuestra máquina de prueba no esté registrada en ningún servidor de nombres de dominio. Entonces verificamos que el archivo "/etc/hosts" contenga la entrada correspondiente asociando al IP adecuado:
    ...
    192.168.1.114 jgdu-laptop jgdu-laptop
    ...
  2. Creación del certificado digital:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2
    root@jgdu-laptop:/etc/apache2# mkdir certs
    root@jgdu-laptop:/etc/apache2#cd certs
    ... aquí viene la creación del certificado ...
    root@jgdu-laptop:/etc/apache2# openssl req $@ -new -x509 -days 365 -nodes -out jgdu-laptop.crt -keyout jgdu-laptop.key
    ... se responden unas preguntas sencillas previas a la generación de los archivos.
  3. Verificar la creación de los archivos:
    root@jgdu-laptop:/etc/apache2# ls
    ... deben aparecer los siguientes archivos ...
    jgdu-laptop.crt jgdu-laptop.key
  4. Habilitar el módulo "SSL" en el servidor Web:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/mods-available
    root@jgdu-laptop:/etc/apache2# a2enmod ssl
  5. Configurar el sitio Web SSL predeterminado:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available
    root@jgdu-laptop:/etc/apache2# vim default-ssl
    Ubicar las directivas del certificado y establecer las rutas adecuadas a los archivos generados previamente.
    ...
    SSLCertificateFile /etc/apache2/certs/jgdu-laptop.crt
    SSLCertificateKeyFile /etc/apache2/certs/jgdu-laptop.key
    ...
  6. Habilitar el sitio Web con SSL:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available/
    root@jgdu-laptop:/etc/apache2# a2ensite default-ssl
  7. Reinicar el servicio Web Apache2:
    root@jgdu-laptop:/etc/apache2# /etc/init.d/apache2 restart
  8. Probar el acceso al sitio seguro con un explorador visitando la página:
    https://jgdu-laptop/
Si deseamos que todo el tráfico de nuestro sitio Web se realice a través de una conexión segura, debemos habilitar el módulo "Rewrite" en el Apache2 y configurar el sitio por defecto "default" ubicado en "/etc/apache2/sites-available/default" con la regla de re-escritura siguiente:

RewriteEngine On
Options +FollowSymlinks
rewriteCond %{SERVER_PORT} 80
rewriteRule ^(.*)$ https://oe.asignaturas.usb.ve/moodle$1 [R,L]

Esta información se coloca dentro de las directivas "" pero fuera de los "".

Espero sea de utilidad.

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://crysol.org/es/node/198
  2. http://www.debian-administration.org/article/Setting_up_an_SSL_server_with_Apache2
  3. http://www.gpltarragona.org/archives/318

jueves, 7 de mayo de 2009

VSFTPD: Very Secure File Transfer Protocol Daemon

En la práctica, realmente no soy un usuario consecuente con el uso de FTP para realizar la transferencia de archivos en ningún escenario que requiera usuarios, claves y permisos. Prefiero alternativas como SSP o DAV.

Sin embargo, son muchas las personas y programas que todavía mantienen el uso de este protocolo.

Es por esto que he escogido "VSFTPD", que al menos considera unas cuantas estrategias de seguridad para la trasnferencia de información entre máquinas de una red.

El "Demonio del protocolo de transferencia de archivos muy seguro" ofrece una serie de características interesantes para fortalecer las debilidades del FTP tradicional. Entre ellas está la integración con sistemas de bases de datos como MYSQL y PAM.

Aquí vamos con la instalación:
  1. Agregar el usuario que emplearemos para acceder vía FTP al sistema:
    # adduser usuario-ftp
    Ingresamos algunos datos descriptivos y la clave de acceso.
  2. Instalar el programa VSFTPD:
    # aptitude install vsftpd
  3. Editamos el archivo de configuración:
    # vim /etc/vsftpd.conf
    El archivo tiene un montón de opciones, aquí colocaré cómo he dejado el mío para que los usuarios queden "enjaulados" y no puedan estar husmeando por mi sistema:

    listen=YES
    #listen_ipv6=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    ftpd_banner=Servicio FTP.
    chroot_local_user=YES
    chroot_list_enable=NO
    chroot_list_file=/usr/local/etc/vsftpd/vsftpd.chroot_list
    ls_recurse_enable=YES
    secure_chroot_dir=/var/run/vsftpd
    pam_service_name=vsftpd
  4. Si quieren ampliar la información de estos parámetro y muchos otros basta con que revisen el manual que trae el programa:
    # man vsftpd.conf
  5. Indicar los usuarios que serán "enjaulados" en el archivo "vsftpd.chroot_list":
    # vim /usr/local/etc/vsftpd/vsftpd.chroot_list
    Agregamos el nombre del usuario "usuario-ftp" sin las comillas.
  6. Reiniciar el servicio "vsftpd":
    # /etc/init.d/vsftpd restart
Las pruebas son muy sencillas. Basta con ejecutar desde cualquier máquina el comando "ftp" e indicar el usuario y claves creados previamente:
  1. Iniciar la sesión FTP:
    # ftp 192.168.1.100
    Ingresamos usuario y clave.
  2. Podemos intentar subir un archivo con el comando "put" y luego eliminarlo con "delete".
  3. También si ejecutamos el comando "hash", se mostrará una marca "#" por cada 1024 bytes (1k) transferido.
Interesante! :D

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://linuxsix.blogspot.com/2008/10/servidor-ftp-con-vsftpd.html
  2. http://www.alcancelibre.org/staticpages/index.php/09-como-vsftpd
  3. http://alien2thisworld.net/sitePages/tutorials/vsftpd_virtual_users_setup.html
  4. http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/
  5. http://www.howtoforge.com/vsftpd_mysql_debian_etch