[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: Problemas con un proxy transparente squid con iptables



Title:

 

 


From: Fernando García Cabrera [mailto:fernandogc@instituto-as.es]
Sent: miércoles, 20 de julio de 2005 13:33
To: Lista Debian
Subject: Problemas con un proxy transparente squid con iptables

 

Buenos días a todos los usuarios.

Estoy intentando configurar un proxy que actúe de forma transparente para dar acceso a internet a los usuarios de una red local. Lo primero que hice fue instalar y configurar el squid para que funcione el proxy. Una vez hecho eso, sin ninguna regla en iptables, configuro un navegador de la red interna indicando como proxy el 192.168.36.254, que es la máquina que tiene el squid, y el puerto 3128. El cliente puede navegar perfectamente así.

Cuando hago la parte de las reglas de iptables para que funcione como proxy transparente, sin tener que ir cliente a cliente configurandolos, es cuando deja de funcionar dando un mensaje de: conection time out, y no entiendo por qué lo hace.

 

Aquí tienen la configuración para proxy transparente en el squid.conf:

--------------------

http_port 192.168.36.254:3128

 

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_single_host off
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

 

acl mired src 192.168.36.0/255.255.255.0


http_access allow mired
-------------------

Aquí mis reglas para iptables, eth0 es la tarjeta a la red local (192.168.36.254) y eth1 es la tarjeta al router de internet (172.16.1.1):

------------------------

#!/bin/sh
# Borrar las reglas anteriores
iptables -F
iptables -t nat -F
iptables -X
iptables -Z

 

# Deshabilitar ping para la red externa.
iptables -A INPUT -i eth1 -p icmp --icmp-type 8 -j DROP
iptables -A FORWARD -i eth1 -p icmp --icmp-type 8 -j DROP

 

# Detener las conexiones entrantes desde la interfaz eth1 (exterior) menos ssh
iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT
iptables -A INPUT -p all -i eth1 -j DROP

 

# Aceptamos que consulten los DNS
iptables -A FORWARD -s 192.168.36.0/24 -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.36.0/24 -i eth0 -p udp --dport 53 -j ACCEPT
 
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward

 

# Emascaramiento del trafico saliente
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/255.255.0.0 -j MASQUERADE

 

# Redireccionamiento de servicios ordinarios
# FTP-data
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 20 -j REDIRECT --to-port 3128
# FTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j REDIRECT --to-port 3128
# GOPHER
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 70 -j REDIRECT --to-port 3128
# HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
# WAIS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 210 -j REDIRECT --to-port 3128
# HTTPS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128

----------------------------

Por cierto, otra pregunta, ¿con estas reglas de iptables tengo cerrados todos los puertos que no están ahí o tengo que especificar alguna regla para cerrar el resto de los puertos que no quiero usar? Me explico, quiero dejar abiertos sólo los puertos 22,53,20,21,70,80,210,443; pero no quiero que se pueda utilizar por ejemplo el telnet (puerto 23), sin embargo, con estas reglas hago un telnet al router (que está fuera del firewall) desde la red interna y no tengo ningún problema para acceder a él.

 

 

Buenas,

 

Un par de comentarios:

 

1.- Si habilitas el proxy, ten en cuenta que también tienes que habilitar el acceso al proxy en el servidor, por lo que necesitarías una regla como esta:

Iptables –A INPUT –i eth0 –p tcp –destination-port 3128 –j ACCEPT

 

2.- Como bien comentas, la filosofía más correcta a seguir es denegar todo y luego permitir el acceso a los puertos específicos. Para eso está el POLICY (-P) y se tiene que definir nada más vaciar las tablas (con -F)

iptables –P INPUT DROP

iptables –P OUTPUT DROP

iptables –P FORWARD DROP

 

Ten en cuenta de que si aplicas estas políticas por defecto, tienes que habilitar en el OUTPUT por lo menos la salida del squid y el ssh (que veo que son los servicios que tienes habilitados):

Iptables –A OUTPUT –o eth0 –p tcp --source-port 3128 –j ACCEPT

Iptables –A OUTPUT –o eth1 –p tcp --source-port 3128 –j ACCEPT

 

 

Más información sobre iptables en http://www.netfilter.org/, y además te recomiendo el tutorial : http://iptables-tutorial.frozentux.net/

 

Espero que te sea de ayuda,

 

Saioa Arrizabalaga


Reply to: