Duda con iptables y proxy transparente

Imagen de joiscafo2
0 puntos

Que tal, he leído varias de las preguntas del foro sobre el proxy transparente y como realizar la regla en iptables para su funcionamiento, hasta ahí no tengo problema, incluso mi configuración es muy parecida:

iptables -t nat -A PREROUTING -s 192.256.1.0/24 -p tcp --dport 80 -d ! 192.256.1.0.2 -j REDIRECT --to-port 8080
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

Mi duda es y no se si les pase a todos y me falta hacer alguna regla antes o despues, o la verdad yo tengo el error y no lo veo, y por eso pido mas que todo ayuda para ver que tengo mal, cuando quiero acceder a una pagina mi.pagina.com:80 que me pide una validación de usuario, no lo logra.

La solución que encontré es agregar esta regla

iptables -A FORWARD -s 192.256.1.0/24 -p tcp --dport 80 -j ACCEPT

Y quitar la del proxy transparente la cual esta mal porque no me filtra en DansGuardian mi contenido web.

Si alguien me puede guiar a ver mi error se los agradecería mucho, saludos.

Imagen de Gabriel_M
+1
+1
-1

... ejemplo sencillo de nateo :

#! /bin/sh
iptables -F              &&echo
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.0.20.0/24 -i eth1 -j ACCEPT
iptables -t  nat  -A POSTROUTING -s 10.0.20.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward        
echo " se verifica que se aplican con : iptables -L -n "

Asi estan las interfaces:

The loopback network interface
auto lo
iface lo inet loopback
auto eth0      # apuntando a la red internet
iface eth0 inet static
address 10.0.10.2
netmask 255.255.255.0
network 10.0.10.0/24
gateway 10.0.10.1

auto eth1  # apuntando a la subred 
iface eth1 inet static 
address 10.0.20.5
netmask 255.255.255.0
network 10.0.20.0/24
broadcast 10.0.20.255
gateway 10.0.10.1
+1
+1
-1
Imagen de firecold
+1
+1
-1

El que pondre a continuacion es la configuracion de iptables que uso, en el cual esta esta habilitado squid en modo transparente, para que dansguardian este en modo transparente tienes que poner en la redireccion el puerto de dansguardian y Listo, cualquier duda o problema me avisas, Saludos

#!/bin/bash
############################################################
# VARIABLES DEL SCRIPT
############################################################
#Ruta del binario de iptables
IPTABLES=/sbin/iptables
#Interfaz conectada a internet
INTERNET="ppp0"
#Interfaz conectada a nuestra LAN
LAN="eth1"
#Declarar la clase de la red local
CLASS=192.168.1.0/24
#Declarar el resto de la red
UNIVERSE=0.0.0.0/0
############################################################
# ELIMINACION DE REGLAS EXISTENTES
############################################################
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -t nat -F
############################################################
# ESTABLECEMOS POLITICAS POR DEFECTO (CERRADO)
############################################################
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
############################################################
# COMIENZAN REGLAS DE FILTRADO
############################################################
#El localhost se deja acceso total
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
#*************************************************************#
#*************************************************************#
# REGLAS DE INPUT #
#*************************************************************#
#*************************************************************#
#PERMITIR PETICIONES ICMP QUE VENGAN DE LAS IPS DE LA RED
$IPTABLES -A INPUT -p ICMP -s $CLASS -j ACCEPT
#PERMITIR PINGS DESDE INTERNET
$IPTABLES -A INPUT -p icmp -i $INTERNET --icmp-type echo-reply -j ACCEPT
#PERMITIR EL USO DEL SERVIDOR DNS
$IPTABLES -A INPUT -p udp -s $CLASS --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s $CLASS --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp -d $CLASS --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p tcp -d $CLASS --sport 53 -j ACCEPT
# WEB
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 443 -j ACCEPT
# PROXY
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 3128 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 8080 -j ACCEPT
# Control del Ciber
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 10000 -j ACCEPT
# IPP
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 631 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p udp --dport 631 -j ACCEPT
#ACCESSO A SMB DESDE LA RED LOCAL
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 135 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 137 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 138 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 139 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p tcp --dport 445 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p udp --dport 137 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p udp --dport 138 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p udp --dport 139 -j ACCEPT
$IPTABLES -A INPUT -i $LAN -s $CLASS -p udp --dport 445 -j ACCEPT
#PERMITIR ACCESO A LAS CONEXIONES ESTABLECIDAS
$IPTABLES -A INPUT -i $INTERNET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#*************************************************************#
#*************************************************************#
# REGLAS DE OUTPUT #
#*************************************************************#
#*************************************************************#
#PERMITIR CONTESTAR LAS PETICIONES ICMP DE LAS IPS DE LA RED
$IPTABLES -A OUTPUT -p ICMP -d $CLASS -j ACCEPT
#PERMITIR PNGS DESDE INTERNET
$IPTABLES -A OUTPUT -p icmp -o $INTERNET --icmp-type echo-request -j ACCEPT
#DNS
$IPTABLES -A OUTPUT -p udp -d $CLASS --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -d $CLASS --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $CLASS --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -d $CLASS --dport 53 -j ACCEPT
# WEB
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 80 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 443 -j ACCEPT
# PROXY
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 3128 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 8080 -j ACCEPT
# Control del Ciber
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 10000 -j ACCEPT
# IPP
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 631 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p udp --sport 631 -j ACCEPT
#ACCESSO A SMB DESDE LA RED LOCAL
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 135 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 137 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 138 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 139 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p tcp --sport 445 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p udp --sport 137 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p udp --sport 138 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p udp --sport 139 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN -d $CLASS -p udp --sport 445 -j ACCEPT
#PERMITIR EL ACCESO A LAS CONEXCIONES ESTABLECIDAS
$IPTABLES -A OUTPUT -o $INTERNET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $LAN -d $CLASS -j ACCEPT
#*************************************************************#
#*************************************************************#
# REGLAS DE FORWARD #
#*************************************************************#
#*************************************************************#
#HABILITAR CONSULTA DNS
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p udp --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p tcp --dport 53 -j ACCEPT
#HABILITAR EL POP3
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p tcp --dport 110 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p tcp --dport 995 -j ACCEPT
#HABILITAR TRAFICO WEB
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p tcp --dport 80 -j ACCEPT
#HABILITAR PING
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p icmp -j ACCEPT
#PERMITIR EL USO DE MSN MESSENGER
$IPTABLES -A FORWARD -p tcp --dport 1863 -j ACCEPT
#PERMITIR EL USO DEL SSL
$IPTABLES -A FORWARD -i $LAN -o $INTERNET -p tcp --dport 443 -j ACCEPT
#HABILITAR LAS CONEXIONES ESTABLECIDAS
$IPTABLES -A FORWARD -i $INTERNET -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
#*************************************************************#
#*************************************************************#
# REGLAS De NAT #
#*************************************************************#
#*************************************************************#
#ACTIVANDO EL NAT USANDO MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTABLES -t nat -A POSTROUTING -s $CLASS -d $UNIVERSE -o $INTERNET -j MASQUERADE
$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128

+1
+1
-1

Imagen de joiscafo2
+1
0
-1

Que tal Gabriel_M y firecold, gracias por contestar, viendo sus aportaciones y en base a mis reglas, si mal no entiendo quedaría algo asi:

Este a fuerza va:

iptables -A FORWARD -s 192.256.1.0/24 -p tcp --dport 80 -j ACCEPT

Y para hacer mi proxy transparente seria asi

ipetables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Aunque no entiendo bien que hace esta regla o si es necesaria

ipetables -t nat -A POSTROUTING -s 192.256.1.0/24 -d 0.0.0.0/0 -o ppp0 -j MASQUERADE

el ppp0 según investigue es para compartir conexiones, o no?

+1
0
-1

ISCAFO

Imagen de joiscafo2
+1
0
-1

Antes que todo una disculpa por mi tontería de poner ipetables.

Bueno ya hice una prueba, pero no me funciono, ya que no me abre las paginas http solo las https, y el dansguardian no filtra.

al final la regla quedo asi:

iptables -t nat -A PREROUTING -s 192.256.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

Que estoy haciendo mal ahora?

+1
0
-1

ISCAFO

Imagen de firecold
+1
+1
-1

echo " Borrando las Cadenas existentes..."
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
echo " Estableciendo Politica por Defecto "
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo " Redireccionamos las peticiones de www hacia Squid Proxy"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE
echo " Terminando la Configuracion del Firewall."

Tomando en cuenta que la interface de red eth0 es por la cual comparto Internet y ppp0 es una interface de red vía módem usb, por la cual recibo Internet, tendrías que cambiar esto para que el script funcione adecuadamente.

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE

Enmascarar por las conexiones procedentes de la red 192.168.1.0/24 como si lo hicieran desde la ip configurada en la interfaz ppp0.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Redireccionar al puerto 3128 (proxy) todos los paquetes que entran por eth0 y con destino puerto 80 (HTTP), de esta manera conseguimos un proxy transparente.

+1
+1
-1

Imagen de joiscafo2
+1
0
-1

firecold gracias por contestar deja lo pruebo y te comento

+1
0
-1

ISCAFO

Imagen de joiscafo2
+1
0
-1

Mira esta es mi script de iptables.

iptables -F
iptables -X
iptables -Z
iptables -t nat -F

### Definimos políticas por DEFAULT ###
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
##############################

### CONEXIONES LOOPBACK ########
iptables -A INPUT -i lo -j ACCEPT
##############################

### Aceptar todas conexiones SSH hacia este host ######
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
###########################################

# Aceptamos peticiones DHCP de los host LAN#########
iptables -A INPUT -i eth2 -p udp --dport 68 -j ACCEPT
###########################################

### Aceptar peticiones DNS hacia este host ############
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
############################################

### Aceptamos que regresen a este host paquetes ###############
### siempre y cuando este host haya comenzado la comunicacion ####
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#####################################################

### Encaminamos ping ICMP y hacemos SNAT ###################
iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
#####################################################

### Encaminamos HTTPS tcp/443 y hacemos NAT desde la red local hacia internet ####
iptables -A FORWARD -s 192.256.1.0/24 -p tcp --dport 443 -j ACCEPT
#################################################################

### Encaminamos FTP tcp/21 y hacemos NAT desde la red local hacia internet #######
iptables -A FORWARD -s 192.256.1.0/24 -p tcp --dport 21 -j ACCEPT
#################################################################

### Encaminamos todos los paquetes #########################
### siempre y cuando este host haya comenzado la comunicacion ####
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
######################################################

--> Modificacion
### Filtro de contenidos Web solo tcp/80 ##########################################
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128
#########################################################################

### Rechazamos todo lo que no cumple alguna politica anterior #######
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
######################################################

echo "1" > /proc/sys/net/ipv4/ip_forward

--> Modificacion
iptables -t nat -A POSTROUTING -o eth1 -s 192.256.1.0/24 -j MASQUERADE

echo " OK. Para verificar se hace: iptables -nL"

Este seria como entiendo es, mi duda va hacia dos cosas, uno el orden de las reglas afecta el resultado, entonces, tengo bien el orden? y otra lo que me dices de las interfaces, tienes razón me faltaba eso, mi equipo recibe el Internet por eth1 desde un firewall de otra red y por donde lo comparte a su subred es por el eth2, entonces si quedaría asi?

+1
0
-1

ISCAFO