15 pasos de refuerzo de Linux para el servidor CentOS 7
El refuerzo del servidor es el proceso de mejorar la seguridad del servidor a través de varios métodos. Tenemos muchos pasos para asegurar un servidor. ¡Manténgase alejado a usted y a su empresa protegiendo sus sistemas Linux de piratas informáticos, piratas informáticos y atacantes! Puede convertir una caja vulnerable en un servidor reforzado mediante los siguientes pasos. Te ayudará a prevenir ataques externos. Aquí estoy describiendo el endurecimiento del servidor de CentOS.
Qué saber
Esta guía lo guía a través de los pasos necesarios para fortalecer la seguridad de CentOS 7. El refuerzo de un sistema lo hará más restrictivo y es posible que tenga problemas. Recomiendo crear una máquina virtual duplicada que pueda usar para solucionar problemas. A continuación, encontrará una lista de pasos básicos que puede y debe seguir para fortalecer sus servidores inmediatamente después del aprovisionamiento.
1. Acceso remoto seguro
A veces accedemos a nuestro servidor por métodos remotos y si no es más seguro, podemos exponer nuestro servidor. Las opciones de OpenSSH se controlan a través del /etc/ssh/sshd_config
expediente.
una. Deshabilite el método de autenticación de contraseña SSH y habilite el método de autenticación de clave pública
Es importante deshabilitar el método de inicio de sesión remoto con contraseña y habilitar la clave pública de autenticación
Cambio ChallengeResponseAuthentication y Autenticación de contraseña a No para desactivar el método de contraseña
PasswordAuthentication no ChallengeResponseAuthentication no
Autorizar la autenticación de clave pública
RSAAuthentication yes PubkeyAuthentication yes
ahora puede generar un nuevo par de claves
# ssh-keygen -t rsa
B. Deshabilitar el inicio de sesión de root directo
Es un riesgo para la seguridad permitir que root inicie sesión directamente en el servidor. En su lugar, debe iniciar sesión en el sistema como su cuenta y luego hacer su – para iniciar sesión como root. Entonces necesitas cambiar PermitRootLogin sí a PermitRootLogin no
PermitRootLogin no
C. Cambiar el puerto de escucha SSH predeterminado (por ejemplo: 8500)
A veces no se recomienda utilizar el puerto predeterminado porque es conocido por todo el mundo y es un riesgo para la seguridad. Es bueno personalizar el puerto para usar
port 8500
2. Protección del cargador de arranque con contraseña de grub
Al proteger el cargador de arranque, podemos evitar el acceso al modo de usuario único que inicia sesión automáticamente como root. Esto se hace con GRUB estableciendo una contraseña que se almacena en texto sin formato de forma predeterminada.
Para el sistema Debian
# grub-mkpasswd-pbkdf2
Para Centos
# grub2-mkpasswd-pbkdf2
3. Puertos de red de escucha
Después de configurar los servicios de red, es importante prestar atención a qué puertos están escuchando realmente en las interfaces de red del sistema. Cualquier puerto abierto puede ser evidencia de una intrusión.
# nmap -sT -O localhost Starting Nmap 6.40 ( http://nmap.org ) at 2017-06-07 23:13 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.000061s latency). Other addresses for localhost (not scanned): 127.0.0.1 rDNS record for 127.0.0.1: centos-01 Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 2049/tcp open nfs
Para enumerar todos los puertos abiertos y programas asociados, use el siguiente comando
# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN
4. Permisos restringidos
Reduzca los permisos para los archivos y carpetas del sistema para limitar los riesgos.
# chmod 700 /root
# chmod 700 /var/log/audit
# chmod 740 /etc/rc.d/init.d/iptables
# chmod 740 /sbin/iptables
# chmod -R 700 /etc/skel
# chmod 600 /etc/rsyslog.conf
# chmod 640 /etc/security/access.conf
# chmod 600 /etc/sysctl.conf
5. Comprobación de cuentas de cheques para contraseñas vacías
Cualquier cuenta que tenga una contraseña vacía significa que está abierta para acceso no autorizado a cualquier persona en la web y es parte de la seguridad dentro de un servidor Linux. Para verificar cuentas con contraseña vacía, use el siguiente comando
# cat /etc/shadow | awk -F: '($2==""){print $1}' paul
Por seguridad, es bueno bloquear todas las cuentas de contraseña vacías:
# passwd -l paul Locking password for user paul. passwd: Success
6. Ajustar los parámetros del kernel
Sysctl es una interfaz para examinar y cambiar parámetros dinámicamente en el sistema operativo Linux. Editar /etc/sysctl.conf
archivo para optimizar los parámetros del kernel
Sysctl es el comando que se usa para modificar los parámetros del kernel en tiempo de ejecución.
# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter:
# sysctl -p
Copiar y pegar el siguiente contenido en /etc/sysctl.conf
# Turn on execshield kernel.exec-shield=1 kernel.randomize_va_space=1 # Enable IP spoofing protection net.ipv4.conf.all.rp_filter=1 # Disable IP source routing net.ipv4.conf.all.accept_source_route=0 # Ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_messages=1 # Make sure spoofed packets get logged net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # Disable ICMP routing redirects sysctl -w net.ipv4.conf.all.accept_redirects=0 sysctl -w net.ipv6.conf.all.accept_redirects=0 sysctl -w net.ipv4.conf.all.send_redirects=0 sysctl -w net.ipv6.conf.all.send_redirects=0 # Disables the magic-sysrq key kernel.sysrq = 0 # Turn off the tcp_sack net.ipv4.tcp_sack = 0 # Turn off the tcp_timestamps net.ipv4.tcp_timestamps = 0 # Enable TCP SYN Cookie Protection net.ipv4.tcp_syncookies = 1 # Enable bad error message Protection net.ipv4.icmp_ignore_bogus_error_responses = 1
7. Deshabilite los servicios no deseados
Debe eliminar todos los servicios y demonios no deseados (servicios que se ejecutan en segundo plano) desde el inicio del sistema que se inician en el momento del arranque en ejecutar el nivel 3.
# chkconfig --list | grep '3:on'
Para deshabilitar el servicio, ingrese:
# service serviceName stop # chkconfig serviceName off
8. Requerir autenticación para el modo de usuario único
Se recomienda solicitar la contraseña de root al ingresar al modo de usuario único. Abierto /etc/sysconfig/init
archivo y agregue la línea:
SINGLE=/sbin/sulogin
9. Seguridad mejorada de Linux (SELinux)
SELinux es un conjunto de reglas de seguridad que determinan qué proceso puede acceder a qué archivo, directorios, puertos, etc. Cada archivo, proceso, directorio y puerto tiene una etiqueta de seguridad especial llamada contextos SELinux. Un contexto es simplemente un nombre que utiliza la política de SELinux para determinar si un proceso puede o no acceder a un archivo, directorio o puerto. De forma predeterminada, la política no permite ninguna interacción, por lo que las reglas explícitas otorgan acceso. Si no hay una regla de permiso, no se permite el acceso.
getenforce El comando nos dice en qué modo se encuentra SELinux.
Podemos cambiar el modo SELinux para hacer cumplir cambiando SELINUX=enforcing
en /etc/sysconfig/selinux
Hay tres directivas en este archivo, como se explica a continuación.
- Hacer cumplir: Se aplica la política de seguridad de SELinux.
- Permisivo: SELinux imprime advertencias en lugar de hacer cumplir.
- Discapacitado: SELinux está completamente deshabilitado.
Puede verificar el estado de SELinux con el comando
# sestatus SELinux status: disabled
Ves que está deshabilitado. Para habilitarlo, puede usar
# setenforce enforcing
10. Configure el firewall con iptables
iptables es un programa de aplicación de espacio de usuario que permite a un administrador del sistema configurar las tablas proporcionadas por el Kernel Firewall de Linux y las cadenas y reglas que almacena.
una. Cierre todos los puertos no deseados
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
B. Bloquear direcciones IP incorrectas
iptables -A INPUT -s IP_ADDRESS -j DROP
C. Bloquear conexiones a una interfaz de red
Para bloquear conexiones desde una dirección IP específica a una interfaz de red específica, use el comando
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP
D. Lista de reglas de iptables
Puede ver todas las reglas de iptables con el comando
iptables -L -n -v
11. Verificación del sistema de archivos
Todos los archivos habilitados para bits SUID / SGID se pueden utilizar para actividades maliciosas, cuando el ejecutable SUID / SGID tiene un problema de seguridad. Todos los usuarios locales o remotos pueden utilizar dicho archivo.
una. Identificar binarios SUID y SGID no deseados
find / ( -perm -4000 -o -perm -2000 ) -print find / -path -prune -o -type f -perm +6000 -ls
B. Identificar archivos de escritura en todo el mundo
find /dir -xdev -type d ( -perm -0002 -a ! -perm -1000 ) -print
C. Identificar archivos y carpetas huérfanos
find /dir -xdev ( -nouser -o -nogroup ) -print
12. Mantenga / boot como de solo lectura
El kernel de Linux y sus archivos relacionados se encuentran en el directorio / boot, que por defecto es de lectura y escritura. Cambiarlo a solo lectura reduce el riesgo de modificaciones no autorizadas de archivos de arranque críticos. Necesitamos editar /etc/fstab
archivo e inserte la línea debajo <
LABEL=/boot /boot ext2 defaults,ro 1 2
13. Denegar todas las envolturas TCP
Los envoltorios TCP pueden proporcionar un método rápido y sencillo para controlar el acceso a las aplicaciones vinculadas a ellos. Por lo tanto, se recomienda bloquear todas las aplicaciones no utilizadas y luego autorizar solo las aplicaciones que se utilizarán.
Por ejemplo, bloquearemos todas las aplicaciones, pero solo ssh autorizado.
echo "ALL:ALL" >> /etc/hosts.deny echo "sshd:ALL" >> /etc/hosts.allow
14. Bloquear cronjobs para usuarios no autorizados
Cron se utiliza para automatizar trabajos en un momento determinado. Es posible especificar quién puede y quién no puede ejecutar trabajos. Esto se controla mediante el uso de archivos llamados /etc/cron.allow
y /etc/cron.deny
. Para bloquear a un usuario usando cron, simplemente agregue nombres de usuario en cron.deny y para permitir que un usuario ejecute cron add en el archivo cron.allow.
# echo ALL >>/etc/cron.deny
15. Asegure el servidor contra el desbordamiento del búfer
Un desbordamiento del búfer ocurre cuando un programa o proceso intenta escribir más datos en un bloque de memoria de longitud fija, o búfer, de los que el búfer está asignado para contener. Es importante proteger su servidor de nuevo este ataque.
una. Habilitar ExecShield
Ayuda a evitar que la pila se rompa. Por lo general, un exploit de desbordamiento de búfer sobrescribe una dirección de retorno para que una función vuelva a la dirección elegida por el atacante. Necesita habilitar en el kernel actual
sysctl -w kernel.exec-shield=1
También puede agregar la línea a continuación para /etc/sysctl.conf
kernel.exec-shield = 1
B. Marcar / habilitar ASLR
La distribución aleatoria del diseño del espacio de direcciones es una función de defensa que dificulta los desbordamientos del búfer. ASLR dificulta que el atacante encuentre una dirección a la que saltar. Debe habilitar la ubicación aleatoria de la región de memoria virtual configurando el tiempo de ejecución para kernel.randomize_va_space
sysctl -q -n -w kernel.randomize_va_space=2
Agregue la línea de abajo para /etc/sysctl.conf
si no existe ya
kernel.randomize_va_space = 2
Conclusión
Estas son algunas de las consideraciones básicas para los nuevos usuarios que intentan ejecutar sus propios servidores. Tenga en cuenta que las galletas saladas siempre van un paso por delante; siguen buscando cualquier agujero para piratear su servidor. Es importante reconocer que, si bien es mejor tarde que nunca, las medidas de seguridad disminuyen en su efectividad cuanto más esperas para implementarlas.