Etiqueta: tutorial

  • Blindando SSH

    SSH (Secure SHell) nos permite acceder a máquinas remotas de forma segura, gracias a que cifra toda la información que transmite, para abrir un terminal, iniciar una sesión gráfica o enviar y recibir ficheros.

    En este mini-tutorial vamos a ver como blindar un servidor OpenSSH, usado frecuentemente en sistemas Unix, para protegernos de los ataques más comunes.

    Cambiar el puerto por defecto

    SSH usa por defecto el puerto 22, esto es algo que todos los posibles juankers y script kiddies que traten de hacerse con el control de tu servidor saben, por lo que es una buena idea cambiarlo.

    Para modificar esta opción y las siguientes editaremos el fichero de configuración shd_config, que por defecto se encuentra en el directorio /etc/ssh/. Utilizad vuestro editor de texto favorito, aquí usaré nano:

    sudo nano /etc/ssh/sshd_config

    Tenemos que usar un puerto cualquiera por encima del 1024, así que escoged el que queráis. En este ejemplo usaré el 3729, así que la opción Port del fichero de configuración quedaría así:

    Port 3729

    Apuntadlo para abrirlo en el router y poder especificarlo en el cliente al conectaros con la opción -p.

    Desactivar el Protocolo 1

    La primera versión del protocolo SSH tiene varias vulnerabilidades conocidas y por tanto no hay razón para permitir su uso.

    Buscamos la opción Protocol y nos aseguramos de que quede así:

    Protocol 2

    De esta forma sólo aceptaremos conexiones que usen la segunda versión del protocolo SSH.

    Deshabilitar el acceso del superusuario (root)

    No es muy recomendable permitir el acceso remoto directo al usuario root, por lo que lo desactivaremos:

    PermitRootLogin no

    Una vez logueados con otro usuario podremos cambiar a root usando su.

    Definir un número máximo de intentos de conexión

    Muchos de los ataques llevados a cabo por los malvados script kiddies se basan en fuerza bruta, estableciendo un número máximo de intentos de conexión lograremos disuadirles o, al menos, retrasar su «sofisticado» intento de hacking:

    MaxAuthTries 2

    El número de intentos de logueo fallidos antes de desconectar ya depende de la torpeza o mala memoria de los usuarios legítimos del sistema 🙂 .

    Restringir el acceso a determinados usuarios

    Si un usuario de nuestro sistema no necesita acceder de forma remota al mismo, no hay razón para permitírselo. Para hacerlo modificaremos la siguiente opción:

    AllowUsers yo

    De esta forma el usuario «yo» sería el único que puede hacer login remoto de forma directa a nuestro sistema.

    Activar el modo estricto

    La opción StrictModes debe activarse para que, por ejemplo, los usuarios despistados que establecen permisos de escritura para todo el mundo en sus archivos y directorios no se lleven una desagradable sorpresa cuando otro usuario los modifique 😛 .

    StrictModes yes

    Impedir la conexión al servidor gráfico

    Si nuestro servidor no tienen entorno gráfico instalado, o no queremos que los usuarios se conecten a él, definiremos esta opción en el fichero de configuración:

    X11Forwarding no

    Desactivar todo autenticación basada en .rhosts

    La autenticación basada en ficheros .rhosts está obsoleta y es insegura, así que la desactivaremos:

    IgnoreRhosts yes
    HostbasedAuthentication no
    RhostsAuthentication no
    RhostsRSAAuthentication no

    Ahora guardamos los cambios realizados en el fichero de configuración y reiniciamos el servidor para que sean efectivos:

    sudo /etc/init.d/ssh restart

    Una vez seguidos todos estos pasos tendremos funcionando un servidor OpenSSH medianamente seguro al que podremos conectarnos usando el comando ssh y especificando el puerto destino de la siguiente forma:

    ssh -p 3729

    Donde 3729 es el puerto usado en este ejemplo.

    Si queréis más información sobre las diferentes opciones de configuración del servidor OpenSSH, podéis consultad las páginas del manual en internet o ejecutar:

    man sshd_config

    Para terminar, una frase de Gene Spafford sobre seguridad:

    El único sistema seguro es aquél que está apagado en el interior de un bloque de hormigón protegido en una habitación sellada rodeada por guardias armados.

  • Limpiando el historial de un terminal en GNU/Linux

    Cada vez que ejecutamos un comando en una consola BASH (u otras similares), éste se guarda en un fichero para que posteriormente podamos recordarlo usando las flechas de desplazamiento superior e inferior.

    Podemos visualizar este registro con el comando:

    $ history

    Esta función es realmente útil y ahorra un montón de tiempo, sin embargo, si hacemos uso de una máquina con una cuenta de usuario compartida por varias personas, podemos no querer dejar huellas de los comandos que hemos ejecutado, para lo cual podemos limpiar el archivo que mantiene el historial (~/.history o ~/.bash_history) o mejor, dejar que el siguiente comando lo haga por nosotros:

    $ history -c

    El parámetro «-c» borra todas las entradas del historial para que nadie pueda saber que hemos estado ejecutando en nuestro amado intérprete de comandos 😀 .

    Fuente: nixCraft