Un firewall es un sistema que previene el acceso malicioso a equipos o alguna red privada, físicamente podemos verlo como una caja con 2 o más interfaces de red, que se encuentra entre nuestras redes internas e internet.
Dicho sistema es capaz de bloquear el trafico de paquetes o redirigirlo desde un origen hacia un destino determinado.

IPTABLES
IPTABLES es una herramienta avanzada de filtrado de paquetes en Linux (basada en el módulo Netfilter), funciona como un conjunto de reglas, que se especifican con una determinada sintaxis, estas reglas se almacenan en 3 posibles tablas (nat, filter, mangle, esta última menos usada). Dichas reglas se especifican directamente a través de linea de comandos.
Manual de Sintaxis de IPTABLES
IPTABLES [tabla] [cadena] [interfaz/ip origen] [interfaz/ip de destino] [módulos] [operación]
[TABLA]
NAT / FILTER / MANGLE
[CADENA]
INPUT / FORWARD / OUTPUT / PREROUTING / POSTROUTING
[ORIGEN]
-i [interfaz origen] / -s [ip de red o host de origen]
[DESTINO]
-o [interfaz de destino] / -d [ip de red o host destino]
[MÓDULOS]
1) Protocolos (-p tcp/udp)
2) Multipuertos (-m multiport –dport 80, 443)
3) Puerto de destino (--dport 3306)
4) Puerto de origen (--sport 3306) >>> se usa muy poco dado que los equipos clientes usan puertos aleatorios
5) Estado(-m state -state [estados separados por coma s/espacio])
NEW / ESTABLISHED / RELATED
[OPERACIÓN]
Con FILTER >> -j [ACCEPT, DROP, REJECT]
Con NAT>> -j [REDIRECT, DNAT, MASQUERADE]
Políticas
En IPTABLES se definen políticas por defecto en caso de que los paquetes no cumplan con ninguna de las reglas ya establecidas.
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Reglas a nivel local
Es importante que IPTABLES no este involucrado a nivel local en la comunicación de nuestras aplicaciones para que todo funcione bien.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Reglas para firewall de host
Un firewall de host es aquel que además de tener esta condición brinda otros servicios
Para habilitar los puertos que prestarán servicios en nuestro servidor ejecutamos las siguientes dos reglas:
iptables -A INPUT -p tcp -m multiport --dport 80,443,53,22,3306 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
La primer regla abre los puertos del firewall para conexiones entrantes por servicios de HTTP, HTTPS, DNS, SSH y MySQL (respectivamente).
La segunda regla permite entrada de paquetes en conexiones establecidas o relacionadas.
La cadena INPUT es usada cuando los paquetes están destinados a procesos internos del firewall (que en este caso también prestará otros servicios).
IMPORTANTE: En caso de manejar un firewall con mas de una interfaz de red es necesario habilitar el bit de forwarding, para que puedan pasarse paquetes entre las interfaces de red del servidor, esto lo hacemos así:
echo 1 > /proc/sys/net/ipv4/ip_forward
Borrado de reglas IPTABLES
Para borrar todas las reglas establecidas en nuestro firewall usaremos:
iptables -F
Y también debemos aceptar paquetes en nuestras políticas por defecto:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Como implementar IPTABLES
Lo más recomendable es estructurar todas estas reglas en un script (que se mantenga almacenado), para tenerlas disponibles cuando sea necesario en caso de modificación o de tener que volver a ejecutarlas, y a su vez tener otro script a mano que se encargue de borrar todas las reglas (esto para cuando hacemos cambios o estamos desarrollando una implementación inicial).
Cada script debe iniciar en: #!/bin/bash , para asegurarnos que ejecute las siguientes lineas como comandos.
Para que el firewall quede configurado y funcionando al reiniciar el servidor es necesario ejecutar el script en el arranque, para eso utilizaremos el fichero /etc/rc.local .
En el pondremos las siguientes lineas:
echo 1 > /proc/sys/net/ipv4/ip_forward
sh ruta/al/firewall.script
Para finalizar es fundamental darle permisos de ejecución al rc.local y al firewall.script.
very good