Tabla de Contenidos

, ,

Bastionado de Centos

Asegurar la máquina físicamente

Lo primero es asegurarnos de que a la máquina física no se puede acceder sin permiso. Además en caso de que el servidor disponga de tarjeta de acceeso remoto tipo ILO o similar, hay que configurarla en una VLAN propia que se utilice exclusivamente para gestión, si no se va a utilizar dicha tarjeta hay que desactivarla.

En caso de que no podamos restringir dicho acceso o para una mayor seguridad:

Instalación

Siempe que sea posible hay que instalar el SO desde DVD sin que esté conectado a la red hasta que se hayan completado el bastionado. Descargarnos la imagen desde el sitio oficial y verificar la integridad de la misma.

En caso contrario el equipo debe de instalarse desde un segmento de la red aislado del resto, sin acceso desde el exterior y con un acceso a internet restringido.

Elegir siempre la instalación mínima y posteriormente añadir sólo los servicios o paquetes necesarios para la función a realizar.

Particionado

Red

Para el bastionado de la red tenemos que tener en cuenta lo siguiente:

En Centos para configurar la red ejecutar <sxh>system-config-network</sxh> o editando el fichero correspondiente a nuestra tarjeta, que se encuentra en la ruta /etc/sysconfig/networking/devices

Los DNS hay que especificarlos en el archivo /etc/resolv.conf

Deshabilitar IPV6 si no lo utilizamos

Para ver si tenemos IPV6 activo ejecutamos <sxh>ifconfig | grep inet6</sxh>

Para deshabilitarlo sin reiniciar el sistema, ejecutar:

<sxh>echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6</sxh>

otra forma sería: <sxh> sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1</sxh>

Deshabilitar Zeroconf

Comprobar si se está ejecutando Zeroconf <sxh>ps -e | grep avahi</sxh>Si devuelve algún resultado es que avahi está activo. Para deshabilitarlo: Añadir la línea NOZEROCONF=yes Al archivo /etc/sysconfig/network y eliminar el paquete <sxh>yum -y remove avahi</sxh>

Detectar sevicios en escucha

Ejecutar <sxh>sudo netstat -tuanp | grep LISTEN</sxh>

Si tenemos servicios innecesarios en /etc/init.d se encuentran los scripts de gestión del sistema SystenV tradicional y en /etc/init se encuentran los servicios adaptdos al sistema upstart. Para ver que servicios tenemos ejecutamos <sxh>ls -1 /etc/init.d > servicios</sxh> o bien <sxh>ls -1 /etc/init » servicios</sxh>

Para deshabilitar un servicio determinado <sxh>chkconfig <service> off</sxh>

si es posible eliminar los paquetes
Otras mejoras de seguridad en la red

Se utilizarán algunos parámetros de control de sysctl para proteger al sistema ante situaciones que introducen riesgo en las comunicaciones.

El archivo /etc/sysctl.conf debe contener las siguientes líneas:

Sincronización de la fecha y hora

Hay que configurar todos los servidores para que se sincronizen con el mismo servidor de tiempo, ya que es muy necesario a la hora de investigar acciones que suceden en más de una máquina

Para configurar un servidor de tiempo hay que seguir estos pasos:

Control de acceso

Las acciones a realizar son las siguientes:

Crear usuarios con privilegios de administrador

Ejecutar el siguiente comando para cada usuario que requiera privilegios de administrador <sxh>usermod -G wheel -a usuario </sxh>

Editar el archivo /etc/pam.d/su y asegurarse de que contiene la línea <sxh>auth required pam_wheel.so use_uid</sxh>

Limitar el uso de sudo a miembros de un grupo de administradores

Editando el archivo /etc/sudoers mediante el comando visudo y asegurarse de que contiene la línea

%wheel ALL=(ALL) ALL 

A partir de ahora todos los usuarios que requieran la ejecución de los comandos su y sudo deben ser miembros del grupo wheel

Desactivar el inicio de sesión local al usuario root

Editar el archivo /etc/shadow y sustituir el campo de la contraseña de root por un ! los dos primeros campos de la línea deben ser iguales a los de la siguiente línea.

root:!:14698:0:99999:7:::
Mejorar el sistema de contraseñas

hash, recordar contraseñas antiguas y realizar comprobaciones a las nuevas cuando se cambie una de ellas. Editar el archivo /etc/pam.d/system-auth y asegurarse de que contiene la línea

password sufficient pam_unix.so obscure sha512 shadow nullok try_first_pass use_authtok remember=10

Editar el archivo /etc/login.defs y asegúrar que contiene las siguientes líneas

MD5_CRYPT_ENAB noENCRYPT_METHOD SHA512

En RedHat el archivo /etc/libuser.conf debe contener la línea

crypt_style = sha512

También puede ser interesante el uso de algunos módulos pam (plugable authentication modules):

Crear usuarios sin SHELL

Hay determinados casos en los que puede ser util tener usuarios que puedan iniciar sesión pero no tengan acceso a una SHELL, por ejemplo para usuarios de FTP.

Para crear usuario sin Shell hay que ejecutar el comando: <sxh>useradd -M -s /sbin/nologin usuario</sxh>

Donde -M indica que no se creará el directorio HOME del usuario, si es necesario que tenga HOME hay que quitar este parámetro del comando, y -s indica la SHELL que se le asigna al usuario, al especificar /sbin/nologin se asigna una SHELL que impide el inicio de sesión en el sistema

Mesaje de inicio

Establecer el mensaje corporativo de inicio de sesión, para ello copiamos el texto en el archivo /etc/motd

Enviar los logs a un servidor remoto

En caso de usar syslogd el archivo /etc/syslog.conf debe contener la siguiente línea

auth.info,authpriv.info,user.crit           @X.X.X.X

En caso de usar rsyslogd el archivo /etc/rsyslogd.conf debe contener la siguiente línea

auth.info,authpriv.info,user.crit           @@X.X.X.X:PUERTO

Si se ha denegado la salida del tráfico mediante reglas de iptables habrá que permitir la salida al puerto 514 UDP mediante el comando <sxh>iptables -I OUTPUT -p udp -d X.X.X.X –dport 514 -j ACCEPT</sxh>

At y Cron

Permitir el uso de cron y at tan solo al usuario root ejecutando los siguientes comandos <sxh>rm /etc/{cron.deny,at.deny}echo root > /etc/cron.allowecho root > /etc/at.allow</sxh>

Bastionar el acceso por SSH

Para mejorar la seguridad del servicio SSH se deben realizar las siguientes acciones:

Editamos el archivo /etc/ssh/sshd_config y añadimos o cambiamos las líneas:

LoginGraceTime 120
ClientAliveInterval 300
ClientAliveCountMax 0
Banner /etc/ssh/ssh_banner
AllowGroups wheel 
ListenAddress ip_por_donde_escucha
Para configurar el mensaje de inicio de sesión hay que editar el archivo /etc/ssh/ssh_banner e insertar el texto

Auditar el sistema

Ojo activar el sistema de auditoria puede volver inutilizable el servidor más potente, así que hay que usarlo con precaución y planificación.

Los pasos genéricos que debemos seguir son:

Al configurar auditd hay que:

Para instalar y arrancar auditd durante el inicio del sistema ejecutar estos comandos <sxh> yum install auditd chkconfig auditd on</sxh>

Una vez instalado y configurado hay que revisar el resultado del comando aureport regularmente

Una vez obtenido el listado de los archivo a auditar hay que agregarlos al archivo /etc/audit/audit.rules

Actualizar el sistema

Mantener el sistema actualizado con los últimos parches

Deshabiliar dispositivos innecesarios

Para ver los dispositivos ejecutar <sxh>lspci -v </sxh> <sxh>lsusb</sxh>

Una vez localizados, deshabilitar los módulos innecesarios

Deshabilitar servicios innecesarios

Algunos servicios que no deben existir en ningún caso son:

Revisar los permisos en los ficheros

Desactivar el bit SUID y SGID en el máximo de programas Para buscar que archivos tienen el bit SUID/SGID activado ejecutar <sxh>find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -print </sxh>

Revisar el listado que aparece por si hay alguno al que podamos quitarselo

para desactivar este permiso <sxh>chmod -s ruta_al_ejecutable</sxh>

Habilitar la comprobación de integridad

La comprobación de integridad nos ayuda a localiza el punto de entrada de un ataque así como los archivos modificados o a los que han tenido acceso. Para esta tarea podemos utilizar estas herramientas:

Scripts de bastionado

Referencias

Búsqueda de archivos con suid/sgid

<sxh>find / -type t\ (-perm 04000 -o - perm -02000\) -exec ls -la {} \</sxh>

Buscar otros archivos peligrosos

<sxh>find / name -rhosts -name .netrc</sxh>