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…
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 😀
26 comentarios, deja el tuyo
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 😀
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.
Uhmmm, delicioso… Buen comentario, añadan chicos… 😀
Aplicar un Mandatory Access Control con SElinux?
muy buen articulo
Gracias amigo 😀
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.
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ú…
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.
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?
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…
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 😀
@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
y las jaulas chown para ejecutar binarios desconocidos?
Usar sudo en todo momento es mucho mejor.
O bien puedes usar sudo, pero limitando el tiempo en que se recuerda la contraseña..
Herramientas similares que utilizo para monitorear la pc, «iotop» como sustituto de «iostat», «htop» exelente «administrador de tareas», «iftop» monitoreo de ancho de banda.
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.
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.
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.
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.
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 ??
¿Como se nota que sabes de lo que hablas?
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.
La mejor y más conveniente política de seguridad es no ser paranoico.
Pruebenla,es infalible.
Estoy usando csf y al momento de desbloquear a un cliente que colocó mal su contraseña en algún acceso, este demora en el proceso pero lo hace. ¿Es normal?
Estoy buscando el comando para desbloquear desde el ssh… alguna sugerencia