Firewall

El sistema de filtrado de paquetes del kernel (Netfilter) sería de poca utilidad para los administradores sin una interfaz del espacio de usuario para manejarlo. Este es el proposito de las iptables. Cuando un paquete llega a tu servidor, se entrega al subsistema Netfilter para su aceptación, manipulación o rechazo, basado en las normas que dictan las iptables del espacio de usuario. Por lo tanto, las iptables es todo lo que necesitas para administrar tu firewall si estas familiarizado con ellas, pero estan disponibles muchas interfaces para simplificar la tarea.

ufw - Uncomplicated Firewall

La herramienta de configuración de firewall por defecto es ufw. Desarrollado para facilitar la configuración de iptables, ufw provee un modo amigable para crear el firewall.
ufw esta inicialmente discapacitado por defecto.
Para capacitarlo:

sudo ufw enable

Abrir un puerto:

sudo ufw allow 22

Las normas pueden ser añadidas usando formato numerado:

sudo ufw insert 1 allow 80

Cerrar un puerto:

sudo ufw dny 22

Quitar una norma, usa delete seguido de la norma:

sudo ufw delete deny 22

Es posible permitir acceso desde host o redes especificas a un puerto. Lo siguiente permite ssh desde 192.168.0.2 a cualquier IP en este host:

sudo ufw allow proto tcp from 192.168.0.2 to any port 22

Cambiando 192.168.0.2 por 192.168.0.0/24 permitimos ssh a toda la subnet.

Añadiendo el --dry-run a ufw saldran las normas resultantes, pero no las aplica.
Por ejemplo, lo siguiente seria aplicado si abrieran el puerto HTTP:

sudo ufw --dry-run allow http

[añadir aquí resultado]
[añadir aquí más comandos ufw]

Si el puerto que quieres abrir o cerrar esta definido en /etc/services, entonces puedes usar el nombre del puerto en vez del número.

Mas informacion en man ufw

Integracion ufw/aplicaciones

Las aplicaciones que abren puertos pueden incluir un perfil ufw, el cual detalla los puertos necesitados para la aplicación para funcionar apropiadamente. Los perfiles se mantienen en /etc/ufw/applications.d, y pueden ser editados si los puertos por defecto han sido cambiados.

Para ver que aplicaciones tienen instalado un perfil, introduce:

sudo ufw app list

Para ver el trafico permitido a un puerto, se logra con:

sudo ufw allow Samba

Una sintaxis extendida está disponible en:

ufw allow from 192.168.0.0/24 to any app Samba

//Sustituir por el perfil de aplicación correspondiente y el rango IP adecuado
//No hay necesidad de especificar el protocolo porque está detallado en el perfil. Nota que app sustituye el número de puerto.

Para ver detalles sobre que puertos, protocolos, etc tiene definidos una aplicación:

sudo ufw app info Samba

IP Masquerading

El proposito del enmascaramiento IP es permitir a máquinas con IP no-enrutable de tu red acceder a internet a través de la máquina que hace el enmascaramiento. El tráfico de retorno debe entregarse a la máquina que hizo la petición. Para hacer esto el kernel modifica la IP fuente de cada paquete de manera que las respuestas serán enviadas de nuevo a él, en lugar de a la dirección IP privada que hizo la solicitud, que es imposible a través de internet. El kernel utiliza el seguimiento de conexiones (conntrack) para hacer un seguimiento de cuales conexiones pertenecen a que máquinas y redirigir cada paquete de retorno en consecuencia. El tráfico de salida de la red privada es pues enmascarado como si tuviera el origen en su puerta de enlace.

ufw Masquerading

IP Masquerading se puede lograr usando normas de ufw. Esto es posible porque el actual back-end para ufw es iptables-restore con el archivo de normas localizado en /etc/ufw/*.rules. Estos archivos son un buen lugar para añadir normas de iptables usadas sin ufw, y normas que estan mas relacionadas con gateway o bridge de red.

Las normas son parte de dos archivos diferentes, normas que deben ser ejecutadas antes de las normas de la linea de comando de ufw, y normas que son ejecutadas despues.

Primero, el reenvio de paquetes necesita ser capacitado en ufw. Dos archivos de configuración necesitaran ser ajustados, en /etc/default/ufw cambia el DEFAULT_FORWARD_POLICY a "ACCEPT".
Entonces edita el /etc/ufw/sysctl.conf y descomenta:
net/ipv4/ip_forward=1

Ahora añadiremos normas al archivo /etc/ufw/before.rules. Las normas por defecto solo configuran la tabla filter, para permitir masquerading a la tabla nat necesitará ser configurada. Añade justo después de los comentarios de cabecera.[añadir aquí el código]

Cuando modifiques cualquier archivo de normas en /etc/ufw, asegurate que la siguiente línea es la última de cada tabla:

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

Finalmente descapacita y re-capacita ufw para aplicar los cambios:

sudo ufw disable && sudo ufw enable

iptables Masquerading

Se puede usar iptables para masquerading.
El primer paso es permitir el reenvio de paquetes IPv4 editando /etc/sysctl.conf y descomenta la siguiente línea:

net.ipv4.ip_forward=1

Luego, ejecuta el comando sysctl para permitir los nuevos ajustes en el archivo de configuración:

sudo sysctl -p

IP Masquerading puede ahora lograrse con una sola norma iptable:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

La sintaxis es como sigue:
  • -t nat = la norma es para ir dentro de la tabla nat
  • -A POSTROUTING = la norma se adjunta (-A) al postrouting
  • -s 192.168.0.0/16 = la norma se aplica al tráfico originado desde el espacio de direcciones especificado
  • -o ppp0 = la regla se aplica al tráfico previsto que se enruta a través del dispositivo de red especificado
  • -j MASQUERADE = el tráfico coincidente con esta norma "salta" (-j) hacia el objetivo MASQUERADE, para ser manipulado como se describe arriba

Además, cada cadena en la tabla filter tiene una política por defecto de ACCEPT, pero si estas creando un firewall además de la puerta de enlace, puedes establecer políticas DROP o REJECT, en cuyo caso tu tráfico enmascarado necesita necesita ser permitido por FORWARD para poder trabajar:

sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

Para permitir masquerading en el reinicio edita /etc/rc.local y añade los comandos de arriba. Por ejemplo, añade el primer comando:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

Logs

Los logs del firewall son esenciales para reconocer ataques, solucionar problemas en sus normas, y darse cuenta de cualquier actividad inusual de la red. Debes incluir normas de logging en tu firewall para que sean generados. Las normas de logging deben ir antes de terminar la regla aplicable.

Si estas usando ufw, puedes activar el logging con:

sudo ufw logging on

Si usas iptables en vez de ufw, con:

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

Los logs también aparecerán en /var/log/messages, /var/log/syslog y en /var/log/kern.log.
Esto se puede modificar editando /etc/syslog.conf o instalando y configurando ulogd, y usando ULOG en vez de LOG. El demonio ulogd es un servidor de espacio de usuario que escucha instrucciones de logging especificas de firewall desde el kernel, puede entrar a cualquier archivo incluso una base de datos. Observar los logs de firewall puede ser simple usando herramientas de análisis como fwanalog, fwlogwatch o lire.

Otras herramientas

Hay muchas herramientas disponibles para ayudarte a construir un firewall completo sin conocimientos intimos de iptables:
  • Firestarter es popular y fácil de usar
  • fwbuilder es muy potente
Si prefieres herramientas de línea de comandos con archivos de configuración en texto plano:
  • Shorewall es muy potente
  • ipkungfu te dará un firewall trabajando con ninguna configuración y te permitirá ajustes avanzados. 
  • fireflier está diseñado para ser una aplicación firewall de escritorio.