Sugerencias de seguridad en sistemas GNU/Linux

Bueno, este post lo venía preparando para mi blog desde hace algún tiempo que me lo sugirieron en DesdeLinux, y por falta de tiempo no había podido, o de ganas. Si soy algo vago 😀. Pero ahora les va en strike, como decimos en Cuba…

Esto es una recopilación de normas de seguridad básicas para los administradores de sistemas, en este caso, para los que como yo administramos redes/sistemas basados en GNU/Linux… Pueden haber más y de hecho hay más, esto solo es una muestra de mis andanzas por el mundo linuxero…

0- Mantener actualizados nuestros sistemas con los últimos updates de seguridad.

0.1- Listas de correo de actualizaciones críticas [Slackware Security Advisor, Debian Security Advisor, en mi caso]

1- Cero acceso físico a los servers por parte de personal no autorizado.

1.1- Aplicar password al BIOS de nuestros servers

1.2- No boot por CD/DVD

1.3- Password en el GRUB/Lilo

2- Buena política de passwords, caracteres alfanuméricos y otros.

2.1- Envejecimiento de los passwords[Password Aging] con el comando “chage”, así como número de días entre cambio de password y última fecha de cambio.

2.2- Evitar el uso de password anteriores:

en /etc/pam.d/common-password

password sufficient pam_unix.so use_auth ok md5 shadow remember 10

Así cambias el password y te recuerda los ultimos 10 passwords que tenía el usuario.

3- Buena política de gestión/segmentación de nuestra red[routers, switches, vlans] y firewall, así como reglas de filtrado INPUT, OUTPUT, FORWARD[NAT, SNAT,DNAT]

4- Habilitar el uso de shells[/etc/shells]. Los usuarios que no deban loguearse en el sistema les toca /bin/false o /bin/nologin.

5- Bloquear usuarios cuando el login falla[faillog], así como controlar la cuenta de usuario del sistema.

passwd -l pepe -> bloquear al usuario pepe
passwd -v pepe ->  desbloquear al usuario pepe

6- Habilitar el uso de “sudo”, NUNCA loguearnos como root por ssh, “NUNCA”. De hecho se debe editar la configuración de ssh para lograr este propósito. Use llaves públicas/privadas en sus servers con sudo.

7- Aplicar en nustros sistemas el “Principio del privilegio mínimo“.

8- Chequear nuestros servicios cada cierto tiempo[netstat -lptun], para cada uno de nuestros servers. Agregar herramientas de monitoreo que nos puedan ayudar en esta tarea[Nagios, Cacti, Munin, Monit, Ntop, Zabbix].

9- Instalar IDSs, Snort/AcidBase, Snotby, Barnyard, OSSEC.

10- Nmap es tu amigo, úsalo para verificar tu subred/subredes.

11- Buenas prácticas de seguridad en OpenSSH, Apache2, Nginx, MySQL, PostgreSQL, Postfix, Squid, Samba, LDAP[los que la mayoría usa] y algún que otro servicio que necesites en tu red.

12- Encriptar toda comunicación mientras sea posible en nuestros sistemas, SSL, gnuTLS, StarTTLS, digest, etc… Y si manejas información sensible, encripta tu disco duro!!!

13- Actualizar nuestros servidores de correo con las últimas reglas de seguridad, listas negras y antispam.

14- Logueo de actividad en nuestros sistemas con logwatch y logcheck.

15- Conocimiento y uso de herramientas como top, sar, vmstat, free, entre otras.

sar -> system activity report
vmstat -> procesos, memoria, systema, i/o, actividad del cpu, etc
iostat -> cpu i/o status
mpstat -> multiprocessor status and usage
pmap -> uso de memoria por los procesos
free -> memoria
iptraf ->  tráfico en tiempo real de nuestra red
ethstatus -> console-based ethernet statistics monitor
etherape -> graphical network monitor
ss -> socket status[tcp socket info, udp, raw sockets, DCCP Sockets]
tcpdump -> Análisis detallados de tráfico
vnstat -> network traffic monitor of selected interfaces
mtr -> herramienta de diagnóstico y análisis de sobrecarga en las redes
ethtool -> stats about network cards

Por ahora es todo. Sé que existen mil y una sugerencias de seguridad más en este tipo de entorno, pero, estas son las que más me han chocado de cerca, o que en algún momento he tenido que aplicar/ejercer en algún ambiente de los que he administrado.

Un abrazo y que ojalá les sirva 😀


Categorías

Redes/Servidores

Nadando en aguas linuxeras desde el 2001-2002 con un RedHat 7.2. He pasado por muchas distros, pero me mantengo entre Slackware y Debian. Amo la línea de comandos, el software libre y toda cultura geek asociada. Friky deathmetalero, el primero siempre en ayudar o dar ideas, programador de PHP y alguito de Python. Linux user: 445535. Actualmente Técnico en Electrónica y Administrador de Red.

25 comentarios

  1.   Koratsuki dijo

    Invito a que en los comentarios nos cuenten de alguna que otra regla que hayan implementado aparte de las ya mencionadas, para aumentar el conocimiento de nuestros lectores 😀

    1.    Yukiteru dijo

      Bueno yo agregaría:

      1.- Aplicar reglas sysctl para evitar el acceso dmesg, /proc, SysRQ, asignar PID1 al core, habilitar protecciones a hard y soft symlinks, protecciones a las pilas TCP/IP tanto para IPv4 como para IPv6, activar full VDSO para maxima randomización de punteros y asignaciones de espacios de memoria y mejorar la fortaleza contra buffer overflows.

      2.- Crear muros de fuego del tipo SPI (Stateful Package Inspect) para evitar que conexiones no creadas o permitidas con anterioridad tenga acceso al sistema.

      3.- Si no tienes servicios que ameriten conexiones con privilegios elevados desde remoto, simplemente revoca el acceso a los mismos usando access.conf, o en su defecto habilitar el acceso a solo a un determinado usuario o grupo.

      4.- Usar hard limits para evitar que accesos a ciertos grupos o usuarios pueden desestabilizar tu sistema. Muy útil en ambientes donde hay multiusuario real activo en todo momento.

      5.- TCPWrappers es tu amigo, si estas en un sistema con soporte para el mismo, usarlo no te vendría mal, asi podrás denegar el acceso desde cualquier hosts a menos que ya este configurado previamente en el sistema.

      6.- Crear claves SSH RSA de al menos 2048 bits o mejor de 4096 bits con claves alfanúmericas de mas de 16 caracteres.

      7.- ¿Cuán world-writable eres? Revisar los permisos de lectura-escritura de tus directorios no está nada mal y es la mejor forma de evitar accesos no autorizados en entornos de multiusuarios, sin contar que hace más dificil que ciertos accesos no autorizados puedan obtener acceso a información que tu no quieres que nadie más vea.

      8.- Montar toda partición externa que no lo amerite, con las opciones noexec, nosuid, nodev.

      9.- Usar herramientas como rkhunter y chkrootkit para revisar de forma periodica que el sistema no tenga un rootkit o malware instalado. Una medida prudente si eres de los que instalas cosas desde repositorios no seguros, desde PPA o simplemente vives compilando código desde sitios no confiables.

      1.    Koratsuki dijo

        Uhmmm, delicioso… Buen comentario, añadan chicos… 😀

    2.    William Moreno Reyes dijo

      Aplicar un Mandatory Access Control con SElinux?

  2.   ArmandoF dijo

    muy buen articulo

    1.    Koratsuki dijo

      Gracias amigo 😀

  3.   joaco dijo

    Hola y si soy un usuario normal, ¿me conviene usar su o sudo?
    Yo uso su porque no me gusta sudo, por el hecho de que cualquiera que tenga mi contraseña de usuario puede cambiar lo que quiera en el sistema, en cambio con su no.

    1.    Koratsuki dijo

      En tu PC no molesta usar su, puedes usarlo sin problemas, en los servidores, se recomienda encarecidamente deshabilitar el uso de su y usar sudo, mucho dicen que es por el hecho de auditar quien ejecutó que comando y sudo hace esa tarea… yo en lo particular, en mi pc uso su, tal como tú…

      1.    joaco dijo

        Claro, no sé bien como funciona en los servidores. Aunque, me parece que sudo tenía la ventaja de que podés dar privilegios al usuario de otra computadora, si no me equivoco.

    2.    andrew dijo

      Interesante articulo, yo encripto con gnu-gpg algunos archivos, como es eso del privilegio minimo, en caso de que quiera ejecutar por ejemplo un binario de procedencia desconocida perdido en los inmensos mares de informacion en el disco ¿como le quito acceso a ciertas funciones?

      1.    Koratsuki dijo

        Esa parte te la debo, aunque creo que solo deberias ejecutar como sudo/root, programas que sean confiables, es decir que vengan de tu repo…

      2.    Yukiteru dijo

        Recuerdo haber leido que hay una forma en como capar las capacidades root en algún manual sobre GNU/Linux y UNIX, si lo encuentro lo coloco 😀

      3.    Yukiteru dijo

        @andrew acá está el articulo que mencione y algo más de ayuda

        http://www.cis.syr.edu/~wedu/seed/Labs/Capability_Exploration/Capability_Exploration.pdf

        http://linux.die.net/man/7/capabilities

        https://wiki.archlinux.org/index.php/Capabilities

      4.    Clown dijo

        y las jaulas chown para ejecutar binarios desconocidos?

    3.    Yukiteru dijo

      Usar sudo en todo momento es mucho mejor.

    4.    elav dijo

      O bien puedes usar sudo, pero limitando el tiempo en que se recuerda la contraseña..

  4.   Kevin Rodriguez dijo

    Herramientas similares que utilizo para monitorear la pc, “iotop” como sustituto de “iostat”, “htop” exelente “administrador de tareas”, “iftop” monitoreo de ancho de banda.

  5.   monitolinux dijo

    muchos creerán que eso es exagerado, pero ya he visto ataques para incluir un servidor a una botnet.

    https://twitter.com/monitolinux/status/594235592260636672/photo/1

    pd: mendigos chinos y sus intentos de hackeo a mi servidor.

  6.   clown dijo

    algo que también conviene es usar jaulas chown para los servicios, así si por alguna razón son atacadas no comprometerían al sistema.

  7.   Diab dijo

    El uso del comando también ps es excelente para monitorizar y podría ser parte de la acciones para revisar fallos en seguridad. ejecutar ps -ef lista todos los procesos, es similar a top sin embargo muestra algunas diferencias. la instalación de Iptraf es otra herramienta que puede funcionar.

  8. Buen aporte.

    Yo agregaría: SELinux o Apparmor, según la distro, siempre habilitados.

    Por mi propia experiencia me dí cuenta que es una mala práctica deshabilitar esos componentes. Casi siempre lo hacemos cuando vamos a instalar o configurar un servicio, con la excusa de que se ejecute sin problemas, cuando realmente lo que deberíamos es aprender a manejarlos para que permita ese servicio.

    Un saludo.

  9.   ¿¿GnuLinux?? dijo

    1.¿¿como encriptar todo el sistema de archivos?? ¿¿vale la pena??
    2.¿¿se tiene que desencriptar cada que se va a actualizar el sistema??
    3. ¿¿Encriptar todo el sistema de archivos de la maquina es lo mismo que encriptar cualquier otro archivo ??

    1.    Yukiteru dijo

      ¿Como se nota que sabes de lo que hablas?

  10.   NauTiluS dijo

    También, se puede enjaular programas y hasta multiples usuarios. Aunque hacer esto es mas trabajo, pero si algo pasase, y tenias una copia previa de esa carpeta, solo es pegar y cantar.

  11.   toño dijo

    La mejor y más conveniente política de seguridad es no ser paranoico.
    Pruebenla,es infalible.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.