Appendix B. Problemas y preguntas frecuentes

B.1. Problemas en la carga de módulos

Puedes tener algún problema a la hora de cargar módulos. Por ejemplo, pueden haber errores que indiquen que no existe ningún módulo con ese nombre. A modo de ejemplo, pueden tener el siguiente aspecto (como podrás ver a lo largo del tutorial, los ejemplos no se han traducido y continúan en inglés, ya que todo el sistema Netfilter/iptables se ha programado en inglés y de esta manera estudiarás los mensajes con el aspecto más similar a como puedas verlos en tu propio ordenador):

insmod: iptable_filter: no module by that name found

Traducción: no se ha encontrado ningún módulo con ese nombre. Sin embargo no hay por qué preocuparse. Ese o esos módulos posiblemente hayan sido compilados estáticamente en el núcleo (kernel). Esto será lo primero que tendrás que comprobar cuando intentes solucionar el problema. La forma más sencilla de saber si los módulos ya se han cargado o si se han compilado estáticamente en el núcleo, es ejecutar un comando que utilice esa funcionalidad específica y ver lo que ocurre. En el caso anterior no se ha podido cargar la tabla de filtrado (tabla filter). Si esta funcionalidad no está cargada, seremos incapaces de utilizar la tabla de filtrado, por lo que podremos probar con:

iptables -t filter -L
   

Con éllo se deberían listar todas las cadenas de la tabla filter, o bien podría fallar. Si todo es correcto, el resultado puede ser semejante a lo siguiente (dependiendo si tienes alguna regla en la tabla o no):

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
    

Si no tienes la tabla filter cargada obtendrás un error parecido a:

iptables v1.2.5: can't initialize iptables table `filter': Table \
     does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
    

Este error ya es algo más serio, puesto que para empezar nos dice que no tenemos esa funcionalidad compilada en el núcleo. Además, no es posible encontrar el módulo en nuestras rutas de acceso a los módulos. Esto puede significar que has olvidado instalar los módulos, que has olvidado ejecutar depmod -a para actualizar las bases de datos de los módulos, o que no has compilado la funcionalidad como módulo o estáticamente en el núcleo. Por supuesto pueden haber otras razones para que el módulo no esté cargado, pero estas son las más comunes. La mayoría de ellas se resuelven fácilmente. El primer problema se puede eliminar ejecutando make modules_install en el directorio de instalación del núcleo (siempre que el código fuente ya se haya compilado y los módulos ya se hayan creado). El segundo problema se resuelve ejecutando depmod -a una vez y comprobar si todo funciona a partir de entonces. El tercer problema se sale de los objetivos de estas explicaciones y debes solucionarlo por tu cuenta. Probablemente encontrarás información útil en Linux Documentation Project homepage (en inglés) o también en TLDP-ES/LuCAS (más o menos la misma página que la anterior, pero en castellano).

Otro error que puede ocurrir cuando ejecutes iptables es:

iptables: No chain/target/match by that name
   

Este error indica que no existe esa cadena, ese objetivo o esa comparación. Depende de un montón de factores, siendo el más común que te has equivocado al escribir la cadena, objetivo o comparación que deseabas. También puede ser que no hayas cargado el módulo adecuado, que no fue compilado en el núcleo o que iptables no ha sido capaz de cargar automáticamente el módulo. En general debes revisar todo lo anterior, pero también deberías revisar si la regla está correctamente escrita (en el conjunto de reglas de iptables).