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

Problemas con iptables y squid transparente



Vamos a ver, hace una semana, más o menos, pedí ayuda a la lista con un equipo que estoy preparando para que haga de proxy-firewall de una red. Pues bien, después de unas sugerencias parecía que estaba funcionando el tema del proxy transparente (al menos para el puerto HTTP, porque para FTP y HTTPS nunca lo conseguí). La sugerencia fue que habilitara el puerto 3128 (el del proxy) en las reglas de iptables. Sin embargo, he estado haciendo más pruebas, sobre todo porque quería quitarle la política por defecto de ACCEPT y ponerla a DROP, cosa que en cuanto hago deja de funcionar. En principio, tal y como tengo las reglas parece que para las conexiones entrantes en la red el firewall funciona perfectamente, pero lo que yo ahora quería era cambiar la política por defecto a DROP para que la gente que está dentro de la red no se me conecte por puertos que no sean los que explícitamente yo haya abierto, es decir, para que no me estén usando el emule, el kazaa, etc.
 
Ah, otra cosa que no he conseguido que funcione es el HTTPS y el FTP con squid, desde el mismo momento en que redirecciono los puertos al squid (443 para https y 20:21 para FTP) estos dejan de funcionar. En este caso me gustaría a ver si hay alguien que pueda ayudarme.
 
Les adjunto el contenido de mi script para iptables, aunque sé que es una jodienda le dejo los comentarios para que se vea más claro lo que pretendo conseguir. Advierto que tal y como está los ordenadores de la red local no acceden a internet ni nada por el estilo, y eso que la política por defecto la tiene en ACCEPT.
 
########################################################################
# Instalando modulos
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ip_conntrack
 
# variables
INTIF="eth0"     # La tarjeta que va a la red local
EXTIF="eth1"     # La tarjeta que va a la red externa
INTNET="X.X.X.0/24"    # Direccion IP de la red interna
INTIP="X.X.X.254/24"   # Direccion IP de la tarjeta interna
EXTIP="Y.Y.Y.1/24"       # Direccion IP de la tarjeta externa
UNIVERSO="0.0.0.0"
 
# 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
 
# Borrar las reglas anteriores
iptables -F
 
# Limpiar la cadena del usuario... Si existe
if [ "'iptables -L | grep drop-and-log-it'" ]; then
    iptables -F drop-and-log-it
fi
 
iptables -t nat -F
iptables -X
iptables -Z
 
#Estableciendo la politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
 
# Creando la cadena de usuario para denegar y registrar
iptables -N drop-and-log-it
iptables -A drop-and-log-it -j LOG --log-level info --log-prefix "FIREWALL"
iptables -A drop-and-log-it -j DROP
 
# El localhost se deja
iptables -A INPUT -i lo -s $UNIVERSO -d $UNIVERSO -j ACCEPT
 
# Permitir la conexiones SSH
iptables -A INPUT -p tcp -i $INTIF --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i $EXTIF --dport 22 -j ACCEPT
 
# Abrir el puerto para el proxy
iptables -A INPUT -p tcp -s $UNIVERSO -d $UNIVERSO --dport 3128 -j ACCEPT
 
# Capturar todas las reglas, todos los intentos de conexion son denegados y registrados (log)
iptables -A INPUT -s $UNIVERSO -d $UNIVERSO -j drop-and-log-it
 
# Permitir la conexiones SSH
iptables -A OUTPUT -o $INTIF -p tcp --source-port 22 -j ACCEPT
iptables -A OUTPUT -o $EXTIF -p tcp --source-port 22 -j ACCEPT
 
# Abrir el puerto del proxy
iptables -A OUTPUT -d $UNIVERSO -p tcp --dport 3128 -j ACCEPT
 
# Todas las demas salidas son denegadas y registradas
iptables -A OUTPUT -s $UNIVERSO -d $UNIVERSO -j drop-and-log-it
 
# Permite las conexiones existentes/relacionadas
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Aceptamos que consulten los DNS
iptables -A FORWARD -s $INTNET -d $UNIVERSO -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s $INTNET -d $UNIVERSO -p udp --dport 53 -j ACCEPT
 
# Permitir la conexiones SSH
iptables -A FORWARD -i $INTIF -o $EXTIF -p tcp --source-port 22 -j ACCEPT
iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --source-port 22 -j ACCEPT
 
# Abrir el correo
iptables -A FORWARD -s $UNIVERSO -d $UNIVERSO -p tcp --dport 110 -j ACCEPT
 
# Abrir el FTP
iptables -A FORWARD -s $UNIVERSO -d $UNIVERSO -p tcp --dport 20:21 -j ACCEPT
 
# Abrir el puerto del proxy
iptables -A FORWARD -s $UNIVERSO -d $UNIVERSO -p tcp --dport 3128 -j ACCEPT
 
# Todos los demas intentos de pasar a traves del cortafuegos son denegados
iptables -A FORWARD -s $UNIVERSO -d $UNIVERSO -j drop-and-log-it
 
# Emascaramiento del trafico saliente
  
iptables -t nat -A POSTROUTING -o $EXTIF -s $INTNET -j MASQUERADE
 
# Redireccionamiento de los servicios ordinarios
iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-port 3128
 
########################################################################
 
Y eso es todo, muchas gracias por su ayuda

Reply to: