El uso de sysctl es muy sencillo. Para listar las variables que podemos modificar basta con ejecutar:
# sysctl -a
sunrpc.max_resvport = 1023
sunrpc.min_resvport = 665
sunrpc.tcp_slot_table_entries = 16
sunrpc.udp_slot_table_entries = 16
sunrpc.nlm_debug = 0
sunrpc.nfsd_debug = 0
sunrpc.nfs_debug = 0
sunrpc.rpc_debug = 0
...
# He recortado la salida porque es bastante extensa
Como podéis el esquema es "nombre de la variable" = "valor". Muchas de estas variables son boleanas un 0 significa que están deshabilitadas y un 1 que están habilitadas. Si conocemos el nombre de la variable que queremos modificar bastará filtrar la salida de la orden anterior con grep para conocer su valor, p.e:
sysctl -a | grep 'ipv4.ip_forward'
net.ipv4.ip_forward = 1
Para que nuestros cambios sean permanentes y además queden documentados lo mejor es editar el archivo /etc/sysctl.conf. A continuación os pego un ejemplo:
# Hablitar reenvío de paquetes (modo router)
net.ipv4.ip_forward = 1
# Habilitar IP dinámica
net.ipv4.ip_dynaddr = 1
# Deshabilitar ECN (señalizador de congestión en la línea)
net.ipv4.tcp_ecn = 0
# Habilitar verificación del origen de la ruta (ayuda a
# a prevenir el IP Spoofing)
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
# Habilitar SYN cookies (protege contra un ataque de desbordamiento
# de paquetes SYN http://cr.yp.to/syncookies.html
net.ipv4.tcp_syncookies = 1
# Deshabilitar enrutamiento de origen (el enrutamiento de origen
# se considera peligroso)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Deshabilitar paquetes de redireccionamiento icmp
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
# Ignorar broadcasts icmp
net.ipv4.icmp_echo_ignore_broadcasts = 1
# No loguear paquetes icmp defectuosos
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Desactivar marcas de tiempo. Con conexiones menores de 10mbps
# son innecesarias
net.ipv4.tcp_timestamps = 0
# Reducir el tiempo tcp_fin_timeout. Reduce el tiempo que
# permanece el socket abierto al cerrar una conexión.
net.ipv4.tcp_fin_timeout = 25
# Reducir tiempo entre keepalives. Cada cuanto tiempo se deben
# mandar paquetes para mantener abierta una conexión viva pero
# que no está siendo usada.
net.ipv4.tcp_keepalive_time = 1200
# Aumentar el búfer para los paquetes SYN
net.ipv4.tcp_max_syn_backlog = 1024
# Reducir los reintentos de conexión
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
Una vez editado el archivo aplicamos los cambios:
# sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_dynaddr = 1
net.ipv4.tcp_ecn = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
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
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
La salida nos muestra los cambios aplicados. Podéis encontrar el significado y lo valores que puede tomar cada variable en este tutorial.