Consejos para mejorar la seguridad de un sistema con Linux

El presente texto es más que nada una traducción de Tips to Secure Linux Workstation; (si sabes inglés, te aconsejo echar un ojo al enlace (o hacer un seguimiento de las respuestas mediante RSS 2.0), pues el autor tiene intención de ir añadiendo consejos en el futuro y puede estar más actualizado que este otro). Los ejemplos están pensados para Gentoo (distro que no uso, al menos de momento) pero sirven bien para cualquier otra distribución, teniendo cuidado de investigar las rutas hacia los archivos que se mencionan, pues pueden variar entre distribuciones.


He retocado la configuración de mi Gentoo Linux para que esté más protegido contra ataques remotos, y pensé en recopilar una lista de medidas de seguridad  contra los peligros de una conexión a Internet (sobre todo si es a tiempo completo). Obviamente, la lista es incompleta, pero seguramente podrá ayudar a mucha gente.

Configura y habilita un cortafuegos (firewall)

Esta es la principal defensa contra los ataques remotos. Es muy recomendable que habilites y configures uno. En Linux la infrastructura de firewall por defecto se llama netfilter / iptables. Por desgracia tiene sus complicaciones; los detalles no se pueden cubrir aquí, pero si lees en inglés puedes consultar este howto, o usar herramientas de configuración como m0n0wall (CLI), shorewall (CLI), y FireStarter (GUI).

Te aconsejo que cierres todas las conexiones entrantes y luego habras los puertos que necesites, como SSH o Bittorrent.

Evita cuentas de usuario fáciles de comprometer

La máquina no debe tener cuentas de usuario con contraseñas fáciles de adivinar, especialmente cuentas como test/test o guest/guest. Hay unos cuantos gusanos para Linux que tratan de exploitar esas cuentas usando SSH. Abre /etc/passwd y asegúrate de que no hay cuentas de este tipo; si las hay, bórralas (antes, guarda cualquier dato de su directorio home que pueda interesarte):

# userdel username

Si por algún motivo realmente necesitas una cuenta de este tipo, cambia su shell a /bin/false, para que si un atacante intenta usarla no sea capaz de hacer login con ella:

# chsh -s /bin/false username

Monta /tmp con la opción noexec

Muchos exploits y script kiddies tratan de descargar scripts a /tmp y ejecutarlos. Al montar /tmp como noexec, los scripts que puedan meterse allí no serán ejecutables, eliminando la eficacia de esos exploits y dejando a muchos script kiddies sin saber qué hacer. Aquí hay una línea de ejemplo para el archivo /etc/fstab:

/dev/hda5 /tmp ext2 noatime,noexec 0 0

Protección contra Fork Bombs

Las fork bombs son programas que se dedican a crear procesos hijos continuamente, hasta que los recursos del sistema se agotan. Realmente no son ataques remotos, ya que requieren un usuario local que ejecute la bomba; sin embargo, los usuarios pueden ser engatusados para realizar esto. Por ejemplo: la siguiente línea puede parecer inocente, pero al ejecutarla en un ordenador desprotegido, puede hechar abajo todo el sistema:

        :(){ :|:& }; :

AVISO: ¡NO ejecutes el código anterior en un sistema desprotegido! El código anterior comenzaría a ejecutar forks de forma exponencial hasta dejar inutilizable tu sistema.

Para proteger a un sistema contra estos ataques, se puede poner un límite al número de procesos permitidos a cada usuario. Esto se puede hacer desde el archivo  /etc/security/limits.conf. Añade estas dos líneas en él:

@users soft nproc 100
@users hard nproc 150

Estas líneas impiden que cualquiera en el grupo users tenga más de 150 procesos, y lanza una advertencia al llegar a los 100 procesos.

Puede que tu sistema no tenga un grupo users, por lo que tendrías que editar esas líneas de forma que se ajusten a tus necesidades.

Limitar el uso de su/sudo

su permite a usuarios normales conseguir actuar root, y sudo permite a root proporcionar más privilegios a los usuarios. Siempre es mejor dar sólo los privilegios que sean absolutamente necesarios a usuarios específicos, y limitar el uso de su a un grupo específico. En Gentoo Linux, sólo los usuarios del grupo wheel pueden usar su.

Al hacer esto, si el sistema se ve comprometido, por ejemplo, a través de una cuenta de pega (como una que tenga test como usuario y password), el atacante tendrá muchas menos oportunidades de causar daño.

Daemons

OpenSSH

Muchos usuarios necesitan conectar remotamene con sus máquinas, y suele ser muy común hacerlo a través de SSH. Por lo tanto, incluso si en el equipo está protegido por un firewall, el puerto de SSH necesita estar abierto para conexiones entrantes. Por ello, y por las enormes posibilidades que ofrece (control remoto, comunicación cifrada) SSH es un objetivo muy común para los atacantes remotos.

Aquí hay una lista de valores de configuración de OpenSSH para hacerlo más seguro contra los. El archivo de configuración de SSH (donde están estos parámetros) suele estar localizado en /etc/ssh/sshd_config

Port 22 (cambia el número)

El puerto por defecto de SSH es el 22, símplemente con cambiar este número evitarás unos cuantos ataques automatizados. Ten en cuenta que si aplicas esta configuración, deberás indicar explícitamente el nuevo puerto al tratar de conectar a dicho equipo, por ejemplo:

$ ssh -p nuevo_puerto usuario@equipo.dominio

Protocol 2

Asegúrate de que el protocolo es el 2. Es más seguro que la 1ª versión.

LoginGraceTime 2m
MaxAuthTries 6

Estas líneas de configuración protegen contra ataques por fuerza bruta.

PermitRootLogin no

Muchos atacantes prueban nombres al azar al tratar de crackear SSH, y como la cuenta de root es tan importante y existe en todas las máquinas, estará en la lista de objetivos. La línea superior desabilita el acceso como root mediante SSH, y hace que los atacantes mencionados se lleven un chasco. Si necesitas los privilegios de root por cualquier razón, regístrate con una cuenta regular, y luego usa su o sudo para conseguir privilegios de root.

PermitEmptyPasswords no

Puede añadirse accidentalmente un nombre de usuario sin contraseña en blanco. La línea de configuración superior impide la conexión con esas cuentas.

Además de las líneas deconfiguración indicadas, y en caso de que te conectes a tu servidor SSH desde la misma IP o desde un grupo de direcciones conocidas, puedes limitar las direcciones IP que pueden conectar a SSH mediante /etc/hosts.allow. Usa este formato:

sshd : 127.0.0.1 : allow
sshd : IP address here : allow
sshd : IP address here : allow
sshd : ALL : deny

MySQL

Si usas MySQL para desarrollo local, lo más aconsejable es limitar las conexiones a localhost (entre otras cosas). Para ello, ejecuta el script mysql_secure_installation; él se encargará de hacerlo.

Samba

Muchos necesitan Samba para compartir ficheros o impresoras por la red. Aquí hay una lista de líneas de configuración para mejorar la seguridad.

El archivo de configuración normalmente se encuentra en /etc/samba/smb.conf o /etc/smb.conf:

hosts allow = 127.0.0.1 192.168.0.0/24
hosts deny = 0.0.0.0/0

Con esto limitamos el acceso para conectar con Samba a equipos que estén en la misma red local que el servidor Samba (incluído este); modifica las líneas de arriba para que encajen con tus necesidades.

security = user

Establece la seguridad a nivel de usuario. En este caso, los usuarios para conectarse a los recursos compartidos por Samba deberán registrarse antes de poder acceder. Para agregar cuentas de usuario de Samba, usa esta orden:

# smbpasswd -a usuario

Y a continuación, se te pedirá que proporciones una contraseña para la nueva cuenta.

Por cierto, si te logueas a tu recurso compartido por Samba desde Windows, puedes establecer el usuario / contraseña de Samba para que coincidan con los de Windows, evitando tener que teclearlos al conectar al recurso compartido.

Un consejo final sobre Samba, NO compartas tu directorio home, si lo haces, estarás buscando problemas, crea un directorio para compartir, y añade ahí los ficheros que sea necesario.

Consejos generales

  • Mantén tu sistema actualizado, especialmente cuando aparezcan vulnerabilidades en paquetes que uses. Todas las distribuciones importantes tienen una lista de mensajes relacionados con la seguridad, subscríbete a la que corresponda.

  • Desactiva los servicios que no necesites. Además de ahorrar recursos, esto reduce el número de posibles agujeros de seguridad en tu sistema.

  • Comprueba regularmente la salida de estas órdenes:
    # vi /var/log/messages (visualiza el log del sistema).
    # ps aux (muestra los procesos en ejecución).
    # netstat -anp (muestra las conexiones activas).

  • No confies en la seguridad por la oscuridad (pensar que algo está seguro símplemente porque “nadie” lo conoce); al menos, no como la única medida. Puede ser una medida adicional de seguridad, pero si tus defensas dependen de esto, tarde o temprano tendrás problemas.


Si alguien tiene algún otro consejo que dar sobre seguridad, que no dude en comentarlo, ¡así podremos hacer que la recopilación vaya mejorando entre todos!

Hasta el próximo post😉

4 Comments »

  1. 1
    Matias Says:

    Muy buenos consejos!!

    Like

  2. 2
    maximi89 Says:

    Muy buen post!
    realmente interesante…

    añade a http://www.zerial.cl

    otra web muy buena…

    Like

  3. 3
    max Says:

    Hoops!!!
    era http://www.zerial.org

    Like

  4. 4
    Albes Says:

    Muy buenos trucos ó tips..
    cuando utilizamos en
    hosts allow = 192.168.0.0/24
    estamos definiendo un rango de equipos
    en el caso en particular habría 24 equipos permitidos
    Gracias

    Like


RSS Feed for this entry

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: