fwbuilder
es sin duda uno de los mejores de ellos.
iptables
e ip6tables
. La diferencia entre estos dos programas es que el primero actúa sobre la red IPv4, mientras que el segundo actúa sobre IPv6. Debido a que ambas pilas de protocolos de red probablemente continuarán con nosotors durante muchos años, ambas herramientas son necesarias y deberán ser utilizadas en paralelo.
filter
se refiere a las reglas de filtrado (aceptar, rechazar o ignorar un paquete);
nat
se refiere a la traducción de las direcciones de origen o destino y puertos de los paquetes;
mangle
se refiere a otros cambios en los paquetes IP (incluyendo el campo ToS — tipo de servicio: «Type of Service» — y opciones);
raw
permite otras modificaciones manuales en los paquetes antes de que lleguen al sistema de seguimiento de conexiones.
filter
tiene tres cadenas estándar:
INPUT
: se refiere a paquetes cuyo destino es el propio firewall;
OUTPUT
: se refiere a los paquetes que emite el firewall;
FORWARD
: se refiere a los paquetes que transitan a través del firewall (que no es ni su origen ni su destino).
nat
también tiene tres cadenas estándar:
PREROUTING
: para modificar los paquetes tan pronto como llegan;
POSTROUTING
: para modificar los paquetes cuando están listos para seguir su camino;
OUTPUT
: para modificar los paquetes generados por el propio firewall.
-j
en las órdenes) a la acción especificada para continuar el procesamiento. Los comportamientos más comunes están estandarizados y existen acciones dedicadas para ellos. Tomar una de estas acciones estándar interrumpe el procesamiento de la cadena ya que el destino del paquete ya está sellado (salvo una excepción que se menciona a continuación):
ACCEPT
: permitir al paquete seguir su camino;
REJECT
: rechazar el paquete con un paquete de error ICMP (la opcion --reject-with tipo
de iptables
permite seleccionar el tipo de error);
DROP
: borrar (ignorar) el paquete;
LOG
: registrar (a través de syslogd
) un mensaje con una descripción del paquete; tenga en cuenta que esta acción no interrumpe el procesamiento y la ejecución de la cadena continúa con la regla siguiente, razón por la que registrar los paquetes rechazados necesita una regla LOG y una regla REJECT/DROP;
ULOG
: registrar un mensaje a través de ulogd
, que puede adaptarse mejor y más eficientemente que syslogd
para manejar de grandes cantidades de mensajes; tenga en cuenta que esta acción, al igual que LOG, también continúa el procesamiento de la siguiente regla en la cadena que la llamó;
RETURN
: interrumpir el procesamiento de la cadena actual y regresar a la cadena que la llamó; en el caso de que la cadena actual sea una estándar no hay cadena que la haya llamado, por lo que en su lugar se ejecutará la acción predeterminada (definida con la opción -P
de iptables
);
SNAT
(unicamente en la tabla nat
: aplicar NAT de origen (las opciones adicionales describen los cambios exactos que se aplicarán);
DNAT
(unicamente en la tabla nat
): aplicar NAT de destino (las opciones adicionales describen los cambios exactos que se aplicarán);
MASQUERADE
(unicamente en la tabla nat
: aplicar enmascaramiento (un caso especial de NAT de origen);
REDIRECT
(unicamente en la tabla nat
: redirigir un paquete a un puerto determinado del mismo firewall, puede utilizar esto para configurar un proxy web transparente que funciona sin ninguna configuración en el lado del cliente, dado que el cliente piensa que se conecta con el destinatario mientras que las comunicaciones realmente pasan por el proxy.
mangle
, están fuera del alcance de este texto. Podrá encontrar una lista completa en iptables(8) y ip6tables(8).
iptables
e ip6tables
permiten manipular las tablas, cadenas y reglas. Su opción -t tabla
indica en qué tabla operar (la tabla filter
de forma predeterminada).
-N cadena
crea una nueva cadena. La opción -X cadena
elimina una cadena vacía y sin uso. La opción -A cadena regla
añade una regla al final de la cadena dada. La opción -I cadena número_regla regla
inserta una regla antes de la regla con número número_regla. La opción -D cadena número_regla
(o -D cadena regla
) elimina una regla en una cadena, la primera sintaxis identifica la regla que se desea eliminar por su número, mientras que la segunda la identifica por su contenido. La opción -F cadena
vacía una cadena (borra todas sus reglas), si no menciona ninguna cadena, eliminará todas las reglas de la tabla. La opción -L cadena
muestra las reglas de la cadena. Por último, la opción -P cadena acción
define la acción predeterminada o «política» para una cadena dada; tenga en cuenta que sólo las cadenas estándar puede tener dicha política.
condiciones -j acción opciones_acción
. Si describe varias condiciones en la misma regla, entonces el criterio es la conjunción (y lógico) de las condiciones, que son al menos tan restrictivas como cada condición individual.
-p protocolo
coincide con el campo de protocolo del paquete IP. Los valores más comunes son tcp
, udp
, icmp
e icmpv6
. Anteponer la condición con un signo de exclamación niega la condición, la cual se coincidirá con «todos los paquetes con un protocolo distinto al especificado». Este mecanismo de negación no es específico de la opción -p
y se puede aplicar a todas las otras condiciones también.
-s dirección
o -s red/máscara
coincide con la dirección de origen del paquete. Correspondientemente, -d dirección
o -dred/máscara
coincide con la dirección de destino.
-i interfaz
selecciona los paquetes procedentes de la interfaz de red dada. -o interfaz
selecciona los paquetes que salen a través de una interfaz específica.
-p tcp
con condiciones sobre los puertos TCP, cláusulas como --source-port puerto
y --destination-port puerto
.
--state estado
coincide con el estado de un paquete en una conexión (necesitará el modulo de núcleo ipt_conntrack
para el seguimiento de conexiones). El estado NEW
describe un paquete que inicia una nueva conexión; ESTABLISHED
coincide con paquetes pertenecientes a una conexión ya existente y RELATED
coincide con paquetes iniciando una nueva conexión relacionada con una ya existente (lo cual es útil para las conexiones ftp-data
en el modo «activo» del protocolo FTP).
LOG
tiene las siguientes opciones:
--log-priority
, con un valor predeterminado de warning
, indica la severidad de los mensajes syslog
;
--log-prefix
permite especificar un prefijo de texto para diferenciar los mensajes registrados;
--log-tcp-sequence
, --log-tcp-options
y --log-ip-options
indican datos adicionales que se integrarán en el mensaje: el número de secuencia TCP, opciones TCP y las opciones IP, respectivamente.
DNAT
ofrece la opción --to-destination dirección:puerto
para indicar la nueva dirección IP y/o puerto de destino. De manera similar, SNAT
proporciona --to-source dirección:puerto
para indicar la nueva dirección IP y/o puerto de origen.
REDIRECT
(sólo disponible is NAT está dispnible) ofrece la opción --to-ports puerto(s)
para indicar el puerto o rango de puertos al que debe redirigir los paquetes.
iptables
/ip6tables
. Escribir estas órdenes de forma manual puede ser tedioso, por lo que las llamadas se suelen almacenar en un script para definir la misma configuración automáticamente cada vez que arranque la máquina. Puede escribir este script a mano, pero también puede ser interesante prepararlo con una herramienta de alto nivel como fwbuilder
.
#
apt install fwbuilder
fwbuilder
traduzca las reglas según las direcciones asignadas a los objetos.
fwbuilder
puede generar un script de configuración del firewall según las reglas que definió. Su arquitectura modular le da la capacidad para generar scripts dirigidos a diferentes sistemas (iptables
para Linux, ipf
para FreeBSD y pf
para OpenBSD).
up
del archivo /etc/network/interfaces
. En el siguiente ejemplo, el script está guardado como /usr/local/etc/arrakis.fw
.
Ejemplo 14.1. archivo interfaces
llamando al script del firewall
auto eth0 iface eth0 inet static address 192.168.0.1 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 up /usr/local/etc/arrakis.fw