Securización básica de kernel Linux – Parte 1

Existen algunos ajustes en el kernel de linux, que nos permitirán aumentar la seguridad de nuestro sistema linux, en este articulo explicaremos como aumentarla

Para las configuraciones que voy a exponer a continuación, se deben tomar en cuenta las sig. notas:
1.-Al final del artículo, voy a presentar un resumen de todos los ajustes, sin incluir explicación, solo comandos, para los que estén apurados y quieran securizar el sistema sin mucha explicación
2.- Voy a explicar exhaustivamente el primer ajuste, luego iré simplificando para los demás
3.- La forma de configuración en todos los parámetros de seguridad que vayamos a configurar es análoga, por lo que, voy a asumir que la “forma” del primer ajuste, se aplica a los demás

Comencemos !

Fuentes:
reverse-path-filtering, Securización del sistema base,comando sysctlSource Routingexec-shield,ICMP

Reverse Path Filter:

Lo que permite este filtro es que si nos llega un paquete desde una dirección de red que no es accesible (“Routeable”) desde la placa de red de donde provino, poder descartar ese paquete

Los ataques de DDOS suelen trabajar con paquetes de red (en ellos se almacena la IP desde donde provienen) con IP de origen FALSA

Este filtro nos permite comprobar si un paquete que “dice” provenir desde cierta dirección IP, antes de aceptarlo, hacer que el kernel vea si, desde la placa de red desde donde llegó, se puede “ver” o “acceder” a la supuesta IP y en caso de que no, descartarlo

Vamos a comprobar como es el status del filtro:
Se puede comprobar mostrando el sig. archivo:

$ cat /proc/sys/net/ipv4/conf/all/rp_filter
1

O bien, consultando via el programa sysctl

$ sysctl net.ipv4.conf.all.rp_filter
net.ipv4.conf.all.rp_filter = 1

En este caso, lo que obtengo en mi equipo es “1”, que significa que el filtro de Reverse Path se encuentra activado

Si no, lo pueden activar escribiendo “1” en el archivo:

# echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

La orden comienza a surtir efecto en el kernel de inmediato. ? nooo, hay que ejecutar

sysctl -p

obviamente esta no es la manera “adecuada” de hacerlo, para ello deberíamos usar el programa interfaz “sysctl”

# sysctl -w net.ipv4.conf.all.rp_filter=1
# sysctl -p

Esta config volverá a su estado original luego de reiniciar el equipo. Para que sea permanente, debemos incluir esta config en el archivo /etc/sysctl.conf

# vim /etc/sysctl.conf

Y agregamos al final del archivo la sig. linea:

net.ipv4.conf.all.rp_filter=1

Refrescamos la config

# sysctl -p

Existe cierta confusión acerca de settear net.ipv4.conf.default.rp_filter=1, “en teoría” esto afecta a las nuevas interfaces de red que vayamos a añadir en el futuro, pero bueno, no queda claro. Por las dudas lo setteamos

# vim /etc/sysctl.conf

Y agregamos al final del archivo la sig. linea:

net.ipv4.conf.default.rp_filter=1

Refrescamos la config

# sysctl -p

ICMP Ignore From broadcasts:

ICMP es un sub-protocolo para el control de errores en el IP (protocolo de internet), se utiliza para enviar mensajes de notificación de errores y para consultar la disponibilidad de recursos en la red
En este caso “Ignore from broadcasts” se refiere a que, un atacante podría:
1.- Congestionar la red, enviando un ping apuntado a la dirección broadcasts (podría ser a nuestra red local 255.255.255.255 o a una sub red en particular, si la red es 192.168.1.0/24, broadcasts en esa sub red 192.168.1.255), para que esto funcione todos los hosts de la red deberían reponder a estas consultas ping desde broadcast, es decir todos los hosts deberían tener el parámetro net.ipv4.icmp_echo_ignore_broadcasts = 0
2.- Realizar una denegación de servicio a un host victima , enviando a la dirección broadcasts un ping con paquetes con información falsa de la ip de origen (Smurf Attack), es decir, pedir que todos los hosts respondan a la IP del host victima, entonces si el atacante tiene este parámetro en 1, no solo haría una denegación de servicio para la víctima, sino también que el host del atacante no se vería afectado por el mismo de ninguna manera

El lado bueno de la cuestión, por la que parecería útil tener estas respuestas al broadcasts, es que de esta manera se podrían descubrir los servicios disponibles en la RED sin necesidad de saber la IP del servidor, pero bueno, cuanta más seguridad, menos comodidad.

net.ipv4.icmp_echo_ignore_broadcasts = 1

 

Continuaremos en la sig. parte con los demás, más abajo les dejo como quedará nuestro archivo al final de los artículos, gracias por leer! Hasta el próximo articulo

Así queda nuestro archivo /etc/sysctl.conf

# Activar protección contra reverse path filtering
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Activar protección contra smurf attack
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Activar protección contra mensajes ICMP mal formados
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Que nadie pueda alterar las tablas de routing del sistema
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

# No Source Packets
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# No actuar como router
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Prevenir SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Protección contra execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1

# Extras:
# Usar la mayor cantidad de tiempo posible memoria RAM en vez del disco como memoria
vm.swappiness=1

# IPv6
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

12 + cuatro =

Time limit is exhausted. Please reload CAPTCHA.