Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

jueves, 27 de febrero de 2014

vsftpd con conexiones seguras SSL/TLS/SFTP


En dos artículos anteriores expliqué como instalar un vsftpd, crear usuarios virtuales, que estuvieran enjaulados y validarlos tanto en una base de datos Berkeley o MySQL:

    Ahora lo que quiero mostraros es como hacer que nuestra conexión sea segura. Esto es, validarse y transferir datos de forma encriptada.

    Lo primero es crearnos una clave:


    req -x509 -nodes -days 365 -newkey rsa:1024  -keyout /etc/vsftpd/vsftpd.pem  -out /etc/vsftpd/vsftpd.pem

    Ahora añadimos (o modificamos) a nuestro ya conocido /etc/vsftpd.conf estas directivas:

    ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    ssl_ciphers=HIGH

    require_ssl_reuse=NO

    ssl_ciphers=HIGH es necesario si queremos que Filezilla entre, ya que ha dejado de dar soporte a DES-CBC3-SHA, que es el que viene por defecto en vsftpd.
    require_ssl_reuse=NO es necesario si queremos usar algunos clientes ftp como por ejemplo FireFTP (complemento de cliente ftp para Firefox).

    Si habéis seguido los tres artículos, ahora os encontrareis en disposición de instalar un servidor ftp muy seguro como es el vsftpd, con usuarios virtuales, enjaulados, validados a una base de datos MySQL y con conexión totalmente encriptada. 


    miércoles, 26 de febrero de 2014

    vsftpd con usuarios virtuales enjaulados validados en MySQL

    En un artículo anterior explique como instalar un vsftpd y crear usuarios enjaulados. Para validar a los usuarios, usábamos una base de datos Berkeley pero ya avisaba de lo engorroso a la hora de añadir o borrar usuarios. Para ello podemos validar a nuestros usuarios en una base de datos mysql. En este artículo no enseñaré a instalar una base de datos MySQL (esta bien documentado en la red):

    Instalamos el plugin mysql para pam:


    apt-get install libpam-mysql


    Luego creamos la base de datos, un usuario de consulta y la tabla que contendrá los usuarios y las contraseñas:

    $ mysql -u root -p

    CREATE DATABASE vsftpd;
    GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'tupasssecreto';
    FLUSH PRIVILEGES;

    USE vsftpd;

    CREATE TABLE `accounts` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 30 ) NOT NULL , `pass` VARCHAR( 50 ) NOT NULL , UNIQUE (`username`) ) ENGINE = MYISAM ;


    Para finalizar modificaremos el /etc/pam.d/vsftpd para que se valide con MySQL:

    cat /etc/pam.d/vsftpd
    session optional pam_keyinit.so force revoke
    auth required pam_mysql.so user=vsftpd passwd=tupasssecreto host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3
    account required pam_mysql.so user=vsftpd passwd=
    tupasssecreto host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3

    Para crear nuevos usuarios bastará con entrar en el MySQL y poner:

    INSERT INTO accounts (username, pass) VALUES('usuario', md5('passecreto'));


    Y no olvidarse de crear la carpeta de usuario y darle los permisos adecuados.

    martes, 25 de febrero de 2014

    Instalar vsftpd y usuarios virtuales (Berkeley) y enjaulado en Ubuntu 12.04.04 (chroot virtual user in vsftpd)


    vsftpd, son las siglas de  "Very Secure FTP Daemon".Es un servidor FTP para sistemas GNU/Linux o Unix. Esta licenciado bajo GNU General Public License. soporta IPv6 y SSL.
    vsftpd soporta de manera explícita (desde la 2.0.0) y implícita (desde 2.1.0) FTPS.
    vsftpd es el servidor FTP por defecto de las distribuciones Ubuntu, CentOS, Fedora, NimbleX, Slackware y RHEL Linux.

    Instalación

    apt-get install vsftpd libdb4.7 libdb4.7-dev db4.7-util

    Configuración

    Para editar la configuración del vsftpd es tan facil como editar las preferencias que queremos en el archivo /etc/vsftpd.conf . Habitualmente nos fijaremos en estas opciones:

    cat vsftpd.conf
    listen=YES
    anonymous_enable=NO
    guest_enable=YES
    guest_username=ftp

    local_enable=YES
    write_enable=YES
    user_config_dir=/etc/vsftpd/users
    dirmessage_enable=YES
    use_localtime=YES
    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    connect_from_port_20=YES
    local_umask=022
    ftpd_banner=Welcome to a very very secret service.

    chroot_list_enable=YES

    chown_uploads=YES
    chown_username=ftp
    virtual_use_local_privs=YES
    secure_chroot_dir=/var/run/vsftpd/empty
    user_sub_token=$USER
    local_root=/vsftpd/$USER
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/private/vsftpd.pem



    Lo que hace cada opción se ve muy bien explicado en los comentarios del propio archivo.Os aconsejo hacer un 'man vsftpd.conf'

    Como lo que queremos son usuarios virtuales, y no usuarios del sistema, lo que haremos es crear una base de datos con usuarios-contraseñas y le diremos al vsftpd que use dicha base de datos. Podemos usar MySQL o Berkeley.db. En muchos casos Berkeley nos será suficiente aunque usar MySQL és más versátil a la hora de añadir y borrar usuarios facilmente. Para este tutorial usaremos Berkeley. Primero creamos un txt con el formato siguiente:

    cat usuarios-ftp.txt
    eddy
    momami
    paco
    potroski

    En donde los usuarios son eddy (con contraseña momami) y paco  (con contraseña potroski).

    Ahora creamos la base de datos Berkeley:

    db4.7_load -T -t hash -f usuarios-ftp.txt /etc/vsftpd_login.db

    luego le damos los permisos adecuados a /etc/vsftpd_login.db:

    chmod 600 /etc/vsftpd_login.db

    El archivo de usuarios-ftp.txt lo podemos borrar o hacer una copia de seguridad por si tuviéramos que añadir nuevos usuarios. También circula por internet un script que automatiza el gestionar usuarios de una base de datos Berkeley.
    Ahora tendremos que hacer que el sistema de autenticación PAM lea para vsftpd de nuestra base de datos:

    cat /etc/pam.d/vsftpd
    auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash
    account required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash


    Con esto ya tendremos a nuestros usuarios virtuales creados y validados. Como hemos puesto la directiva local_root=/vsftpd/$USER del /etc/vsftpd.conf, una vez validado el usuario irá a mirar ese directorio (en donde $USER es una variable que contiene el nombre de usuario). Así pues, debe existir y con privilegios para el usuario ftp, tal como hemos indicado en la directiva guest_username=ftp :

    mkdir -p /vsftpd/{eddy,paco}
    chown -R ftp:ftp /vsftpd

    Ahora ya tenemos usuarios validados y con carpeta personal. Lo que nos interesa ahora es enjaularlos en dicha carpeta para que no puedan salir. Esto lo hacemos con la directiva del /etc/vsftpd.conf siguiente:

    chroot_list_enable=YES

    Con esta directiva lo que hacemos es enjaular a todos los usuarios que esten en la lista /etc/vsftpd.chroot_list . Así pues en nuestra intencion de que los usuarios virtuales eddy y paco entren en nuestro ftp, demanera enjaulada pondremos lo siguiente en ese archivo:
     
    cat /etc/vsftpd.chroot_list
    eddy
    paco



    Y con esto daríamos por finalizada la configuración de nuestro vsftpd con usuarios virtuales y enjaulados.







    miércoles, 19 de febrero de 2014

    Bloquear usuario en Dovecot y Samba validando contra LDAP mediante sambaAcctFlags


    En algunos escenarios en donde tenemos la validación de usuarios centralizada mediante un directorio LDAP (como por ejemplo OpenLDAP), es posible que cuando queramos bloquear a un usuario queramos que tenga efecto en varios servicios.

    En este artículo no trataré de explicar que es Samba ni como se instala un servidor IMAP como Dovecot. Tampoco como hacer que los usuarios validen contra el LDAP. Lo que busco es explicar como una vez esto funcione, que algunos usuarios estén bloqueados.

    Imaginemos que tenemos un usuario que se valida en LDAP y que tiene acceso al correo electrónico mediante Dovecot y acceso a un almacén de discos mediante Samba.

    Samba

    (ver Artículo anterior relacionado con Samba)
    Si tenemos Samba instalado nos hará falta el smbldap-tools para que interactue con el directorio ldap:

    apt-get install smbldap-tools

    Si por ejemplo queremos que no entre en un recurso samba y tenemos en nuestro directorio LDAP el samba3.schema, marcaremos el sambaAcctFlags con una D, es decir, desactivaremos la cuenta:

    FlagDescription
    DAccount is disabled.
    HA home directory is required.
    IAn inter-domain trust account.
    LAccount has been auto-locked.
    MAn MNS (Microsoft network service) logon account.
    NPassword not required.
    SA server trust account.
    TTemporary duplicate account entry.
    UA normal user account.
    WA workstation trust account.
    XPassword does not expire.
    (Fuente samba.org)

    De esta manera al intentar entrar en el samba no le dejará. 

    Dovecot

    En dovecot lo podemos hacer mediante el parámetro user_filter del archivo /etc/dovecot/dovecot-ldap.conf . Por ejemplo:

    user_filter = (&(objectClass=posixAccount)(uid=%u)(!(|(sambaAcctFlags=[UD])(sambaAcctFlags=[DU]))))

    Lo que hace este filtro es validar el uid del usuario y mirar que NO tenga el la bandera [UD] o [DU]. Muchas veces nos encontraremos el atributo sambaAcctFlags con 11 carácteres (casi todos ellos con espacios vacíos). Así que tendremos que tenerlo en cuenta en nuestras búsquedas.

    viernes, 14 de febrero de 2014

    Instalar Dovecot+LDAP en Ubuntu

    Dovecot es un servidor de IMAP y POP3 de código abierto para sistemas GNU/Linux / UNIX-like, escrito fundamentalmente pensando en la seguridad. Desarrollado por Timo Sirainen, Dovecot fue publicado por primera vez en julio del año 2002. Dovecot apunta fundamentalmente a ser un servidor de correo de código abierto ligero, rápido, fácil de instalar y sobre todo seguro.
    (Fuente Wikipedia)



    Para instalarlo no tiene más misterio que hacerlo mediante el repositorio oficial de Ubuntu. 

    sudo apt-get install dovecot-imapd

    Configurarlo es básicamente darle un vistazo al archivo /etc/dovecot/dovecot.conf y rellenarlo según nuestras preferencias. Configuración a destacar:

    Uso de SSL


    ssl = required
    ssl_ca =
    ssl_cert = ssl_key =

    Uso de LDAP


    userdb {
      args = /etc/dovecot/dovecot-ldap.conf
      driver = ldap
    }

    passdb {
      args = /etc/dovecot/dovecot-ldap.conf
      driver = ldap
    }


    Ahora editamos el archivo /etc/dovecot/dovecot-ldap.conf con la configuración de nuestro LDAP:
    hosts = openldap.servidor.es
    debug_level = -1
    auth_bind = yes
    auth_bind_userdn = uid=%u,ou=People,dc=cttc,dc=es
    ldap_version = 3
    base = uid=%u, ou=People, dc=cttc , dc=es
    scope = subtree


    Podemos comprobar la configuración mediante doveconf -a

    Habría que configurarlo con la base y userdn particular de cada uno. Con ello ya nos debería funcionar correctamente.






    That u don't know what you've got 'til it's gone