El comando sysctl nos permite parametrizar parámetros del núcleo. No hace falta decir que son aquellos con los que fue compilado el núcleo.
Toda la configuración se hace a través del fichero /etc/sysctl.conf
:
# Kernel sysctl configuration file # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 0 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_fin_timeout = 60 net.ipv4.tcp_keepalive_time = 1800 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.forwarding = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1
Esta configuración se activará en el arranque de la máquina o bien podemos modificar el fichero y:
[root@sal]#
sysctl -p
net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_fin_timeout = 60 net.ipv4.tcp_keepalive_time = 1800 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.forwarding = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1
[root@sal]#
Como ya hemos visto lo podemos hacer modificando el fichero de configuración /etc/sysctl.conf
y ejecutando después sysctl -p.
También es posible modificar estos parámetros directamente en el sistema de ficheros /proc/
.
Todos los parámetros que podemos configurar los encontraremos en /proc/sys/
.
Para algunas familias de dispositivos podemos establecer configuraciones por defecto, para todos, o por dispositivo individual. Por ejemplo para los dispositivos de red lo podemos hacer en /proc/sys/net/ipv4/conf/default/, /proc/sys/net/ipv4/conf/all/eth?/, /proc/sys/net/ipv4/conf/lo/, ...
Por ejemplo el parámetro net.ipv4.ip_forward lo encontraremos en /proc/sys/net/ipv4/ip_forward
. Para modificar este parámetro:
[root@sal]#
echo 0 > /proc/sys/net/ipv4/ip_forward
[root@sal]#
El inconveniente de este método es que al reiniciar la máquina esta configuración se pierde.
Por lo tanto será necesario ejecutar los echoes y habrá que incluirlos en los ficheros de arranque.
El uso de echoes es una mala practica de administración y debe evitarse y usarse en su lugar el fichero /etc/sysctl.conf
.
Los parámetros que podremos configurar son aquellos que se hayan seleccionado en la configuración del núcleo que se está usando.
Podemos comprobar los parámetros que podemos configurar:
[root@sal]#
sysctl -A
sunrpc.tcp_slot_table_entries = 16 sunrpc.udp_slot_table_entries = 16 sunrpc.max_resvport = 1023 sunrpc.min_resvport = 650 sunrpc.nlm_debug = 0 sunrpc.nfsd_debug = 0 sunrpc.nfs_debug = 0 sunrpc.rpc_debug = 0 abi.vsyscall32 = 1 dev.scsi.logging_level = 0 dev.raid.speed_limit_max = 200000 dev.raid.speed_limit_min = 1000 dev.cdrom.check_media = 0 dev.cdrom.lock = 1 dev.cdrom.debug = 0 dev.cdrom.autoeject = 0 dev.cdrom.autoclose = 1 dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17 dev.cdrom.info = dev.cdrom.info = drive name: sr0 dev.cdrom.info = drive speed: 24 dev.cdrom.info = drive # of slots: 1 dev.cdrom.info = Can close tray: 1 dev.cdrom.info = Can open tray: 1 dev.cdrom.info = Can lock tray: 1 dev.cdrom.info = Can change speed: 1 dev.cdrom.info = Can select disk: 0 dev.cdrom.info = Can read multisession: 0 dev.cdrom.info = Can read MCN: 1 dev.cdrom.info = Reports media changed: 1 dev.cdrom.info = Can play audio: 1 dev.cdrom.info = Can write CD-R: 0 dev.cdrom.info = Can write CD-RW: 0 dev.cdrom.info = Can read DVD: 1 dev.cdrom.info = Can write DVD-R: 0 dev.cdrom.info = Can write DVD-RAM: 0 dev.cdrom.info = Can read MRW: 1 dev.cdrom.info = Can write MRW: 1 dev.cdrom.info = Can write RAM: 1 dev.cdrom.info = dev.cdrom.info = dev.rtc.max-user-freq = 64 debug.exception-trace = 1 net.ipv6.conf.default.max_addresses = 16 net.ipv6.conf.default.max_desync_factor = 600 net.ipv6.conf.default.regen_max_retry = 5 ...
net.ipv4.tcp_syncookies = 1 proteje contra los ataques Sync packet flooding pero no es conforme a los estándares marcados por los RFCs.
Puede tener impacto en el rendimiento de servidores sobrecargados.
Sync packet flooding es una ataque de denegación de servicio. Cuando se va a establecer una conexión TCP un host manda un paquete SYNC a lo que el otro host responde con un paquete ACK. Si el host atacante empieza a mandar de forma indiscriminada paquetes SYNC con la cabecera falseada con una IP de origen falsa el host atacado mandará sus ACK o bien a ningún host o a un host que no es el que está intentando establecer la comunicación. Dependiendo de la implementación de la pila TCP de ese host tratará el paquete ACK de una forma u otra.
El host atacado llegará un momento en el que no pueda atender más conexiones.
Otra forma de prevenir estos ataques es ampliando el tamaño de las colas en las que se almacena la informació referente a las peticiones de conexión: net.ipv4.tcp_max_syn_backlog.
net.ipv4.tcp_max_sync_backlog = XXX por defecto suele estar a 1024 y estable el tamaño de la cola donde se guarda la información referente a las peticiones de conexión.
net.ipv4.tcp_fin_timeout = 60 cierra los sockets ináctivos, no se recivió paquete FIN, después de 60 segundos.
net.ipv4.tcp_keepalive_time = 1800 segundos después de un proceso de inactividad tras los cuales se intenta verificar si el cliente sigue vivo.
net.ipv4.conf.all.accept_redirects = 0 no se aceptan redirecciones ICMP para evitar ataques Man in the middle.
Mediante el uso del protocolo ICMP es posible modificar los gateways definidos estáticamente en la máquina.
net.ipv4.conf.all.send_redirects = 0 evita que la máquina mande paquetes ICMP con redirecciones.
net.ipv4.conf.all.accept_source_route = 0 se evita que TCP tenga control para decidir sobre la determinación de la ruta de los paquetes.
net.ipv4.conf.all.rp_filter = x protección contra ataques de spoofing.
x puede tomar los valores:
0 no realiza comprobaciones.
1 rechazar suplantaciones evidentes.
2 comprobación exahustiva.
net.ipv4.ip_forward = 0 deshabilitar el reenvio de paquetes.
Esta opción suele estar con un valor distinto de cero en máquinas que hacen enrutado entre diferentes redes.
net.ipv4.icmp_ignore_bogus_error_responses = 1 activa la protección ante mensajes de error malformados.
net.ipv4.icmp_echo_ignore_broadcast = 1 desactivar la respuestas a las peticiones de broadcast de echo ICMP.
net.ipv4.icmp_echo_ignore_all = 1 desactivació de la respuesta a ping.
kernel.panic = n después de un kernel panic espera n segundos para reinciar el sistema.
kernel.sysrq = 1 activa SYSRQ.
SYSRQ es una característica del núcleo que permite pasarle instrucciones con fines de depuración.
Con el SYSRQ activado si se presionan las teclas AltGr+PetSis+t, AltGr+PetSis+m y AltGr+PetSis+p se escribirán en los logs el estado de los procesos, memoria y CPU.
En la documentación del núcleo podemos encontrar toda la información sobre sysctl en Documentacion/networking/ip-sysctl.txt
.