HARDWARE Y SISTEMAS OPERATIVOS, GNU/Linux, Windows, Mac > GNU/Linux, Unix, *BSD and Free Software, Android

Problemas con iptables.

<< < (2/2)

shicefgo:
Es que esto tiene su miga y necesita su tiempo. Hay mucho explicado por la red, pero hace falta dar con lo que se necesita y entender lo que pone antes de hacer "magia por cuenta propia".
Hay muchos ejemplos, una vez que los entiendas podrás ir construyéndote tu firewall a medida, pero tienes que saber qué hace qué, lo que va antes y lo que va después.

Por lo que yo sé, nat no necesita cargar ningún módulo especial, pero tienes que tener habilitado forward.
Un uso típico podría ser dirigir tráfico a una puerta de enlace.

Te voy a copiar uno que hice hace mucho, mucho tiempo, estaba en un equipo dedicado, con tres tarjetas de red: una para internet, otra para la red principal y otra para una conexión para portátiles de gente de "fuera", para que pudiesen acceder a internet y a una impresora pero sin que se colara nada en la red protegida.

Es posible que contenga errores, estaba en pleno proceso de depuración y no lo tuve demasiado tiempo en funcionamiento porque el equipo de las tres tarjetas era super-antiguo (hablo de slots ISA, lo que había antes de los primeros PCI) y duró poco. En fin, por lo menos obtuve la experiencia. No te fíes demasiado, te puede dar una idea pero lo mismo algún experto encuentra alguna burrada. Bueno, ahí lo dejo para uso y disfrute, críticas incluidas. :)


--- Código: ---#!/bin/bash
# firewall
#
# Script de iptables para una red local con salida a internet y una DMZ
#

# Variables
IPTABLES="/sbin/iptables"
RUTA_SCRIPTS="/root/firewalls"

LO_IFAZ="lo"
LO_IP="127.0.0.1"

INET_IFAZ="eth0"
INET_IP="192.168.0.2"

DMZ_IFAZ="eth1"
DMZ_RANGO_IP="192.168.2.0/24"

LAN_IFAZ="eth2"
LAN_IP="192.168.1.2"

GESTION_IP="192.168.1.10"
IMPRE_IP="192.168.1.200"

# Se permite a otras máquinas salir a través del firewall
echo "1" > /proc/sys/net/ipv4/ip_forward

echo "Aplicando reglas de Firewall..."

# FLUSH de reglas.
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -t nat -F

# Política por defecto (se rechaza todo)
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP


# El Localhost
$IPTABLES -A INPUT  -i $LO_IFAZ -j ACCEPT
$IPTABLES -A OUTPUT -o $LO_IFAZ -j ACCEPT

# Acceso al firewall desde la IP del administrador
$IPTABLES -A INPUT  -s $GESTION_IP -j ACCEPT
$IPTABLES -A OUTPUT -d $GESTION_IP -j ACCEPT

# Paquetes desde internet a esta máquina
$IPTABLES -A INPUT -p icmp -i $INET_IFAZ -j ACCEPT

# Apertura de las interfaces para entrada
$IPTABLES -A INPUT -p ALL  -i $LO_IFAZ -s $LO_IP   -j ACCEPT
$IPTABLES -A INPUT -p ALL  -i $LO_IFAZ -s $INET_IP -j ACCEPT

# Para DHCP en la DMZ
$IPTABLES -A INPUT -p udp -i $DMZ_IFAZ --dport 67 --sport 68 -j ACCEPT

# Paquetes desde internet al firewall con conexiones establecidas
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT

# Forward (reexpedir) en la LAN y la DMZ para acceso a internet
$IPTABLES -A FORWARD -i $LAN_IFAZ -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ_IFAZ -o $INET_IFAZ -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Acceso desde la DMZ a una impresora de la LAN
$IPTABLES -A FORWARD -s $DMZ_RANGO_IP -d $IMPRE_IP     -j ACCEPT
$IPTABLES -A FORWARD -s $IMPRE_IP     -d $DMZ_RANGO_IP -j ACCEPT


###############################################################################
# Reenvío entre internet y la LAN. Provisional, aún hay que limitarlo a lo imprescindible.
#
$IPTABLES -A FORWARD -i $INET_IFAZ -o $LAN_IFAZ  -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFAZ  -o $INET_IFAZ -j ACCEPT
################################################################################

# Apertura de las interfaces para salida
$IPTABLES -A OUTPUT -p ALL -s $LO_IP   -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

# Apertura de puertos (carga otro archivo aparte).
. $RUTA_SCRIPTS/puertos_abiertos


# Habilita simple IP Forwarding (reexpedición) y Network Address Translation
# Para internet y la impresora
$IPTABLES -t nat -A POSTROUTING -o $INET_IFAZ -j SNAT --to-source $INET_IP
$IPTABLES -t nat -A POSTROUTING -o $LAN_IFAZ  -j SNAT --to-source $LAN_IP

echo $0 > /root/firewall_activo

# Fin del script.

--- Fin del código ---

Y aquí los puertos abiertos, en el archivo que se cargaba anteriormente:


--- Código: ---# Puertos a abrir en el firewall
#
# Variables.
SERV_SSH="192.168.1.10:12233"  #cambiado, el puerto habitual es el 22.
SERV_MYSQL="192.168.1.10:3306"
SERV_SVN="192.168.1.10:3690"
SERV_POSTGRE="192.168.1.10:5432"

# ssh
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 12233 -j DNAT --to $SERV_SSH

# Subversion
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 3690  -j DNAT --to $SERV_SVN

# MySQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 3306  -j DNAT --to $SERV_MYSQL

# PostgreSQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 5432  -j DNAT --to $SERV_POSTGRE

--- Fin del código ---

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa