Asesoria con Script IPTABLES + SQUID

Imagen de jdvd

Forums: 

Buen dia amigos.
Me llamo Jesus Moncada, soy analista de sistemas y redes. He estado trabajando en un servidor Firewall (con IpTables) en conjunto con Proxy (Squid), con S.O. Debian (todos con su ultima version estable para la fecha - Agosto 2007). Mi problema es el siguiente:

La politica por defecto del firewall es Drop. Utilizo Proxy transparente, redirecciono con iptables del Pto 80 al 3128. pero:
- No puedo navegar desde la LAN
- No puedo navegar desde el mismo server (pc local)
- Del resto los puertos que se permite andan bien (ftp, mail, isq, msn, otros...).

Se que parece un problema sencillo, de verdad le he dado la vuelta al script y no entiendo xq no me funciona. Ya abri los puerto con que redireccion las peticiones WWW (80) al Proxy (3128). Algo curioso, cuando comento la linea donde redirecciono el puerto 80, si navega normal en la LAN como si no trabajase con el proxy, pero el server sigue sin conectarse por el 80, no se si es el squid o iptables.
Hechenme una mano por favor, aqui les dejo el script para que me asesoren:


#!/bin/sh
#
# generated by /usr/local/sbin/quicktables-2.3 on 2007.08.29.46
# Le doy creditos al quictables por ayudarme a generar el script

### set a few variables ###
echo ""
echo " setting global variables"
echo ""
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
iptables="/sbin/iptables"

### adjust /proc ###
echo " applying general security settings to /proc filesystem"
echo ""
### Activo la opción de sync cookies. Con ello, nos protejemos ante el ataque DOS de bomba SYNC ###
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then echo 1 > /proc/sys/net/ipv4/tcp_syncookies; fi
### Habilito la opción de verificación de dirección ###
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter; fi
### Activo la opción de FORWARDING. ###
if [ -e /proc/sys/net/ipv4/ip_forward ]; then echo 1 > /proc/sys/net/ipv4/ip_forward; fi
### Activo la opción de protección de mansajes ICMP, con ello evitamos ataques DOS de bomba ICMP ###
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
### IMPORTANTE: SÓLO PARA USUARIOS CON IP DINÁMICA. (La mayoría) ###
### Si ISP proporciona IP's dinámicas en la conexión SLIP, PPP, o DHCP ###
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
### DESHABILITO la aceptación de paquetes cuyas ruta haya sido prefijada en el origen (source routed packets). ###
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo "0" > $f done
### DESHABILITAO la aceptación de paquetes ICMP del tipo Redirect Acceptance ###
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo "0" > $f done
### DESHABILITO la posibilidad de enviar paquetes ICMP del tipo Redirect Acceptance.###
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo "0" > $f done
### DESHABILITO la posibilidad de enviar mensajes de redirección ###
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo "0" > $f done

### load some modules ###
if [ -e /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_nat_irc.o ]; then modprobe ip_nat_irc; fi
if [ -e /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_conntrack_irc.o ]; then modprobe ip_conntrack_irc; fi
if [ -e /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_conntrack_ftp.o ]; then modprobe ip_conntrack_ftp; fi
if [ -e /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_nat_ftp.o ]; then modprobe ip_nat_ftp; fi

### flush any existing chains and set default policies ###
$iptables -F INPUT
$iptables -F OUTPUT
$iptables -P INPUT DROP
$iptables -P OUTPUT ACCEPT

### setup nat ###
echo " applying nat rules"
echo ""
$iptables -F FORWARD
$iptables -F -t nat
$iptables -P FORWARD DROP
$iptables -A FORWARD -i eth2 -j ACCEPT
$iptables -A INPUT -i eth2 -j ACCEPT
$iptables -A OUTPUT -o eth2 -j ACCEPT
$iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -t nat -A POSTROUTING -s 192.168.249.0/24 -o eth0 -j MASQUERADE

### allow all packets on the loopback interface ###
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A OUTPUT -o lo -j ACCEPT

### allow established and related packets back in ###
$iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

### blocking reserved private networks incoming from the internet ###
echo " applying incoming internet blocking of reserved private networks"
echo ""
$iptables -I INPUT -i eth0 -s 10.0.0.0/8 -j DROP
$iptables -I INPUT -i eth0 -s 172.16.0.0/12 -j DROP
$iptables -I INPUT -i eth0 -s 192.168.0.0/16 -j DROP
$iptables -I INPUT -i eth0 -s 127.0.0.0/8 -j DROP
$iptables -I FORWARD -i eth0 -s 10.0.0.0/8 -j DROP
$iptables -I FORWARD -i eth0 -s 172.16.0.0/12 -j DROP
$iptables -I FORWARD -i eth0 -s 192.168.0.0/16 -j DROP
$iptables -I FORWARD -i eth0 -s 127.0.0.0/8 -j DROP

### outbound blocks and exceptions ###
echo " applying outbound blocks and exceptions"
echo ""
$iptables -I INPUT -i eth2 -p tcp --dport 3128 -j ACEPT
#$iptables -I OUTPUT -p tcp --dport 3128 -j ACEPT
$iptables -I FORWARD -i eth2 -p tcp --dport 1214 -j DROP
$iptables -I OUTPUT -p tcp --dport 1214 -j DROP
$iptables -I FORWARD -i eth2 -p udp --dport 1214 -j DROP
$iptables -I OUTPUT -p udp --dport 1214 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 6346 -j DROP
$iptables -I OUTPUT -p tcp --dport 6346 -j DROP
$iptables -I FORWARD -i eth2 -p udp --dport 6346 -j DROP
$iptables -I OUTPUT -p udp --dport 6346 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 6347 -j DROP
$iptables -I OUTPUT -p tcp --dport 6347 -j DROP
$iptables -I FORWARD -i eth2 -p udp --dport 6347 -j DROP
$iptables -I OUTPUT -p udp --dport 6347 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1222 -j DROP
$iptables -I OUTPUT -p tcp --dport 1222 -j DROP
$iptables -I FORWARD -i eth2 -p udp --dport 1222 -j DROP
$iptables -I OUTPUT -p udp --dport 1222 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1225 -j DROP
$iptables -I OUTPUT -p tcp --dport 1225 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1234 -j DROP
$iptables -I OUTPUT -p tcp --dport 1234 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1243 -j DROP
$iptables -I OUTPUT -p tcp --dport 1243 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1245 -j DROP
$iptables -I OUTPUT -p tcp --dport 1245 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1255 -j DROP
$iptables -I OUTPUT -p tcp --dport 1255 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 1256 -j DROP
$iptables -I OUTPUT -p tcp --dport 1256 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 4662 -j DROP
$iptables -I OUTPUT -p tcp --dport 4662 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 2710 -j DROP
$iptables -I OUTPUT -p tcp --dport 2710 -j DROP
$iptables -I FORWARD -i eth2 -p udp --dport 2710 -j DROP
$iptables -I OUTPUT -p udp --dport 2710 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 6881:6999 -j DROP
$iptables -I OUTPUT -p tcp --dport 6881:6999 -j DROP
$iptables -I FORWARD -i eth2 -p udp --dport 6881:6999 -j DROP
$iptables -I OUTPUT -p udp --dport 6881:6999 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 6969 -j DROP
$iptables -I OUTPUT -p tcp --dport 6969 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 7000 -j DROP
$iptables -I OUTPUT -p tcp --dport 7000 -j DROP
$iptables -I FORWARD -i eth2 -p tcp --dport 2234 -j DROP
$iptables -I OUTPUT -p tcp --dport 2234 -j DROP

### icmp ###
echo " applying icmp rules"
echo ""
$iptables -A OUTPUT -p icmp -m state --state NEW -j ACCEPT
$iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A INPUT -p icmp --icmp-type echo-request -i eth0 -j DROP

### apply icmp type match blocking ###
echo " applying icmp type match blocking"
echo ""
$iptables -I INPUT -p icmp --icmp-type redirect -j DROP
$iptables -I INPUT -p icmp --icmp-type router-advertisement -j DROP
$iptables -I INPUT -p icmp --icmp-type router-solicitation -j DROP
$iptables -I INPUT -p icmp --icmp-type address-mask-request -j DROP
$iptables -I INPUT -p icmp --icmp-type address-mask-reply -j DROP

### squid ###
echo " applying squid rules"
echo ""
$iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128

### logging ###
echo " applying logging rules"
echo ""
$iptables -A INPUT -i eth0 -p tcp -m limit --limit 1/s --dport 0:1024 -j LOG --log-prefix "tcp connection: "
$iptables -A INPUT -i eth0 -p udp -m limit --limit 1/s --dport 0:1024 -j LOG --log-prefix "udp connection: "

### drop all other packets ###
echo " applying default drop policies"
echo ""
$iptables -A INPUT -i eth0 -p tcp --dport 0:65535 -j DROP
$iptables -A INPUT -i eth0 -p udp --dport 0:65535 -j DROP

echo "### iptables is loaded ###"
echo ""

Asesoria con Script IPTABLES + SQUID

Imagen de burjans

Visita el siguiente enlace, espero te sea de alguna ayuda.

http://www.com-sl.org/article.php?story=20070902174347461

salu2

--
Lic. Burjans L. Garcia. D.
http://www.com-sl.org

Comunidad del Software Libre
Lic. Burjans L. Garcia. Disotuar
Com-SL http://www.com-sl.org

Mira si puedes hacer telnet

Imagen de Monkito

Mira si puedes hacer telnet al puerto 3128 desde las estaciones de la red interna, posiblemente el proxy esté en otro puerto o no esté corriendo...

counter.li.org

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

Gracias

Imagen de jdvd

Gracias, voy a echarle un vistazo al enlace q me mandasts Burjans, y tambien probare lo de telnet y eso...
apenas tenga buenos resultados les aviso ...
Saludos amigos.

Sin funcionar aun...

Imagen de jdvd

Antes que nada, gracias por las respuesta brindadas compadres...

Probe el telnet, ftp, ping y hasta un batazo con una madera al servidor y nada que funciona, probe cambiando las politicas por defecto a ACCEPT y si funciona, eso me hace mantener la idea de que con la politica DROP no le estoy dando permiso completo al SQUID, pero no se que me falta xq ya abri los puertos para que sirva y nada. Y quisiera utilizar DROP por mayor seguirdad.

Alguna otra opinion amigos....?
Se los agradeceria =( no quisiera dejar esta practica por la mitad.

Viendo con algo màs de

Imagen de damage

Viendo con algo màs de detenimiento el script veo que tienes esto:
$iptables -I INPUT -i eth2 -p tcp --dport 3128 -j ACEPT
#$iptables -I OUTPUT -p tcp --dport 3128 -j ACEPT

O es error tuyo de tipeo o definitivamente esta mal declarado pero te falta una "C" en ACCEPT, si tu polìtica es drop debes darle un ACCEPT para todo lo que necesites, de igual forma por si las moscas, dale ACCEPT para el FORWARD del puerto 53 (DNS) udp y tcp.

Mira bien el script muchas veces las fallas estan ocultas en cosas simples que no nos damos cuenta, o prueba con un script mas sencillo y este actual anda depurandolo linea a linea.

Saludos.

Keep The Fire Burning.....
Stryper 1988
http://counter.li.org/

Además te falta aceptar

Imagen de Monkito

Además te falta aceptar paquetes salientes desde tu servidor proxy hacia los clientes, como veo no tienes ninguna regla como:

iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

o por lo menos

iptables -A OUTPUT -p tcp --sport 3128 -d $redlocal -j ACCEPT

eso, y la rectificación del ACCEPT, debería ser suficiente... coméntanos si te sale algún otro error de sintaxis al momento de ejecutar el script..

counter.li.org

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

Exacto simpre que se use

Imagen de damage

Exacto simpre que se use DROP como polìtica se debe hacer un ACCEPT de la fuente (--sport) que tiene destino de tal "red".
Por eso le recomendaba que depure el script.

Keep The Fire Burning.....
Stryper 1988
http://counter.li.org/

Actualmente probando...

Imagen de jdvd

Buen dia amigos, traigos buenas ondas gracias a sus sugerencias. Estoy aprovechando q estoy probando q tal me anda la conex detras del server y luego de que agrege la linea
iptables -A OUTPUT -p tcp --sport 3128 -d $redlocal -j ACCEPT

Funciono excelente, yo la tenia sin especificar la redlocal, pero creo q me faltaba eso pero aun asi debio funcionar pero bueno son detalles q se me escapan de mis conceptos adquiridos.
Otro detalle es q mi proxy no me esta trabajando como transparetne, tngo q fijar la config del proxy en el navegador web para que cachee desde el server como quiero, no desde internet directamente. El squid si lo tngo configurado bien, con la opcion trasnparente, pero ando probando a ver q me falta. Luego les informo...

ando probando, luego les muestro mi trabajo, pienso q es importante compartir para todos aprender.
Ahora tambien estoy probando que puertos me hacen falta bloquear y cuales debo permitir.

Saludos

PD: si fue un error de tipeo, en el script ya operativo si estaba el ACCEPT bien escrito :) pero gracias por la acotacion, muy amable!
Suerte para todos...

Bien ahora mi Script de Squid 2.6 Stable

Imagen de jdvd

Bueno, estube probando todo el dia de hoy sin buenos resultados. Segun mis apreciaciones, el iptables no esta tomando las peticiones de los clientes (www o 80) para redireccionarla al puerto del proxy (3128), todo pasa directo al internet. Lo bueno es que ahora si coloco la configuracion del proxy en el explorador web, si cachea desde el server (algo que no me hacia antes y se les doy el credito a usteds por la ayuda). Pero si omito esto no funciona el proxy transparente, creo q ni lo sopla =)
Estoy diagnosticando el trafico con IPTRAF (se los recomiendo es bueno para ver detalladatemente las diferentes conexion establecidas con tu firewall), por eso garantizo mis resultados.

Aqui les voy a dejar el script de mi Squid. Yo trabajo bien con squid, tngo conocimiento de como funciona muchas cosas pero nunk esta de mas pedir sugerencias y asesorias a profesionales dedicados a este... Bueno aqui les va:


# TAG: http_port
http_port 3128 transparent

# TAG: hierarchy_stoplist
hierarchy_stoplist cgi-bin ?

# TAG: cache
acl QUERY urlpath_regex cgi-bin \?
acl avi urlpath_regex -i \.avi$
acl mpeg urlpath_regex -i \.m1v$ \.mpeg$ \.mpg$
acl mpeg2 urlpath_regex -i \.m2v$ \.vob$
acl mpeg_audio urlpath_regex -i \.mpa$ \.mp2$ \.mp3$ \.aac$
acl asf urlpath_regex -i \.asf$ \.wma$ \.asx$ \.wmv$
no_cache deny avi
no_cache deny mpeg
no_cache deny mpeg2
no_cache deny mpeg_audio
no_cache deny asf
no_cache deny QUERY

cache deny QUERY

# TAG: broken_vary_encoding
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

# TAG: cache_mem (bytes)
cache_mem 16 MB

# TAG: maximum_object_size (bytes)
maximum_object_size 15360 KB

# TAG: cache_dir
cache_dir ufs /var/spool/squid 5000 16 256

# TAG: access_log
access_log /var/log/squid/access.log squid

# TAG: refresh_pattern
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

# ACCESS CONTROLS
# -----------------------------------------------------------------------------
# TAG: acl
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl lan src 192.168.249.0/255.255.255.0
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

# TAG: http_access
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports

http_access allow lan
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# TAG: http_reply_access
http_reply_access allow all

# TAG: icp_access
icp_access allow all

# HTTPD-ACCELERATOR OPTIONS
httpd_accel_no_pmtu_disc off

# TAG: offline_mode
offline_mode on

Seguire buscando y probando que sucede...
El resto de las etiquetas esta establecidas por defectos. y el squid es la version 2.6 stable
Buen dia amigos, espero con anciedad sus comentarios... Saludos.

Páginas