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.
Sobre bastion-firewall
Sobre los autores de bastion-firewall y
este tutorial
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.
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.




| 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) |
| 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_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_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_ADM_RANK:
Rango de administracion del firewall Las redes o IPs que pongamos aqui tendran acceso ILIMITADO al firewall siempre que accedan a el por un interface de INTERFACE_LAN o INTERFACE_EXT. Este acceso permitira la administracion total del firewall. No se aconseja usarlo, pues cualquiera que tenga estas IPs podr |