El fortalecimiento 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 fortalecimiento del servidor de CentOS.
Qué saber
Esta guía lo guía a través de los pasos necesarios para reforzar la seguridad de CentOS 7. Fortalecer 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 de /etc/ssh/sshd_config
archivo.
a. 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
Cambiar ChallengeResponseAuthentication y Autenticación de contraseña a no para desactivar el método de contraseña
PasswordAuthentication no ChallengeResponseAuthentication no
Autorizar autenticación de clave pública
RSAAuthentication yes PubkeyAuthentication yes
ahora puede generar un nuevo par de claves
# ssh-keygen -t rsa
b. Deshabilitar inicio de sesión raíz directo
Es un riesgo de seguridad permitir que la raíz 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. Por lo tanto, debe cambiar PermitRootLogin yes a PermitRootLogin no
PermitRootLogin no
c. Cambiar el puerto de escucha SSH predeterminado (p. ej.:8500)
A veces no se recomienda usar el puerto predeterminado porque es conocido por todo el mundo y es un riesgo de seguridad. Es bueno personalizar el puerto a usar
port 8500
2. Asegurar el cargador de arranque con contraseña de grub
Al asegurar el gestor de arranque, podemos evitar el acceso al modo de usuario único que inicia sesión automáticamente como root. Esto se hace con GRUB configurando 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 realmente escuchando 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 los 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. Reducir los permisos
Reduzca los permisos para 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 en busca de contraseñas vacías
Cualquier cuenta que tenga una contraseña vacía significa que está abierta para el 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 con contraseñas vacías:
# passwd -l paul Locking password for user paul. passwd: Success
6. Ajuste los parámetros del kernel
Sysctl es una interfaz para examinar y cambiar dinámicamente parámetros en el sistema operativo Linux. Edite /etc/sysctl.conf
archivo para optimizar los parámetros del kernel
Sysctl es el comando utilizado 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
Copie y pegue 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. Deshabilitar 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 nivel de ejecución 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. Abra /etc/sysconfig/init
archivo y agregue la línea:
SINGLE=/sbin/sulogin
9. Linux con seguridad mejorada (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.
obtener fuerza El comando nos dice en qué modo está SELinux.
Podemos cambiar el modo SELinux para que se cumpla cambiando SELINUX=enforcing
en /etc/sysconfig/selinux
Hay tres directivas en este archivo como se explica a continuación.
- Cumplimiento: Se aplica la política de seguridad de SELinux.
- Permisivo: SELinux imprime advertencias en lugar de aplicarlas.
- Deshabilitado: SELinux está completamente deshabilitado.
Puede comprobar el estado de SELinux con el comando
# sestatus
SELinux status: disabled
Ves que está deshabilitado. Para habilitarlo, puede usar
# setenforce enforcing
10. Configurar el cortafuegos con iptables
iptables es un programa de aplicación de espacio de usuario que permite al administrador del sistema configurar las tablas proporcionadas por Linux Kernel Firewall y las cadenas y reglas que almacena.
a. Cierra todos los puertos no deseados
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
b. Bloquear IP malas
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. Verificando el sistema de archivos
Todos los archivos habilitados con bits SUID/SGID se pueden usar para actividades maliciosas, cuando el ejecutable SUID/SGID tiene un problema de seguridad. Todos los usuarios locales o remotos pueden usar dicho archivo.
a. 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 mundiales
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. Mantener /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 modificación no autorizada de archivos de arranque críticos. Necesitamos editar /etc/fstab
e inserte la línea debajo
LABEL=/boot /boot ext2 defaults,ro 1 2
13. Denegar todos los contenedores TCP
Los contenedores TCP pueden proporcionar un método rápido y fácil 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 las ssh autorizadas
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
14. Bloquee 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 permita 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 de 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 nuevamente este ataque
a. Activar ExecShield
Ayuda a evitar que se rompan las pilas. Por lo general, un exploit de desbordamiento de búfer sobrescribe una dirección de retorno para que una función regrese a una dirección elegida por el atacante. Debe habilitarlo en el kernel actual
sysctl -w kernel.exec-shield=1
También puede agregar la siguiente línea a /etc/sysctl.conf
kernel.exec-shield = 1
b. Marcar/Habilitar ASLR
La aleatorización del diseño del espacio de direcciones es una característica de defensa para dificultar 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 regiones 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 siguiente línea a /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 agujeros para piratear su servidor. Es importante reconocer que, si bien es mejor tarde que nunca, la eficacia de las medidas de seguridad disminuye cuanto más se espera para implementarlas