iptables es un programa de utilidad de espacio de usuario que permite a un administrador de sistema para configurar las tablas proporcionadas por el cortafuegos del kernel de Linux (implementado como diferentes módulos Netfilter) y las cadenas y reglas que almacena. Se utilizan diferentes módulos del kernel y programas para protocolos diferentes; iptables se aplica a IPv4, ip6tables a IPv6, arptables a ARP, y ebtables a marcos de Ethernet.
iptables permite al administrador del sistema definir reglas acerca de qué hacer con los paquetes de red. Las reglas se agrupan en cadenas: cada cadena es una lista ordenada de reglas. Las cadenas se agrupan en tablas: cada tabla está asociada con un tipo diferente de procesamiento de paquetes.
Cada regla determina qué paquetes coinciden con los criterios establecidos en la regla (match) y un objetivo que indica qué hacer con el paquete si éste es seleccionado según los criterios de la regla. Cada paquete de red que llega a una computadora o que se envía desde una computadora recorre por lo menos una cadena y cada regla de esa cadena se comprueba con el paquete. Si la regla cumple con el datagrama, el recorrido se detiene y el destino de la regla dicta lo que se debe hacer con el paquete. Si el paquete alcanza el fin de una cadena predefinida sin haberse correspondido con ninguna regla de la cadena, la política de destino de la cadena dicta qué hacer con el paquete. Si el paquete alcanza el fin de una cadena definida por el usuario sin haber cumplido ninguna regla de la cadena o si la cadena definida por el usuario está vacía, el recorrido continúa en la cadena que hizo la llamada (lo que se denomina implicit target RETURN o RETORNO de destino implícito). Solo las cadenas predefinidas tienen políticas.
En iptables, las reglas se agrupan en cadenas. Una cadena es un conjunto de reglas para paquetes IP, que determinan lo que se debe hacer con ellos. Cada regla puede desechar el paquete de la cadena (cortocircuito), con lo cual otras cadenas no serán consideradas. Una cadena puede contener un enlace a otra cadena: si el paquete pasa a través de esa cadena entera o si cumple una regla de destino de retorno, va a continuar en la primera cadena. No hay un límite respecto de cuán anidadas pueden estar las cadenas. Hay tres cadenas básicas (INPUT, OUTPUT y FORWARD: ENTRADA, SALIDA y REENVÍO) y el usuario puede crear tantas como desee. Una regla puede ser simplemente un puntero a una cadena.
Ingresar al directorio /etc:
cd /etc
Crear un directorio de nombre iptables y acceder a el:
mkdir iptables
cd iptables
Crear un archivo de nombre iptables:
nano iptables.sh
#!/bin/sh
iptables="/sbin/iptables"
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_REDIRECT
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe ipt_MASQUERADE
echo "Refrescando las reglas"
/sbin/iptables -F
/sbin/iptables -F -t nat
/sbin/iptables -A FORWARD -j ACCEPT
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/tcp_syncookies
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -d 0/0 -o enp0s3 -j MASQUERADE
Para iniciar la compartición del internet
bash /etc/iptables/iptables.sh