bastion-firewall FAQ 1.0

Copyright © 2004 Jose María López Hernández <jkerouac@bgsec.com>

Copyright © 2004 bgSEC (www.bgsec.com)

Este documento esta protegido bajo la licencia pública FDL de la Free Software Foundation.

bastion-firewall ha sido liberado bajo la licencia pública GPL de la Free Software Foundation.

El titular del copyright da permiso para que este documento sea copiado, distribuido y/o modificado bajo los terminos de la GNU Free Documentation License (FDL), siempre que se incluya una nota donde se especifiquen los autores originales del documento y el título del mismo. El texto de la licencia en inglés se incluye en este mismo documento y tiene validez legal plena.

Este documento y cualquier código fuente que se incluya se distribuyen con la esperanza de que resulten útiles, pero SIN NINGUNA GARANTIA; sin incluso la garantía implícita de COMERCIALIZACIÓN o ADECUACION PARA UN PROPÓSITO EN PARTICULAR. Si necesita más detalles consulte la GNU Free Documentation License (FDL) y la GNU General Public License (GPL) de la Free Software Foundation.



Tabla de Contenidos

Sobre bastion-firewall
Sobre los autores de bastion-firewall y este tutorial

  1. Introducción
  2. Características de bastion-firewall
  3. Conceptos de bastion-firewall

FAQ

  1. ¿Que debo hacer para usar bastion-firewall en mi empresa?
  2. ¿Puede usarse bastion-firewall como firewall personal?
  3. ¿Cual es la licencia de bastion-firewall?
  4. ¿Que es UNbeatABLE CD? ¿Sustituye a bastion-firewall?
  5. ¿Puede bastion-firewall usarse para una DMZ?
  6. ¿Como integro bastion-firewall y LVS?
  7. ¿Porque tarda tanto en cargar la pagina de estadísticas?
  8. ¿Como genero estadísticas de un servicio que quiero bloquear?
  9. ¿Las estadísticas incluyen todo el tráfico para cada servicio?
  10. ¿Sustituye la funcionalidad DNAT a una DMZ?
  11. ¿Puedo usar bastion-firewall en Debian/Slackware/Red Flag/etc?
  12. ¿Debería compilar bastion-firewall desde las fuentes o usar los binarios?
  13. ¿Puedo usar mi propio servidor apache y PHP 4 para bastion-firewall-interface?
  14. ¿Cuanta CPU/Memoria consume bastion-firewall-stats?
  15. ¿Porque mi bastion-firewall produce errores en el codigo bash después de configurarlo?
  16. ¿Debo configurar bastion-firewall desde cero o usar los templates?
  17. ¿Como puedo intercambiar el flujo de tráfico y hacer que EXT sea mi red?
  18. ¿Puedo modificar bastion-firewall y crear mi propio firewall o distribución como UNbeatABLE CD?
  19. ¿Puedo usar el script generado por bastion-firewall como firewall independiente?
  20. ¿El script generado por bastion-firewall produce el mismo resultado que arrancar bastion-firewall?
  21. ¿Como uso la funcionalidad de listas de IPs? ¿Puedo introducir dominios en las listas?
  22. ¿Es fiable al cien por cien la funcionalidad de las tablas?
  23. ¿Como puedo escribir un plugin o addon para bastion-firewall?
  24. ¿Como y donde debería añadir mi propio código a bastion-firewall?
  25. ¿Debería activar todas las opciones de protección de los ficheros de configuración?
  26. ¿Porque bastion-firewall no tiene una herramienta para vigilar los logs?
  27. ¿Como puedo rotar los logs de bastion-firewall?
  28. ¿Porque mi firewall genera tantas entradas en mis ficheros de logs?
  29. ¿Que utilidad tiene la funcionalidad de ulog?
  30. ¿Para que sirve snort-inline y la funcionalidad QUEUE?
  31. ¿Como puedo hacer que el firewall ignore el tráfico para una red o un interface?


Sobre bastion-firewall

bastion-firewall es un firewall desarrollado por Jose María López Hernández <jkerouac@bgsec.com> y bgSEC (www.bgsec.com) basado en Netfilter e iptables y liberado bajo la licencia GPL de la Free Software Foundation.

bastion-firewall  está pensado como firewall llave en mano para usuarios finales así como firewall completamente customizable para usuarios avanzados. La configuración por medio de ficheros bash permite una gran flexibilidad en la generación de reglas. El código del firewall esta escrito en un 99 por ciento en bash, con una pequeña parte en C para obtener los datos de Netfilter y generar las paginas con las gráficas de estadísticas de tráfico, este planteamiento permite a un usuario que pueda programar en bash el cambiar bastion-firewall para adaptarlo a cualquier sistema de producción. bastion-firewall ha sido liberado por bgSEC bajo licencia GPL y su documentación bajo licencia FDL, así que puede cambiar cualquier aspecto de bastion-firewall y usarlo en su sistemas de producción o liberarlo bajo licencia GPL manteniendo el Copyright original.

Como ejemplo de la flexibilidad de bastion-firewall bgSEC ha liberado UNbeatABLE CD bajo licencia GPL, una adaptación de la distribución Knoppix 3.3 con bastion-firewall integrado y que permite usar el firewalll desde el CD sin necesidad de disco duro. UNbeatABLE CD es una demostración de tecnología y debe considerarse como tal, puede tomarse como ejemplo de la flexibilidad del código o como punto de partida para generar firewalls ad-hoc para sistemas de producción.

bastion-firewall 1.0 ha sido considerado apto para sistemas de producción y se encuentra funcionando en varias máquinas con buenos resultados, también ha sido utilizado para generar scripts que son firewalls en si mismos y que después de editados y adaptados se encuentran funcionando en sistemas de producción con éxito.

bastion-firewall 1.0 ha sido desarrollado en España por Jose María López Hernández <jkerouac@bgsec.com> y bgSEC (www.bgsec.com) y por tanto los ficheros de configuración, la documentación y los comentarios del código están en español. Desde el comienzo del proyecto se pensó en traducir todo el firewall al idioma ingles, y se han adaptado las ordenes y los nombres de los ficheros para facilitar el cambio de idioma sin tener que cambiar la estructura general del firewall. En este momento se encuentran traducidos al ingles los ficheros de configuración con toda su ayuda, las páginas de manual, la ayuda de las órdenes, parte del interface gráfico bastion-firewall-interface y bastion-firewall-stats en su totalidad. También se han traducido los ficheros que acompañan a la distribución y la guía rápida de configuración. Esto debería bastar para que los angloparlantes puedan usar bastion-firewall sin ningún tipo de problemas, pero queda en el TODO la traducción completa de los comentarios del código, del tutorial, de la ayuda y completar la traducción del interface gráfico bastion-firewall-interface.


Sobre los autores de bastion-firewall y este tutorial

bastion-firewall, bastion-firewall-interface y bastion-firewall-stats han sido creados por Jose María López Hernández <jkerouac@bgsec.com> y bgSEC (www.bgsec.com) y liberados bajo licencia GPL (codigo) y FDL (documentación).

bastion-firewall-interface funciona sobre el servidor HTTP apache y PHP4, deberá consultar las licencias de ambos programas si quiere utilizarlos en su sistema de producción. Tanto apache como PHP4 son Copyright de sus propietarios y no tienen ninguna relación con bgSEC, aunque sus licencias permiten que sean distribuidos junto al firewall sin modificar.

Tanto ulogd como rrdtool son parte integrante de bastion-firewall pero sus Copyright pertenecen a sus propietarios, deberá consultar sus licencias si quiere usarlos en su sistema de producción con bastion-firewall-stats. Se distribuyen sin modificar en forma binaria y codigo fuente, en los ficheros de distribución se pueden consultar las licencias de cada uno de los programas.

Los addons hogwash, snort-inline, snort, pdumpq, Netfilter e iptables y los ficheros de firewall stressing (ethereal, fragrouter, ftest/ftestd, hping2, nasl, nmap/nmapfe, sing, snot y tcpdump) son Copyright de sus propietarios y no tienen ninguna relación con bgSEC. Se aconseja su uso para probar el firewall y se distribuyen sin ninguna modificación como addons de bastion-firewall. Su uso es opcional y no forman parte de bastion-firewall, se distribuyen como binarios y como código fuente sin modificar. En la distribución de cada programa se puede consultar la licencia y el Copyright de cada uno de ellos.


1. Introduccion

bastion-firewall es un firewall completo para el Sistema Operativo Linux basado en Netfilter e Iptables. Las premisas sobre las que se ha desarrollado bastion-firewall son las siguientes:

2. Características de bastion-firewall

Las características principales de bastion-firewall son entre otras:

Estas son simplemente las características más importantes de bastion-firewall, para más información consultar los ficheros de configuración y si tiene conocimientos de bash el codigo de firewall. De cualquier forma la manera más gráfica de ver como funciona el firewall es configurandolo someramente y luego estudiando el script que se ha creado, y comparando las opciones que hemos especificado con las reglas iptables que se han quedado. También podemos ver con iptables -L como se organizan las reglas, pero puede ser complicado seguir el flujo del tráfico en este momento, todo esto se explicará en las siguientes secciones.


3. Conceptos de bastion-firewall


El funcionamiento de un firewall es simple, se trata de un dispositivo que se introduce entre dos redes y que regula el tráfico que puede pasar de una red a otra, teniendo en cuenta una serie de reglas predeterminadas que indican que tráfico debe pasar y que tráfico debe bloquearse. Estas reglas pueden indicar que se bloquee o se permita el tráfico según una serie de parámetros que pueden ser entre otros: la dirección de origen, la dirección de destino, el interface de entrada, el interface de salida, el puerto de origen, el puerto de destino, etc.

bastion-firewall introduce el concepto de flujos de tráfico, entendiendo por flujo el flujo de datos que va de una red o una máquina a otra red u otra máquina, atravesando siempre el firewall. Estos flujos de datos se ordenan por medio de cuatro datos, el interface de entrada, el interface de salida, la red de origen y la red de destino, con lo que tenemos los siguientes flujos de datos:

lan-to-fw : Tráfico de la red LAN interna al firewall
fw-to-lan : Tráfico del firewall a la red LAN interna
ext-to-fw : Tráfico de la red EXT externa al firewall
fw-to-ext : Tráfico del firewall a la red EXT externa
lan-to-ext : Tráfico de la red LAN interna a la red LAN externa
ext-to-lan : Tráfico de la red EXT externa a la red LAN interna

Y por último un tipo de flujo especial que sirve para hacer DNAT (Destination Network Address Translation) de una red o maquina exterior de la red EXT a una maquina de la red LAN interna:

ext-to-dnat : Tráfico DNAT de la red EXT externa a una máquina de la red LAN interna

Estos tráficos son los que incluiremos en las variables de la configuración para habilitar el tráfico en una dirección para un flujo de datos, teniendo en cuenta que luego pueden llevar las siguientes opciones:

:drop  Bloquear el tráfico (para hacer solo log o estadísticas de trafico)
:log  Hacer log de las conexiones para este tipo de tráfico
:stats  Sacar estadísticas para este tipo de tráfico (para luego crear gráficas de tráfico)
:ulog  Mandar el trafico a ulogd para que cree un log en una base de datos o en un fichero de texto plano

Estos flujos de tráfico son para EL INICIO DE LA CONEXION, pues como el firewall usa la facilidad de Connection Tracking (conntrack) de Netfilter el tráfico de vuelta se permite siempre que se haya permitido el inicio de la conexión.

Por ejemplo: ext-to-lan:log:stats permitiría que se iniciara una conexión desde la red exterior EXT a la interior LAN y el trafico entre la red EXT y LAN y también por medio de conntrack el tráfico de LAN a EXT. Conntrack es lo suficientemente hábil como para llevar cuenta de las conexiones y sólo habilita el tráfico para una conexión en particular, por lo que se habla de Stateful Firewall (Firewall con estado), pues recuerda cuando se ha establecido una conexión (estado ESTABLISHED) e incluso cuando es otra conexión relacionada con la primera, como en el ftp (estado RELATED). El firewall permite por tanto con esta regla el trafico de EXT a LAN  por ser el inicio de la conexión y el de LAN a EXT por ser ESTABLISHED. Además el firewall apunta en los logs en el inicio de la conexión y crea estadísticas de todo el tráfico que se produce en la conexión. Netfilter guarda una tabla en /proc/net/ip_conntrack con las conexiones aceptadas, las establecidas y las relacionadas, para mantener en todo momento el estado del firewall y saber que conexiones permitir y cuales no.

Graficamente los tipos de tráfico que tenemos son:


trafico

donde cada tipo de tráfico es el explicado más arriba, y se entiende que cada dirección de tráfico indica el inicio de la conexión, habilitandose el tráfico en el sentido contrario por medio de Connection Tracking.

Veamos tres ejemplos gráficamente de flujos o direcciones de tráfico:

lan-to-ext


lan-to-ext


fw-to-lan

fwtolan


fw-to-ext


fwtoext







FAQ




1. ¿Que debo hacer para usar bastion-firewall en mi empresa?


Simplemente descargueló de www.bgsec.com o cualquier mirror que encuentre, instaleló en su máquina y configureló. No necesita nada más. La licencia de bastion-firewall permite su uso personal y comercial. Si no esta familiarizado con el concepto de Software Libre y la licencia pública GPL debería leer esta licencia (incluida con la documentación de bastion-firewall tanto en ingles -la version legalmente vinculante- o en español) o visitar el sitio de la Free Software Foundation, donde puede descargarse la licencia GPL y toda la información necesaría sobre el concepto de copyleft y el Software Libre en general.

También puede ponerse en contacto con nosotros en consultoria@bgsec.com para cualquier consulta que considere necesaria sobre el uso, distribución o modificación de bastion-firewall y sus addons.

2. ¿Puede usarse bastion-firewall como firewall personal?


bastion-firewall puede usarse perfectamente como firewall personal, solo es necesario usar el template llamado soho (small office / home office) y cambiar media docena de variables para tener un firewall personal perfectamente capaz. También puede optar por no usar el template y configurar completamente el firewall. Es conveniente leer al menos la documentación que se incluye en los ficheros de configuración para poder configurar el firewall, y es muy conveniente leer el tutorial de bastion-firewall para comprender el concepto de flujo de tráfico y de reglas que implementa bastion-firewall. Si siempre usa las mismas reglas o estas no cambian demasiado tambien puede usar bastion-firewall para crear un script que es un firewall en si mismo y utilizar este script como firewall, a la manera de por ejemplo fwbuilder.

3. ¿Cual es la licencia de bastion-firewall?


bastion-firewall ha sido liberado bajo la licencia pública GPL para el código y bajo la licencia FDL para la documentación. Puede consultar ambas licencias en los ficheros incluidos en la documentación. Si tiene dudas puede visitar el sitio web de la Free Software Foundation. Básicamente esta licencia le permite usar bastion-firewall tanto de forma personal como comercial y modificarlo siempre que el resultado de la modificación sea liberado bajo la  licencia GPL para el código y FDL para la documentación. El copyright del código  es propiedad de Jose María López Hernández <jkerouac@bgsec.com> y bgSEC (www.bgsec.com) y para cualquier consulta puede dirigirse a estas direcciones. La licencia GPL permite usar y modificar el código pero mantiene el copyright del código original, no confundir con otro tipo de licencias o con el software de dominio público.

Hay una excepción a la GPL y es que usted puede modificar bastion-firewall en la forma que desee y usarlo internamente en su empresa sin necesidad de liberarlo como GPL, siempre que no distribuya la modificación y solo la use internamente, aunque sea para uso comercial.

bastion-firewall esta dividido en dos partes, una parte desarrollada por bgSEC que constituye el firewall en si mismo y que esta licenciado como GPL y una serie de addons que se integran con bastion-firewall pero que no son parte de él, y que por tanto tienen sus propias licencias y propietarios de Copyright.

Los addons de bastion-firewall son Copyright de sus autores y propietarios, y debe consultar uno por uno las licencias para ver si puede usarlos en la forma que desea. En concreto ha de ser muy cuidadoso con la modificación de los addons, pues depende enormemente del tipo de licencia que tenga cada addon.

4. ¿Que es UNbeatABLE CD? ¿Sustituye a bastion-firewall?


UNbeatABLE CD es una demostración tecnológica de la flexibilidad de bastion-firewall y de como puede integrarse en un sistema de producción fácilmente y sin apenas modificaciones o configuración. No sustituye a bastion-firewall pues no es más que una distribución Knoppix con bastion-firewall incorporado, por tanto UNbeatABLE CD es bastion-firewall integrado en una distribución, nada más. Para que pueda correr desde un medio de solo lectura como un CD Live del tipo Knoppix bastion-firewall ha sido ligeramente modificado para poder salvar y recuperar la configuración de diversas formas y poder mantener el estado del firewall. UNbeatABLE CD permite tener un firewall funcionando en una máquina en un mínimo de tiempo, simplemente inserte el CD en el lector, arranque la máquina y tendrá a bastion-firewall funcionando, con una pequeña configuración tendrá un firewall completo en unos minutos. Su utilidad puede ser para hacer demostraciones, para firewalls que no se van a dejar permanentemente funcionando o para usarlo en máquinas que tienen otra función pero que queremos que en un momento dado funcione como firewall.

UNbeatABLE CD se presenta en dos versiones, una con el firewall nada más y un conjunto mínimo de herramientas de administración, y otra versión preparada para ser usada como herramienta de analisis de seguridad y para realizar firewall stressing o tests de penetración. Esta versión incluye gran cantidad de herramientas de seguridad y de red y son Copyright y propiedad de sus autores. Debe consultar las licencias de cada una de ellas así como de todo el software que se incluye en los CDs si quiere modificar bastion-firewall.

5. ¿Puede bastion-firewall usarse para una DMZ?


bastion-firewall es perfectamente apto para ser usado en una DMZ. Simplemente instale bastion-firewall en el firewall exterior y en el firewall interior de la DMZ y configure los dos firewalls con las reglas necesarias para la DMZ. Tenga en cuenta que en algunos casos puede ser más sencillo y útil el usar la funcionalidad DNAT de Netfilter para mandar el tráfico a una maquina dentro de la LAN que tener una LAN completa dentro del perímetro de una DMZ. Es conveniente que si alguno de los firewalls perimetrales de la DMZ solo va a hablar con una serie de máquinas se use la funcionalidad de restringir por MAC para asegurar una máxima seguridad. También es necesario activar sólo los servicios imprescindibles para cada firewall, evitando así que la DMZ se convierta en un firewall detrás de otro firewall, en vez de definir un perímetro donde tenemos unas reglas diferentes a las de la LAN.

6. ¿Como integro bastion-firewall y LVS?


La forma más adecuada de integrar bastion-firewall y LVS (Linux Virtual Server) es usar la funcionalidad NAT de LVS y usar como director a la máquina donde tenemos el firewall, así podemos usar el plugin mark.bsf de marcado de paquetes para marcar los paquetes según los parametros que consideremos oportunos y luego administrar el tráfico que se va a redirigir a los servidores reales con el LVS.

7. ¿Porque tarda tanto en cargar la pagina de estadísticas?


Si ha definido bastantes servicios con el parametro :stats para que se generen gráficas de tráfico para esos servicios la página que contendrá estas gráficas será bastante grande y el navegador necesitará un tiempo para cargarla. Las pruebas que hemos realizado con Internet Explorer, Mozilla y sus variantes y Konqueror han sido positivas, con un tiempo razonable de carga y sin bloqueos, incluso con páginas muy grandes con gran cantidad de gráficas.

8. ¿Como genero estadísticas de un servicio que quiero bloquear?


Simplemente especifique las opciones :drop:stats en el parámetro del flujo de tráfico en el servicio que quiere bloquear y se generaran estadisticas de los intentos de comunicar con este servicio a través del firewall. Ejemplo: ext-to-lan:drop:stats creará gráficas de los intentos de comunicar con la lan desde el exterior pero bloqueará todo el tráfico. También se puede añadir :log para hacer log de los intentos de conexión.

9. ¿Las estadísticas incluyen todo el tráfico para cada servicio?


Si, porque se las reglas de las que bastion-firewall-stats lee los contadores para cada servicio se insertan antes (en las cadenas) de las reglas que aceptan las conexiones que ya han sido aceptadas y que van a ser tratadas como tráfico ESTABLISHED o RELATED. Por tanto todo el tráfico que se produce tanto en una y otra dirección de una conexión aceptada es tenido en cuenta para generar las estadísticas. No es posible especificar en cambio que solo se tenga en cuenta el tráfico en una dirección. Ejemplo: HTTP=lan-to-ext:stats creará gráficas con todo el tráfico HTTP que va de la red LAN a EXT y de EXT a LAN para este mismo servicio. En resumen el sistema de estadísticas se salta el sistema de aceptar tráfico ESTABLISHED o RELATED por connection tracking (conntrack) para poder ver todo el tráfico y no sólo las conexiones iniciales.

10. ¿Sustituye la funcionalidad DNAT a una DMZ?


En algunos casos sí y en otros no, depende enormemente del tipo de red que queramos implantar, de la seguridad que deseemos y de lo fino que queramos ajustar esta seguridad. Por ejemplo si solo vamos a tener un servidor web bien configurado podemos instalarlo dentro de la LAN y usar DNAT para mandar el tráfico desde el firewall a este servidor con una seguridad bastante aceptable. Si vamos a tener varios servidores de varios tipos (HTTP, SMTP, LDAP, etc) o necesitamos una seguridad muy alta en la red entonces necesitaremos una DMZ, con dos bastion-firewall perimetrales, un red dentro del perímetro y una red interna, y con los firewalls ajustados con la máxima seguridad, permitiendo sólo los servicios necesarios en cada caso. Siempre que sea posible es preferible el tener una DMZ, pero si tenemos limitaciones económicas, técnicas o de administración es mucho más barato y sencillo usar DNAT.

11. ¿Puedo usar bastion-firewall en Debian/Slackware/Red Flag/etc?


bastion-firewall está escrito en bash y con un pequeño daemon escrito en C y puede por tanto correr prácticamente cualquier distribución Linux que tenga las herramientas básicas y un kernel con Netfilter. La única diferencia puede estar en donde estarán los ficheros de inicio, que será en /etc/rc.d/init.d para las versiones derivadas de RedHat y en /etc/init.d para las derivadas de debian.

Si algún addon usa librerías que no existen en el sistema deberán instalarse desde la distribución o el código fuente, pero no suele ser necesario, pues no usan ningún tipo de librería extraña.

12. ¿Debería compilar bastion-firewall desde las fuentes o usar los binarios?


Para bastion-firewall base no hay problema en usar una u otra opción, pues el 99 por ciento del código es bash y es interpretado, y el resto, bastion-firewall-stats es un pequeño programa en C que sólo necesita tener las librerias e includes de iptables y rrdtool (incluidas en el paquete) para ser compilado en cualquier sistema.

Para los addons hay que remitirse a la documentación de cada uno de los programas. Para cada programa o addon incluido en bastion-firewall se adjunta un fichero build que ejecutado llama al script configure con las opciones correctas, luego simplemente se hace make y make install y ya tenemos el addon o programa instalado. No debería ser muy complicado compilar por tanto los addons desde el código fuente, pero por comodidad se recomienda usar los binarios precompilados.

13. ¿Puedo usar mi propio servidor apache y PHP 4 para bastion-firewall-interface?


Si, el servidor apache y el PHP 4 que se adjuntan como addons de bastion-firewall son versiones compiladas con el mínimo de opciones necesarias para ocupar poca memoria y ser más simples de compilar y mantener, pero puede usarse cualquier servidor apache y PHP 4 que incluyan la funcionalidad mínima que bastion-firewall-interface necesita. En concreto los que incluyen las distribuciones más comunes tienen toda esta funcionalidad y mucho más, por lo que serían perfectamente válidos.

14. ¿Cuanta CPU/Memoria consume bastion-firewall-stats?


bastion-firewall-stats es un daemon que queda cargado en memoria cuando se arranca para actualizar las bases de datos de rrdtool y crear las gráficas de estadísticas de tráfico, llamando a una serie de scripts para realizar este trabajo. Por tanto debemos distinguir dos estados: bastion-firewall-stats permanece normalmente inactivo consumiendo más o menos un mega de memoria cuando esta esperando, luego cada cinco minutos actualiza las bases de datos mediante una serie de llamadas a rrdtool que consumen poca CPU y memoria, y cada hora actualiza las gráficas y la pagina web también con llamadas a rrdtool. Para crear las gráficas consume algo más de CPU y memoria que para actualizar las bases de datos, pero tampoco es mucha. Los contadores de las cadenas de estadísticas de Netfilter son leidos desde el código en C y apenas se consume CPU.

En resumen bastion-firewall-stats consume muy pocos recursos del sistema incluso aunque tengamos definidas gran cantidad de reglas de estadísticas.

15. ¿Porque mi bastion-firewall produce errores en el codigo bash después de configurarlo?


Hay que ser muy cuidadoso al cambiar las variables en los ficheros de configuración, porque son tratados como código bash, y han de seguir por tanto las mismas reglas que cualquier código bash. Unas comillas desemparejadas, una linea continuada sin usar \ o cualquier error similar en lenguaje shell provocará errores extraños al cargarse el firewall. Si el firewall da errores y no hay razón aparente deben repasarse las variables que se hayan cambiado en los ficheros de configuración y comprobar que no se ha cometido ningún error al editarlas.

16. ¿Debo configurar bastion-firewall desde cero o usar los templates?


Depende. Si su configuración es similar a la pensada para alguno de los templates entonces debería usar el template y se ahorrará el editar muchas variables, pues vienen configurados con la mayoría de opciones comunes para cada tipo de configuración. Si su configuración es especial o desea afinar más el firewall puede usar un template y ajustar todas las variables necesarias o simplemente editar los ficheros de configuración y ajustar las variables que necesite, el resultado es el mismo.

17. ¿Como puedo intercambiar el flujo de tráfico y hacer que EXT sea mi red?


bastion-firewall no tiene en cuenta que red es la interna o la externa, los nombres de LAN y EXT son simplemente para simplificar el concepto de flujos de trafico por el firewall, pero puede intercambiarlos o configurarlos como desee, no hay ninguna limitación para esto. Lo mejor que puede hacer es probar y ver si funciona como desea, lo más probable es que sea así.

18. ¿Puedo modificar bastion-firewall y crear mi propio firewall o distribución como UNbeatABLE CD?


Como se indicó más arriba las licencias GPL y FDL bajo las que esta liberado bastion-firewall le permiten modificarlo a su gusto o crear a partir de él un firewall nuevo, siempre que lo libere también como GPL y FDL y que haga constar el Copyright y los propietarios del código original. Lo mismo es aplicable a la creación de una distribución como UNbeatABLE CD. Consulte el punto 3 de este FAQ para más información.

19. ¿Puedo usar el script generado por bastion-firewall como firewall independiente?


El script generado por bastion-firewall cuando se generan las reglas desde los ficheros de configuración es un firewall independiente en sí mismo y puede ser usado como firewall independiente que no necesita a bastion-firewall para nada. Incluso puede generar el script en una máquina con bastion-firewall y luego instalarlo en otra sin bastion-firewall sin ningún tipo de problemas.

20. ¿El script generado por bastion-firewall produce el mismo resultado que arrancar bastion-firewall?


El script generado por bastion-firewall en /var/lib/bastion-firewall/script realiza exactamente las mismas acciones que realiza bastion-firewall, por lo que el resultado en forma de cadenas, reglas y módulos cargados es el mismo que si arrancamos bastion-firewall. Por tanto bastion-firewall puede ser usado como un generador de firewalls independientes.

21. ¿Como uso la funcionalidad de listas de IPs? ¿Puedo introducir dominios en las listas?


Simplemente introduzca el fichero .list en el directorio /etc/bastion-firewall/lists y luego especifique el nombre del fichero .list en cualquier lugar dentro de bastion-firewall donde se pueda especificar una IP. Así de simple, no hay que hacer nada más, se usa como si fuera una IP y bastion-firewall lo expande a todas las IPs que estén incluidas en el fichero .list. Esto es especialmente util también para introducirlos en los ficheros de las blacklists y las whitelists, se pueden tener varios ficheros .list con diferentes tipos de IPs y luego introducir los nombres en estos ficheros para bloquearlos o no bloquearlos nunca según deseemos.

NUNCA se deben introducir dominios en las listas porque iptables necesita hacer una resolucion de nombres para cargar cada dominio y obtener su IP, lo que haría la carga del firewall extremadamente lenta.

22. ¿Es fiable al cien por cien la funcionalidad de las tablas?


Es bastante fiable, pero la síntaxis es complicada y se pueden producir errores al especificar las reglas que queremos introducir, lo mejor es probar y ver en el fichero de script o en las reglas generadas que se ha obtenido el resultado esperado. Si se especifican claramente las reglas no debería haber problemas.

23. ¿Como puedo escribir un plugin o addon para bastion-firewall?


No debería tener problemas para escribir plugins para bastion-firewall, simplemente debe comprender en que cadenas debe introducir las reglas y crear un codigo que genere esas reglas, luego puede crear variables en el fichero de configuración de los plugins que permitan configurar su plugin. Si va a usar tablas lo mejor que puede hacer es coger el código de un plugin como mark.bsf y estudiar como funciona para luego modificarlo para que realize la función que desee. En el template incluido se incluyen más indicaciones, pero básicamente debe escribir código bash correcto, usar de forma adecuada las variables del firewall, introducir su plugin en /usr/lib/bastion-firewall/bsf/plugins y luego introducir en /etc/bastion-firewall/plugins.conf las variables de configuración. Si su plugin es muy simple puede ser más adecuado el añadir código a bastion-firewall en los ficheros indicados para ello (ver el siguiente punto del FAQ).

Para escribir un addon debe crear un programa independiente de bastion-firewall y luego integrar su funcionalidad con bastion-firewall de la forma que encuentre más adecuada. No hay un método definido, pero puede estudiar el código y ver como está integrado snort-inline para ver un ejemplo de integración de un addon en bastion-firewall.

24. ¿Como y donde debería añadir mi propio código a bastion-firewall?


Hay varios ficheros que puede editar para introducir código en bastion-firewall, dependiendo del tipo de reglas y del lugar en las cadenas donde quiere que estas reglas sean introducidas. Los ficheros son:

localnat.bsf : Se carga al principio del firewall y permite introducir reglas NAT antes de realizar ninguna otra acción, permite mucha libertad para escribir codigo.
localprespoofing.bsf : Se carga antes del chequeo de direcciones permitidas o denegadas y sirve para introducir reglas antes de separar el trafico en cadenas, por lo que tenemos libertad para hacer prácticamente cualquier cosa, como aceptar o denegar direcciones o trafico.
localrules.bsf : Se carga después del chequeo de direcciones y de separar el trafico según los protocolos, debemos introducir las reglas en las cadenas adecuadas según el protocolo (TCP, UDP, ICMP o todos) o no conseguiremos el efecto deseado. Se aconseja introducir las reglas con iptables -A para no alterar el funcionamiento del firewall, pues así se añaden a lo que ya se ha creado y no se insertan antes de otras reglas. Hay que tener un conocimiento del código de bastion-firewall para introducir código aquí.
localrulesend.bsf : Ultima oportunidad de introducir código antes de denegar definitivamente el trafico, sirve para aceptar trafico que de otra forma sería denegado al final de las reglas. Es aplicable aquí todo lo indicado para localrules.bsf.
locallog.bsf : Sirve sólo para introducir mensajes en los logs, y se puede añadir código para introducir más mensajes o mensajes personalizados. No debería usarse para ningun otro cometido.

En cada fichero hay indicaciones de para que sirve y como editarlo.

25. ¿Debería activar todas las opciones de protección de los ficheros de configuración?


Debería activar todas las opciones que se aconseja activar, sobre todo las que afectan al directorio /proc de Linux, pero no debería activar las que incluyen limitaciones en el tráfico o que se aconseja no activar. En cualquier caso debe leer la ayuda para cada variable y considerar si su activación tendrá repercusiones negativas en el funcionamiento de las reglas del firewall.

26. ¿Porque bastion-firewall no tiene una herramienta para vigilar los logs?


La razón principal es que existen herramientas muy bien construidas para estudiar los logs, como swatch, que permiten obtener datos de los logs de forma muy sencilla y potente, la segunda razón es que hemos llegado a la conclusión de que los administradores prefieren usar este tipo de herramientas o escribir las suyas propias para estudiar los logs y no tener un sistema integrado en el firewall para leer los logs.

27. ¿Como puedo rotar los logs de bastion-firewall?


Utilize logrotate, que es muy sencillo de configurar y extremadamente potente. Cree un fichero en /etc/logrotate.d con las opciones que considere necesarias y logrotate se encargará de rotar los logs por usted. Aproveche y useló para rotar los logs del sistema. La mayoría de las distribuciones lo traen ya configurado de serie y simplemente hay que añadir el fichero para bastion-firewall.

28. ¿Porque mi firewall genera tantas entradas en mis ficheros de logs?


Probablemente ha activado las variables para loggear todo el trafico o todo el trafico aceptado o denegado. No debería activar estas opciones más que cuando esté probando el funcionamiento del firewall, nunca en los sistemas de producción, cuando ponga el sistema definitivamente en producción debería crear reglas para loggear únicamente el tráfico que desee ver en los logs, no todo el tráfico aceptado o denegado.

29. ¿Que utilidad tiene la funcionalidad de ulog?


La funcionalidad más importante es la de introducir logs en bases de datos, permite que bastion-firewall loggee a mysql o postgresql además que en los logs del sistema, o a ficheros de texto plano aparte de los logs del sistema. Deberá configurarlo correctamente para que actue como usted desea, y luego activar las reglas necesarias para pasar el trafico a loggear a ulogd. También deberá cargar el addon bastion-firewall-ulogd para poder usarlo. ulogd es muy sencillo de configurar y usar y puede crear logs en bases de datos que pueden luego ser estudiados con otras herramientas más potentes o para sacar estadísticas usando programas o scripts que lean a bases de datos, con lenguajes como perl o python.

30. ¿Para que sirve snort-inline y la funcionalidad QUEUE?



snort-inline es un IPS, un addon que permite a bastion-firewall mandar por ejemplo el tráfico HTTP que se va a aceptar al demonio de snort-inline por medio de la funcionalidad QUEUE de Netfilter para que snort-inline reconstruya la sesion HTTP (algo que Netfilter no puede hacer), la ponga en forma estandard y compruebe por medio de sus listas (que son las mismas que las de snort) si el tráfico es maligno y debe denegarse o debe aceptarse, devolviendo a Netfilter una orden para bloquear o permitir el tráfico. Es necesario que consulte la documentación de snort-inline para modificar sus reglas y reducir el número de reglas al mínimo para asegurar un funcionamiento rápido del sistema. También debe configurar correctamente snort-inline para que acepte el trafico de bastion-firewall y cargarlo con su script bastion-firewall-snort-inline.

La funcionalidad de bastion-firewall con snort-inline se duplica, pues permite bloquear servicios que funcionan a través del puerto HTTP (80/tcp) por ejemplo y que no queremos permitir, pero permitiendo el tráfico normal HTTP. Esto sólo es posible con un snort-inline correctamente configurado y con reglas capaces de bloquear el trafico indeseado que se enmascara por estos puertos que suele ser necesario tener abiertos, como trafico P2P o programas de Mensajeria Instantanea, incluso es capaz de
bloquear sistemas de update de programas que usan el puerto 80/tcp y que no deseamos que pasen a través del firewall.

Se deben crear las reglas QUEUE antes de cargar snort-inline o sino este último se negará a arrancar, y debemos cambiar en sus reglas las directiva alert por drop para el trafico que queremos bloquear. Como ejemplo de como funciona el sistema se incluye un código muy simple de ejemplo que pasa todo el tráfico a snort-inline:

#!/bin/bash

# Cargamos el modulo de ip_queue de Netfilter
# puesto que no se carga automaticamente
echo -n "Cargando el modulo ip_queue: "
modprobe ip_queue
echo "OK"

echo -n "Borrando todas las tablas y reglas: "
# Borramos las chains internas
iptables --flush

# Borramos las chains creadas (non built-in chains)
iptables --delete-chain

# Cambiamos todas las politicas a ACCEPT
iptables --policy INPUT   ACCEPT
iptables --policy OUTPUT  ACCEPT
iptables --policy FORWARD ACCEPT
echo "OK"

# Creamos reglas de netfilter para pasar el trafico
# a snort-inline
echo -n"Creando las reglas QUEUE: "
iptables -A INPUT -j QUEUE
iptables -A OUTPUT -j QUEUE
iptables -A FORWARD -j QUEUE
echo "OK"

# Snort-inline con la opcion -Q para que lea del
# queue. Tenemos que cambiar en las reglas alert por drop
# donde queramos bloquear
echo -n "Arrancando snort-inline de bastion-firewall: "
/usr/lib/bastion-firewall/snort-inline/bin/bastion-snort-inline -i any -Q \
 -c /usr/lib/bastion-firewall/snort-inline/etc/snort.conf
echo "OK"


31. ¿Como puedo hacer que el firewall ignore el trafico para una red o un interface?

Simplemente use las variables NET_IGNORE e INTERFACE_IGNORE, que permiten introducir una serie de IPs o redes e interfaces que el firewall ignorará, dejando pasar todo el trafico que se enrute a traves de él por estos interfaces o para estas redes. Esto sirve para tener en el firewall interfaces que no se vean afectados por las reglas y redes que se enrutan por ejemplo a internet a través del firewall pero que no queremos que se las aplique ningún tipo de reglas. El firewall ignorará y dejará pasar todo el trafico originado o dirigido a estos interfaces y redes.