El subsistema de red

Lamentablemente en Linux no existe una orden similar a ndd en Solaris o a no en AIX, que como hemos visto o veremos más adelante se utilizan para configurar en tiempo de ejecución, y de una forma sencilla, parámetros del operativo relativos al subsistema de red. En este caso necesitamos recurrir, en la mayoría de ocasiones, a escribir directamente en ficheros del directorio /proc/, un sistema de archivos `virtual' que en Linux y otros entornos Unix actúa como interfaz ente el espacio de usuario y el núcleo.

Con relación a la tabla ARP y sus timeouts (como ya dijimos al hablar de Solaris, importantes en nuestra seguridad para prevenir cierto tipo de ataques), su funcionamiento en Linux es quizás algo engorroso: en los directorios /proc/sys/net/ipv4/neigh/$\ast $/ tenemos ciertos ficheros que indican parámetros de configuración de ARP; uno de ellos, gc_stale_time, define el tiempo (60 segundos por defecto) que una entrada de la tabla ARP se considera `viva'. Cuando este timeout ha vencido para cierta entrada, entra en juego el parámetro gc_interval, que marca la frecuencia de actuación del recolector de basura (garbage collector) en el sistema; este, que se ejecuta cada 30 segundos, es realmente el encargado de eliminar las entradas `caducadas' de nuestra tabla.

Respecto al protocolo ICMP, una buena idea - como en cualquier Unix - es ignorar las peticiones ICMP/SMALL>_ECHO dirigidas a direcciones de broadcast; esto lo conseguimos escribiendo un valor diferente de 0 en el archivo /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts. Si no nos conformamos con esto, y queremos ignorar todas las peticiones ICMP/SMALL>_ECHO, no tenemos más que hacer lo mismo en el archivo /proc/sys/net/ipv4/icmp_echo_ignore_all.

La gestión de tramas ICMP/SMALL>_REDIRECT también puede presentar ciertos riesgos para nuestra seguridad. Si en /proc/sys/net/ipv4/conf/*/accept_redirects indicamos un valor diferente de 0 estamos diciéndole al núcleo de Linux que haga caso de este tipo de paquetes que en principio nos puede enviar un enrutador; su valor por defecto (0, desactivado) es el correcto. Análogamente, en /proc/sys/net/ipv4/conf/*/send_redirects permitimos la emisión de estas tramas desde nuestra máquina escribiendo un valor diferente de 0; como sólo un router debería enviar estos paquetes, la opción más segura es especificar un 0 para este parámetro (su valor por defecto es 1). Una opción intermedia entre bloquear todas las tramas ICMP/SMALL>_REDIRECT y permitirlas puede ser el escribir en el archivo secure_redirects un valor diferente de 0, logrando que se acepten este tipo de paquetes pero sólo desde la lista de gateways válidos definida en /etc/gateways.

Pasando ya a hablar del protocolo IP, uno de los parámetros que más nos va a interesar es la habilitación o deshabilitación del IP Forwarding en el núcleo de Linux; como hemos dicho antes, el sistema de filtrado de paquetes sólo funciona cuando esta opción está habilitada, lo que se consigue con la orden
luisa:~# echo 1 > /proc/sys/net/ipv4/ip_forward
luisa:~#
Sin embargo, si no utilizamos las facilidades de firewalling del núcleo de Linux esta opción ha de estar desabilitada (introduciríamos un `0' en lugar de un `1' en el fichero anterior), ya que de lo contrario corremos el peligro de que nuestra máquina se convierta en un router.

Antes hemos hablado de las `SYN Cookies', y hemos comentado que aunque el soporte para esta característica se introduce al compilar el núcleo, realmente el mecanismo se ha de activar desde espacio de usuario, por ejemplo con una orden como la siguiente:
luisa:~# echo 1 >/proc/sys/net/ipv4/tcp_syncookies
luisa:~#
También es muy recomendable que el subsistema de red del kernel descarte las tramas con Source Routing o encaminamiento en origen activado. Este tipo de paquetes contienen el camino que han de seguir hasta su destino, de forma que los routers por los que pasa no han de examinar su contenido sino simplemente reenviarlo, hecho que puede causar la llegada de datos que constituyan una amenaza a nuestras políticas de seguridad. En los núcleos 2.0 esto se conseguía activando la opción CONFIG/SMALL>_IP/SMALL>_NOSR a la hora de compilar el kernel, mientras que en los 2.2 la forma más sencilla de ignorar estos paquetes es introduciendo un `0' en los diferentes ficheros accept_source_route del directorio /proc/sys/net/ipv4/; por ejemplo la siguiente orden descarta las tramas con encaminamiento en origen que llegan al dispositivo de red eth0:
luisa:~# echo 0 >/proc/sys/net/ipv4/conf/eth0/accept_source_route
luisa:~#
Hemos de recordar que las modificaciones que hacemos sobre el interfaz sysctl son dinámicas: se pueden efectuar con el sistema funcionando, sin necesidad de reiniciarlo, pero se pierden cuando la máquina se apaga para establecerse a unos valores por defecto al arrancar de nuevo el sistema operativo; seguramente nos interesará mantener los cambios realizados, por lo que en alguno de los ficheros de inicialización de la máquina hemos de incluir las órdenes que acabamos de explicar, obviamente después de haber montado el sistema de ficheros /proc/.
© 2002 Antonio Villalón Huerta