configurar ip tables para hacer nat gnu/linux

Aclaro que encontre esta información buscando algo al conexión y me pareció muy importante para dominio compartirlo con ustedes ya que seguramente a mas de indiviso le va a interesar y le servirá en algun u otro momento..
Bueno primeramente partamos de que es…

Qué es iptables?
iptables es un conjunto de herramientas (comandos) que le permiten al usuario enviar mensajes al kernel del s.o.. El kernel tiene todo el manejo de paquetes TCP/IP metido dentro de él, no es algo aparte como lo es en otros sistemas operativos, por lo tanto todos los paquetes que van destinados a un Linux o lo atraviesan son manejados por el mismo kernel. Esto tiene sus ventajas y desventajas, si bien no me considero un capaz en el tema, puedo exponer algunos pros y contras … pero no nos vayamos de tema, el hecho de que el kernel maneje cada paquete de red nos permite (a través de iptables) decirle al kernel qué debe hacer con cada indiviso de los paquetes.
Entonces, iptables es una forma de indicarle al kernel algunas cosas que debe hacer con cada paquete, esto se hace en base a las características de un paquete en particular. Los paquetes de red tienen muchas características, algunas pueden ente los valores que tienen en sus encabezados (a donde se dirigen, de donde vienen, números de puertos, etc., etc.), otra puede ente el contenido de dicho paquete (la parte de datos), y existen otras características que no tienen que otear con un paquete en particular hado con una sumatoria de ellos. La ilusión es gozar identificar un paquete y hacer algo con el mismo.

Por lo tanto, siguiendo con el trabajoso (?!) trabajo de llegar a una definición de lo que es iptables, podríamos decir que «iptables es un conjunto de comandos que permiten decirle al kernel qué hacer con ciertos paquetes que cumplan con ciertas características».

Ahora bien, las acciones que podemos mostrar con iptables no son tan amplias, con iptables vamos a dominio decirle al kernel que acepte un paquete (lo deje pasar), lo deniegue (lo descarte), lo rechace, lo marque o lo modifique. Hay ciertas cosas que no vamos a dominio indicarle, por ejemplo que lo «reenvie» por alguna rumbo estática TCP/IP definida. Con lo cual, con iptables vamos a dominio filtrar o reformar paquetes, nada más.

Que es NAT Network Address Translation

NAT (Network Address Translation – Traducción de Dirección de Red) es un mecanismo utilizado por enrutadores IP para intercambiar paquetes entre dos redes que se asignan mutuamente direcciones incompatibles. Consiste en convertir en tiempo auténtico las direcciones utilizadas en los paquetes transportados. También es necesario imprimir los paquetes para acceder la operación de protocolos que incluyen información de direcciones dentro de la conversación del protocolo.
Su uso más común es acceder utilizar direcciones privadas (definidas en el RFC 1918) para acceder a Internet. Existen rangos de direcciones privadas que pueden usarse libremente y en la cantidad que se quiera dentro de una red privada. Si el número de direcciones privadas es muy grande puede usarse solo una parte de direcciones públicas para salir a Internet desde la red privada. De esta manera simultáneamente sólo pueden salir a Internet con una dirección IP tantos equipos como direcciones públicas se hayan contratado. Esto es necesario debido al promisorio agotamiento de las direcciones IPv4. Se espera que con el advenimiento de IPv6 no sea necesario continuar con esta práctica.

Bueno ahora a continuación les dejo una indicación de como configurarlo

#!/bin/bash
#
# Script

# Local para el ejecutable del IPTables
IPT=`which iptables`;

# Interfaz de red interna
IF_INTERNA=»eth0″;

# Interfaz de red externa
IF_EXTERNA=»eth1″;

# Definición de red interna
RED_INTERNA=»192.168.1.0/24″

fw_start()
{
#activa el ruteamiento dinamico
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

# ================ POLITICAS POR DEFECTO ===================
$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
$IPT -t mangle -P INPUT ACCEPT
$IPT -t mangle -P FORWARD ACCEPT

# Crea una cadena con las normas de seguridad
$IPT -N BLOCK
$IPT -A BLOCK -p icmp –icmp-type echo-request -j DROP
$IPT -A BLOCK -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
$IPT -A BLOCK -p tcp -m limit –limit 1/s -j ACCEPT
$IPT -A BLOCK -p tcp –tcp-flags SYN,ACK,FIN,RST SYN -m limit –limit 1/s -j ACCEPT
$IPT -A BLOCK -m unclean -j DROP
$IPT -A BLOCK -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPT -A BLOCK -j LOG –log-prefix «FW_ALERT: «
$IPT -A BLOCK -j DROP

#Cambiar la anticipación de los paquetes (Type Of Service) para agilizar Las cosas
$IPT -t mangle -A OUTPUT -o $IF_EXTERNA -p tcp -m multiport –dports 21,22,80,6667 -j TOS –set-tos 0x10

# Libera todo el trafico local
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A INPUT -i $IF_INTERNA -j ACCEPT
$IPT -t filter -A FORWARD -i $IF_INTERNA -j ACCEPT
# Libera solo FTP, SSH e WEB
$IPT -t filter -A INPUT -i $IF_EXTERNA -p tcp -m multiport –dports 21,22,80,6667 -j ACCEPT

# Libera la conexión para la red interna
$IPT -t nat -A POSTROUTING -s $RED_INTERNA -j MASCARA

# Crea un NAT para el SSH de una maquina de red interna
$IPT -t filter -A FORWARD -p tcp -d 0/0 –dport 2222 -j ACCEPT
$IPT -t nat -A PREROUTING -p tcp -d 0/0 –dport 2222 -j DNAT –to 192.168.1.2:22

# Reglas para obstruir packet flood
$IPT -A INPUT -j BLOCK
$IPT -A FORWARD -j BLOCK
}

fw_stop()
{
$IPT -t filter -P INPUT ACCEPT
$IPT -t filter -P FORWARD ACCEPT
$IPT -t filter -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
$IPT -t mangle -P INPUT ACCEPT
$IPT -t mangle -P FORWARD ACCEPT
$IPT -t filter -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t filter -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t filter -Z
$IPT -t nat -Z
$IPT -t mangle -Z
}

fw_usage()
{
echo
echo «$0 (start | stop | restart | clear)»
echo
echo «start – Ativa el firewall»
echo «stop – Desativa el firewall»
echo «restart – Reactiva el firewall»
echo «clear – Limpa los contactores»
}

fw_clear()
{
$IPT -t filter -Z
$IPT -t nat -Z
$IPT -t mangle -Z
}

case $1 in

start)
fw_start;
;;

stop)
fw_stop;
;;

restart)
fw_stop;
fw_start;
;;

clear)
fw_clear;
;;
*)
fw_usage;
exit;

;;

esac

Eso es todo espero les sea de beneficio
Fuente mi blog

Fuentes de Información

El contenido del post es de mi autoría, y/o, es un recopilación de distintas fuentes.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *