bastion-firewall Tutorial 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
  4. Configuración rápida de bastion-firewall
  5. Directorios y ficheros de bastion-firewall
  6. Arrancar y parar bastion-firewall
  7. Configuración de bastion-firewall
  8. Variables en firewall.conf
  9. Variables en networks.conf
  10. Variables en rules.conf
  11. Variables en advanced.conf
  12. Tablas en pernetwork.conf
  13. Tablas en plugins.conf
  14. Sistema de blacklist y whitelist
  15. Sistema de blacklist para MAC
  16. Sistema de MAC restringidas
  17. Sistema de listas
  18. Ejemplo: Creación de un firewall para una pequeña oficina

Licencias

GPL
FDL


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





4. Configuración rápida de bastion-firewall

La forma más rápida de configurar bastion-firewall es usando alguno de los templates preconfigurados que se adjuntan con la configuración de bastion-firewall y en la documentación. Tenemos cuatro templates:

home-soho : Para configuraciones de firewall personales o para oficinas con muy pocas máquinas y con necesidades de seguridad bajas.
office : Para oficinas con bastantes máquinas y necesidades de seguridad medias, como evitar los P2P o los programas de Mensajería Instantanea.
enterprise : Para empresas. Seguridad muy alta y bastantes restricciones en materia de P2P y Mensajería Instantanea.
dmz : Configuración para uno de los firewalls perimetrales de una DMZ.

Estas configuraciones se editan luego cambiado las variables necesarias para adecuarlas a los interfaces y rangos de red que tenemos así como al nivel de seguridad, logging y estadísticas que necesitemos.

Por defecto las configuraciones no realizan muchos logs ni estadísticas, pues son funciones que el administrador debe decidir según sus necesidades. En el caso de las estadísticas se activan las estadísticas generales de tráfico de red e interfaces, pero no para los servicios que activamos.

Las variables mínimas que debemos cambiar para que funcione nuestro firewall con cualquiera de las configuracione son:

En networks.conf :

INTEFACE_IGNORE
INTERFACE_LAN
INTERFACE_EXT
NET_IGNORE
NET_LAN
NET_EXT
USEIPFW
MASQ_INTERNET
PROXYTRANS

En rules.conf hay que editar las variables del tipo:

GROUP_
SERVICE_ (Servicios, cada uno en vez de SERVICE tiene su nombre)
ICMPX_DEFAULT_CONF (o cada una de las variables para ICMP, y en su caso GRICMPX_DEFAULT)
PROT_
MULTICASTX_ (solo si queremos tráfico multicast, normalmente video sobre red)

para adecuarlas a las reglas que queramos tener en el firewall. Normalmente lo más cómodo es usar la configuración por defecto de ICMP y luego usar los grupos para configurar los servicios, pues estan ordenados por el tipo de servicio que incluyen, según las configuraciones más comunes que se suelen dar en un firewall.

También podemos crear nuestros propios grupos, incluyendo los nombres de los servicios que queremos tratar en el grupo y luego dando al grupo las opciones que deseemos para aceptar, bloquear, loggear o hacer estadísticas del tráfico.

Cuanto esté configurado simplemente arrancamos el firewall con /etc/rc.d/init.d/bastion-firewall start o bsf_start y si lo deseamos arrancamos el sistema de generación de estadísticas con /etc/rc.d/init.d/bastion-firewall-stats start o bsf_stats.



5. Directorios y ficheros de bastion-firewall

bastion-firewall usa los siguientes directorios y ficheros:

Codigo base de bastion-firewall

/usr/lib/bastion-firewall: Directorio principal del que cuelgan todos los demás.
/usr/lib/bastion-firewall/bastion-firewall-stats: Programa daemon en C que realiza las estadisticas y las graficas con rrdtool
/usr/lib/bastion-firewall/bsf: Directorio que contiene los scripts que constituyen el codigo base de bastion firewall, es el directorio principal, pues es el que contiene el codigo que genera las reglas y realiza prácticamente todo el trabajo de bastion-firewall.
/usr/lib/bastion-firewall/html: Codigo para generar las páginas html con las gráficas de tráfico
/usr/lib/bastion-firewall/man: Paginas de manual de las órdenes de bastion-firewall, se copia también en /usr/share/man/man1 para facilitar el acceso.
/usr/lib/bastion-firewall/rrdtool: Distribución compilada de rrdtool para crear y actualizar las bases de datos rrd. Tambien para crear las gráficas.
/usr/lib/bastion-firewall/ulogd: Distribución compilada de ulogd para mandar logs a bases de datos o a ficheros.
/usr/lib/bastion-firewall/stats: Ficheros de prueba para las estadísticas y comandos para injectar tráfico en la red.
/usr/lib/bastion-firewall/fwstressing: Links a los programas de firewall stressing para probar el funcionamiento del firewall.

bastion-firewall Interface

/usr/lib/bastion-firewall/apache: Distribución compilada de apache con algunos retoques para que sirva las páginas del interface web.
/usr/lib/bastion-firewall/php4: Distribución compilada de php4 para ejecutar codigo en las paginas del interface.

bastion-firewall-addons

/usr/lib/bastion-firewall/hogwash: Distribución compilada de hogwash para realizar IPS básico fuera de bastion-firewall.
/usr/lib/bastion-firewall/snort-inline: Distribución compilada de snort-inline con soporte en el código del firewall. Junto con la facilidad QUEUE de bastion-firewall constituye un IPS bastante eficaz, utilizando Netfilter para bloquear o aceptar el tráfico que le mandamos.
/usr/lib/bastion-firewall/snort: Distribución compilada de snort para realizar IDS fuera de bastion-firewall.

Directorios temporales de bastion-firewall

/var/lib/bastion-firewall: Directorio temporal principal del que cuelgan todos los demas.
/var/lib/bastion-firewall/backup: Backups de las reglas anteriores a cargar bastion-firewall
/var/lib/bastion-firewall/data: Datos de bastion-firewall, como la lista de cadenas de estadísticas.
/var/lib/bastion-firewall/html: Pagina web con las gráficas de estadísticas de tráfico de bastion-firewall.
/var/lib/bastion-firewall/htmlold: Copia antigua de la última pagina de gráficas almacenada.
/var/lib/bastion-firewall/lock: Ficheros lock de bastion-firewall y sus addons. Lo usan los scripts de inicio.
/var/lib/bastion-firewall/log: Logs de bastion-firewall y sus addons.
/var/lib/bastion-firewall/md5: Sumas MD5 de los ficheros de configuración que permiten ver si han cambiado.
/var/lib/bastion-firewall/old: Backup de los logs, las reglas en cache y los scripts antiguos de bastion-firewall
/var/lib/bastion-firewall/rrd: Ficheros de bases de datos de rrdtool que contienen las estadísticas de tráfico.
/var/lib/bastion-firewall/rrdold: Copia antigua de las últimas bases de datos de rrdtool.
/var/lib/bastion-firewall/save: Cache de reglas guardadas con iptables-save para ser restauradas con iptables-restore
/var/lib/bastion-firewall/script: Script bash generado por bastion-firewall con todas las acciones que ha realizado al generar las reglas. Constituye un firewall en si mismo.
/var/lib/bastion-firewall/tmp: Directorio temporal de trabajo.

Otros ficheros y directorios

/usr/sbin/bsf_*: Todos los comandos en /usr/sbin que comienzan por bsf_ son ordenes para la administración y configuración de bastion-firewall.
/etc/rc.d/init.d o /etc/init.d: Los comandos en este directorio que comienzan por bastion-firewall permiten arrancar y parar el firewall, las estadísticas y los addons.
/usr/share/man/man1: Los ficheros que comienzan por bastion-firewall o bsf_ son paginas de manual de bastion-firewall y sus ordenes de administración.
/usr/share/doc/bastion-firewall-1.0: Documentación de bastion-firewall.


Arrancar y parar bastion-firewall

Para arrancar bastion-firewall podemos usar el script del sistema de initscripts que se incluye con la distribución o una orden. Para pararlo se hace de forma similar. También podemos incluirlo en los scripts de inicio de initscripts para que arranque con la máquina, usando el comando chkconfig en las distribuciones derivadas de RedHat o incluyendo los links en los directorios adecuados para las derivadas de Debian. Los addons se arrancan y se paran con sus propios scripts de inicio. Todos los scripts de inicio sirven para todas las distribuciones, porque no usan comandos o funciones propias de las distribuciones, solo código bash genérico.

Las ordenes que podemos usar son la siguientes si tenemos una distribución tipo RedHat (si es Debian simplemente cambiar /etc/rc.d/init.d por /etc/init.d):

/etc/rc.d/init.d/bastion-firewall start : Arrancar bastion-firewall usando el sistema de cache si es posible.
bsf_start : Arrancar bastion-firewall usando el sistema de cache si es posible.
bsf_start -f : Arrancar bastion-firewall forzando la regeneración de las reglas aunque no haya cambiado la configuración (por ejemplo si hemos añadido código).
bsf_start -t : Arranca el firewall en modo test, sin crear ningún tipo de cadena ni de reglas. Sirve para probar la configuración. Genera el script del firewall en /var/lib/bastion-firewall/script para que podamos comprobar que se han realizado las acciones y se han creado las reglas que deseamos.

/etc/rc.d/init.d/bastion-firewall stop : Para el firewall y si lo hemos especificado en la configuración devuelve Netfilter al estado anterior al arranque.
bsf_stop : Para el firewall y si lo hemos especificado en la configuración devuelve Netfilter al estado anterior al arranque.
bsf_stop -f : Para el firewall y borra todas las reglas forzosamente, aunque hayamos especificado en la configuración que se carguen las reglas anteriores al arranque del firewall.

/etc/rc.d/init.d/bastion-firewall-stats start : Carga el sistema de estadísticas, siempre debe arrancarse despues de arrancar bastion-firewall, porque sino el daemon de estadísticas no encontrará las tablas y no arrancará.
bsf_stats : Carga el sistema de estadísticas, igual que el anterior.

/etc/rc.d/init.d/bastion-firewall-ulogd start : Carga el addon del  sistema de logging ulogd para hacer logs a bases de datos o a ficheros de texto plano.
/etc/rc.d/init.d/bastion-firewall-ulogd stop : Para el addon del  sistema de logging ulogd.

/etc/rc.d/init.d/bastion-firewall-snort-inline start : Carga el addon de snort-inline, que permite mandar trafico por la facilidad QUEUE a el IPS snort-inline para denegar o aceptar tráfico que ya hemos tratado con el firewall.
/etc/rc.d/init.d/bastion-firewall-snort-inline stop : Para el addon de snort-inline.

/etc/rc.d/init.d/bastion-firewall-interface start : Carga el addon del daemon apache con PHP 4 para poder manejar por medio de un navegador web bastion-firewall. Escucha en el puerto 10002/tcp para HTTP normal y en el puerto 10003/tcp para HTTP sobre SSL (HTTPS).
/etc/rc.d/init.d/bastion-firewall-interface stop : Para el addon del daemon apache con PHP 4.

/etc/rc.d/init.d/bastion-firewall-hogwash start : Carga el addon de hogwash para bastion-firewall. Hogwash es un IPS independiente y no integrado con bastion-firewall.
/etc/rc.d/init.d/bastion-firewall-hogwash stop : Para el addon de hogwash para bastion-firewall.

/etc/rc.d/init.d/bastion-firewall-snort start : Carga el addon de snort para bastion-firewall. Snort es un IDS independiente y no integrado con bastion-firewall.
/etc/rc.d/init.d/bastion-firewall-snort stop : Para el addon de snort para bastion-firewall.

Es fundamental cargar los programas y addons de bastion-firewall en el orden correcto. El orden correcto para una configuración normal sería:

/etc/rc.d/init.d/bastion-firewall-snort-inline start
/etc/rc.d/init.d/bastion-firewall start
/etc/rc.d/init.d/bastion-firewall-stats start
/etc/rc.d/init.d/bastion-firewall-ulogd start
/etc/rc.d/init.d/bastion-firewall-interface start

y para pararlos justo al contrario:

/etc/rc.d/init.d/bastion-firewall-interface stop
/etc/rc.d/init.d/bastion-firewall-ulogd stop
/etc/rc.d/init.d/bastion-firewall-stats stop
/etc/rc.d/init.d/bastion-firewall stop
/etc/rc.d/init.d/bastion-firewall-snort-inline stop

Si integramos estos sripts en el sistema de initscripts de Linux tanto en RedHat como en Debian deberemos elegir el orden correcto para que se carguen los scripts al inicio. Lo fundamental es cargar primero bastion-firewall, y después el sistema de estadísticas y los addons.


Configuración de bastion-firewall

Configurar bastion-firewall implica la edición de una serie de ficheros en texto plano que contienen una serie de variables que permiten especificar el funcionamiento del firewall, las características generales de estos fichero son:

Los ficheros de configuración que se entregan con la distribución son correctos, por lo que si somos mínimamente cuidadosos al editarlos no deberíamos tener ningún problema en crear configuraciones correctas. De cualquier forma el sistema intenta chequear gran cantidad de errores comunes que se pueden cometer al editar los ficheros de configuración del firewall, así como la validez de los datos introducidos en todas las variables principales, las que definen redes y las que definen servicios y las reglas que introducimos para esos servicios. Eso lleva un tiempo y puede verse al arrancar el firewall cuando genera las reglas, pero es fundamental para evitar errores extraños.



Variables en firewall.conf

 HELP_CACHE: Usar el sistema de cache para acelerar el firewall
    Usar el sistema de cache de bastion-firewall para acelerar
    la carga del firewall, evitando el chequear todas las variables
    y crear los comandos iptables cada vez que se carga el sistema.
    Este sistema crea un fichero de cache en /var/lib/bastion-firewall/save
    conteniendo todas las reglas que ejecuta el firewall al cargarse.
    Este fichero se crea con iptables-save y se carga con iptables-restore
CACHE="1"
 
HELP_SAVE: Grabar y recuperar las reglas anteriores a la carga del firewall
    Este sistema crea un fichero en /var/lib/bastion-firewall/backup
    conteniendo todas las reglas de Netfilter que estaban activas antes
    de la carga del firewall. Estas reglas se graban al cargar el firewall
    y se recuperan al parar el firewall.
    Este fichero se crea con iptables-save y se carga con iptables-restore
SAVE="0"

 HELP_STATS_USE: Crear estadisticas de uso del firewall
    Activa el sistema de estadisticas del firewall basado en cadenas,
    y que permite obtener ficheros con estadisticas del trabajo
    del firewall. Este sistema usa rrdtool para generar graficas
    y almacenar los datos.
STATS_USE="1"

 HELP_QUEUE: Mandar los paquetes aceptados a espacio de usuario
             normalmente a snort-inline
    Podemos crear grupos de trafico que sera pasados al espacio de usuario,
    antes de ser aceptados definitivamente, normalmente para ser tratados
    por otro programa, que nos dara el veredicto de si hay que
    que aceptarlos o droppearlos. Es muy util por ejemplo antes
    de aceptar nuestro trafico web mandarlo a snort-inline para
    que este lo eche un vistazo y decida si rechazarlo
    o aceptarlo. Debemos tener ya arrancado snort-inline o el programa
    de espacio de usuario que vayamos a usar antes de lanzar el firewall,
    sino se producira un error.
QUEUE="0"

  HELP_BASTION_ULOGD: Mandar datos al ulogd de bastion-firewall
    Si arrancamos el ulogd de bastion firewall y activamos esta opcion
    podremos hacer logs de todas las conexiones acceptadas o denegadas
    en /var/lib/bastion-firewall/log sin tener que depender del sistema
    de syslog de la maquina. Ademas permite loggear a bases de datos
    configurando correctamente el ulogd de bastion-firewall. El grupo
    de ulog que usa es el 32. Hay que arrancar el ulogd de
    bastion-firewall independientemente del firewall.
BASTION_ULOGD="0"

 HELP_BASTION_ULOGD_SIZE: Cuantos bytes de cada paquete mandar a ulogd
    Esta variable indica cuantos bytes de cada paquete vamos a mandar al
    ulogd de bastion-firewall. Si pasamos 100 o asi pasaremos toda la
    cabecera y algun dato mas probablemente. Si ponemos 0 pasaremos todo
    el paquete completo.
BASTION_ULOGD_SIZE="0"

 HELP_BASTION_ULOGD_SIZE: Cuantos bytes de cada paquete mandar a ulogd
    Esta variable indica cuantos bytes de cada paquete vamos a mandar al
    ulogd de bastion-firewall. Si pasamos 100 o asi pasaremos toda la
    cabecera y algun dato mas probablemente. Si ponemos 0 pasaremos todo
    el paquete completo.
BASTION_ULOGD_SIZE="0"

 HELP_BLACKLIST: Usar el sistema de blacklist y whitelist
    Permite usar el sistema de blacklist y whitelist de bastion-firewall.
    Este sistema se controla con comandos y permite crear listas de
    IPs o redes a bloquear. Permite bloquear direcciones IP despues
    de cargado el firewall. La whitelist permite incluir direcciones
    que nunca queremos que sean bloqueadas por el sistema de blacklist.
    Ver la variable REALWHITELIST para si ademas de impedir que se bloqueen
    las direcciones de la whitelist se las deje pasar siempre. La idea de
    la whitelist es tener una lista con las direcciones que usamos
    en NET_LAN, NET_EXT, en las variables para DNAT, etc y que estas no
    puedan ser nunca bloqueadas por el sistema de blacklist del firewall,
    pensando sobre todo en sistemas que puedan usar los scripts para
    bloquear IPs de forma automatica (IDS y similares) y que pueden ser
    objeto de ataques de denegacion de servicio obligandolos a bloquear
    sus propias IPs o redes.
BLACKLIST="1"

 HELP_REALWHITELIST: Permitir siempre el paso a las IPs de la whitelist
    Permite siempre a las direcciones que estan en la whitelist
    el paso a traves del firewall. Si no activamos esta opcion deberemos
    tener las IPs de la whitelist incluidas en variables que habiliten el
    trafico (como NET_LAN o NET_EXT) o se denegara el trafico para las
    IPs que no esten explicitamente habilitadas. Ver la explicacion de
    este comportamiento por defecto en la ayuda de BLACKLIST.
REALWHITELIST="1"

 HELP_LOADMODULES: Cargar explicitamente el soporte en modulos de Netfilter
    Esto solo es necesario en el caso en que hayamos compilado
    el kernel para que no cargue los modulos automaticamente al intentar
    usar una nueva funcionalidad que no este cargada.
    Los modulos que necesitan de una carga explicita como los de conntrack
    o nat para ftp/irc/etc se activan con sus propias variables.
    Todas las nuevas distribuciones vienen con un kernel compilado con
    modulos y con el soporte para cargar los modulos automaticamente.
LOADMODULES="1"

 HELP_MOD_CONN_FTP: Cargar el soporte CONNTRACK para FTP activo
    Cargar el soporte para FTP activo de conntrack. Esto cargara
    el modulo necesario para que el sistema de conntrack pueda
    marcar como RELATED las conexiones relacionadas con una
    conexion de ftp activo. Si no se carga este modulo no sera posible
    usar FTP activo.
MOD_CONN_FTP="1"

 HELP_MOD_CONN_IRC: Cargar el soporte CONNTRACK para IRC (DCC)
    Cargar el soporte para IRC de conntrack. Esto cargara
    el modulo necesario para que el sistema de conntrack pueda
    marcar como RELATED las conexiones relacionadas con una
    conexion IRC, en concreto las conexiones DCC. Si no se carga este
    modulo no sera posible usar DCC en IRC.
MOD_CONN_IRC="1"

## HELP_MOD_NAT_FTP: Soporte NAT para FTP activo
##    Cargar el soporte para FTP activo de NAT. Esto cargara
##    el modulo necesario para que el sistema de NAT pueda tratar
##    las conexiones de tipo RELATED del ftp activo. Sin este modulo
#%    no es posible usar FTP activo sobre una conexion NAT.
MOD_NAT_FTP="1"

 HELP_MOD_NAT_IRC: Soporte NAT para IRC (DCC)
    Cargar el soporte para IRC de NAT. Esto cargara
    el modulo necesario para que el sistema de NAT pueda tratar
    las conexiones de tipo RELATED del IRC (DCC). Sin este modulo no
    es posible usar IRC (DCC) sobre una conexion NAT.
MOD_NAT_IRC="1"

 HELP_MOD_NAT_SNMP_BASIC: Soporte NAT para SNMP basico
    Cargar el soporte para SNMP_BASIC de NAT. Esto cargara
    el modulo necesario para que el sistema de NAT pueda tratar
    las conexiones de tipo NAT para conexiones basicas de NAT.
MOD_NAT_SNMP_BASIC="0"

 HELP_TCPDROP: Como denegar conexiones tcp #%
    (default)  TCPDROP="REJECT --reject-with tcp-reset"
    Es absolutamente aconsejable utilizar la opcion por defecto, pues
    es la que mejor resultados ofrece.
TCPDROP="REJECT --reject-with tcp-reset"

 HELP_UDPDROP: Como denegar conexiones udp #%
    (default)  UDPDROP="REJECT --reject-with icmp-port-unreachable"
    Es absolutamente aconsejable utilizar la opcion por defecto, pues
    es la que mejor resultados ofrece.
UDPDROP="REJECT --reject-with icmp-port-unreachable"

 HELP_ICMPDROP: Como denegar conexiones icmp #%
    (default)  ICMPDROP="DROP"
    Es absolutamente aconsejable utilizar la opcion por defecto, pues
    es la que mejor resultados ofrece.
ICMPDROP="DROP"

 HELP_ALLDROP: Como denegar todas las conexiones
    Esta version se usara cuando no queramos especificar para
    cada protocolo y tambien para los protocolos aparte de
    tcp, udp e icmp.
   (default)  ALLDROP="DROP"
ALLDROP="DROP"

 HELP_LOGLEVEL: Opcion para -j LOG (Nivel de log para syslog)
    Nivel de log para syslog. Permite especificar la severidad
    de los mensajes de log que se van a pasar a syslog. Estos
    niveles permiten mediante syslogd y su fichero de configuracion
    /etc/syslog.conf el mandar los mensajes de logs a la consola,
    a los ficheros de log en /var/log y varias opciones mas.
    El systema de syslog nos permite usar niveles locales o redirigir
    todos los mensajes del firewall a un fichero en concreto e incluso
    a un servidor central de logs. Ver documentacion de syslog.
    Por ejemplo en Redhat el nivel info suele ir a /var/log/messages.
    Los niveles que podemos especificar son normalmente:
       debug info notice warning err crit alert emerg
    y su tratamiento depende de /etc/syslog.conf. Si no ponemos nada
    el firewall usa info.
LOGLEVEL="info"

 HELP_LOGOPTS: Opciones para -j LOG (Ver ayuda de iptables)
    Aqui podemos poner:
     --log-tcp-sequence    Log the TCP Sequence Numbers (Secuencia)
     --log-tcp-options     Log the TCP Options (Opciones TCP)
     --log-ip-options      Log the IP Options (Opciones IP)
   Estas opciones llenan los logs con mucha informacion, deben usarse
   con cuidado. Se pueden combinar varias de estas opciones.
LOGOPTS=""

 HELP_LOGFALLEN: Apuntar las conexiones denegadas por servicio no activado
    Apuntar en los logs todo el trafico denegado por llegar al final
    de todas las cadenas sin coincidencia, esto indica que no hay ningun
    servicio habilitado para ese tipo de trafico. No se apunta el trafico
    denegado por no estar permitida la IP, el interface o la direccion
    del trafico, para esto es mejor usar LOGDROPPED. Pueden ser gran cantidad
    de apuntes en los logs. Se usa para probar el firewall antes de
    entrar en produccion y ver lo que se ha denegado.
LOGFALLEN="1"

 HELP_LOGACCEPTED: Apuntar en los logs TODAS las conexiones aceptadas
    Apuntar en los logs todo el trafico aceptado por el firewall segun
    las reglas que se hayan creado. Pueden ser gran cantidad
    de apuntes en los logs. Se usa para probar el firewall antes de
    entrar en produccion y ver lo que se ha aceptado.
LOGACCEPTED="0"

 HELP_LOGDROPPED: Apuntar en los logs TODAS las conexiones denegadas
    Apuntar en los logs todo el trafico denegado por el firewall segun
    las reglas que se hayan creado. Pueden ser gran cantidad
    de apuntes en los logs. Se usa para probar el firewall antes de
    entrar en produccion y ver lo que se ha denegado.
LOGDROPPED="0"

 HELP_LOGALL: Apuntar en los logs TODAS las conexiones
    Apuntar en los logs todas las conexiones que se produzcan en el
    firewall, aceptadas o denegadas. Pueden ser gran cantidad
    de apuntes en los logs. Se usa para probar el firewall antes de
    entrar en produccion y ver lo que se ha aceptado. Si activamos
    tambien alguna de las anteriores tendremos logs duplicados,
    aunque con distintos prefijos.
LOGALL="0"

 HELP_NOLOGFLOOD: Limitar la inundacion de apuntes en los logs
    Limitar el numero de veces por segundo que se escribe en los LOGS
    para evitar el Log flooding (inundacion de los logs). Las opciones
    son las mismas que se pasan a iptables.
    EJEMPLOS:
     NOLOGFLOOD="-m limit --limit 1/s"    Un apunte cada segundo maximo
     NOLOGFLOOD="-m limit --limit 1/s --limit-burst 10"
       Un apunte cada segundo maximo con rachas de 10
NOLOGFLOOD="-m limit --limit 50/s"

 HELP_ULOG: Mandar los paquetes al espacio de usuario con ULOG
    Si activamos esta opcion todos los logs que se produzcan se
    pasaran tambien al espacio de usuario con la facilidad de iptables
    ULOG. No es necesario activar esto para usar el parametro :ulog en
    las reglas.
ULOG="0"

 HELP_ULOG_GROUP: Grupo netlink usado para realizar los log con ULOG
    Este parametro indica el grupo netlink al que se van a mandar los
    mensajes netlink de ULOG. El demonio ulogd de espacio de usuario
    debe ser configurado para recibir los paquetes en este mismo
    grupo netlink. Hay 32 grupos, por tanto el valor de ULOG_GROUP debe
    ir de 1 a 32, pero el grupo 32 esta reservado para el uso de
    del ulogd de bastion-firewall, por lo que esta prohibido usarlo.
ULOG_GROUP="1"

 HELP_ULOG_SIZE: Bytes que se pasaran a ULOG de cada paquete
    Bytes que se pasaran al demonio de espacio de usuario ulogd de
    cada paquete. Si ponemos 0 se pasaran todos los bytes del
    paquete.
ULOG_SIZE="0"

 HELP_ULOG_THRESHOLD: Limite para la cola del kernel de ULOG
    Este parametro indica el maximo de paquetes que el kernel debe
    almacenar para mandarlos todos a la vez al espacio de usuario.
    El maximo es 50.
ULOG_THRESHOLD="20"

 HELP_ULOG_PREFIX: Prefijo para los mensajes ULOG
    Prefijo que se pondra delante de cada LOG que se pase al demonio
    de espacio de usuario ulogd. Es obligatorio poner algo, sino
    el firewall pondra el prefijo bsf por defecto.
    NO PUEDE CONTENER ESPACIOS.
ULOG_PREFIX="bsf"

 HELP_CONNTRACK_INVLOG: Loggear trafico considerado INVALID por CONNTRACK
    Permite hacer LOG de todo el trafico que el sistema de conntrack
    marque como INVALID. Conntrack marcara como trafico INVALID todo el
    trafico que no pertenezca a ninguna conexion y que no tenga relacion
    con ninguna conexion (no es ESTABLISHED ni RELATED)
CONNTRACK_INVLOG="0"

 HELP_CONNTRACK_INVDROP: Droppear trafico considerado INVALID por CONNTRACK
    Quitar todo el trafico marcado por el sistema de conntrack como
    INVALID. Conntrack marcara como trafico INVALID todo el trafico que
    no pertenezca a una conexion y que no tenga relacion con ninguna
    conexion (no es ESTABLISHED ni RELATED).
    Esto denegara todas las conexiones invalidas como los escaneos de
    puertos, ataques DOS, trafico construido y similares. Es muy
    conveniente tener esta opcion activada.
    Esta opcion puede romper algun servicio que use los protocolos de
    forma NO ESTANDAR. Tener cuidado tambien si se usan protocolos que
    no sean TCP, UDP o ICMP.
CONNTRACK_INVDROP="0"

 HELP_CONTRACK_PARANOIA: Conexiones tipo RELATED
    Permitir SOLO las conexiones tipo RELATED en puertos no
    privilegiados (1024:65535). Aumenta la seguridad pero rompe
    servicios como el FTP activo. Se recomienda NO activarlo.
CONNTRACK_PARANOIA="0"

 HELP_CONTRACK_NOICMP: No permitir respuestas ICMP por conntrack
    No permitir que el sistema de connection tracking permita las
    respuestas ICMP que se consideran ESTABLISHED o RELATED por ir
    asociadas a una conexion o a un paquete que hemos mandado.
    Un ejemplo serian los paquetes echo-reply que son considerados
    ESTABLISHED si hemos mandado un echo-request (hacer ping a un host)
    a esa maquina. Otro ejemplo serian los host-unreacheable o similares
    que son devueltos cuando intentamos una conexion TCP o UDP. Este
    comportamiento suele ser conveniente, pero podemos desactivarlo aqui
    y afinar luego con las reglas de ICMP los tipos de paquetes que
    queremos mandar o recibir.
CONNTRACK_NOICMP="0"

 HELP_ECHOBROAD: Proteccion contra ECHOBROADCAST
    Impide que nos convirtamos en amplificadores de ataques smurf
ECHOBROAD="1"

 HELP_SOURCEROUTE: Deshabilitar paqutes SOURCE-ROUTE
    Deshabilitar paquetes source route. Esto evita que atacantes
    puedan hacer pasar trafico spoof por trafico que proviene de
    la red local.
SOURCEROUTE="1"

 HELP_SYNCOOKIE: Proteccion tcp-syncookie contra SYN floods
    Esta proteccion permite que el kernel use un sistema de
    cookies tcp si encuentra que esta siendo victima de un
    log-flood.
SYNCOOKIE="1"

 HELP_ICMPREDIR: Proteccion contra redirecciones de ICMP
    Impide que que se redirecciones paquetes ICMP porque
    pueden ser usados para alterar la tabla de rutas.
ICMPREDIR="1"

 HELP_RPFILTER:  Eliminar paquetes con distinta ruta entrada-salida
    Eliminar paquetes spoof que entran por un interface pero que
    su respuesta saldria por otro interface segun la tabla de rutas.
    Si usamos enrutado asimetrico (un paquete que sale de nuestro
    host lleva diferente camino que el que llega a nuestro host
    desde el host de destino). Se aconseja no activarlo.
RPFILTER="1"

 HELP_LOGMARTIANS: Loggear paquetes comunmente construidos
    Loggear paquetes spoofed, paquetes source routed y redirect.
    El kernel apunta en los logs los paquetes que coincidieron con las
    protecciones indicadas.
LOGMARTIANS="1"

 HELP_BADERROR: Proteccion del kernel bad-error-message
    Activar en el kernel la proteccion bad-error-message
BADERROR="1"

 HELP_PORTSCAN_LOG: Loggear los tipos mas corrientes de escaneos
    Esta opcion permite loggear los tipos mas corrientes de escaneos
    de puertos provenientes del exterior y que lleguen al firewall
    o a la red interna. No es posible detectar los escaneos TCP SYN scan
    (como los generados por nmap -sS) porque son conexiones validas que
    luego se cierran, lo que no permite distinguirlas de las validas.
PORTSCAN_LOG="1"

 HELP_PORTSCAN_DROP: Eliminar los tipos mas corrientes de escaneos
    Esta opcion permite eliminar los tipos mas corrientes de escaneos
    de puertos provenientes del exterior y que lleguen al firewall o
    a la red interna. Si tenemos habilitado CONNTRACK_INVDROP el
    firewall denegara SIEMPRE los escaneos por ser trafico considerado
    INVALID por el sistema de conntrack.
    Puede ser conveniente no activarlo si tenemos un NIDS como snort
    que hace un mejor trabajo en detectar y droppear
    los escaneos de puertos.
PORTSCAN_DROP="1"

 HELP_PORTSCAN_LOCAL_LOG: Loggear los tipos mas corrientes de escaneos
    Esta opcion permite loggear los tipos mas corrientes de escaneos
    de puertos procedentes del firewall o de la red LAN y que van a la
    red externa o a internet.
PORTSCAN_LOCAL_LOG="1"

 HELP_PORTSCAN_LOCAL_DROP: Eliminar los tipos mas corrientes de escaneos
    Esta opcion permite eliminar los tipos mas corrientes de escaneos
    de puertos procedentes del firewall o de la red LAN y que van a la
    red externa o a internet. Si tenemos habilitado CONNTRACK_INVDROP el
    firewall denegara SIEMPRE los escaneos por ser trafico considerado
    INVALID por el sistema de conntrack.
PORTSCAN_LOCAL_DROP="1"

 HELP_NEWNOSYNDROP: No aceptar paquetes NEW sin SYN
    Puede pasar si el programa manda paquetes despues de haber mandado
    el FIN/ACK. Veremos paquetes NEW que no corresponden a ningun SYN.
    Pueden darse si recibimos conexiones de otro firewall que ha caido,
    por ejemplo en un entorno de dos firewall de alta disponibilidad, o
    en el caso de que tengamos multiples rutas (enrutado asimetrico por
    ejemplo), este ultimo caso debe tratarse con el moderno sistema de
    enrutado de Linux.
    Si no tenemos ninguno de estos casos es muy probable que sean paquetes
    fabricados, o que tengamos algun problema con el firewall, en ambos
    casos lo mas sensato es desecharlos.
    Si activamos la opcion los loggeamos y los quitamos. Es la opcion por
    defecto, y previene paquetes fabricados por nmap o hping2.
NEWNOSYNDROP="1"

 HELP_SYNFLOOD_PROTECTION: Limitacion del numero de SYN en el tiempo
    Limita el numero de conexiones SYN que podemos tener, y por tanto
    el maximo de conexiones por segundo que tenemos. Depende enormemente
    del trafico del sitio, por lo que lo desactivamos por defecto y
    rogamos al administrador que haga pruebas hasta que consiga valores
    que no impidan el trafico normal de su sitio. Estos valores se
    han de rellenar en SYNFLOOD_PROTECTION_LIMIT.
    ESTO ES DIFERENTE DE LA PROTECCION POR SYN-COOKIES DEL KERNEL
    USAR CON MUCHA PRECAUCION.
SYNFLOOD_PROTECTION="0"

 HELP_SYNFLOOD_PROTECTION_LIMIT: Limitacion de numero SYN. Limite
    Para activarlo hay que activar SYNFLOOD_PROTECTION y luego rellenar
    esta variable. Se puede limitar por tiempo y tambien por rachas.
    EJEMPLOS:
     SYNFLOOD_PROTECTION_LIMIT="-m limit --limit 1/s --limit-burst 4"
     SYNFLOOD_PROTECTION_LIMIT="-m limit --limit 20/s"
SYNFLOOD_PROTECTION_LIMIT="-m limit --limit 20/s"

 HELP_FRAG_PROTECTION: Proteccion contra los fragmentos de paquetes
    Los paquetes fragmentados pueden ocurrir normalmente e iptables
    puede reconstruirlos y trabajar sin ningun problema con ellos,
    sobre todo gracias al sistema de estado conntracking, pero tambien
    hay que tener en cuenta que los paquetes de penetration testing
    para romper firewalls se basan en parte en mandar paquetes
    super fragmentados que el firewall no pueda ver. Esta variable
    deniega y loggea todo el trafico fragmentado tcp o udp que veamos.
    Las reglas de conntrack para ESTABLISHED y RELATED van antes que
    estas, por lo que aceptaran el trafico licito fragmentado.
    En principio es mejor dejarlo sin activar. Si vemos demasiados fragmentos
    de paquetes lo podemos activar para denegarlos y loggearlos, pero hay
    que tener en cuenta que en teoria es posible que cause problemas.
FRAG_PROTECTION="0"

 HELP_ICMPFRAG_PROTECTION: Proteccion contra los fragmentos ICMP
    Los paquetes icmp fragmentados suelen ser trafico anomalo, por lo que
    podemos loggearlos y denegarlos.
ICMPFRAG_PROTECTION="0"

 HELP_OTHERFRAG_PROTECTION: Proteccion contra los fragmentos OTHER
    Los paquetes cuyo protocolo no es tcp, udp o icmp fragmentados pueden
    ocurrir de forma normal segun como el kernel trabaje con el protocolo
    y por las mismas caracteristicas del protocolo. Por tanto debemos
    estar bastante seguros antes de usar esta opcion si nuestro firewall
    ha de trabajar con protocolos que no sean tcp, udp o icmp. Por otro lado
    si no vamos a usarlos es aconsejable activar esta opcion.
OTHERFRAG_PROTECTION="0"

 HELP_RULES_PRESPOOFING: Reglas a cargar antes de chequear spoofing
    Estas reglas se ejecutaran antes de hacer el chequeo
    de spoofing, que crea reglas muy rigidas sobre el origen
    y destino de los paquetes. Podemos aceptar o denegar paquetes antes
    de comprobar el spoofing, saltandonos todas las reglas siguientes.
    El fichero es: /usr/lib/bastion-firewall/bsf/localprespoofing.bsf
RULES_PRESPOOFING="1"

 HELP_RULES_LOCALNAT: Reglas locales a cargar que realizan nat
    Estas reglas se cargaran antes de las demas, aqui se pueden
    incluir reglas locales que realicen nat de cualquier tipo.
    El fichero es: /usr/lib/bastion-firewall/bsf/localnat.bsf
RULES_LOCALNAT="1"

 HELP_RULES_START: Ejecutar reglas locales de inicializacion
    Cargar reglas y codigo de inicializacion y prueba despues de los
    chequeos de spoofing, pero saltandonos todo lo demas. Se usa sobre
    todo para hacer logs.
    El fichero es: /usr/lib/bastion-firewall/bsf/localrules.bsf
RULES_START="1"

 HELP_RULES_END: Ejecutar reglas locales al final
    Cargar reglas y codigo de prueba justo al final, ultima
    oportunidad antes de hacer LOG y DROP de los paquetes.
    El fichero es: /usr/lib/bastion-firewall/bsf/localrulesend.bsf
RULES_END="1"

 HELP_VARIABLES:  Variables utiles
    Variables a usar en el firewall. No deberian
    cambiarse si no hay razones poderosas para hacerlo
## HELP_LOOPBACK: Direccion de loopback #%
LOOPBACK="127.0.0.0/8"
## HELP_CLASS_A: Redes privadas de clase A #%
CLASS_A="10.0.0.0/8"
## HELP_CLASS_B: Redes privadas de clase B #%
CLASS_B="172.16.0.0/12"
## HELP_CLASS_C: Redes privadas de clase C #%
CLASS_C="192.168.0.0/16"
## HELP_CLASS_D_MULTICAST: Redes privadas de clase D #%
CLASS_D_MULTICAST="224.0.0.0/4"
## HELP_CLASS_E_NET: Direcciones reservadas de clase E #%
CLASS_E_NET="240.0.0.0/5"
## HELP_BROADCAST_SRC: Fuente de broadcast #%
BROADCAST_SRC="0.0.0.0"
## HELP_BROADCAST_DST: Destino de broadcast #%
BROADCAST_DST="255.255.255.255"
## HELP_PORTS_PRIV: Puertos privilegiados #%
PORTS_PRIV="0:1023"
## HELP_PORTS_NOPRIV: Puertos no privilegiados #%
PORTS_NOPRIV="1024:65535"

 HELP_IRCPORTS: Puertos IRC permitidos para CONNTRACK y NAT
    Puertos IRC para conntrack y nat de irc. Se ponen separados por
    comas. Si se deja en blanco son los puertos estandar.
    Los valores mas comunes son IRCPORTS="6665,6666,6667,6668,6669,7000"
IRCPORTS=""

 HELP_FTPPORTS: Puertos FTP permitidos para CONNTRACK y NAT
    Puertos FTP para conntrack y nat de ftp. Se ponen separados por
    comas. Si se deja en blanco son los puertos estandar. Esta es la
    opcion mas comun y la que se usara por defecto.
FTPPORTS=""

HELP_COMANDOS: Path de los comandos que usa el firewall
    Comandos del sistema que usa el firewall, podemos
    especificarlos o hacer que los encuentre el comando 'which'
## HELP_MYIPT: Ejecutable de iptables #%
# MYIPT="/sbin/iptables"
MYIPT=$(which iptables)

## HELP_MYIPTSAVE: Ejecutable de iptables-save #%
# MYIPTSAVE="/sbin/iptables-save"
MYIPTSAVE=$(which iptables-save)

## HELP_MYIPTRESTORE: Ejecutable de iptables-restore #%
# MYIPTRESTORE="/sbin/iptables-restore"
MYIPTRESTORE=$(which iptables-restore)

## HELP_MYMODPROBE: Ejecutable de modprobe #%
# MYMODPROBE="/sbin/modprobe"
MYMODPROBE=$(which modprobe)

## HELP_MYGREP: Ejecutable de grep #%
# MYGREP="/bin/grep"
MYGREP=$(which grep)

## HELP_MYTR: Ejecutable de tr #%
# MYTR="/usr/bin/tr"
MYTR=$(which tr)

## HELP_MYTAIL: Ejecutable de tail #%
# MYTAIL="/usr/bin/tail"
MYTAIL=$(which tail)

## HELP_MYHEAD: Ejecutable de head #%
# MYHEAD="/usr/bin/head"
MYHEAD=$(which head)

## HELP_MYWC: Ejecutable de wc #%
# MYWC="/usr/bin/wc"
MYWC=$(which wc)

## HELP_MYCUT: Ejecutable de cut #%
# MYCUT="/usr/bin/cut"
MYCUT=$(which cut)

## HELP_MYCAT: Ejecutable de cat #%
# MYCAT="/bin/cat"
MYCAT=$(which cat)

## HELP_MYUNIQ: Ejecutable de uniq #%
# MYUNIQ="/usr/bin/uniq"
MYUNIQ=$(which uniq)

## HELP_MYMD5SUM: Ejecutable de md5sum #%
# MYMD5SUM="/usr/bin/md5sum"
MYMD5SUM=$(which md5sum)

## HELP_MYDATE: Ejecutable de date #%
# MYDATE="/bin/date"
MYDATE=$(which date)

## HELP_MYSORT: Ejecutable de sort #%
# MYSORT="/bin/sort"
MYSORT=$(which sort)

## HELP_MYRM: Ejecutable de rm #%
# MYRM="/bin/rm"
MYRM=$(which rm)

## HELP_MYCP: Ejecutable de cp #%
# MYCP="/bin/cp"
MYCP=$(which cp)

## HELP_MYBASENAME: Ejecutable de basename #%
# MYBASENAME="/bin/basename"
MYBASENAME=$(which basename)

## HELP_MYTOUCH: Ejecutable de touch #%
# MYTOUCH="/bin/touch"
MYTOUCH=$(which touch)



Variables en networks.conf

  HELP_NETWORKS: Como especificar IPs, redes, rangos, listas, etc.
    IP: En la forma 192.168.1.2
    RANGOS DE IP: En la forma 192.168.1.2-192.168.2.25
      con la condicion de que si tenemos a.b.c.d-e.f.g.h debemos cumplir
      la relacion: a=e b=f (g-c)=<5 (maximo unas 1536 IPs)
    REDES: En notacion CIDR 192.168.1.0/24 (ip_base/bits_mascara)
    LISTAS: Listas de IPs/redes en /etc/bastion-firewall/lists
    y se usan poniendo solo el nombre: consultores.list
    Para especificar internet ponemos 0.0.0.0/0 (anywhere)

HELP_FWINTERFACES: Interfaces y redes del firewall
    Configuracion de los interfaces que conectan al firewall.
    Se aconseja usar el sistema de configuracion nuevo de iproute2
    que permite cambiar los nombres de los interfaces, asi pondriamos
    un sufijo para todos los interfaces de entrada y otro para los
    de salida. Por ejemplo para los de entrada.
     ip link set eth0 name ethlan0
     ip link set eth1 name ethlan1
    Y despues especificar:
     INTERFACE_LAN="ethlan+"
    Con esto reducimos el numero de reglas por dos, al tener una
    sola regla para cada interface.

 HELP_INTERFACE_LOOPBACK: Interface de loopback del firewall
    Interface de loopback.
INTERFACE_LOOPBACK="lo"

 HELP_INTERFACE_IGNORE: Interfaces que debe ignorar el firewall
    Interfaces que el firewall debe ignorar y permitir todo el trafico
    que pase a traves de ellos. Es una forma de tener enrutadas redes
    a traves del firewall sin que pasen por las reglas. Una aplicacion
    podria ser usarlas para el Linux Virtual Server (LVS).
INTERFACE_IGNORE=""

 HELP_INTERFACE_LAN: Interfaces que conectan con las LAN internas
    Lista de interfaces del firewall que conectan con las redes
    internas. Se pueden especificar todos los interfaces que tengan
    un sufijo con '+', por ejemplo eth+ para eth0, eth1, etc.
     Ejemplo: INTERFACE_LAN="eth0 eth1 tr+"
INTERFACE_LAN="eth0"

 HELP_INTERFACE_EXT: Interfaces que conectan con las redes externas
    Lista de interfaces del firewall que conectan con las redes
    externas. Se pueden especificar todos los interfaces que tengan
    un sufijo con '+', por ejemplo eth+ para eth0, eth1, etc.
     Ejemplo: INTERFACE_EXT="eth2 eth3 ppp+"
INTERFACE_EXT="ppp0"


 HELP_FWNETWORKS: Redes del firewall
    Segun la abstraccion del firewall tenemos dos tipos de redes:
      NET_LAN: Redes internas al firewall
      NET_EXT: Redes externas al firewall
    Para especificar internet ponemos 0.0.0.0/0 (anywhere)
    Si no ponemos nada en IP_EXT el firewall entiende que la
    red externa es Internet.

 HELP_NET_GROUPS: Definicion de grupos de IPs, rangos o redes para
    utilizar luego en las variables que aceptan este tipo de datos.
    Se definen aqui con la forma GROUP_nombregrupo_NET (se puede
    usar otra forma, pero se aconseja usar esta para no sobreescribir
    otras variables del firewall) y luego se pueden usar en cualquier
    variable que acepte IPs, rangos o redes, incluyendo el grupo en
    la forma $GROUP_nombregrupo_NET. Como este fichero de configuracion
    se ejecuta como script bash el interprete se encarga de expandir
    las variables, e incluso podemos usar cualquier codigo bash
    para generar estas variables.
     Ejemplo:
        Definimos las variables de grupo:
         GROUP_DESKTOP_NET="192.168.15.0/24 192.168.16.1"
         GROUP_COMPILERFARM_NET="192.168.16.0/24"
        Luego las usamos en una variable que acepta IPs, rangos o redes:
         NET_LAN="192.168.7.0/24 $GROUP_DESKTOP_NET $GROUP_COMPILERFARM_NET"
    Es simplemente una forma de tener ordenadas las direcciones en el
    fichero de configuracion si vamos a manejar muchas. Se aplica a los
    datos que introducimos en estas variables las mismas indicaciones que
    detallamos en HELP_NETWORKS mas arriba.
Se ofrecen algunos grupos como ejemplo:
GROUP_DESKTOP_NET="192.168.17.0/24"
GROUP_WEBSERVERS_NET="192.168.18.1 192.168.18.2 192.168.18.3"
GROUP_SSLZONE_NET="192.168.19.0/24"

 HELP_NET_IGNORE: Redes y direcciones que el firewall debe ignorar
    Redes que en la abstraccion del funcionamiento del firewall
    se consideran como no pertenecientes al conjunto, por lo que
    son ignoradas y todo el trafico que va o viene de ellas es
    permitido. Permite tener redes enrutadas a traves del firewall
    sin que el trafico pase por las reglas. Una aplicacion de esto
    podria ser el Linux Virtual Server (LVS).
NET_IGNORE=""

 HELP_NET_LAN: Redes internas al firewall (ver abstraccion)
    Redes que en la abstraccion del funcionamiento del firewall
    se consideran como internas. Se puede especificar cualquier
    numero de IPs, rangos de IPs o redes. Si queremos que cualquier
    red conectada al firewall por algun interface en INTERFACE_LAN
    tenga acceso podemos poner 0.0.0.0/0
    Aunque si ponemos 0.0.0.0/0 esto incluye tambien las demas
    redes a las que conectamos se aconseja poner tambien las
    redes o IPs internas, pues es util para evitar el spoofing.
    Si no ponemos aqui ninguna red se entiende que es 0.0.0.0/0
NET_LAN="192.168.1.0/24"

 HELP_NET_EXT: Redes externas al firewall (ver asbtraccion)
    Redes que en la abstraccion del funcionamiento del firewall
    se consideran como externas. Se puede especificar cualquier
    numero de IPs, rangos de IPs o redes. Tambien se puede poner
    una combinacion de estos y 0.0.0.0/0 (internet). Hay que tener en cuenta
    si ponemos unicamente 0.0.0.0/0 esto incluye tambien las demas
    redes a las que conectemos pero es imprescindible ponerlas
    si en el exterior vamos a tener redes privadas de clase A, B o C,
    pues si solo ponemos 0.0.0.0/0 se considerara los
    paquetes que vengan de ellas como spoofing y seran denegados.
    Si no se especifica nada se entiende 0.0.0.0/0 (internet)
NET_EXT=""


 HELP_FWNAT: Opciones relativas al NAT, routing y enmascaramiento
    Opciones comunes para realizar NAT de las conexiones.
    En el fichero pernetwork.conf podemos realizar todo tipo de
    NAT (SNAT, DNAT, port forwarding, etc) y crear reglas de
    NAT de todo tipo.

 HELP_USEIPFW: Activar el ip-forwarding
    Activar el mecanismo del kernel de ip forwarding, necesario
    para actuar de router de redes locales internas hacia otras
    redes o internet. Es obligatorio para realizar NAT de cualquier
  tipo.
USEIPFW="1"

 HELP_MASQ_INTERNET: Enmascarar los paquetes que van a internet
    Es un caso concreto de SNAT, permite que las redes internas
    especificadas en NET_LAN accedan a internet realizando NAT de
    fuente con la direccion IP del interface que conecta a internet.
    Permite conectar redes locales a internet con una sola IP,
    como es el caso de las conexiones PPP, de ADSL o cable.
MASQ_INTERNET="1"

 HELP_MASQ_SNAT: Usar SNAT en vez de MASQUERADE
    Si conocemos la IP del firewall que va a enmascarar los paquetes
    que van a internet es mucho mejor hacer SNAT en vez de MASQUERADE,
    pues SNAT es mucho mas mas rapido. Para esto es necesario conocer
    la IP con la que queremos hacer SNAT y tenerla asignada al firewall.
    Es posible poner varias direcciones IP si tenemos varias vias de
    conexion a internet, por ejemplo:
     MASQ_SNAT_IP="192.168.7.1 192.168.8.1 192.168.10.1"
    Se permiten rangos en la forma x.x.x.x-x.x.x.x pero no se permiten
    redes.
    Es necesario activar tambien MASQ_INTERNET para poder usar esta
    opcion.
    La IP para hacer SNAT debe especificarse en MASQ_SNAT_IP.
MASQ_SNAT="0"
MASQ_SNAT_IP=""

 HELP_MASQ_LAN: Enmascarar UNICAMENTE estas redes o IPs
    Limitar el enmascaramiento de las redes locales a las especificadas
    en esta variable. Permite tener redes internas con IPs publicas
    que solo seran enrutadas a internet (si las rutas lo permiten y esta
    activado el ip-forwarding), pero sin realizar SNAT.
MASQ_LAN=""

 HELP_MASQ_EXT: Enmascarar para redes en NET_EXT que no son internet
    MASQ_INTERNET solo enmascara los paquetes que van a internet, no
    los que van a NET_EXT, si queremos que se enmascaren los
    paquetes que van a otras redes o IPs que tenemos en NET_EXT debemos
    ponerlas aqui. Esta opcion es independiente de MASQ_INTERNET, y
    puede activarse sin activar MASQ_INTERNET. Lo que si tiene en
    cuenta es la variable MASQ_LAN.
MASQ_EXT="0"

 HELP_PROXYTRANS: Proxy transparente
    Redirigir todo el trafico que vaya al puerto 80 (http) al proxy
    que se encuentra EN EL MISMO HOST DONDE CORREMOS EL FIREWALL.
    Si el proxy se encuentra en OTRO HOST tendremos que usar DNAT
   en vez de REDIRECT. Para activarlo es necesario configurar tambien
    el proxy (ver la documentacion de squid).
PROXYTRANS="0"

 HELP_PROXYTRANS_DPORT: Puerto donde esta el proxy en el firewall
PROXYTRANS_DPORT="3128/tcp"


HELP_FWACCESS: Acceso al firewall
    Estas opciones permiten un acceso al firewall para que pueda
    ser administrado y pueda cumplir labores de servidor.

HELP_ADM_RANK: Rango de administracion del firewall
    Las redes o IPs que pongamos aqui tendran acceso ILIMITADO
    al firewall siempre que accedan a el por un interface de
    INTERFACE_LAN o INTERFACE_EXT. Este acceso permitira la
    administracion total del firewall. No se aconseja usarlo, pues
    cualquiera que tenga estas IPs podr