Instalando un Firewall basado en phpIPtables

Actualizado Enero 2002 El siguiente documento trata de ser una guía de instalación de toda la infraestructura necesaria para conseguir tener un sistema con phpIPtables funcionando. Más que centrarnos en la instalación de PHP (recordemos que para el uso de phpIPtables necesitaremos un servidor web usando una versión de PHP 4.0 o superior), prestaremos especial atención a la instalación de iptables y a la propia instalación y configuración de phpIPtables, que a la hora de escribir este documento se encuentra en su versión 0.91.

Instalación de iptables

La instalación de iptables implica una recompilación del núcleo. La explicación del proceso queda fuera del alcance de este documento, pero en caso de duda se puede acudir a The Linux Kernel HOWTO. Supondremos a partir de este momento que las fuentes del mismo se encuentran disponibles en el directorio /usr/src/linux. Se debe tener en cuenta que el uso de iptables solo es posible en versiones del núcleo 2.4.0 y posteriores.
Podemos obtener los fuentes de iptables en http://netfilter.samba.org (la última versión en el momento de redactar este documento es la 1.2.4). Tras descargarlos, los descomprimimos de la manera habitual:
bzip2 -d iptables-1.2.4.tar.bz2
tar -xvf iptables-1.2.4.tar
cd iptables-1.2.4
Una de las características de iptables es que dispone de una serie de parches (patches) que se pueden aplicar al núcleo para añadir ciertas posiblidades, arreglar errores, etc... Por ejemplo, un parche interesante en el caso de que se deseen realizar envíos DCC cando se esté usando el IRC es el irc_conntrack_nat. Todos estos parches se encuentran bajo el directorio patch-o-matic. Por defecto se incluirán una serie de los mismos. Si queremos variar los parches que se instalarán, debemos editar el archivo Makefile y cambiar el valor de la variable PENDING_PATCHES. Tras hacer esto deberemos ejecutar lo siguiente:
make pending-patches KERNEL_DIR=/usr/src/linux/
Lo que se consigue con esto es que se compruebe cuales de los parches indicados en la variable PENDING_PATCHES del Makefile no han sido aplicados al núcleo, y que se modifiquen los fuentes del mismo en consecuencia (se nos preguntará antes de realizarse ningún cambio). El siguiente paso será, dentro de las fuentes del núcleo, realizar un make menuconfig (o make xconfig, make config, etc...), y seleccionar las siguientes opciones:
Ahora ya podemos compilar el núcleo de manera habitual.
Para terminar de instalar iptables, dentro del directorio de las fuentes del programa debemos introducir:
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
Normalmente el ejecutable iptables quedará instalado en el directorio /usr/local/sbin, por lo que para probar que ha quedado correctamente instalado podemos ejecutar:
/usr/local/sbin/iptables -L
La aplicación phpIPtables hace uso de dos utilizades de iptables, iptables-save e iptables-restore, para poder almacenar reglas en el disco y poder recuperarlas más tarde. Para su instalación debemos ejecutar, dentro del directorio de los fuentes de iptables:
make experimental KERNEL_DIR=/usr/src/linux
make install-experimental KERNEL_DIR=/usr/src/linux
Si se desea conocer más sobre el funcionamiento de iptables se puede acudir al tutorial disponible en http://people.unix-fu.org/andreasson/index.html, donde se explica su uso a nivel de línea de comandos.

Instalación y configuración de phpIPtables

Tras descargar las fuentes correspondientes de la página de Aplicaciones, las descomprimimos de la manera habitual, en alguno de los directorios que se encuentre en el interior de la estructura de directorios servida por el servidor web instalado en la máquina:
tar -xvzf phpIPtables-0.91.tar.gz
Lo que se debe hacer a continuación es leer el archivo INSTALL y realizar los cambios precisos en el sistema.

¿Qué significan los campos de configuración de la parte de Acceso de config.inc?

phpIPtables fue creado pensando en la administración remota de un firewall. Para ello es preciso que el que administre el firewall, pueda acceder mediante el protocolo http a la máquina correspondiente, aunque este acceso no esté permitido al resto de personas. Bajo la sección de Acceso (la primera dentro del archivo config.inc) indicamos los datos necesarios para que esto sea posible:

Almacenamiento de las reglas

phpIPtables dispone de un mecanismo que permite almacenar en un fichero las reglas actuales para poder ser recuperadas más tarde. Sin embargo, si se desea que las reglas de iptables se mantengan tras reinicializar la máquina, esto no será suficiente, y se deberá crear un script de inicio. Un posible script de inicio muy básico podría ser el siguiente:


#!/bin/sh
#Script que almacena las reglas de iptables en el archivo indicado en la
#variable DATOS al apagar la máquina y las recupera al
#reinicializarla


DATOS = /etc/iptables

case "$1" in
start)
modprobe ip_conntrack
modprobe iptable_nat
modprobe ipt_stat
#Aquí podemos añ los módulos necesarios
/usr/local/sbin/iptables-restore <$DATOS
;;

stop)
#Descargamos los módulos en orden inverso
modprobe -r ipt_stat
modprobe -r iptable_nat
modprobe -r ip_conntrack
/usr/local/sbin/iptables-save >$DATOS
;;

reload)
$0 stop;
$0 start;
;;

restart)
$0 stop;
$0 start;
;;

*)
echo "Uso: $0 {start|stop|restart|reload}"
exit 1
;;
esac

exit 0

Como se puede observar el script también es el encargado de cargar los módulos necesarios (mediante el comando modprobe). Los módulos ip_conntrack e iptable_nat son necesarios para que funcione la parte de phpIPtables referente a NAT. Del mismo modo, el módulo ipt_state es necesario para emplear la funcionalidad incluida a partir de la versión 0.92 de filtrado según el estado de la conexión (NEW, STABLISHED, RELATED o INVALID).

[VOLVER]