2.3. Configuración de la zona de usuario

Para empezar veremos cómo se compila el paquete iptables. Es importante comprender que la mayor parte de la configuración y compilación de iptables va de la mano de la configuración y compilación del núcleo (kernel). Determinadas distribuciones de Linux vienen con el paquete iptables preinstalado, como ocurre por ejemplo con Red Hat. Sin embargo en esta distribución por defecto está desactivado y ahora veremos cómo activarlo.

2.3.1. Compilando las aplicaciones de la zona de usuario

Empieza por descomprimir (desempaquetar) el paquete iptables. Para este ejemplo hemos utilizado el paquete iptables 1.2.6a y el núcleo 2.4 sin extras. Descomprime como es habitual, utilizando el comando bzip2 -cd iptables-1.2.6a.tar.bz2 | tar -xvf - (aunque también puedes teclear tar -xjvf iptables-1.2.6a.tar.bz2, que con las versiones más recientes de tar dará el mismo resultado). El paquete debería haberse descomprimido en un nuevo directorio llamado iptables-1.2.6a. Para una explicación más completa de la compilación y la forma de hacer que funcione el programa, léete el fichero iptables-1.2.6a/INSTALL.

Tras ésto, tienes la opción de configurar e instalar módulos/opciones extra en el núcleo. El procedimiento que describiremos sólo comprobará e instalará parches estándar que están pendientes de incluirse en el núcleo; existen otros parches de tipo experimental que sólo estarán disponibles al seguir otro tipo de configuración.

Note

Algunos de estos parches son realmente experimentales y no sería una buena idea instalarlos. Sin embargo, hay montones de comparaciones y objetivos extremadamente interesantes en este punto de la instalación, así que no tengas miedo de, al menos, echarles un vistazo.

Para empezar a instalar, ejecutaremos un comando similar al siguiente desde el directorio raíz del paquete iptables:

make pending-patches KERNEL_DIR=/usr/src/linux/

La variable KERNEL_DIR debería indicar la localización actual de tu núcleo. Normalmente este directorio será /usr/src/linux/, aunque puede ser diferente y lo más probable es que ya sepas dónde se encuentra el código fuente del núcleo.

Note

Con el comando anterior sólo añadiremos determinados parches que de todas formas están a punto de entrar en el núcleo. Puede que hayan más parches y añadidos que los desarrolladores de Netfilter estén a punto de añadir al núcleo, pero que todavía no se encuentran listos para dar este paso. Una forma de instalar estos extras es mediante el siguiente comando:

make most-of-pom KERNEL_DIR=/usr/src/linux/

De esta forma se preguntará si se instalan algunos añadidos de lo que en la jerga de Netfilter se llaman patch-o-matic, pero eludiendo los parches más extremos, ya que pueden causar la desintegración del núcleo. Date cuenta que se ha dicho "se preguntará" porque ésto es lo que hará el comando: preguntará antes de cambiar algo en el código fuente del núcleo. Para poder instalar todo el material presente en el patch-o-matic necesitarás ejecutar el siguiente comando:

make patch-o-matic KERNEL_DIR=/usr/src/linux/

No olvides leer completamente la ayuda de cada parche antes de hacer nada. Algunos parches destruyen a otros parches, mientras que otros pueden destruir el núcleo si se usan junto a otros determinados parches del patch-o-matic, etc.

Note

No es imprescindible seguir los pasos anteriores los pasos anteriores, por éllo puedes ignorarlos si no quieres "parchear" tu núcleo. Sin embargo, hay cosas muy interesantes en el patch-o-matic a las que sería conveniente echar un vistazo, por lo que no estaría de más ejecutar los comandos aunque sólo fuera para ver lo que contienen.

En este punto ya has terminado la parte de la instalación referida al patch-o-matic y es momento de compilar un nuevo núcleo utilizando los nuevos parches que hayas añadido al código fuente. No olvides configurar de nuevo el núcleo, ya que probablemente los nuevos parches no se habrán añadido aún a las opciones configuradas. Por otra parte, si quieres puedes compilar primero el programa iptables y dejar para el final la compilación del núcleo.

Compila ahora el programa de zona de usuario iptables. Para éllo ejecuta el siguiente comando:

make KERNEL_DIR=/usr/src/linux/

La aplicación de zona de usuario debería compilarse correctamente. Si no es así, tendrás que buscar soluciones por tí mismo, o puedes subscribirte a la lista de correo de Netfilter (en inglés), dónde tendrás la oportunidad de pedir que alguien te ayude a solucionar tus problemas. Puede que haya algo que no vaya bien durante la instalación, pero no te preocupes: intenta pensar de manera lógica sobre el problema y averigua qué es lo que va mal, o pídele a alguien que te ayude.

Si todo ha ido bien, estarás preparado para instalar los archivos binarios. Para éllo, escribe:

make install KERNEL_DIR=/usr/src/linux/

En principio todo debería funcionar en el programa. Para utilizar los cambios efectuados en iptables deberías recompilar y reinstalar tu núcleo y sus módulos, si es que todavía no lo has hecho. Para una explicación más detallada de la instalación a partir del código fuente de las aplicaciones de zona de usuario, lee el archivo INSTALL que viene con el código fuente, pues contiene excelente información sobre todo lo referente a la instalación.

2.3.2. Instalación en Red Hat 7.1

La distribución Red Hat en su versión 7.1 viene precompilada con un núcleo 2.4.x que contiene a Netfilter e iptables. Además, contiene los programas básicos de zona de usuario, así como los ficheros de configuración necesarios para ejecutarlos. Sin embargo, los de Red Hat han desactivado el paquete completo y en su lugar utilizan el módulo ipchains por compatibilidad con versiones anteriores. Molesto, por no decir otra cosa, y fuente de multitud de consultas en las listas de correo preguntando por qué no funciona iptables. Así pues, echemos un vistazo a cómo desactivar el módulo ipchains y cómo instalar iptables en su lugar.

Note

La instalación por defecto de Red Hat 7.1 incluye una decepcionante versión antigua de las aplicaciones de zona de usuario, por lo que es posible que desees compilar una nueva versión de estas aplicaciones, además de instalar un núcleo nuevo y personalizado antes de exigirle el máximo rendimiento a iptables.

Antes de empezar tendrás que desactivar los módulos de ipchains de manera que no vuelvan a arrancar de ahora en adelante. Para conseguirlo deberás cambiar algunos nombres de fichero en los subdirectorios existentes en /etc/rc.d/. Con el siguiente comando tendrás suficiente:

chkconfig --level 0123456 ipchains off

Una vez ejecutado modificarás todos los enlaces virtuales ("soft links") que apuntan al script /etc/rc.d/init.d/ipchains y los convertirás en K92ipchains. La primera letra, que por defecto es una S, le indica a los scripts de inicio que se ejecuten. Al cambiarla por una K se le indica a los scripts que terminen el servicio, o que no lo ejecuten si no estaba arrancado. De esta forma el servicio ya no arrancará nunca.

Sin embargo, para detener un servicio que se está ejecutando en este momento necesitamos introducir otro comando: service, que puede utilizarse para actuar sobre servicios actualmente en ejecución. Así pues, para parar el servicio ipchains escribiremos:

service ipchains stop

Por último, para arrancar el servicio iptables necesitamos saber en qué niveles de ejecución ("run-levels") queremos que se inicie. Normalmente serán los niveles 2, 3 y 5, que se usan para:

Para conseguir que iptables se ejecute en estos niveles de ejecución, escribiremos:

chkconfig --level 235 iptables on

Es decir, instruímos a iptables para que se ejecute en los niveles 2, 3 y 5. Si quieres que se ejecute en cualquier otro nivel, deberás añadirlo al comando anterior. Sin embargo, ninguno de los otros niveles debería usarse para ejecutar iptables, por lo que en realidad no necesitas activarlo en éllos: el nivel 1 es el modo monousuario (1 sólo usuario), empleado cuando necesitas arreglar una instalación. El nivel 4 no debería usarse y el nivel 6 es para apagar el ordenador.

Para activar el servicio iptables, ejecutaremos:

service iptables start

No hay ninguna regla en el script de iptables. Para añadirlas en Red Hat 7.1 normalmente se emplean dos métodos. El primero es editar el script /etc/rc.d/init.d/iptables, teniendo como efecto secundario no deseado el hecho de que borrarás todas las reglas si actualizaste el paquete iptables mediante un RPM. El otro método consistiría en cargar/crear el conjunto de reglas y luego guardarlo con el comando iptables-save, de forma que después se carguen automáticamente mediante los scripts rc.d.

Primero explicaremos cómo configurar iptables mediante el socorrido método de copiar y pegar al script "init.d" de iptables. Para añadir reglas que se tengan que ejecutar cuando el sistema arranca el servicio, añádelas en la sección "start)", o en la función "start()". Ten en cuenta que si añades las reglas en la sección "start)" no debes olvidar parar la función "start()" dentro de esa misma sección "start)". Además, tampoco olvides editar la sección "stop)" para indicarle al script qué debe hacer, por ejemplo cuando es sistema se esté cerrando (apagando), o cuando se entre en un nivel de ejecución que no necesite de iptables. Por último, no olvides repasar las secciones "restart" y "condrestart". También debes tener en cuenta que todo este trabajo no servirá de nada si, por ejemplo, actualizas automáticamente tus paquetes mediante el Red Hat Network, o si actualizas mediante el paquete RPM de iptables.

En cuanto al segundo método de realizar la configuración, se basa en los siguientes pasos: primero crea un conjunto de reglas en un fichero de script de línea de comandos (un script de shell), o bien directamente con iptables, que cumpla con tus necesidades y empieza a experimentar con él durante un tiempo. Cuando tengas una configuración que funcione correctamente (o al menos que tú creas que no tiene errores), utiliza el comando iptables-save. Puedes utilizar: iptables-save > /etc/sysconfig/iptables, con lo que grabarías el conjunto de reglas en el fichero /etc/sysconfig/iptables. Este fichero lo usará en el futuro el script rc.d de iptables para cargar de nuevo el conjunto de reglas. Otra forma de conseguir un resultado equivalente es mediante el comando service iptables save, que automáticamente guardará el script en el fichero /etc/sysconfig/iptables. Así, la próxima vez que reinicies el sistema, el script rc.d de iptables utilizará el comando iptables-restore para cargar el conjunto de reglas desde el fichero /etc/sysconfig/iptables. Atención: no mezcles ambos métodos, ya que se pueden perjudicar gravemente el uno al otro y dejar la configuración del cortafuegos completamente inútil.

Cuando hayas terminado todos estos pasos, puedes desinstalar los paquetes ipchains e iptables preinstalados. De esta forma no permitiremos al sistema que mezcle las nuevas aplicaciones de zona de usuario de iptables con las viejas versiones preinstaladas. Sin embargo, este paso sólo es necesario si vas a instalar iptables desde el código fuente. No es raro que el paquete nuevo se mezcle con el viejo, puesto que la instalación basada en rpm instala el paquete en directorios no estándar, de forma que la nueva instalación no sobreescribirá a la vieja. Para efectuar la desinstalación, escribe:

rpm -e iptables

Y como no tiene mucho sentido mantener instalado ipchains cuando no lo vas a utilizar nunca más, desinstálalo de la misma forma:

rpm -e ipchains

Tras todo ésto, habrás finalizado la actualización del paquete iptables mediante el código fuente, habiendo seguido las instrucciones del código. Además ningún viejo ejecutable, librería o fichero auxiliar permanecerá instalado.