meta data de esta página
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
seguridad:asegurar_linux [2015/04/20 13:01] – [Control de acceso] luisca | seguridad:asegurar_linux [2023/05/02 09:04] (actual) – [Referencias] lc | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | {{tag> | ||
===== Bastionado de Centos ===== | ===== 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: | ||
+ | * Desactivar el arranque desde cualquier dispositivo excepto el disco duro que contiene el SO | ||
+ | * Establecer una contraseña para acceder a la BIOS | ||
+ | * Proteger el gestor de arranque GRUB mediante contraseña | ||
+ | * Deshabilita el arranque interactivo en el caso de que la distribución lo soporte | ||
+ | |||
+ | |||
==== Instalación ==== | ==== 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. | 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. | ||
Línea 23: | Línea 36: | ||
< | < | ||
- | En Centos para configurar la red ejecutar <code> | + | En Centos para configurar la red ejecutar <sxh> |
Los DNS hay que especificarlos en el archivo / | Los DNS hay que especificarlos en el archivo / | ||
Línea 29: | Línea 42: | ||
== Deshabilitar IPV6 si no lo utilizamos == | == Deshabilitar IPV6 si no lo utilizamos == | ||
- | Para ver si tenemos IPV6 activo ejecutamos <code> | + | Para ver si tenemos IPV6 activo ejecutamos <sxh> |
Para deshabilitarlo sin reiniciar el sistema, ejecutar: | Para deshabilitarlo sin reiniciar el sistema, ejecutar: | ||
- | <code>echo 1 > / | + | <sxh>echo 1 > / |
- | echo 1 > / | + | echo 1 > / |
otra forma sería: | otra forma sería: | ||
- | <code> | + | <sxh> |
sysctl -w net.ipv6.conf.all.disable_ipv6=1 | sysctl -w net.ipv6.conf.all.disable_ipv6=1 | ||
- | sysctl -w net.ipv6.conf.default.disable_ipv6=1</ | + | sysctl -w net.ipv6.conf.default.disable_ipv6=1</ |
== Deshabilitar Zeroconf == | == Deshabilitar Zeroconf == | ||
- | Comprobar si se está ejecutando [[http:// | + | Comprobar si se está ejecutando [[http:// |
Para deshabilitarlo: | Para deshabilitarlo: | ||
- | Añadir la línea **NOZEROCONF=yes** Al archivo / | + | Añadir la línea **NOZEROCONF=yes** Al archivo / |
== Detectar sevicios en escucha == | == Detectar sevicios en escucha == | ||
- | Ejecutar <code>sudo netstat -tuanp | grep LISTEN</code> | + | 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. | 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 | Para ver que servicios tenemos ejecutamos | ||
- | <code>ls -1 /etc/init.d > servicios</ | + | <sxh>ls -1 /etc/init.d > servicios</ |
- | Para deshabilitar un servicio determinado <code> | + | Para deshabilitar un servicio determinado <sxh> |
<note warning> | <note warning> | ||
Línea 74: | Línea 87: | ||
Para configurar un servidor de tiempo hay que seguir estos pasos: | Para configurar un servidor de tiempo hay que seguir estos pasos: | ||
- | * Instalar el paquete ntpd <code>yum install ntp</code> | + | * Instalar el paquete ntpd <sxh>yum install ntp</sxh> |
* Editar el archivo/ | * Editar el archivo/ | ||
* chkconfig ntpd on | * chkconfig ntpd on | ||
Línea 90: | Línea 103: | ||
== Crear usuarios con privilegios de administrador == | == Crear usuarios con privilegios de administrador == | ||
Ejecutar el siguiente comando para cada usuario que requiera privilegios de administrador | Ejecutar el siguiente comando para cada usuario que requiera privilegios de administrador | ||
- | <code>usermod -G wheel -a usuario </code> | + | <sxh>usermod -G wheel -a usuario </sxh> |
Editar el archivo / | Editar el archivo / | ||
- | <code>auth required pam_wheel.so use_uid</ | + | <sxh>auth required pam_wheel.so use_uid</ |
== Limitar el uso de sudo a miembros de un grupo de administradores == | == Limitar el uso de sudo a miembros de un grupo de administradores == | ||
Línea 129: | Línea 142: | ||
Para crear usuario sin Shell hay que ejecutar el comando: | Para crear usuario sin Shell hay que ejecutar el comando: | ||
- | <code>useradd -M -s / | + | <sxh>useradd -M -s / |
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 / | 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 / | ||
Línea 136: | Línea 149: | ||
| | ||
- | === Enviar los logs a un servidor remoto === | + | ==== Enviar los logs a un servidor remoto |
En caso de usar syslogd el archivo / | En caso de usar syslogd el archivo / | ||
< | < | ||
Línea 144: | Línea 157: | ||
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 | 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 | ||
- | <code> | + | <sxh> |
- | === At y Cron === | + | ==== At y Cron ==== |
Permitir el uso de cron y at tan solo al usuario root ejecutando los siguientes comandos | Permitir el uso de cron y at tan solo al usuario root ejecutando los siguientes comandos | ||
- | <code>rm / | + | <sxh>rm / |
+ | |||
+ | ==== Bastionar el acceso por SSH ==== | ||
+ | Para mejorar la seguridad del servicio SSH se deben realizar las siguientes acciones: | ||
+ | * Permitir tan solo el protocolo ssh2 | ||
+ | * Si el servidor tiene más de una IP definir en cuantas debe escuchar | ||
+ | * Impedir el inicio de sesión como root | ||
+ | * Impedir el uso de contraseñas en blanco | ||
+ | * Impedir el uso de autenticación basada en host | ||
+ | * Establecer un límite de tiempo para el inicio de sesión | ||
+ | * Establecer un número máximo de intentos antes de bloquear la sesión | ||
+ | * Establecer un tiempo de sesión inactiva a 5 minutos | ||
+ | * Ignorar los archivos rhosts y shosts | ||
+ | * Limitar el inicio de sesión a un grupo de usuarios del sistema | ||
+ | * Separar los privilegios de los procesos de SSH | ||
+ | * Configurar el mensaje de inicio de sesión | ||
+ | |||
+ | Editamos el archivo / | ||
+ | < | ||
+ | LoginGraceTime 120 | ||
+ | ClientAliveInterval 300 | ||
+ | ClientAliveCountMax 0 | ||
+ | Banner / | ||
+ | AllowGroups wheel | ||
+ | ListenAddress ip_por_donde_escucha | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Auditar el sistema ==== | ||
+ | |||
+ | <note warning> | ||
+ | Los pasos genéricos que debemos seguir son: | ||
+ | * Instalar el paquete auditd | ||
+ | * Localizar los archivos críticos y/o de mayor riesgo para los servicios que ofrece el servidor | ||
+ | * Configurar auditd para que se inicie junto al sistema | ||
+ | * Configurar el núcleo para que audite procesos que se inician antes que el servicio auditd | ||
+ | * Añadir los archivos críticos al servicio auditd | ||
+ | |||
+ | Al configurar auditd hay que: | ||
+ | |||
+ | * Tener / | ||
+ | * Ajustar max_log_file y num_logs para que usen el máximo posible del espacio de la partición de logs | ||
+ | * Ajustar space_left de forma que permita al administrador tener tiempo para liberar espacio ante una alerta de poco espacio disponible | ||
+ | * En el caso de que se llene el disco se ejecutará la acción definida por disk_full_action, | ||
+ | |||
+ | Para instalar y arrancar auditd durante el inicio del sistema ejecutar estos comandos | ||
+ | < | ||
+ | yum install auditd | ||
+ | chkconfig auditd on</ | ||
+ | |||
+ | 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 / | ||
+ | |||
+ | ==== Actualizar el sistema ==== | ||
+ | Mantener el sistema actualizado con los últimos parches | ||
+ | |||
+ | ==== Deshabiliar dispositivos innecesarios ==== | ||
+ | |||
+ | Para ver los dispositivos ejecutar | ||
+ | < | ||
+ | < | ||
+ | |||
+ | Una vez localizados, | ||
+ | |||
+ | ==== Deshabilitar servicios innecesarios ==== | ||
+ | |||
+ | Algunos servicios que no deben existir en ningún caso son: | ||
+ | |||
+ | * rlogin | ||
+ | * rsh | ||
+ | * rexec | ||
+ | * rcp | ||
+ | * telnet -> Usar ssh en su lugar | ||
+ | * talk | ||
+ | |||
+ | ==== 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 | ||
+ | < | ||
+ | |||
+ | Revisar el listado que aparece por si hay alguno al que podamos quitarselo | ||
+ | |||
+ | para desactivar este permiso | ||
+ | < | ||
+ | |||
+ | ==== 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: | ||
+ | * Amtu (Abstract Machine Test Utility): Realiza comprobaciones de seguridad en CPU, HD, red y memoria | ||
+ | * Aide(Advanced Intrusion Detection Environment): | ||
==== Scripts de bastionado ==== | ==== Scripts de bastionado ==== | ||
* http:// | * http:// | ||
Línea 160: | Línea 265: | ||
* www.sans.org/ | * www.sans.org/ | ||
* http:// | * http:// | ||
+ | * https:// | ||
=== Búsqueda de archivos con suid/sgid === | === Búsqueda de archivos con suid/sgid === | ||
- | <code>find / -type t\ (-perm 04000 -o - perm -02000\) -exec ls -la {} \</code> | + | <sxh>find / -type t\ (-perm 04000 -o - perm -02000\) -exec ls -la {} \</sxh> |
=== Buscar otros archivos peligrosos === | === Buscar otros archivos peligrosos === | ||
- | <code>find / name -rhosts -name .netrc</code> | + | <sxh>find / name -rhosts -name .netrc</sxh> |