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 podra acceder de forma
    ilimitada al firewall, lo que es cualquier cosa menos
    aconsejable.
ADM_RANK=""

 HELP_DNS_LIMITED: Acceso limitado servidores DNS
    Aqui se pueden especificar IPs o redes de servidores DNS
    a los que el firewall siempre tendra conexion, aunque se
    creen reglas que digan lo contrario. Esto permite bloquear
    todo el trafico DNS en general, pero tener acceso a los
    servidores DNS.
DNS_LIM=""
## HELP_DNS_LIM_DPORT: Puertos permitidos para DNS limitado #%
DNS_LIM_DPORT="53/tcp 53/udp"
## HELP_DNS_LIM_LAN: Permitir el acceso a la LAN ademas del firewall #%
DNS_LIM_LAN="0"

HELP_SMTP_LIMITED: Acceso limitado servidores SMTP (mail)
    Aqui se pueden especificar IPs o redes de servidores SMTP
    a los que el firewall siempre tendra conexion, aunque se
    creen reglas que digan lo contrario. Esto permite bloquear
    todo el trafico SMTP en general, pero tener acceso a los
    servidores SMTP.
SMTP_LIM=""
## HELP_SMTP_LIM_DPORT: Puertos permitidos para SMTP limitado #%
SMTP_LIM_DPORT="25/tcp"
## HELP_SMTP_LIM_LAN: Permitir el acceso a la LAN ademas del firewall #%
SMTP_LIM_LAN="0"

HELP_POP_LIMITED: Acceso limitado servidores POP
    Aqui se pueden especificar IPs o redes de servidores POP
    a los que el firewall siempre tendra conexion, aunque se
    creen reglas que digan lo contrario. Esto permite bloquear
    todo el trafico POP en general, pero tener acceso a los
    servidores POP.
POP_LIM=""
## HELP_POP_LIM_DPORT: Puertos permitidos para POP limitado #%
POP_LIM_DPORT="110/tcp"
## HELP_POP_LIM_LAN: Permitir el acceso a la LAN ademas del firewall #%
POP_LIM_LAN="0"

HELP_DHCP_LIMITED: Acceso limitado servidores DHCP
    Aqui se pueden especificar IPs o redes de servidores DHCP
    a los que el firewall siempre tendra conexion, aunque se
    creen reglas que digan lo contrario. Esto permite bloquear
    todo el trafico DHCP en general, pero tener acceso a los
    servidores DHCP, aunque solo de IP a IP por medio de UDP,
    no se permite el broadcast de DHCP con esta variable, para
    permitir el acceso a broadcast de DHCP remitirse al servicio
    DHCP en rules.conf que si permite activarlo.
DHCP_LIM=""
## HELP_DHCP_LIM_DPORT: Puertos permitidos para DHCP limitado #%
DHCP_LIM_DPORT="67/udp 68/udp"
## HELP_DHCP_LIM_LAN: Permitir el acceso a la LAN ademas del firewall #%
DHCP_LIM_LAN="0"

 HELP_PROXY_LIMITED: Acceso limitado servidores PROXY
    Aqui se pueden especificar IPs o redes de servidores PROXY
    a los que el firewall siempre tendra conexion, aunque se
    creen reglas que digan lo contrario. Esto permite bloquear
    todo el trafico PROXY en general, pero tener acceso a los
    servidores PROXY.
    Esto sirve para poner nuestro proxy squid como hijo de otro proxy
    squid, por ejemplo el de nuestro ISP. Hay que configurar squid
    para poner como 'parent' el proxy que ponemos aqui.
PROXY_LIM=""
## HELP_PROXY_LIM_DPORT: Puertos permitidos para PROXY limitado #%
PROXY_LIM_DPORT="3128/tcp 3130/tcp 3130/udp"
## HELP_PROXY_LIM_LAN: Permitir el acceso a la LAN ademas del firewall #%
PROXY_LIM_LAN="0"

 HELP_LOCAL1_LIMITED: Acceso limitado servidores (configuracion local)
    Aqui se pueden especificar IPs o redes de servidores de
    otros servicios que necesitemos y a los que el firewall
    siempre tendra conexion, aunque se creen reglas que
    digan lo contrario.

## HELP_LOCAL1_LIM_DPORT: Puertos permitidos para el servicio LOCAL1 limitado #%
## HELP_LOCAL1_LIM_LAN: Permitir el acceso a la LAN ademas del firewall #%
LOCAL1_LIM=""
LOCAL1_LIM_DPORT="22/tcp"
LOCAL1_LIM_LAN="0"
## HELP_LOCAL2: Ver LOCAL1 #%
LOCAL2_LIM=""
LOCAL2_LIM_DPORT=""
LOCAL1_LIM_LAN=""
## HELP_LOCAL3: Ver LOCAL1 #%
LOCAL3_LIM=""
LOCAL3_LIM_DPORT=""
LOCAL1_LIM_LAN=""

 HELP_LIMITED_LOG: Hacer log del trafico LIMITED
    Hacer log de todo el trafico limitado generado por las reglas
    anteriores.
LIMITED_LOG="0"

 HELP_LIMITED_STATS: Crear estadisticas del trafico LIMITED
    Crear estadisticas del trafico limitado generado por las reglas
    anteriores.
LIMITED_STATS="0"



Variables en rules.conf

HELP_PORTS: Como especificar puertos
    Los puertos se especifican en la forma:
     80/tcp        Puerto 80, protocolo tcp
     80/udp        Puerto 80, protocolo udp
     80/tcp 80/udp Puerto 80, protocolo tcp y udp
    Los rangos de puertos se especifican como:
    80:100/tcp    Puertos 80 a 100 tcp

HELP_SERVICES: Habilitar servicios
    Para indicar un servicio tenemos tres variables, por ejemplo:
     XHTTP="fw-to-ext lan-to-ext:stats"     Servicio XHTTP
     XHTTP_PORT="80/tcp 80/udp 76:79/udp   Puertos del servicio
     XHTTP_DNATSERVER="192.168.1.80"       Servidor DNAT en la LAN
       Activando ext-to-dnat permite hacer de servidor desde la LAN
       hacia el exterior mediante DNAT y sin necesidad de IP publica.
       Solo se puede poner una IP o un rango de IPs, nunca redes.
    Los nombres de servicio no pueden tener el caracter _ (subrayado) en
    su nombre, si lo tienen dara error.
    El trafico se habilita indicando una combinacion de las siguientes
    direcciones:
      lan-to-fw   Trafico del firewall hasta la LAN
      fw-to-lan   Trafico del la LAN hasta el firewall
      ext-to-fw   Trafico del exterior al firewall
      fw-to-ext   Trafico del firewall al exterior
      lan-to-ext  Trafico de la LAN al exterior
      ext-to-lan  Trafico del exterior a la LAN
      all-to-all  Habilita todos los anteriores
      ext-to-dnat Habilita DNAT desde el exterior al servidor DNATSERVER
   A estas direcciones se les puede poner las siguientes opciones:
      :log        Apunta en los logs todas las conexiones para este
                  servicio y direccion.
      :stats      Crea estadisticas de estas conexiones usando RRDTOOL
                  para luego crear graficas del trafico para este servicio.
      :ulog       Manda los paquetes al espacio de usuario a traves del
                  sistema ULOG.
      :drop       Se puede usar con cualquiera de las anteriores, sirve
                  para hacer logs sin habilitar el servicio.
    Ejemplos: XHTTP="fw-to-ext:log ext-to-in:stats:drop in-to-ext:ulog"
              XHTTP="all-to-all:log:drop" (solo loggear todas las direcc.)
    Solo hay que habilitar la direccion en que se inicia la conexion para
   establecer la comunicacion.
    El orden en que aparecen en este fichero de configuracion los servicios
    es el mismo en que se meten en las tablas, estan ordenados para que las
    conexiones de los servicios mas usados se habiliten mas rapido.


HELP_GROUPS: Grupos de servicios
    Las variables GROUP_ contienen grupos de servicios, ordenados
    para hacer mas sencilla la configuracion de servicios que son
    normalmente comunes a un tipo de servidores o clientes. Se configuran
    igual que los demas servicios, con la salvedad de que no tienen
    variable _DNATSERVER, y que la variable _PORT del grupo adquiere
    los puertos de todos los servicios del grupo.
    Los nombres de grupo no pueden tener el caracter _ (subrayado) en
    su nombre, si lo tienen dara error.
    Para complementar la funcionalidad de estos servicios se puede
    poner luego en cualquier servicio del grupo una direccion que no
    salga en el grupo o una direccion con :drop para afinar cada
    servicio por separado. Ejemplo:
     GROUP_COMMON="lan-to-fw:log fw-to-lan"
     HTTP="ext-to-fw fw-to-lan:drop" (activa ext-to-fw y quita fw-to-lan)
    Lo que se ponga en los servicios tiene precedencia sobre lo que
    aparezca en el grupo. Ver la ayuda en cada grupo para descripcion.

 Grupo de servicios mas comunes en clientes y servidores
GROUP_COMMON_DEF="DNS HTTP HTTPS PROXY POP IMAP NETBIOS SMTP NNTP\
 FTP IRC SSH TELNET"
GROUP_COMMON="fw-to-lan lan-to-fw fw-to-ext lan-to-ext"

 Grupo de servicios en maquinas tipo escritorio
GROUP_DESKTOP_DEF="LISA PRIVOXY ESD ARTSD WWASHER REALPLAYER H323 XFS"
GROUP_DESKTOP="fw-to-lan lan-to-fw"

 Grupo de servicios de mensajeria instantanea
GROUP_IM_DEF="MSN ICQ AIM YAHOO JABBER"
GROUP_IM="fw-to-lan lan-to-fw fw-to-ext lan-to-ext"

 Grupo de servicios que suelen albergar los servidores
GROUP_SERVER_DEF="PROXYICP LDAP LDAPSSL DHCP MYSQL POSTGRESQL MSQLSERVER\
 IPP LPR XDM VNC RNDC XWIN SMTPS IMAPS POPS FTPSSL TELNETSSL"
GROUP_SERVER="fw-to-lan lan-to-fw"

 Grupo de servicios menos comunes en los servidores
GROUP_SERVUNCOMMON_DEF="ARKEIA PORTMAP NFS RPCLOCKD RPCRQUOTAD RPCMOUNTD \
 RPCSTATD CORBA SOCKS CVS IDENTD WHOIS AFS TFTP TOMCAT CODA SPAMASSASSIN \
 DRBD ENBD"
GROUP_SERVUNCOMMON=""

 Grupo de servicios de administracion y monitorizacion
GROUP_ADMIN_DEF="BASTIONFIREWALL SYSLOG SNMP SNMPTRAP SWAT WEBMIN NRPE\
 NSCA OPENNMS OPENNMSDHCP MON SNMPAGENTX SNMPSMUX HEARTBEAT RSYNC\
 UPSD NETDUMP NTP LINUXCONF MTS NESSUS"
GROUP_ADMIN=""

 Grupo de servicios de enrutamiento
GROUP_ROUTING_DEF="ZEBRA OSPFD BGPD RIP"
GROUP_ROUTING=""

 Grupo de servicios de empresa (enterprise)
GROUP_ENTERPRISE_DEF="IPSEC KRB KRBADM KRBKRB524 KRBKLOGIN KRBKSHELL KRBADMKDC\
 KRBEKLOGIN KRBPASSWD NETVIEW ORACLEALL ORACLESQLNET ORACLEORASRV\
 ORACLETLISRV ORACLECOAUTHOR ORACLERDB ORACLENAMES ORACLECMAN\
 ORACLEEM ORACLEVP ORACLENETCMAN ORACLE ORACLEGIOP ORACLETTC\
 OPENVIEW TIVOLI CITRIXICA ENTRUSTADMIN ENTRUSTKEYMGMT SECUREIDPROP\
 SECUREIDUDP TACACSPLUS TACACSDS RADIUS RADIUSACCT OLDRADIUS"
GROUP_ENTERPRISE=""

 Grupo de servicios peer to peer
GROUP_P2P_DEF="KAZAA NAPSTER EDONKEY WINMX"
GROUP_P2P="fw-to-lan lan-to-fw fw-to-ext lan-to-ext"

Grupo de servicios poco comunes
GROUP_UNCOMMON_DEF="GOPHER FINGER PCANYWHERE OPENWINDOWS DAYTIME REXEC\
 BIFF RLOGIN WHO RSHELL RWHOIS TRACERTUDP INTERPHONE REALSECURE\
 SQLNET UUCP"
GROUP_UNCOMMON=""


 Servicios definidos en el firewall:

 HELP_DNS: Servicio DNS
    Servicio DNS de resolucion de nombres. Puerto 53/tcp 53/udp
    Tambien DNS Caching Name Server (servidor local a servidor primario)
    Si solo queremos resolucion sobre UDP podemos quitar 53/tcp
DNS=""
DNS_PORT="53/tcp 53/udp"
DNS_DNATSERVER=""

 HELP_HTTP: Servicio HTTP
    Servicio HTTP (Web). Puerto 80/tcp
HTTP=""
HTTP_PORT="80/tcp"
HTTP_DNATSERVER=""

 HELP_HTTPS: Servicio HTTPS
    Servicio SSL (HTTP seguro). Puerto 443/tcp
HTTPS=""
HTTPS_PORT="443/tcp"
HTTPS_DNATSERVER=""

 HELP_PROXY: Servicio PROXY. Puerto 8080/tcp. A veces 3128/tcp (squid)
    Proxy de HTTP, normalmente tendremos un servidor squid o similar
    en el firewall que servira las paginas a la LAN, puede que de
    forma transparente. Normalmente el destino sera un servidor con
    un proxy squid. El puerto puede ser a veces 3128/tcp
PROXY=""
PROXY_PORT="8080/tcp"
PROXY_DNATSERVER=""

 HELP_POP: Servicio POP3
    Servicio POP (Correo entrante). Puerto 110/tcp
POP=""
POP_PORT="110/tcp"
POP_DNATSERVER=""

 HELP_IMAP: Servicio IMAP
    Servicio IMAP (Correo entrante). 143/tcp 220/tcp
IMAP=""
IMAP_PORT="143/tcp 220/tcp"
IMAP_DNATSERVER=""

 HELP_NETBIOS: Servicio NETBIOS. Microsoft o Samba.
    Puertos 135:139/tcp 135:139/udp 445/tcp 445/udp
     135/tcp,udp es ms-rpc
     137/tcp,udp es netbios-ns (nameserver)
     138/tcp,udp es microsoft-dgm (datagram service)
     139/tcp,udp es netbios-ssn (session service)
     445/tcp,udp es microsoft-ds
    Servicio NETBIOS, utilizado en redes Microsoft o unix+samba. Puertos
    que usa: el rango 135:139 en udp/tcp y 445 en tcp y udp
    Los servicios van a veces en UDP o sobre TCP (en Samba sobre Unix)
    Como es proclive a ataques y a fugas de informacion (y como los
    usuarios tienden a no configurarlo de forma segura) no deberiamos
    dejarlo salir de la red.
NETBIOS=""
NETBIOS_PORT="137:139/tcp 137:139/udp 445/tcp 445/udp"
NETBIOS_DNATSERVER=""

 HELP_NETBIOS_BROADCASTSRV: Trafico broadcast de netbios servidor
     El broadcast mas comun es el que envia el servidor a la direccion
     de broadcast netbios para anunciar sus recursos compartidos, actua
     por tanto como servidor. Si queremos habilitar el trafico de
     broadcast hacia una o unas direcciones de red deberemos especificarlo
     aqui. Esto tiene implicaciones en la seguridad del sistema que
     se deberian tener muy en cuenta. Usa los puertos 137/udp y 138/udp.
NETBIOS_BROADCASTSRV=""

HELP_NETBIOS_BROADCASTCLI: Trafico broadcast de netbios cliente
     El broadcast mas comun es el que envia el servidor a la direccion
     de broadcast netbios para anunciar sus recursos compartidos, actua
     por tanto como servidor. Si queremos habilitar el trafico de
     broadcast hacia una o unas direcciones de red deberemos especificarlo
     aqui. Esto tiene implicaciones en la seguridad del sistema que
     se deberian tener muy en cuenta. Usa los puertos 137/udp y 138/udp.
NETBIOS_BROADCASTCLI=""

 HELP_SMTP: Protocolo SMTP
    Servicio SMTP (Correo saliente). Puerto 25/tcp
SMTP=""
SMTP_PORT="25/tcp"
SMTP_DNATSERVER=""

 HELP_NNTP: Protocolo NNTP
    Servicio NNTP (News). Puerto 119/tcp
NNTP=""
NNTP_PORT="119/tcp"
NNTP_DNATSERVER=""

 HELP_FTP: Servicio FTP. Puertos 20/tcp 21/tcp
    Este firewall soporta FTP ACTIVO y FTP PASIVO. Para soportar el
    metodo de FTP ACTIVO el firewall usa el modulo de ftp para el
    connection tracking: ip_conntrack_ftp
FTP=""
FTP_PORT="21/tcp 20/tcp"
FTP_DNATSERVER=""

 HELP_IRC: Servicio IRC. Puertos 6667/tcp
    Para soportar DCC usamos el modulo de connection tracking:
    ip_conntrack_irc de Netfilter. Podemos usar por tanto DCC sin
    problemas.
IRC=""
IRC_PORT="6667/tcp"
IRC_DNATSERVER=""

 HELP_SSH: Servicio SSH. Puertos 22/tcp
    Servicio SSH, permite sustituir a telnet y ftp por sus
    contrapartidas seguras ssh y sftp que usan encriptacion.
    Tambien necesario si usamos rsync, vnc, etc sobre ssh.
SSH=""
SSH_PORT="22/tcp"
SSH_DNATSERVER=""

 HELP_TELNET: Servicio TELNET. Puerto 23/tcp
    Es inherentemente inseguro y no soporta encriptacion, por lo que
    es conveniente substituirlo por SSH que permite la misma
    funcionalidad sobre un canal encriptado.
TELNET=""
TELNET_PORT="23/tcp"
TELNET_DNATSERVER=""

 HELP_PROXYICP: Internet Cache Protocol (ICP v2) para Squid.
    Puertos: 3130/udp (pueden cambiarse)
    Protocolo de comunicacion entre servidores proxy squid.
PROXYICP=""
PROXYICP_PORT="3130/udp"
PROXYICP_DNATSERVER=""

 HELP_LDAP: Servicio LDAP
    Servicio de directorio LDAP, usado en sistemas Unix o Microsoft
    Windows 2000/XP.
LDAP=""
LDAP_PORT="389/tcp"
LDAP_DNATSERVER=""

 HELP_LDAPSSL: Servicio LDAP sobre SSL
    Servicio LDAP sobre SSL o TLS.
LDAPSSL=""
LDAPSSL_PORT="636/tcp"
LDAPSSL_DNATSERVER=""

 HELP_DHCP: Servicio DHCP. Puertos 67/udp 68/udp
    Servidor de configuraciones de hosts DHCP.
DHCP=""
DHCP_PORT="67/udp 68/udp"
DHCP_DNATSERVER=""

 HELP_DHCP_DSTCLI: Destino de broadcast para ser clientes de DHCP
    Destino de broadcast para DHCP. Si lo dejamos en
    blanco no se permitira mandar trafico broadcast para DHCP. Esta variable
    nos permite mandar mensajes broadcast a una direccion para
    recibir datos DHCP. Esta supeditado a los que pongamos en DHCP, pero
    solo aceptara broadcast en los puertos 67/udp y 68/udp.
#DHCP_DSTCLI="$BROADCAST_DST"
DHCP_DSTCLI=""

 HELP_DHCP_DSTSRV: Destino de broadcast para DHCP cuando somos servidores
    Destino de broadcast para DHCP para poder recibir mensajes de
    broadcast en un servidor que escuche en la direccion de broadcast
    para poder responder a los clientes de la red. Es el caso mas comun.
    Esta supeditado a los que pongamos en DHCP, pero
    solo aceptara broadcast en los puertos 67/udp y 68/udp.
#DHCP_DSTSRV="$BROADCAST_DST"
DHCP_DSTSRV=""

 HELP_MYSQL: Base de datos mysql
    Servidor de base de datos MYSQL.
MYSQL=""
MYSQL_PORT="3306/tcp"
MYSQL_DNATSERVER=""

 HELP_POSTGRESQL: Base de datos postgresql
    Servidor de base de datos POSTGRESQL
POSTGRESQL=""
POSTGRESQL_PORT="5432/tcp"
POSTGRESQL_DNATSERVER=""

 HELP_MSQLSERVER: Servicio Microsoft SQL Server
    Servidor SQL de Microsoft
MSQLSERVER=""
MSQLSERVER_PORT="1433/tcp"
MSQLSERVER_DNATSERVER=""

 HELP_IPP: Internet printing protocol
    El protocolo que usa cups entre otros.
IPP=""
IPP_PORT="631/tcp 631/udp"
IPP_DNATSERVER=""

 HELP_ARKEIA: Servidor arkeia
    Servidor de backup arkeia
ARKEIA=""
ARKEIA_PORT="617/tcp"
ARKEIA_DNATSERVER=""

 HELP_PORTMAP: Servicio sunrpc (Portmap). Puertos 111/tcp 111/udp
    Mapea los puertos que usaran los servicios RPC.
    Se puede obtener automaticamente PORTMAP_PORT con:
    TMPPMAP=$(rpcinfo -p localhost|grep "portmapper"|grep "tcp" \
      |tr ' ' '\n'|grep -v "p"|tail -n 2|head -n 1)
    PORTMAP_PORT="$TMPPMAP/tcp $TMPPMAP/udp"
    Donde localhost es la direccion del host donde esta portmap. Es
    necesario que portmap se este ejecutando en ese host.
    Es posible incluso incluir este codigo en este fichero de
    configuracion para que bash lo interprete.
    Casi siempre estara en 111 asi que no merece la pena.
PORTMAP=""
PORTMAP_PORT="111/tcp 111/udp"
PORTMAP_DNATSERVER=""

HELP_NFS: Servicio NFS. Puertos 2049/tcp 2049/udp
    Compartir ficheros por medio de NFS. Los ultimos linux
    proveen tanto de un cliente como un servidor de NFS a nivel
    de kernel, que usan tambien los puertos estandar para la
    comunicacion por NFS. No es posible cambiar los puertos
    en los que corren pues el modulo no acepta opciones.
    Se puede obtener automaticamente NFS_PORT con el siguiente codigo,
    pero teniendo en cuenta que NFS puede correr solo sobre udp, con
    lo que habria que retirar todo lo referente a tcp.
     TMPNFSPTCP=$(rpcinfo -p localhost|grep "nfs"|grep "tcp" \
      |tr ' ' '\n'|grep -v "nfs"|tail -n 2|head -n 1)
     TMPNFSPUDP=$(rpcinfo -p localhost|grep "nfs"|grep "udp" \
      |tr ' ' '\n'|grep -v "nfs"|tail -n 2|head -n 1)
    NFS_PORT="$TMPNFSTCP/tcp $TMPNFSUDP/udp"
    Donde localhost es la direccion del host donde esta portmap.  Es
    necesario que portmap se este ejecutando en ese host.
    Es posible incluso incluir este codigo en este fichero de
    configuracion para que bash lo interprete.
    Casi siempre estara en 2049 asi que no merece la pena.
NFS=""
NFS_PORT="2049/tcp 2049/udp"
NFS_DNATSERVER=""

 HELP_RPCLOCKD: Servicio rpc.lockd de bloqueo en NFS. 4045/udp
    Es usado por NFS. Los ultimos kernel de linux proporcionan
    la funcionalidad NFS en el kernel y normalmente ejecutan su propia
    version de NFS que incluye los demonios lockd y rpciod.
    Al cargar el modulo es posible indicar con los parametros
    nlm_udpport y nlm_tcpport el puerto en el que lockd va a escuchar,
    y se puede incluir en /etc/modules.conf para hacerlo automatico.
    Hay que tener en cuenta que el modulo lockd se carga antes de nfsd.
    Otra forma de obtener el puerto es usar el siguiente codigo:
     TMPLOCKD=$(rpcinfo -p localhost|grep "lock"|grep "udp" \
      |tr ' ' '\n'|grep -v "lock"|tail -n 2|head -n 1)
     RPCLOCKD_PORT="$TMPLOCKD/udp"
    Aunque el fichero de servicios de nmap dice que el puerto es
    4045/udp en mi maquina linux con kernel 2.4.20 el demonio escucha
    en un puerto semi-aleatorio. Es aconsejable usar rpcinfo para
    obtener el puerto o fijarlo con los parametros del modulo.
RPCLOCKD=""
RPCLOCKD_PORT="4045/udp"
RPCLOCKD_DNATSERVER=""

 HELP_RPCRQUOTAD: Servicio de quotas en NFS. 762/tcp 762/udp
    Es usado por NFS para mantener quotas, es parte del paquete quota.
    Una forma de obtener los puertos es usar el siguiente codigo:
     TMPRPCRQUOTADTPC=$(rpcinfo -p localhost|grep "quota"|grep "tcp" \
      |tr ' ' '\n'|grep -v "quota"|tail -n 2|head -n 1)
     TMPRPCRQUOTADUDP=$(rpcinfo -p localhost|grep "quota"|grep "udp" \
      |tr ' ' '\n'|grep -v "quota"|tail -n 2|head -n 1)
     RPCRQUOTAD_PORT="$TMPRPCRQUOTADTCP/tcp $TMPRPCRQUOTADTCP/udp"
    Aunque el fichero de servicios de nmap y el del iana dice que
    los puertos son 762/tcp 762/udp en mi maquina linux con kernel
    2.4.20 y rpc.rquotad version 3.06 el demonio escucha en dos
    puertos semi-aleatorios. Es aconsejable usar rpcinfo para obtener los
    puertos.
RPCRQUOTAD=""
RPCRQUOTAD_PORT="762/tcp 762/udp"
RPCRQUOTAD_DNATSERVER=""

 HELP_RPCMOUNTD: Servicio de montaje de NFS. 635/tcp 635/udp
    Es usado por NFS para recibir las ordenes de montaje desde los
    clientes y permitirlas o denegarlas.
    Es posible lanzar el comando con la opcion -p puerto que nos
    permite obligar al comando a que escuche en un puerto concreto,
    esto nos asegurara que permitimos los puertos correctos.
    Una forma de obtener los puertos es usa el siguiente codigo:
     TMPRPCMOUNTDUTPC=$(rpcinfo -p localhost|grep "mount"|grep "tcp" \
      |tr ' ' '\n'|grep -v "mount"|tail -n 2|head -n 1)
     TMPRPCMOUNTDUDP=$(rpcinfo -p localhost|grep "mount"|grep "udp" \
      |tr ' ' '\n'|grep -v "mount"|tail -n 2|head -n 1)
     RPCMOUNTD_PORT="$TMPRPCMOUNTDTCP/tcp $TMPRPCMOUNTDTCP/udp"
    Aunque el fichero de servicios de nmap dice que el puerto es 635/tcp
    pero en mi maquina linux con kernel 2.4.20 y nfs-utils version 1.0.1
    escucha un dos puertos semi-aleatorios. Es aconsejable usar la opcion
    -p de rpc.mountd o usar rpcinfo para obtener los puertos.
RPCMOUNTD=""
RPCMOUNTD_PORT="635/tcp 635/udp"
RPCMOUNTD_DNATSERVER=""

 HELP_RPCSTATD: Servicio de estatus de NFS. 1110/tcp 1110/udp
    Es usado por NFS para mantener el estado y notificar a
    rpc.lockd la informacion que necesita.
    Es posible lanzar el comando con la opcion -p puerto que nos
    permite obligar al comando a que escuche en un puerto concreto,
    esto nos asegurara que permitimos los puertos correctos.
    Una forma de obtener el puerto es usar el siguiente codigo:
     TMPRPCSTATDUTPC=$(rpcinfo -p localhost|grep "stat"|grep "tcp" \
      |tr ' ' '\n'|grep -v "stat"|tail -n 2|head -n 1)
     TMPRPCSTATDUDP=$(rpcinfo -p localhost|grep "stat"|grep "udp" \
      |tr ' ' '\n'|grep -v "stat"|tail -n 2|head -n 1)
     RPCSTATD_PORT="$TMPRPCSTATDTCP/tcp $TMPRPCSTATDTCP/udp"
    Aunque el fichero de servicios de nmap y el del iana dicen que
    los puertos son 1110/tcp 1110/udp en mi maquina linux con
    kernel 2.4.20 y nfs-utils version 1.0.1 escucha en dos puertos
    semialeatorios. Es aconsejable usar la opcion
    -p de rpc.statd o usar rpcinfo para obtener los puertos.
RPCSTATD=""
RPCSTATD_PORT="1110/tcp 1110/udp"
RPCSTATD_DNATSERVER=""

 HELP_LPR: Servicio LPR
    Servicio de impresion sobre red LPR.
LPR=""
LPR_PORT="515/tcp 515/udp"
LPR_DNATSERVER=""

 HELP_SOCKS: Servicio SOCKS. Puertos 1080/tcp
   Es un relay de TCP y UDP. Permite usar SOCKS para pasar por
    el firewall otros servicios. Muchos programas soportan el usar un
    proxy SOCKS en vez de los puertos que normalmente usan, y usando
    determinados programas se puede sockificar muchos programas.
    NUNCA abra un proxy SOCKS en internet si no quiere aparecer en
    montones de listas negras. Los proxies SOCKS abiertos para todo el
    mundo en internet se usan para crear cadenas a traves de las que
    lanzar ataques sin que se pueda encontrar el origen de estos.
SOCKS=""
SOCKS_PORT="1080/tcp"
SOCKS_DNATSERVER=""

 HELP_CVS: Servicio CVS. Puerto 2401/tcp
    Trabajo compartido sobre un arbol de codigo. Algunos
    sitios ofrecen software abierto a traves de un servidor CVS.
CVS=""
CVS_PORT="2401/tcp"
CVS_DNATSERVER=""

 HELP_IDENTD: Servicio IDENTD de identificacion de usuarios.
    Puerto 113/tcp
    Tambien llamado AUTH. Puede suponer una fuga de informacion
    de nuestra red, pero puede ser util recibir mensajes de fuera.
IDENTD=""
IDENTD_PORT="113/tcp"
IDENTD_DNATSERVER=""

 HELP_XDM: Servicio XDMCP para xdm
    X Display manager
    Servicio XDMCP de login remoto en X11 sobre red
XDM=""
XDM_PORT="177/udp"
XDM_DNATSERVER=""

 HELP_VNC: Servicio VNC. Puertos 5801/tcp 5901/tcp 6001/tcp
    Es un servicio de desktop remoto, muy usado, multiplataforma y mas
    eficaz que X11 en enlaces lentos.
VNC=""
VNC_PORT="5801/tcp 5901/tcp 6001/tcp"
VNC_DNATSERVER=""

 HELP_RNDC: Servicio rndc control sockets
    Servicio de BIND 9 (rnd control sockets)
RNDC=""
RNDC_PORT="953/tcp"
RNDC_DNATSERVER=""

 HELP_CORBA: Corba
    Corba
CORBA=""
CORBA_PORT="683:684/tcp 683:684/udp 1050/tcp 1050/udp 2809/tcp 2809/udp"
CORBA_DNATSERVER=""

 HELP_XWIN: Servicio de Xwindows. Puertos 6000:6063/tcp
    Servicio de acceso remoto a un servidor X11.
    El rango incluye el que usa SSH para mandar el trafico X11 sobre
    un canal ssh abierto.
XWIN=""
XWIN_PORT="6000:6063/tcp"
XWIN_DNATSERVER=""

 HELP_SMTPS: Servicio SMTP sobre SSL
    Servicio SMTP sobre SSL o TLS.
SMTPS=""
SMTPS_PORT="465/tcp"
SMTPS_DNATSERVER=""

 HELP_IMAPS: Servicio IMAPS (IMAP seguro). Puertos 993/tcp
    Servicio de correo IMAP sobre SSL o TLS.
IMAPS=""
IMAPS_PORT="993/tcp"
IMAPS_DNATSERVER=""

 HELP_POPS: Servicio POPS (POP seguro). Puertos 995/tcp
     Servicio de correo POP sobre SSL o TLS.
POPS=""
POPS_PORT="995/tcp"
POPS_DNATSERVER=""

 HELP_FTPSSL: Ftp seguro
    Ftp sobre SSL o TLS.
FTPSSL=""
FTPSSL_PORT="989:990/tcp"
FTPSSL_DNATSERVER=""

 HELP_TELNETSSL: Telnet seguro
    Telnet sobre SSL o TLS
TELNETSSL=""
TELNETSSL_PORT="992/tcp"
TELNETSSL_DNATSERVER=""

 HELP_WHOIS: Servicio WHOIS. Puertos 43/tcp 43/udp
    Acceso a servidores de base datos sobre dominios WHOIS.
WHOIS=""
WHOIS_PORT="43/tcp 43/udp"
WHOIS_DNATSERVER=""

 HELP_AFS: Servicio AFS
    Servidor de ficheros AFS
AFS=""
AFS_PORT="7000:7009/tcp"
AFS_DNATSERVER=""

 HELP_TFTP: Servicio tftp
    Ftp sin autentificacion. Se usa para subir configuraciones a routers,
    y maquinas sin disco duro.
TFTP=""
TFTP_PORT="69/udp"
TFTP_DNATSERVER=""

 HELP_TOMCAT: Servidor Tomcat 4
    Servidor Tomcat 4
    Funciona por defecto en el mismo puerto que se suele usar para los
    proxies tipo squid. Es conveniente cambiarlo. Si tenemos activado el
    PROXY TRANSPARENTE para el puerto 8080 seguramente acabaremos teniendo
    graves problemas con el destino de nuestras conexiones.
TOMCAT=""
TOMCAT_PORT="8080/tcp"
TOMCAT_DNATSERVER=""

 HELP_CODA: Servidor de ficheros CODA
    Servidor de ficheros CODA
CODA=""
CODA_PORT="369:370/udp 370/tcp 370/udp 2430/tcp 2432:2433/tcp 2432:2433/udp"
CODA_DNATSERVER=""

 HELP_SPAMASSASSIN: Spamassassin
    Spamassassin
SPAMASSASSIN=""
SPAMASSASSIN_PORT="783/tcp"
SPAMASSASSIN_DNATSERVER=""

 HELP_DRBD: Drbd network raid
    Drbd network raid
DRBD=""
DRBD_PORT="7789/tcp 7789/udp"
DRBD_DNATSERVER=""

 HELP_ENBD: Enhanced network block device
    Enhanced network block device
ENBD=""
ENBD_PORT="1099:1103/tcp 1099:1103/udp"
ENBD_DNATSERVER=""

 HELP_LISA: Lisa (KDE)
    The lan information server
LISA=""
LISA_PORT="7741/tcp 7741/udp"
LISA_DNATSERVER=""

 HELP_PRIVOXY: Privacy enhanced proxy
    Privacy enhanced proxy
PRIVOXY=""
PRIVOXY_PORT="8118/tcp"
PRIVOXY_DNATSERVER=""

 HELP_ESD: Servidor ESD de GNOME
    Enlightened sound daemon (gnome)
ESD=""
ESD_PORT="16001/tcp"
ESD_DNATSERVER=""

 HELP_ARTSD: Servidor artsd de KDE
    Analog realtime synthesizer (kde 3)
ARTSD=""
ARTSD_PORT="32814/tcp"
ARTSD_DNATSERVER=""

 HELP_WWASHER: Wwasher proxy
    Wwasher proxy
WWASHER=""
WWASHER_PORT="9090/tcp"
WWASHER_DNATSERVER=""

 HELP_REALPLAYER: Servicio Realplayer y Realaudio
    Realplayer, Realaudio.
    Realplayer 7070/tcp
    RTSP real time stream control protocol 554/tcp
    PNA puerto 1090/tcp
REALPLAYER=""
REALPLAYER_PORT="7070/tcp 554/tcp 1090/tcp"
REALPLAYER_DNATSERVER=""

 HELP_H323: Servicio H323
    Servicio H323 de transmision multimedia sobre Internet,
    es el usado por Netmeeting y Gnome-netmeeting. Tambien es el
    usado por MSN para transportar audio y video.
    Para poder usar el protocolo H323 a traves del firewall
    es necesario un modulo del kernel que lo soporte, y si
    usamos NAT otro modulo para el nat. Estas extensiones no
    suelen venir de serie (al menos en Redhat 9) y implican tener
    que parchear el codigo fuente del kernel e iptables usando
    patch-o-matic para incluir la extension, y luego recompilarlo
    todo. Las opciones para cargar y activar estos modulos estan
    en advanced.conf porque no vienen de serie en el kernel.
H323=""
H323_PORT="1720/tcp"
H323_DNATSERVER=""

 HELP_XFS: Servicio XFS
    Servidor de fuentes de X11.
XFS=""
XFS_PORT="7100/tcp"
XFS_DNATSERVER=""

Se indican a continuación otra serie de servicios agrupados según su funcionalidad:

HELP_GROUP_ADMIN: Servicios de administracion y configuracion
    Servicios de administracion, configuracion y monitorizacion.
    Incluye los servicios SNMP.
## HELP_BASTIONFIREWALL: Configuracion a traves de web de bastion-firewall
##    Permite el acceso a la configuracion via web de bastion-firewall,
#%    donde se pueden cambiar las reglas y ver las estadisticas.
BASTIONFIREWALL=""
BASTIONFIREWALL_PORT="10002/tcp"
BASTIONFIREWALL_DNATSERVER=""

## HELP_BASTIONFIREWALLSSL: Configuracion a traves de SSL de bastion-firewall
##    Permite el acceso a la configuracion via SSL de bastion-firewall,
#%    donde se pueden cambiar las reglas y ver las estadisticas.
BASTIONFIREWALLSSL=""
BASTIONFIREWALLSSL_PORT="10003/tcp"
BASTIONFIREWALLSSL_DNATSERVER=""

## HELP_SYSLOG: Servicio de syslog
#%    Servicio de syslog
SYSLOG=""
SYSLOG_PORT="514/udp"
SYSLOG_DNATSERVER=""
## HELP_SNMP: Servicio SNMP (OpenView, Tkined, OpenNMS, snmpd, etc)
##     Puertos 161/udp
##     Hay que tener en cuenta ademas que la version 1 de snmp no
##     tiene ningun tipo de seguridad, no conviene permitir el acceso
#%     desde el exterior si no se tiene seguridad sobre snmp (v2c o v3)
SNMP=""
SNMP_PORT="161/udp"
SNMP_DNATSERVER=""

## HELP_SNMPTRAP: Servicio SNMPTRAP (OpenView, Tivoli, Tkined, OpenNSM, etc)
##    Servicio de avisos asincronos de SNMP (snmptraps)
#%    Puertos 162/udp
SNMPTRAP=""
SNMPTRAP_PORT="162/udp"
SNMPTRAP_DNATSERVER=""

## HELP_SWAT: Servicio Swat. Puerto 901/tcp
#%    Configuracion de Samba a traves de web.
SWAT=""
SWAT_PORT="901/tcp"
SWAT_DNATSERVER=""

## HELP_WEBMIN: Servicio Webmin. Puerto 10000/tcp
#%    Sistema de administracion remota Webmin.
WEBMIN=""
WEBMIN_PORT="10000/tcp"
WEBMIN_DNATSERVER=""

## HELP_NRPE: Servicio Nagios NRPE. Puerto 5666/tcp
#%    Demonio que ejecuta plugins NAGIOS en maquinas remotas
NRPE=""
NRPE_PORT="5666/tcp"
NRPE_DNATSERVER=""

## HELP_NSCA: Nagios service check acceptor
#%    Nagios service check acceptor
NSCA=""
NSCA_PORT="5667/tcp"
NSCA_DNATSERVER=""

## HELP_OPENNMS: Sistema de gestion de red OpenNMS
#%    Sistema de gestion de red OpenNMS
OPENNMS=""
OPENNMS_PORT="8180/tcp 8181/tcp"
OPENNMS_DNATSERVER=""

## HELP_OPENNMSDHCP: Sistema de gestion de red OpenNMS (dhcp)
##    Sistema de gestion de red OpenNMS
#%    Servidor dhcp de Opennms
OPENNMSDHCP=""
OPENNMSDHCP_PORT="5818/tcp"
OPENNMSDHCP_DNATSERVER=""

## HELP_MON: Mon monitoring services
#%    Mon monitoring services
MON=""
MON_PORT="2583/tcp 2583/udp"
MON_DNATSERVER=""

## HELP_SNMPAGENTX: AgentX de snmpd
#%    AgentX de snmpd
SNMPAGENTX=""
SNMPAGENTX_PORT="705/tcp 705/udp"
SNMPAGENTX_DNATSERVER=""

## HELP_SNMPSMUX: SNMP multiplexer
#%    Multiplexador de SNMP
SNMPSMUX=""
SNMPSMUX_PORT="199/tcp"
SNMPSMUX_DNATSERVER=""

## HELP_HEARTBEAT: Heartbeat
#%    Enlace para alta disponibilidad de heartbeat.
HEARTBEAT=""
HEARTBEAT_PORT="694/udp"
HEARTBEAT_DNATSERVER=""

## HELP_RSYNC: Servicio de sincronizacion rsync
#%    Servicio de sincronizacion rsync
RSYNC=""
RSYNC_PORT="873/tcp"
RSYNC_DNATSERVER=""

## HELP_UPSD: Servicio upsd
#%    Control de UPS
UPSD=""
UPSD_PORT="3305/tcp 3305/udp"
UPSD_DNATSERVER=""

## HELP_NETDUMP: Servicio netdump
##    El servicio netdump permite mandar los datos sobre la caida del
##    kernel de Linux a un servidor central, junto con una copia de la
#%    memoria fisica del sistema.
NETDUMP=""
NETDUMP_PORT="6666/udp"
NETDUMP_DNATSERVER=""

## HELP_NTP: Servicio NTP (Sincronizacion de relojes)
##    Puertos 123/udp
#%    Servicio de sincronizacion de relojes internos de maquinas
NTP=""
NTP_PORT="123/udp"
NTP_DNATSERVER=""

## HELP_LINUXCONF: Linuxconf
#%    Sistema de configuracion para Linux linuxconf.
LINUXCONF=""
LINUXCONF_PORT="98/tcp"
LINUXCONF_DNATSERVER=""

## HELP_MTS: Servicio Microsoft Terminal Server
##    Servicio Microsoft Terminal Server de acceso remoto a Windows.
#%    MS WBT Server
MTS=""
MTS_PORT="3389/tcp"
MTS_DNATSERVER=""

## HELP_NESSUS: Servidor de escaneo de seguridad
#%    Servidor nessusd del escaner de seguridad NESSUS
NESSUS=""
NESSUS_PORT="1241/tcp"
NESSUS_DNATSERVER=""

 HELP_GROUP_IM: Mensajeria instantanea
    Servicios de mensajeria instantanea (msn, icq, aim, etc)
## HELP_MSN: Mensajeria instantanea de Microsoft (MSN).
##    Puerto 1863/tcp
##    Permite usar los servicios de MSN de Microsoft. Hay que
##    tener en cuenta que las ultimas versiones del cliente pueden usar
##    un tunel por el puerto 80/tcp (HTTP), lo que hace mas dificil
##    bloquearlo. Es posible hacerlo con un proxy como squid.
##    Tambien es posible que tengamos qeu activar el servicio H323
##    de transmision multimedia sobre Internet, pues puede necesitarlo
##    MSN para transportar audio y video. Para poder usar el protocolo
##    H323 es necesario un modulo del kernel que lo soporte, y si
##    usamos NAT otro modulo para el nat. Estas extensiones no
##    suelen venir de serie (al menos en Redhat 9) y implican tener
##    que parchear el codigo fuente del kernel e iptables usando
##    patch-o-matic para incluir la extension, y luego recompilarlo
#%    todo.
MSN=""
MSN_PORT="1863/tcp"
MSN_DNATSERVER=""

## HELP_ICQ: Mensajeria instantanea de ICQ. Puertos 5190/tcp 4000/tcp
#%    Mensajeria ICQ, ahora parte de AOL.
ICQ=""
ICQ_PORT="5190/tcp 4000/tcp"
ICQ_DNATSERVER=""

## HELP_AIM: Mensajeria instantanea de AOL.
##    Puertos 5190:5193/tcp
#%    Mensajeria Instantanea de AOL.
AIM=""
AIM_PORT="5190:5193/tcp"
AIM_DNATSERVER=""

## HELP_YAHOO: Mensajeria instantanea de Yahoo.
##    Puertos 5050/tcp
#%    Yahoo messenger y todos sus servicios asociados.
YAHOO=""
YAHOO_PORT="5050/tcp"
YAHOO_DNATSERVER=""

## HELP_JABBER: Mensajeria instantanea de Jabber (IM opensource)
##    Puertos 5222/tcp 5269/tcp
##    Jabber es un sistema de mensajeria instantanea muy avanzado y
#%    disponible opensource.
JABBER=""
JABBER_PORT="5222/tcp 5269/tcp"
JABBER_DNATSERVER=""

HELP_GROUP_ROUTING: Servicios y protocolos de enrutamiento
    Servicios y protocolos de enrutamiento.
## HELP_ZEBRA: Zebra routing protocol
#%    Zebra routing protocol
ZEBRA=""
ZEBRA_PORT="2601:2602/tcp"
ZEBRA_DNATSERVER=""

## HELP_OSPFD: Ospf routing protocol
#%    Ospf routing protocol
OSPFD=""
OSPFD_PORT="2604/tcp"
OSPFD_DNATSERVER=""

## HELP_BGPD: Border gateway protocol
#%    Border gateway protocol
BGPD=""
BGPD_PORT="179/tcp 2605/tcp"
BGPD_DNATSERVER=""

## HELP_RIP: Route protocol (routed)
#%    Servicio de enrutado RIP
RIP=""
RIP_PORT="520/udp"
RIP_DNATSERVER=""

HELP_GROUP_ENTERPRISE: Servicios orientado a la gran empresa
    Servicios que se suelen usar en grandes redes, normalmente
    denominados enterprise services.
## HELP_IPSEC: Trafico IPSEC
##    Trafico IPSEC (por ejemplo freeswan en Linux).
##    Ademas debe habilitarse el trafico para los protocolos IPSECESP
##    (si usamos encriptacion o autentificacion) y IPSECAH (si usamos
##    autentificacion a nivel del paquete). Uno de los dos es necesario.
#%    Este puerto es el que usa IPSEC para las negociaciones IKE.
IPSEC=""
IPSEC_PORT="500/udp"
IPSEC_DNATSERVER=""

## HELP_KRB: Kerberos
#%    Kerberos (v5)
KRB=""
KRB_PORT="88/udp"
KRB_DNATSERVER=""

## HELP_KRBADM: Kerberos adm kadmin
#%    Kerberos adm kadmin (v5)
KRBADM=""
KRBADM_PORT="749/udp"
KRBADM_DNATSERVER=""

## HELP_KRBKRB524: Kerberos v5 to v4 translator
#%    Kerberos V5 to V4 translator
KRBKRB524=""
KRBKRB524_PORT="4444/udp"
KRBKRB524_DNATSERVER=""

## HELP_KRBKLOGIN: Servicio kerberos klogin
#%    Kerberized rlogin (v5)
KRBKLOGIN=""
KRBKLOGIN_PORT="543/tcp"
KRBKLOGIN_DNATSERVER=""

## HELP_KRBKSHELL: Servicio kerberos kshell
##    Kerberized rsh (v5)
#%    krcmd
KRBKSHELL=""
KRBKSHELL_PORT="544/tcp"
KRBKSHELL_DNATSERVER=""

## HELP_KRBADMKDC: Servicio kerberos adm kdc
#%    Kerberos v4 krb-sec kdc
KRBADMKDC=""
KRBADMKDC_PORT="750/udp"
KRBADMKDC_DNATSERVER=""

## HELP_KRBEKLOGIN: Servicio kerberos ek login
#%    Kerberos encripted login
KRBEKLOGIN=""
KRBEKLOGIN_PORT="2105/tcp"
KRBEKLOGIN_DNATSERVER=""

## HELP_KRBPASSWD: Kerberos password
#%    Kerberos passwd
KRBPASSWD=""
KRBPASSWD_PORT="464/udp"
KRBPASSWD_DNATSERVER=""

## HELP_NETVIEW: Netview
#%    Netview
NETVIEW=""
NETVIEW_PORT="729:731/tcp 729:731/udp 1661:1672/tcp 1661:1672/udp"
NETVIEW_DNATSERVER=""

## HELP_ORACLEALL: Servicios de Oracle
##    Varios servicios de Oracle. Los nombres son descriptivos.
#%    Para activarlos todos a la vez usar ORACLEALL
ORACLEALL=""
ORACLEALL_PORT="66/tcp 66/udp 1525/tcp 1525/udp 1527/tcp 1527/udp \
 1529/tcp 1529/udp 1571/tcp 1571/udp 1575/tcp 1575/udp 1630/tcp \
 1630/udp 1748/tcp 1748/udp 1754/tcp 1754/udp 1808:1809/tcp \
 1808:1809/udp 1830/tcp 1830/udp 2005/tcp 2481:2482/tcp \
 2481:2482/udp 2483:2484/tcp 2483:2484/udp"
ORACLEALL_DNATSERVER=""

ORACLESQLNET=""
ORACLESQLNET_PORT="66/tcp 66/udp"
ORACLESQLNET_DNATSERVER=""

ORACLEORASRV=""
ORACLEORASRV_PORT="1525/tcp 1525/udp"
ORACLEORASRV_DNATSERVER=""

ORACLETLISRV=""
ORACLETLISRV_PORT="1527/tcp 1527/udp"
ORACLETLISRV_DNATSERVER=""

ORACLECOAUTHOR=""
ORACLECOAUTHOR_PORT="1529/tcp 1529/udp"
ORACLECOAUTHOR_DNATSERVER=""

ORACLERDB=""
ORACLERDB_PORT="1571/tcp 1571/udp"
ORACLERDB_DNATSERVER=""

ORACLENAMES=""
ORACLENAMES_PORT="1575/tcp 1575/udp"
ORACLENAMES_DNATSERVER=""

ORACLECMAN=""
ORACLECMAN_PORT="1630/tcp 1630/udp"
ORACLECMAN_DNATSERVER=""

ORACLEEM=""
ORACLEEM_PORT="1748/tcp 1748/udp 1754/tcp 1754/udp"
ORACLEEM_DNATSERVER=""

ORACLEVP=""
ORACLEVP_PORT="1808:1809/tcp 1808:1809/udp"
ORACLEVP_DNATSERVER=""

ORACLENETCMAN=""
ORACLENETCMAN_PORT="1830/tcp 1830/udp"
ORACLENETCMAN_DNATSERVER=""

ORACLE=""
ORACLE_PORT="2005/tcp"
ORACLE_DNATSERVER=""

ORACLEGIOP=""
ORACLEGIOP_PORT="2481:2482/tcp 2481:2482/udp"
ORACLEGIOP_DNATSERVER=""

ORACLETTC=""
ORACLETTC_PORT="2483:2484/tcp 2483:2484/udp"
ORACLETTC_DNATSERVER=""

## HELP_OPENVIEW: Openview
#%    Openview
OPENVIEW=""
OPENVIEW_PORT="2389/tcp 2389/udp 2447/tcp 2447/udp 7426:7431/tcp 7426:7431/udp"
OPENVIEW_DNATSERVER=""

## HELP_TIVOLI: Tivoli
#%    Tivoli
TIVOLI=""
TIVOLI_PORT="94/tcp 94/udp 627/tcp 627/udp 1965/tcp 1965/udp"
TIVO_DNATSERVER=""

## HELP_CITRIXICA: Servicio CITRIX ICA
#%    Servicio CITRIX ICA
CITRIXICA=""
CITRIXICA_PORT="1494/tcp"
CITRIXICA_DNATSERVER=""

## HELP_ENTRUSTADMIN: Servicio ENTRUST ADMIN
#%    Servicio ENTRUST ADMIN
ENTRUSTADMIN=""
ENTRUSTADMIN_PORT="709/tcp"
ENTRUSTADMIN_DNATSERVER=""

## HELP_ENTRUSTKEYMGMT: Servicio ENTRUST KEY MANAGEMENT
#%    Servicio ENTRUST KEY MANAGEMENT
ENTRUSTKEYMGMT=""
ENTRUSTKEYMGMT_PORT="710/tcp"
ENTRUSTKEYMGMT_DNATSERVER=""

## HELP_SECUREIDPROP: Servicio SECURE ID PROP
#%    Servicio SECURE ID PROP
SECUREIDPROP=""
SECUREIDPROP_PORT="5510/tcp"
SECUREIDPROP_DNATSERVER=""

## HELP_SECUREIDUDP: Servicio SECURE ID UDP
#%    Servicio SECURE ID UDP
SECUREIDUDP=""
SECUREIDUDP_PORT="1024/udp"
SECUREIDUDP_DNATSERVER=""

## HELP_TACACSPLUS: Servicio TACACS plus
#%    Servicio TACACS plus
TACACSPLUS=""
TACACSPLUS_PORT="49/tcp"
TACACSPLUS_DNATSERVER=""

## HELP_TACACSDS: Servicio TACACS DS
#%    Servicio TACACS DS
TACACSDS=""
TACACSDS_PORT="65/tcp 65/udp"
TACACSDS_DNATSERVER=""

## HELP_RADIUS: Servicio Radius
#%    Servicio RADIUS.
RADIUS=""
RADIUS_PORT="1812/tcp 1812/udp"
RADIUS_DNATSERVER=""

## HELP_RADIUSACCT: Radius ACCT
#%    Radius ACCT
RADIUSACCT=""
RADIUSACCT_PORT="1813/tcp 1813/udp"
RADIUSACCT_DNATSERVER=""

## HELP_OLDRADIUS: Old radius
#%    Old radius
OLDRADIUS=""
OLDRADIUS_PORT="1645/udp"
OLDRADIUS_DNATSERVER=""

 HELP_GROUP_P2P: Servicios peer to peer
    Servicios peer to peer
## HELP_KAZAA: Servicio de P2P kazaa
#%    En redes empresariales esta regla es util para loggear el trafico.
KAZAA=""
KAZAA_PORT="1214/tcp"
KAZAA_DNATSERVER=""

## HELP_NAPSTER: Servicio de P2P napster
#%    En redes empresariales esta regla es util para loggear el trafico.
NAPSTER=""
NAPSTER_PORT="8888/tcp 7777/tcp 8875/tcp"
NAPSTER_DNATSERVER=""

## HELP_EDONKEY: Servicio de P2P edonkey o emule
#%    En redes empresariales esta regla es util para loggear el trafico.
EDONKEY=""
EDONKEY_PORT="4662:4663/tcp"
EDONKEY_DNATSERVER=""

## HELP_WINMX: Servicio de P2P winmx
#%    En redes empresariales esta regla es util para loggear el trafico.
WINMX=""
WINMX_PORT="6699/tcp"
WINMX_DNATSERVER=""

HELP_GROUP_UNCOMMON: Servicios poco comunes
    Servicios poco comunes u obsoletos y que se suelen utilizar
    poco.
## HELP_GOPHER: Servicio gopher
#%    Servicio gopher
GOPHER=""
GOPHER_PORT="70/tcp"
GOPHER_DNATSERVER=""

## HELP_FINGER: Servicio finger. Puertos 79/tcp
##    Servicio finger para obtener informacion sobre una cuenta
##    en una maquina. Casi no se usa hoy en dia y supone un agujero
#%    de seguridad.
FINGER=""
FINGER_PORT="79/tcp"
FINGER_DNATSERVER=""

## HELP_PCANYWHERE: Servicio pc-anywhere  5631/tcp 5362/udp
#%    Servicio pc-anywhere de control y administracion remotos.
PCANYWHERE=""
PCANYWHERE_PORT="5631/tcp 5362/udp"
PCANYWHERE_DNATSERVER=""

## HELP_OPENWINDOWS: Servicio Openwindows
#%    Servicio Openwindows
OPENWINDOWS=""
OPENWINDOWS_PORT="2000/tcp"
OPENWINDOWS_DNATSERVER=""

## HELP_DAYTIME: Servicio daytime
#%    Servicio daytime
DAYTIME=""
DAYTIME_PORT="13/tcp"
DAYTIME_DNATSERVER=""

## HELP_REXEC: Servicio rexec
#%    Ejecucion remota.
REXEC=""
REXEC_PORT="512/tcp"
REXEC_DNATSERVER=""

## HELP_BIFF: Servicio biff
#%    Aviso de correo
BIFF=""
BIFF_PORT="512/udp"
BIFF_DNATSERVER=""

## HELP_RLOGIN: Servicio rlogin
#%    Servicio de login remoto
RLOGIN=""
RLOGIN_PORT="513/tcp"
RLOGIN_DNATSERVER=""

## HELP_WHO: Servicio who
#%    Servicio de who remoto
WHO=""
WHO_PORT="513/udp"
WHO_DNATSERVER=""

## HELP_RSHELL: Servicio rshell
#%    Acceso a shell remoto
RSHELL=""
RSHELL_PORT="514/tcp"
RSHELL_DNATSERVER=""

## HELP_RWHOIS: Servicio rwhois
#%    Servicio whois remoto
RWHOIS=""
RWHOIS_PORT="4321/tcp"
RWHOIS_DNATSERVER=""

## HELP_TRACERTUDP: Traceroute sobre UDP
#%    Servicio de traceroute sobre UDP
TRACERTUDP=""
TRACERTUDP_PORT="33434:33524/udp"
TRACERTUDP_DNATSERVER=""

## HELP_INTERPHONE: Servicio Interphone
#%    Vocaltec internet phone and web conference
INTERPHONE=""
INTERPHONE_PORT="22555/udp"
INTERPHONE_DNATSERVER=""

## HELP_REALSECURE: Servicio Realsecure
#%    Servicio Realsecure
REALSECURE=""
REALSECURE_PORT="2998/tcp"
REALSECURE_DNATSERVER=""

## HELP_SQLNET: Servicio SQLNET
#%    Servicio SQLNET
SQLNET=""
SQLNET_PORT="1521/tcp"
SQLNET_DNATSERVER=""

## HELP_UUCP: Servicio UUCP
#%    Servicio UUCP
UUCP=""
UUCP_PORT="540:541/tcp"
UUCP_DNATSERVER=""


HELP_QUEUE_GROUPS: Mandar paquetes al espacio de usuario antes de
                    aceptarlos definitivamente
    Con estas variables podemos crear grupos de trafico que seran
    pasados al espacio de usuario, 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.
    Hay que tener en cuenta que si el trafico es denegado por
    snort-inline se eliminara como con DROP, sin usar las facilidades
    de REJECT que son convenientes para un mejor funcionamiento de
    las redes. Solo se pasara a QUEUE el trafico que vaya a aceptarse
    por haberse habilitado reglas para que se acepte este trafico.
    Se muestran unos ejemplos, pero puede crearse
    cualquier tipo de grupo siempre que comienze por QUEUE_
    y termine por _GROUP. En los grupos se pueden meter todo tipo
    de servicios, ya sea como 80/tcp o como variable, metiendo
    la cadena $HTTP_PORT, la variable que contiene los puertos
    del servicio que tenemos.
    Si mas que la maxima seguridad nos interesa el tener informacion
    del tipo de trafico que estamos denegando podemos usar el
    programa pdumpq (http://rouxdoo.freeshell.org/dmn/pdumpq/) que
    escribe en un fichero en formato tcpdump todo el trafico que
    se le pase via NETLINK. Es trivial el meter en la cadena
    DROPIT un codigo similar al que tenemos en ACCEPTIT, pero
    entonces pdumpq denegaria todo el trafico como un DROP, y es
    mas aconsejable para determinados protocolos usar REJECT.
    Una solucion intermedia seria mandar solo el trafico que nos
    es desconocido o fabricado a pdumpq para denegarlo y luego
    poder estudiarlo.

 HELP_QUEUE_WEB_GROUP: Mandar los paquetes HTTP al snort-inline
    Si ponemos aqui el protocolo HTTP y PROXY entonces antes
    de aceptar el trafico se mandara al espacio de usuario que
    podra aceptarlo o denegarlo segun sus reglas, normalmente
    se lo mandaremos a snort-inline, o a otro programa que acepte
    y decida sobre el trafico que le inyectamos. Si incluimos
    variables ya definidas debemos ponerlas en la forma $VAR_PORT
    En este caso ademas deberiamos activar alguna direccion de
    trafico para los servicios HTTP y PROXY, que sera el trafico
    que se pasara a QUEUE.
#QUEUE_WEB_GROUP="$HTTP_PORT $PROXY_PORT"

 HELP_QUEUE_MAIL_GROUP: Mandar los paquetes mail al snort-inline
    Grupo queue para inspeccionar los paquetes de correo
#QUEUE_MAIL_GROUP="25/tcp 465/tcp 110/tcp 995/tcp"



 HELP_ICMP: Configuracion de mensajes ICMP
    Configuracion de los mensajes ICMP
    Los nombres de las variables se corresponden con el nombre
    del tipo de mensaje segun iptables -p icmp -h
    Para habilitarlo se hace igual que con las variables
    _PORT de los servicios, las mismas direcciones y las
    mismas opciones, menos la opcion ext-to-dnat que no se usa.
    Debemos especificar la direccion de ida y la de vuelta de
    los paquetes, no solo la direccion de inicio de la conexion
    como en las reglas de los servicios. Por ejemplo si queremos
    usar ping debemos habilitar echo-request hacia afuera y
    echo-reply hacia adentro.
    Se puede optar por usar la configuracion por defecto, que
    anula las demas variables o configurar uno por uno cada
    mensaje. Los comentarios contienen los valores por defecto.

 HELP_ICMPX_DEFAULT_CONF: Activar la configuracion por defecto
    Esta variable activa la configuracion por defecto y hace
    que se los valores de las siguientes variables. Los valores
    por defecto son los indicados en cada una de las variables.
ICMPX_DEFAULT_CONF="1"

 HELP_GRICMPX: Grupos para trafico ICMP
    Este grupo afecta a todo el trafico ICMP y por tanto las
    reglas que se pongan para el grupo se pondran junto con las
    de cada tipo de trafico ICMP. Esto permite meter reglas para
    todo el trafico ICMP sin tener que ponerlas en cada tipo
    de trafico. No se permite crear nuevos grupos para trafico
    ICMP. Es posible crear otros grupos ademas del DEFAULT siguiendo
    la siguiente norma: Deben comenzar por GRICMPX_ y acabar en _DEF,
    por tanto seria algo asi: GRICMPX_INFO_DEF o GRICMPX_BAD_DEF
    Luego la variable para poner la regla sera: GRICMPX_INFO o
    GRICMPX_BAD.
GRICMPX_DEFAULT_DEF="ICMPX_SOURCE_QUENCH ICMPX_PARAMETER_PROBLEM \
 ICMPX_DESTINATION_UNREACHEABLE ICMPX_FRAGMENTATION_NEEDED \
 ICMPX_TIME_EXCEED ICMPX_ECHO_REQUEST ICMPX_ECHO_REPLY \
 ICMPX_ADDRESS_MASK_REQUEST ICMPX_ADDRESS_MASK_REPLY \
 ICMPX_TIMESTAMP_REQUEST ICMPX_TIMESTAMP_REPLY ICMPX_REDIRECT \
 ICMPX_TTL_ZERO_DURING_TRANSIT ICMPX_TTL_ZERO_DURING_REASSEMBLY \
 ICMPX_ICMPPORT_UNREACHEABLE ICMPX_PROTOCOL_UNREACHEABLE \
 ICMPX_NETWORK_UNREACHEABLE ICMPX_HOST_UNREACHEABLE \
 ICMPX_SOURCE_ROUTE_FAILED ICMPX_NETWORK_UNKNOWN ICMPX_HOST_UNKNOWN \
 ICMPX_NETWORK_PROHIBITED ICMPX_HOST_PROHIBITED \
 ICMPX_TOS_NETWORK_UNREACHEABLE ICMPX_TOS_HOST_UNREACHEABLE \
 ICMPX_COMMUNICATION_PROHIBITED ICMPX_IP_HEADER_BAD \
 ICMPX_REQUIRED_OPTION_MISSING ICMPX_HOST_PRECEDENCE_VIOLATION \
 ICMPX_PRECEDENCE_CUTOFF ICMPX_NETWORK_REDIRECT ICMPX_HOST_REDIRECT \
 ICMPX_TOS_NETWORK_REDIRECT ICMPX_TOS_HOST_REDIRECT \
 ICMPX_ROUTER_ADVERTISEMENT ICMPX_ROUTER_SOLICITATION"

GRICMPX_DEFAULT=""

Luego vienen todos los tipos de tráfico ICMP que no se detallan aquí por ser demasiados, son todos los que se incluyen dentro del grupo GRICMPX_DEFAULT_DEF y que se puede especificar el tráfico para cada uno de ellos, donde el tráfico es obviamente solo para la dirección que indicamos, pues el tráfico ICMP no tiene estado y no puede ser seguido en la mayoría de los casos por el conntrack. Solo podemos como hemos visto más arriba especificar si queremos que el sistema de Connection Tracking considere trafico related a los ECHO_REPLY de un ECHO_REQUEST o a los mensajes ICMP devueltos por intentos de conexiones a máquinas que nos deniegan el acceso o dispositivos de red que nos informan de problemas en la red. Para los demás deberemos especificar para cada tipo de trafico que direcciones queremos habilitar y con que opciones.


 HELP_PROTOCOLS: Otros protocolos
    Aqui se definen los protocolos independientes, como pueden
    ser los de IPSEC y otros. El nombre ha de comenzar con
    PROTX_ y debe tener una variable _NUMBER con el numero de
    protocolo. Ejemplo:
     PROTX_IPSECESP="lan-to-ext"
     PROTX_IPSECESP_NUMBER="50"
    Los nombres de protocolo no pueden tener el caracter _ (subrayado) en
    su nombre, si lo tienen dara error.
    Hemos elegido que el firewall no use connection tracking para
    los protocolos definidos aqui, porque creemos que implica algunos
    riesgos de firewall piercing. Se debe por tanto habilitar la
    direccion de ida del trafico y la de vuelta
    En las reglas se permite todo lo que en las reglas para
    servicios excepto ext-to-dnat que no se usa aqui.
## HELP_IPSECESP: Protocolo IPSEC ESP (ESP=ipv6-crypt)
##    Protocolo IPSEC ESP. Es el mismo que IPV6 CRYPT.
##    Lo ponemos como IPSEC ESP, pero realmente el protocolo
##    se llama ipv6-crypt. Es mas conocido por su utilizacion
#%    en IPSEC y por eso lo llamamos asi.
PROTX_IPSECESP="all-to-all:log"
PROTX_IPSECESP_NUMBER="50"

## HELP_IPSECAH: Protocolo IPSEC AH (AH=ipv6-auth)
##    Protocolo IPSEC AH. Es el mismo que IPV6 AUTH.
##    Lo ponemos como IPSEC ESP, pero realmente el protocolo
##    se llama ipv6-auth. Es mas conocido por su utilizacion
#%    en IPSEC y por eso lo llamamos asi.
PROTX_IPSECAH=""
PROTX_IPSECAH_NUMBER="51"

## HELP_SKIP: Protocolo SKIP
#%    Protocolo SKIP
PROTX_SKIP=""
PROTX_SKIP_NUMBER="57"

## HELP_VRRP: Protocolo VRRP
#%    Protocolo VRRP
PROTX_VRRP=""
PROTX_VRRP_NUMBER="112"

## HELP_GRE: Protocolo GRE
#%    Protocolo GRE
PROTX_GRE=""
PROTX_GRE_NUMBER="47"

## HELP_SWIPE: Protocolo SWIPE de Cisco
#%    Protocolo SWIPE de Cisco
PROTX_SWIPE=""
PROTX_SWIPE_NUMBER="53"

## HELP_MOBILE: Protocolo MOBILE Cisco IP Mobility Protocol
#%    Protocolo MOBILE Cisco IP Mobility Protocol
PROTX_MOBILE=""
PROTX_MOBILE_NUMBER="55"

## HELP_SUNND: Protocolo SUNND Sun ND
#%    Protocolo SUNND Sun ND
PROTX_SUNND=""
PROTX_SUNND_NUMBER="77"

## HELP_PIM: Protocolo PIM Protocol Independent Multicast
#%    Protocolo PIM Protocol Independent Multicast
PROTX_PIM=""
PROTX_PIM_NUMBER="103"

## HELP_IGMP: Protocolo IGMP
#%    Protocolo IGMP
PROTX_IGMP=""
PROTX_IGMP_NUMBER="2"

## HELP_IGP: Protocolo IGP
#%    Protocolo IGP Cisco
PROTX_IGP=""
PROTX_IGP_NUMBER="9"

## HELP_EIGRP: Protocolo EIGRP Enhanced Interior Routing Protocol
#%    Protocolo EIGRP Cisco Enhanced Interior Routing Protocol
PROTX_EIGRP=""
PROTX_EIGRP_NUMBER="88"

## HELP_IPV6: Protocolo IPV6
#%    Protocolo IPV6
PROTX_IPV6=""
PROTX_IPV6_NUMBER="41"

## HELP_IPV6ROUTE: Protocolo IPV6 ROUTE
#%    Protocolo IPV6 ROUTE
PROTX_IPV6ROUTE=""
PROTX_IPV6ROUTE_NUMBER="43"

## HELP_IPV6FRAG: Protocolo IPV6 FRAG
#%    Protocolo IPV6 FRAG
PROTX_IPV6FRAG=""
PROTX_IPV6FRAG_NUMBER="44"

## HELP_IPV6ICMP: Protocolo IPV6 ICMP
#%    Protocolo IPV6 ICMP
PROTX_IPV6ICMP=""
PROTX_IPV6ICMP_NUMBER="58"

## HELP_IPV6NONXT: Protocolo IPV6 NONXT
#%    Protocolo IPV6 NONXT
PROTX_IPV6NONXT=""
PROTX_IPV6NONXT_NUMBER="59"

## HELP_IPV6OPTS: Protocolo IPV6 OPTS
#%    Protocolo IPV6 OPTS
PROTX_IPV6OPTS=""
PROTX_IPV6OPTS_NUMBER="60"

## HELP_VINES: Protocolo VINES
#%    Protocolo VINES
PROTX_VINES=""
PROTX_VINES_NUMBER="83"

## HELP_OSPF: Protocolo OSPF
#%    Protocolo OSPF
PROTX_OSPF=""
PROTX_OSPF_NUMBER="89"

## HELP_AX25: Protocolo AX25
#%    Protocolo AX25
PROTX_AX25=""
PROTX_AX25_NUMBER="93"

## HELP_IPXINIP: Protocolo IPXINIP
#%    Protocolo IPXINIP
PROTX_IPXINIP=""
PROTX_IPXINIP_NUMBER="111"

 HELP_MULTICASTX: Servicio de multicast udp para redes privadas clase D
    Servicio de multicast udp para redes privadas de clase D.
    Este servicio es especial, permite habilitar el trafico UDP hacia
    redes de multicast de clase D, normalmente 224.0.0.0/4.
    Normalmente solo se usa para difundir trafico multimedia a
    redes. Si lo habilitamos aqui se permitira el trafico UDP hacia
    redes multicast de clase D, pero no con origen redes clase D que es
    ilegal. Ademas debera luego habilitarse el trafico para el servicio
    que deseemos.
MULTICASTX="0"
MULTICASTX_DST="$CLASS_D_MULTICAST"


 HELP_NEWSERVICES: Nuevos servicios
    A partir de aqui se meteran los nuevos servicios definidos en
    el interface web de bastion-firewall.

Se pueden introducir nuevos servicios al final del fichero simplemente siguiendo la forma en que se definen como se ha visto más arriba, hay que tener cuidado de que no tengan el mismo nombre que un servicio ya definido.



Variables en advanced.conf


 HELP_CONNTRACK_MAX: Cambiar el maximo de conexiones CONNTRACK
    Cambiar el numero maximo de conexiones que puede manejar el
    sistema de Connection Tracking de Netfilter.
    Para dejar el valor por defecto (12248 en linux-2.4.20) basta
    poner 0 o nada.
    Para cambiar el valor simplemente poner un valor, por ejemplo
    para doblar el numero de conexiones permitidas poner: 24496
    Activarlo unicamente si el firewall droppea paquetes por exceso
    de conexiones.
#CONNTRACK_MAX="24496"
CONNTRACK_MAX=""

 HELP_BLACKLISTMAC: Activar la blacklist de direcciones MAC
    Si se activa esta variable se denegara el trafico a todas las
    direcciones MAC que esten en el fichero
    /etc/bastion-firewall/blacklistmac.conf exceptuando las
    direcciones MAC que se encuentren en la whitelist para MAC, que
    se encuentra en el fichero
    /etc/bastion-firewall/whitelistmac.conf y cuyas direcciones
    MAC nunca pueden ser bloqueadas y cuyo trafico sera habilitado.
    Este bloqueo solo afecta a las MAC origen del trafico, no es posible
    bloquear por MAC destino del trafico.
BLACKLISTMAC="1"

 HELP_RESTRICTEDMAC: Restringir el trafico por MAC de origen de la LAN
    Si se activa esta variable se denegara el trafico a todas las
    direcciones MAC de origen que no esten en el fichero
    /etc/bastion-firewall/restrictedmac.conf y que pertenezcan a
    nuestras LAN internas ($NET_LAN), que por tanto se comunicarian por
    los interfaces de entrada especificados en $INTERFACE_LAN.
    Este bloqueo solo afecta a las MAC origen del trafico, no es posible
    bloquear por MAC destino del trafico.
RESTRICTEDMAC="1"

## HELP_RESTRICTEDMACEXT: Restringir el trafico por MAC de origen del exterior
##    Si se activa esta variable se denegara el trafico a todas las
##    direcciones MAC de origen que no esten en el fichero
##    /etc/bastion-firewall/restrictedmacext.conf y que pertenezcan a
##    la red o redes exteriores ($NET_EXT), que por tanto se comunicarian por
##    los interfaces de entrada especificados en $INTERFACE_EXT.
##    Este bloqueo solo afecta a las MAC origen del trafico, no es posible
#%    bloquear por MAC destino del trafico.
RESTRICTEDMACEXT="1"


 HELP_ZEROCONF: Opciones para red Zeroconf (APIPA/Link Local Block).
    Las tres opciones son independientes y pueden ser activadas como se
    desee, incluso todas a la vez para admitir todo el trafico entre
    las redes Zeroconf. Hay que ser cuidadoso con esto pues el Sistema
    Zeroconf permite la administracion remota de sistemas, lo que se
    puede convertir en un tremendo agujero de seguridad si no controlamos
    con mucha precision el trafico de este tipo que queremos habilitar.
    Zeroconf tambien es conocido como Automatic Private IP Addressing
    (APIPA), y sirve para autoasignar IPs a maquinas en una red cuando
    no se encuentra disponible DHCP, por ejemplo. Este tipo de trafico
    no debe verse en internet y no deberia entrar ni salir del firewall
    hacia internet nunca.

HELP_ZEROCONFLAN: Aceptar paquetes para Zeroconf en el interior
    Sistema para autoconfigurar redes internas, es utilizado por
    Microsoft y otros fabricantes. Aceptamos solo el trafico entre
    el firewall y la red, no hacia afuera.
ZEROCONFLAN="0"

HELP_ZEROCONFEXT: Aceptar paquetes para Zeroconf con el exterior
    Sistema para autoconfigurar redes internas, es utilizado por
    Microsoft y otros fabricantes. Aceptamos solo el trafico entre
    el firewall y las redes externas, no el interno.
ZEROCONFEXT="0"

 HELP_ZEROCONFFW: Aceptar paquetes para Zeroconf y enrutarlo
    Sistema para autoconfigurar redes internas, es utilizado por
    Microsoft y otros fabricantes. Aceptamos el trafico que va de las
    redes internas al exterior y viceversa. Esto no habilita el trafico
    entre ningunas de estas redes con el firewall.
ZEROCONFFW="0"

Seguimos con las opciones de TOS y patch-o-matic:

 HELP_TOS_OPTIMIZE_DEFAULT: Optimizar los valores TOS de los paquetes
    Usar la tabla mangle para optimizar el TOS segun el tipo de paquete
    En ciertas ocasiones permiten optimizar el trafico, aunque la
    mayoria de los routers no lo tienen en cuenta.
    TIPOS DE TOS
     Minimize-Delay 16 (hex 0x10)      Minimizar el tiempo de conexion
     Maximize-Throughput 8 (hex 0x08)  Maximizar el caudal
     Maximize-Reliability 4 (hex 0x04) Maximizar la fiabilidad
     Minimize-Cost 2 (hex 0x02)        Minimizar el coste
     Normal-Service 0 (hex 0x00)       Servicio normal
    VALORES POR DEFECTO QUE SE APLICARAN (ver mangle.bsf)
      53/udp 37/udp                          Minimize-Delay
      21/tcp 22/tcp 53/tcp                   Minimize-Delay
      20/tcp 25/tcp 80/tcp 110/tcp 443/tcp   Maximize-Throughput
    Se obtienen mejores resultados usando QoS con un packet scheduler
    como HTB o los otros disponibles en el kernel.
TOS_OPTIMIZE_DEFAULT="1"

 HELP_CLAMPMSS: Parche para conectar con ISPs mal configurados
    Esto es un parche para poder conectar con ISPs o servidores
    que bloquean ICMP fragmentation needed y nos dan errores
    los servidores de la red local. Lo que hacemos:
        iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
                    -j TCPMSS --clamp-mss-to-pmtu
CLAMPMSS="0"

 HELP_TTL: Sirve para poner un TTL determinado a los paquetes
    Esta opcion usa la extension de iptables y Netfilter TTL target,
    que permite alterar el TTL de los paquetes que pasan por el
    firewall.
    El valor predeterminado es 64, que esta especificado en
    /proc/sys/net/ipv4/ip_default_ttl
    Si queremos cambiarlo lo activamos y ponermos en TTL_NEWTTL el valor
    que deseemos que se ponga en los paquetes.
TTL="0"
TTL_NEWTTL="32"

 HELP_PSD: Deteccion de escaneos de puertos
    Esta extension intenta detectar los escaneos de puertos que
    se produzcan en el sistema. Puede en algunos casos complementar
    el sistema que implementa bastion-firewall basado en los
    mensajes SYN, ACT, etc.
    Los valores son (ver ayuda de iptables):
     PSD              Activar o desactivar el sistema
     PSD_THRESHOLD   Total weight of the latest TCP/UDP packets with
      different destination ports coming from the same host to be
      treated as port scan sequence.
     PSD_DELAYT       Delay (in hundredths of second) for the packets
      with different destination ports coming from the same host to be
      treated as possible port scan subsequence.
     PSD_LOPORTS       Weight of the packet with privileged (<=1024)
      destination port.
     PSD_HIPORTS       Weight of the packet with non-priviliged
      destination port.
     PSD_ACTION        LOG or DROP (DROP is LOG and then DROP)
PSD="0"
PSD_THRESHOLD=""
PSD_DELAYT=""
PSD_LOPORTS=""
PSD_HIPORTS=""
PSD_ACTION="LOG"

 HELP_REALM: Activar el soporte de realm match
    Permite crear reglas que usen la realm key del sistema de
    enrutado iproute2.
REALM="0"

 HELP_RECENT: Sistema para marcar paquetes que se han visto recientemente
    Este sistema permite crear una lista de paquetes que el firewall
    ha visto recientemente. Luego esta lista se puede usar para realizar
    varios tipos de tratamiento de las conexiones, la mas comun de ellas
    es marcar los paquetes con fwmark para luego realizar balanceo de
    carga con LVS-NAT, mandando por ejemplo las conexiones SSL a un
    mismo servidor.
RECENT="0"

 HELP_STRING: Activa el sistema de inspeccion de cadenas
    Permite crear reglas que aceptan o deniegan las conexiones basandose
    en el contenido de los paquetes.
STRING="0"

 HELP_SOPORTE_CONNTRACK_Y_NAT: Soportes de conntrack y NAT
## HELP_CNEGGDROP: Activa el soporte CONNTRACK para eggdrop #%
CNEGGDROP="0"

## HELP_CNQUAKE3: Activa el soporte CONNTRACK para quake3 #%
CNQUAKE3="0"

## HELP_CNTFTP: Activa el soporte CONNTRACK y NAT para tftp #%
CNTFTP="0"

## HELP_CNAMANDA: Activa el soporte CONNTRACK y NAT para amanda #%
CNAMANDA="0"

## HELP_CNH323: Activa el soporte CONNTRACK y NAT para el protocolo H323 #%
CNH323="0"

## HELP_CNPPTP: Activa el soporte CONNTRACK y NAT para pptp #%
CNPPTP="0"

## HELP_CNTALK: Activa el soporte CONNTRACK y NAT para talk #%
CNTALK="0"




Tablas en pernetwork.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_PORTS: Como especificar puertos
    Los puertos se especifican en la forma:
     80/tcp        Puerto 80, protocolo tcp
     80/udp        Puerto 80, protocolo udp
     80/tcp 80/udp Puerto 80, protocolo tcp y udp
    Los rangos de puertos se especifican como:
    80:100/tcp    Puertos 80 a 100 tcp

HELP_WORDS: Nuevas formas de seleccionar paquetes
    Ademas de la forma de bastion-firewall de indicar IPs, redes, rangos
    e interfaces aqui podemos usar dos formas nuevas:
     'firewall'     Para seleccionar el firewall al marcar la direccion
                    del trafico. Si es origen es el trafico generado en el
                    firewall, si es destino es el trafico que tiene como
                    destino el firewall. No se puede poner a la vez en
                    origen y destino.
     'interface'    Para seleccionar el trafico que entra o sale por
                    el interface indicado. Si lo ponemos antes de to indica
                    el trafico que entra por el interface. Si lo ponemos
                    detras indica el trafico que sale por el interface.
     'lan'          Para seleccionar el trafico que entra o sale por
                    los interfaces en NET_LAN. Si lo ponemos antes de to
                    indica el trafico que entra por los interfaces. Si lo
                    ponemos detras indica el trafico que sale por
                    los interfaces.
     'ext'          Para seleccionar el trafico que entra o sale por
                    los interfaces en NET_EXT. Si lo ponemos antes de to
                    indica el trafico que entra por los interfaces. Si lo
                    ponemos detras indica el trafico que sale por
                    los interfaces.
     'interface+IP' Para seleccionar la direccion IP, red, rango, etc que
                    queramos y que salga o entre (segun el contexto)
                    por el interface indicado. Ejemplo: eth0+192.168.1.2
                    (paquetes hacia 192.168.1.2 y que salen por eth0)
                    El uso mas comun es eth0+0.0.0.0/0 (los paquetes
                    que salen a internet por el interface eth0)
                    Se puede poner lan+ y ext+ para los interfaces que
                    conectan con la lan y con el exterior segun la
                    abstraccion del firewall.
    Estas nuevas formas de seleccionar paquetes son muy utiles sobre todo
    en SNAT y DNAT
    No se puede usar sentencias 'to interface' en dnat o 'interface to'
    en snat pues son imposibles. Ademas no podemos usar en las sentencias
    de nat la palabra 'firewall', tendremos que crear reglas para cada
    IP del firewall.


  HELP_PERNETWORK: Definicion de reglas por medio de tablas
    Este sistema permite definir reglas de cualquier tipo basandose
    en variables del firewall o nuevos datos. Es una forma de
    complementar las reglas creadas por medio de la abstraccion del
    firewall, creando reglas para el trafico entre redes locales
    o redes externas y creando excepciones a las reglas generales.
    LAS REGLAS AQUI DEFINIDAS TIENEN PRECEDENCIA sobre todas las reglas
    generadas por el sistema general basado en la abstraccion del
    firewall y las direcciones, por lo que podemos crear reglas
    entre las redes en $NET_LAN o lo que se nos ocurra.

 HELP_RULESPERNETWORK: Definicion de reglas ACCEPT o DROP por tablas
    Se crea una tabla de reglas con los siguientes campos:
    [source] [sport port] to [dest] [dport port] rule [rule]
 -----------------------------------------------------------------
    Las reglas se definen como si fueran una variable, cuyo nombre no
    puede coincidir con cualquier otro nombre de otra variable.
    Las palabras 'to' y 'rule' siempre deben estar.
    Los campos entre [] son opcionales (menos rule), dependen de como
    queramos construir la regla. Las palabras 'sport' y 'dport' indican que
    se va a definir la regla por puertos. El significado de lo demas:
      source: Puede ser una IP, una red, un rango, una variable de tipo red
         como $NET_LAN, un interface, 'firewall' para denotar la maquina
         que alberga el firewall o una combinacion de todas estas.
      dest: Lo mismo que para source
      port: Una combinacion de puertos o variables de puertos como
            $NFS_PORT tal como estan definidos en rules.conf.
            Tambien se pueden usar grupos de puertos. Se pone simplemente
            el nombre del grupo.
      rule: Una regla compuestas por:
            :accept  Aceptar el paquete
            :drop    Denegar el paquete
            :log     Loggear el paquete en los logs del sistema.
            :stats   Crear estadisticas con RRDTOOL para luego
                     poder generar graficas del trafico para este servicio.
            :ulog    Pasar los paquetes de este servicio a ULOG.
    Las reglas se leen de izquierda a derecha, esto indica la direccion
    del trafico. Solo hay que aceptar el inicio de la conexion, la otra
    direccion se abre automaticamente por connection tracking al
    establecerse la conexion.
    Ejemplos:
     Aceptar el trafico desde 192.168.1.0/16 y puerto de origen 80/tcp
     a 192.169.1.0/24 y loggear
      RULE1="192.168.1.0/24 sport 80/tcp to 192.169.1.0/rule 24 :accept:log"
     Denegar y loggear el trafico desde las redes de $NET_LAN al firewall
      RULE2="$NET_LAN to firewall rule :drop:log"
     Aceptar el trafico y crear estadisticas desde una red y varias IPs
     hacia internet para el protocolo IRC.
      RULE3="192.168.1.1-192.168.1.3 192.168.2.0/24 to 0.0.0.0/0 to dport \
        6667/tcp 6667/udp rule :accept:stats"
     Denegar el trafico IMAP que tenga como origen una IP y que salga del
     firewall por el interface eth1
      RULE4="192.168.1.8 to eth1 dport $IMAP_PORT rule :drop"
     Denegar el trafico que entra el firewall para todos los p2p. Loggear.
      RULE5="0.0.0.0/0 to firewall dport GROUP_P2P rule :drop:log"
     Aceptar todo el trafico HTTP (con destino a 80/tcp)
      RULE6="to dport 80/tcp rule :accept"
     Aceptar todo el trafico con origen en la red.
      RULE7="$NET_LAN to rule :accept"
     En la ayuda vienen mas ejemplos.

    [source] [sport port] to [dest] [dport port] rule [rule]
 ---------------------------------------------------------------
RULE1="192.168.1.0/24 sport 80/tcp 81/udp 82/udp 90:91/tcp to 192.169.1.0/16 r
RULE2="$NET_LAN to firewall rule :drop:log"
RULE3="192.168.1.1-192.168.1.3 192.168.2.0/24 to 0.0.0.0/0 dport 6667/tcp \
 6667/udp rule :accept:stats"
RULE4="192.168.1.8 to eth1 dport $IMAP_PORT rule :drop"
RULE5="0.0.0.0/0 to firewall dport GROUP_P2P rule :drop:log"
RULE6="to dport 80/tcp rule :accept"
RULE7="$NET_LAN to rule :accept"
RULE8="$NET_LAN to eth0+0.0.0.0/0 rule :accept"


 HELP_NAT_PERNETWORK: Definicion de reglas SNAT y DNAT por tablas
    Se crea una tabla de reglas con los siguientes campos:
    [source] [sport port] to [dest] [dport port] rulenat [rule]
 ------------------------------------------------------------------------
    Las reglas se definen como si fueran una variable, cuyo nombre no
    puede coincidir con cualquier otro nombre de otra variable.
    Las palabras 'to' y 'rulenat' siempre deben estar.
    Los campos entre [] son opcionales (menos rulenat), dependen de como
    queramos construir la regla. Las palabras 'sport' y 'dport' indican que
    se va a definir la regla por puertos. El significado de lo demas:
      source: Puede ser una IP, una red, un rango, una variable de tipo red
         como $NET_LAN, un interface, 'firewall' para denotar la maquina
         que alberga el firewall o una combinacion de todas estas.
    dest: Lo mismo que para source
    port: Una combinacion de puertos, variables de puertos como
          $NFS_PORT tal como estan definidos en rules.conf.
          Tambien se pueden usar grupos de puertos. Se pone simplemente
          el nombre del grupo.
    rulenat: Una regla entre las siguientes:
     :snat [ip] [port] Hacer NAT de fuente (cambiar IP origen por ip)
     :dnat [ip] [port] Hacer NAT de destino (cambiar IP destino por ip)
     :masq [port]      Hacer MASQUERADE (enmascarar con la IP del interface)
     :redir [port]     Hacer REDIRECT (redirigir a la IP del firewall)
        ip --> Una IP o un rango de IPs
        port --> Un puerto (80/tcp) o un rango de puertos (10:20/tcp)
         En :snat y :dnat hay que dar una ip o un puerto. En :masq y : redir
         no es necesario indicar un puerto.
    Las reglas se leen de izquierda a derecha, esto indica la direccion
    del trafico. La parte anterior a 'rulenat' sirve para seleccionar los
    paquetes.
    Ejemplos:
     Cambiar de una IP de origen a otra (SNAT)
      RULESNAT1="192.168.7.1 to 192.168.7.2 rulenat :snat 10.10.1.2"
     Cambiar de una IP de origen a otra (DNAT)
      RULEDNAT1="192.168.7.1 dnat 192.168.7.2 rulenat :dnat 224.2.1.1"
     Redirigir todo el trafico saliente a un proxy
      RULERNAT1="lan to dport 80 rulenat :redir 8080/tcp"
     Enmascarar todo el trafico de la lan al exterior
      RULEMNAT1="to ext :masq"
    En la ayuda vienen mas ejemplos.

    [source] [sport port] to [dest] [dport port] rulenat [rule]
 ------------------------------------------------------------------------
RULESNAT1="192.168.7.1 to 192.168.7.2 rulenat :snat 10.10.1.2"
RULEDNAT1="192.168.7.1 to 192.168.7.2 rulenat :dnat 224.2.1.1"
RULERNAT1="lan to dport 80/tcp rulenat :redir 8080/tcp"
RULEMNAT1="to ext rulenat :masq"



Tablas en plugins.conf

Existen actualmente tres plugins: tos.bsf, mark.bsf y time.bsf para cambiar el TOS, marcar paquetes con la facilidad MARK o usar reglas que dependen del tiempo.

 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_PORTS: Como especificar puertos
    Los puertos se especifican en la forma:
     80/tcp        Puerto 80, protocolo tcp
     80/udp        Puerto 80, protocolo udp
     80/tcp 80/udp Puerto 80, protocolo tcp y udp
    Los rangos de puertos se especifican como:
    80:100/tcp    Puertos 80 a 100 tcp

 HELP_WORDS: Nuevas formas de seleccionar paquetes
    Ademas de la forma de bastion-firewall de indicar IPs, redes, rangos
    e interfaces aqui podemos usar dos formas nuevas:
     'firewall'     Para seleccionar el firewall al marcar la direccion
                    del trafico. Si es origen es el trafico generado en el
                    firewall, si es destino es el trafico que tiene como
                    destino el firewall. No se puede poner a la vez en
                    origen y destino.
                    Se puede poner lan y ext para los interfaces que
                    conectan con la lan y con el exterior segun la
                    abstraccion del firewall.
     'interface'    Para seleccionar el trafico que entra o sale por
                    el interface indicado. Si lo ponemos antes de to indica
                    el trafico que entra por el interface. Si lo ponemos
                    detras indica el trafico que sale por el interface.
     'interface+IP' Para seleccionar la direccion IP, red, rango, etc que
                    queramos y que salga o entre (segun el contexto)
                    por el interface indicado. Ejemplo: eth0+192.168.1.2
                    (paquetes hacia 192.168.1.2 y que salen por eth0)
                    El uso mas comun es eth0+0.0.0.0/0 (los paquetes
                    que salen a internet por el interface eth0)
                    Se puede poner lan+ y ext+ para los interfaces que
                    conectan con la lan y con el exterior segun la
                    abstraccion del firewall.
    Estas nuevas formas de seleccionar paquetes son muy utiles sobre todo
    en SNAT y DNAT

  HELP_PLUGINS: Sistema de plugins de bastion-firewall
    Sistema para complementar la funcionalidad de bastion-firewall
    por medio de plugins. Los plugins son ficheros .bsf escritos
    en bash y almacenados en /usr/lib/bastion-firewall/bsf/plugins
    En este fichero se puede meter su configuracion, usando ademas
    cualquier variable declarada en cualquier otro fichero de
    configuracion de bastion-firewall, lo que permite usar
    definiciones de servicios, puertos y redes que hayamos hecho
    en otros ficheros de configuracion.


 HELP_MARK: Definicion de reglas para marcar paquetes usando la
    facilidad MARK de Netfilter de forma que estas marcas puedan
    ser usadas en el firewall para balanceo de carga con LVS-NAT,
    enrutamiento avanzado, QOS, etc.
    Se crea una tabla de reglas con los siguientes campos:
  [source] [sport port] [to] [dest] [dport port] markrule :mark [mark_number]
 -----------------------------------------------------------------------
    Las reglas se definen como si fueran una variable, cuyo nombre no
    puede coincidir con cualquier otro nombre de otra variable.
    Las palabra 'markrule' siempre debe estar.
    Los campos entre [] son opcionales (menos :mark), dependen de como
    queramos construir la regla. Las palabras 'sport' y 'dport' indican que
    se va a definir la regla por puertos. El significado de lo demas:
      source: Puede ser una IP, una red, un rango, una variable de tipo red
         como $NET_LAN, un interface, 'firewall' para denotar la maquina
         que alberga el firewall o una combinacion de todas estas.
      dest: Lo mismo que para source
      port: Una combinacion de puertos, variables de puertos como
            $NFS_PORT o grupos de puertos (GROUP_COMMON)
            tal como estan definidos en rules.conf.
      mark_number: Numero de marca mark para el target MARK, se puede
                   poner un numero de marcas enorme, por lo que no debemos
                   preocuparnos en usar todas las que necesitemos.
    La forma de marcar los paquetes es definir una regla y la marca
    que queramos. Podemos definir por direccion de origen, de destino,
    por puerto de origen, de destino o por una combinacion de todas
    estas. Las reglas se leen de izquierda a derecha, esto indica la
    direccion del trafico.
    Ejemplos:
     Marcar el trafico desde 192.168.1.0/16 y puerto de origen 80/tcp
     a 192.169.1.0/24
      MARK1="192.168.1.0/24 sport 80/tcp to 192.169.1.0/24 markrule :mark 1"
     Marcar el trafico desde las redes de $NET_LAN al firewall
      MARK2="$NET_LAN to firewall markrule :mark 2"
     Marcar el trafico desde una red y varias IPs
     hacia internet para el protocolo IRC.
      MARK3="192.168.1.1-192.168.1.3 192.168.2.0/24 to 0.0.0.0/0 dport \
        6667/tcp 6667/udp markrule :mark 3"
     Marcar el trafico IMAP con origen una IP y que salga del
     firewall por el interface eth1
      MARK4="192.168.1.8 to eth1 dport $IMAP_PORT markrule :mark 4"
     Marcar el trafico que entra el firewall para todos los p2p.
      MARK5="0.0.0.0/0 to firewall dport GROUP_P2P rule markrule :mark 5"
     Marcar todo el trafico HTTP (con destino a 80/tcp)
      MARK6="to dport 80/tcp markrule :mark 6"
     Marcar todo el trafico con origen en la red.
      MARK7="$NET_LAN to markrule :mark 7"
     En la ayuda vienen mas ejemplos.

    [source] [sport port] [to] [dest] [dport port] markrule :mark [mark_number]
 ----------------------------------------------------------------------

MARK1="192.168.1.0/24 sport 80/tcp to 192.169.1.0/24 markrule :mark 1"
MARK2="$NET_LAN to firewall markrule :mark 2"
MARK3="192.168.1.1-192.168.1.3 to 0.0.0.0/0 dport 6667/tcp markrule :mark 3"
MARK4="192.168.1.8 to eth1 dport $IMAP_PORT markrule :mark 4"
MARK5="0.0.0.0/0 to firewall dport GROUP_P2P markrule :mark 5"
MARK6="to dport 80 markrule :mark 6"
MARK7="$NET_LAN to markrule :mark 7"


 HELP_TOS: Definicion de reglas para marcar paquetes usando la
    facilidad TOS de Netfilter de forma que estas marcas puedan
    ser usadas en la red, puesto que las marcas hechas con
    MARK solo se mantienen en el firewall y se pierden al abandonar
    los paquetes este.
    Se crea una tabla de reglas con los siguientes campos:
  [source] [sport port] [to] [dest] [dport port] tosrule :tos [tos_number/typ
 -----------------------------------------------------------------------
    Las reglas se definen como si fueran una variable, cuyo nombre no
    puede coincidir con cualquier otro nombre de otra variable.
    Las palabra 'tosrule' siempre debe estar.
    Los campos entre [] son opcionales (menos :tos), dependen de como
    queramos construir la regla. Las palabras 'sport' y 'dport' indican que
    se va a definir la regla por puertos. El significado de lo demas:
      source: Puede ser una IP, una red, un rango, una variable de tipo red
         como $NET_LAN, un interface, 'firewall' para denotar la maquina
         que alberga el firewall o una combinacion de todas estas.
      dest: Lo mismo que para source
      port: Una combinacion de puertos, variables de puertos como
            $NFS_PORT o grupos de puertos (GROUP_COMMON)
            tal como estan definidos en rules.conf.
      tos_number:  Numero de marca tos para el target TOS, se puede
                   poner un numero o un tipo de paquete:
 TIPOS DE TOS
 Minimize-Delay 16 (hexadecimal 0x10)   Minimizar el tiempo de conexion
                                        para agilizar conexiones cortas
                                        pero muy numerosas
 Maximize-Throughput 8 (hexadecimal 0x08)  Maximizar el caudal, para
                                           tener mandar los datos mas
                                         rapidamente en conexiones que
                                           mandan muchos datos
 Maximize-Reliability 4 (hexadecimal 0x04) Maximizar la fiabilidad
 Minimize-Cost 2 (hexadecimal 0x02)        Minimizar el coste
 Normal-Service 0 (hexadecimal 0x00)       Servicio normal

    La forma de marcar los paquetes es definir una regla y la marca
    que queramos. Podemos definir por direccion de origen, de destino,
    por puerto de origen, de destino o por una combinacion de todas
    estas. Las reglas se leen de izquierda a derecha, esto indica la
    direccion del trafico.
    Ejemplos:
     Marcar el trafico desde 192.168.1.0/16 y puerto de origen 80/tcp
     a 192.169.1.0/24
      TOS1="192.168.1.0/24 sport 80/tcp to 192.169.1.0/24 tosrule :tos 0"
     Marcar el trafico desde las redes de $NET_LAN al firewall
      TOS2="$NET_LAN to firewall tosrule :tos Minimize-Delay"
    Se aconseja usar preferentemente tipos en vez de numeros.
    En la ayuda vienen mas ejemplos.
    [source] [sport port] [to] [dest] [dport port] tosrule :tos [tos_number]
 ----------------------------------------------------------------------
TOS1="eth0+192.168.1.0/24 sport 80/tcp to 192.169.1.0/24 tosrule :tos 0"
TOS2="$NET_LAN to firewall tosrule :tos Minimize-Delay"
TOS3="$NET_LAN to $NET_EXT dport $DNS_PORT tosrule :tos 0"


 HELP_TIMERULES: Definicion de reglas ACCEPT o DROP por tablas
      [ ESTA REGLA NECESITA DE LA EXTENSION DE NETFILTER E IPTABLES  ]
      [ -m time QUE VIENE EN EL patch-o-matic                        ]
    Se crea una tabla de reglas con los siguientes campos:
    [source] [sport port] to [dest] [dport port] timerule [rule] time [time]
 -------------------------------------------------------------------------
    Las reglas se definen como si fueran una variable, cuyo nombre no
    puede coincidir con cualquier otro nombre de otra variable.
    Las palabras 'to' y 'timerule' siempre deben estar.
    Los campos entre [] son opcionales (menos time y timerule) dependen
    de como queramos construir la regla. Las palabras 'sport' y 'dport'
    indican que se va a definir la regla por puertos. El significado
    de lo demas:
      source: Puede ser una IP, una red, un rango, una variable de tipo red
         como $NET_LAN, un interface, 'firewall' para denotar la maquina
         que alberga el firewall o una combinacion de todas estas.
      dest: Lo mismo que para source
      port: Una combinacion de puertos, variables de puertos como
            $NFS_PORT tal como estan definidos en rules.conf.
            Tambien se pueden usar grupos de puertos. Se pone simplemente
            el nombre del grupo.
      time: Indica el tiempo en el que se aplica la regla, se deben usar
            las siguientes palabras clave para indicar el tiempo:
              start: Tiempo en el que comienza a aplicarse (HH:MM)
              stop:  Tiempo en el que deja de aplicarse (HH:MM)
              days:  Dias que se aplica. (Sun,Mon,Tue,Wed,Thu,Fri,Sat)
                     separados por comas. Hay que ponerlos exactamente asi.
      timerule: Una regla compuestas por:
            :accept  Aceptar el paquete
            :drop    Denegar el paquete
            :log     Loggear el paquete en los logs del sistema.
            :stats   Crear estadisticas con RRDTOOL para luego
                     poder generar graficas del trafico para este servicio.
            :ulog    Pasar los paquetes de este servicio a ULOG.
    Las reglas se leen de izquierda a derecha, esto indica la direccion
    del trafico. Solo hay que aceptar el inicio de la conexion, la otra
    direccion se abre automaticamente por connection tracking al
    establecerse la conexion.
    Ejemplos:
     Aceptar el trafico desde 192.168.1.0/16 y puerto de origen 80/tcp
     a 192.169.1.0/24 de lunes a viernes y loggear
    TIME1="192.168.1.0/24 sport 80/tcp to 192.169.1.0/24 timerule \
     :accept:log time days Mon,Tue,Wed,Thu,Fri"
     Aceptar todo el trafico con origen en la red los fines de semana.
    TIME2="$NET_LAN to rule :accept time days Sat,Sun"
     Aceptar todo el trafico HTTP (con destino a 80/tcp) por las noches.
      TIME5="to dport 80/tcp timerule :accept time start 22:00 stop 08:00"
     En la ayuda vienen mas ejemplos.

    [source] [sport port] to [dest] [dport port] timerule [time] timerule [ru
 ------------------------------------------------------------------------
TIME1="192.168.1.0/24 sport 80/tcp to 192.169.1.0/24 timerule :accept:log time days \
 Mon,Tue,Wed,Thu,Fri"
TIME2="$NET_LAN to rule :accept time days Sat,Sun"
TIME3="to dport 80/tcp timerule :accept time start 22:00 stop 08:00"



Sistema de blacklist y whitelist

El sistema de blacklist y whitelist de bastion-firewall permite bloquear direcciones IPs, rangos o redes por medio de dos ficheros:

/etc/bastion-firewall/blacklist.conf  :  Fichero de blacklist
/etc/bastion-firewall/whitelist.conf  :  Fichero de whitelist

En el fichero de blacklist introduciremos las IPs, rangos, redes, ip/mascaras o listas (nombres de ficheros .list) que queremos que bloquee el firewall. No debemos introducir nunca nombres de host a resolver, porque el sistema los rechazará, pues iptables tarda un buen rato en resolverlos antes de meterlos a las cadenas.

En el fichero de whitelist meteremos las IPs, rangos, redes, ip/mascaras o listas (nombres de ficheros.list) que queremos que nunca sean bloqueadas por el sistema de blacklist, esto permite usar un IDS para bloquear automáticamente direcciones IPs, asegurando que nunca se bloquearan las direcciones introducidas aquí, que serán normalmente las de nuestras redes o las de las redes a las que debemos conectar.

Hay que tener en cuenta que el usuario siempre puede cambiar su dirección IP o incluso su MAC (por ejemplo Linux permite cambiar la MAC de la tarjeta) para saltarse el sistema de blacklist/whitelist o de MAC restringidas. Puede ser conveniente usar algún tipo de dispositivo VPN para asegurar por medio de hardware la separación de las redes locales y evitar que los usuarios se salten los sistemas de blacklist.


Sistema de blacklist para MAC

Funciona de la misma forma que el sistema de blacklist/whitelist para IPs, pero introduciendo direcciones MAC de las tarjetas de nuestra red o de las redes a las que vamos a conectar. Es preferible en este caso usar listas porque pueden ser bastantes direcciones MAC las que vamos a querer introducir. Los ficheros que usa son:

/etc/bastion-firewall/blacklistmac.conf  :  Fichero de blacklist para MAC
/etc/bastion-firewall/whitelistmac.conf  :  Fichero de whitelist para MAC


Sistema de MAC restringidas

Permite especificar que direcciones MAC vamos a permitir que hablen con el firewall, esto restringe el tráfico del firewall a las máquinas con las tarjetas cuyas MAC estan incluidas en los ficheros de MAC restringidas. Estos ficheros son:

/etc/bastion-firewall/restrictedmac.conf  :  MACs de la red local que queremos que puedan comunicar a través del firewall.
/etc/bastion-firewall/restrictedmacext.conf  :  MACs de la red externa que queremos que puedan comunicar a través del firewall.

Hay que tener aquí las mismas consideraciones que en los sistemas de blacklist/whitelist de IPs o MACs, y tener en cuenta la posibilidad de que el usuario cambie su MAC y se salte el sistema de MAC restringidas.


Sistema de listas

En cualquier variable que acepte IPs podemos incluir en vez de una IP el nombre de un fichero .list incluido en el directorio /etc/bastion-firewall/lists y que contenga una lista de direcciones IP. bastion-firewall expandirá en el arranque el nombre del fichero a todas las IPs que se incluyan en él, lo que permite incluir un gran número de reglas de una forma sencilla y cómoda, así como la integración de bastion-firewall con otros programas como IDS, que pueden incluir direcciones a bloquear, por ejemplo, en un fichero .list que luego se incluirá en la configuración de bastión firewall en cualquier variable para realizar la acción que deseemos sobre esas IPs.

No se debe incluir nombres de host nunca en las listas, pues iptables debería resolverlos y tardaría demasiado tiempo en cargar las reglas, por lo que se rechazarán los nombres de host incluidos en las listas, sólo se aceptarán direcciones IP, rangos, redes o ip/mascaras.


Ejemplo: Creación de un firewall para una pequeña oficina

Las premisas son:

Los ficheros y las variables básicas que deberemos cambiar serán:

networks.conf :

firewall.conf :

whitelist.conf :

rules.conf :
Puede usarse el template denominado home-soho o el office, ambos son similares y aptos para oficinas de este tipo, ajustando luego los ficheros a los servicios que deseemos y modelando el firewall para el tráfico que vamos a tener.


GPL

                    GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.

59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.


GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

  1. You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
  2. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
  3. If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

  1. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
  2. Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
  3. Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.


4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.


8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS


How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.

<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.



FDL

                GNU Free Documentation License
Version 1.2, November 2002

Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.

59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

  1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
  2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
  4. Preserve all the copyright notices of the Document.
  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
  6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
  8. Include an unaltered copy of this License.
  9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
  10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
  11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
  12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
  13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
  14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
  15. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.