[CentOS-es] iptables + squid proxy transparente
Ramón Macías Zamora
ramon.macias en raykasolutions.com
Lun Abr 4 21:59:23 EDT 2011
No veo nada raro,
en /etc/squid/squid.conf debe estar puesto:
http_port 3128 transparent
la palabra *transparent* es imprescindible
--
Ramón Macías Zamora
Tecnología, Investigación y Desarrollo
Guayaquil - Ecuador
msn: ramon_macias en hotmail.com
skype: ramon_macias
UserLinux# 180926 (http://counter.li.org)
Cel: 593-8-0192238
Tel: 593 4 6044566
<http://www.raykasolutions.com/>
WEB SITES, HOSTINGS, DOMINIOS, MANTENIMIENTO DE EQUIPOS, REDES, SERVIDORES
LINUX, SOPORTE.
El 4 de abril de 2011 20:06, Mario Villela Larraza <
mario.villelalarraza en gmail.com> escribió:
> mmmm supongo que si ha de ser una restricción, pero bueno lo pego aquí para
> mas rápido jejeje
>
>
> #!/bin/bash
> #
> #
> # Para guardar las reglas
> #+ iptables-save > reglas
> #+ iptables-restore < reglas
> #
>
> # Miramos si tenemos un parametro en linea de comando
> if [ -n "$1" ] && [ "$1" = "q" ]
> then
> QUIET="1"
> else
> QUIET="0"
> fi
>
> # Registramos el inicio del firewall
> #FECHA=$(date +"%C%y-%m-%d %H:%M")
> #echo $FECHA
> #/usr/bin/logger -p kern.notice -t NETFILTER \
> # "====== Iniciado Cortafuegos: $FECHA ========="
>
> # PARAMETRIZACION DEL SCRIPT
> ##########################################
> ### Definimos constantes para usar en el
> ###+ script
> if [ $QUIET = "0" ]; then
> echo " Cargando parametros..."
> fi
>
> # Binario de iptables
> IPTABLES=/sbin/iptables
>
> # INTERFACES
> # eth1 - conectado a internet con IP FIJA
> EXT_IF=eth1
> EXT_IP=192.168.2.10
> # eth2 - conectado a LAN
> LAN_IF=eth2
> LAN_IP=10.0.0.1
> LAN_RED=10.0.0.0/24
> # lo - interfaz de loopback
> LOO_RED=127.0.0.0/8
> # cualquier red
> ANY_RED=0.0.0.0/0
>
> # MAQUINAS INTERNAS
> IP_SERVIDOR_FTP=10.0.0.12
> IP_SERVIDOR_WEB=10.0.0.13
>
>
> if [ $QUIET = "0" ]; then
> echo " Cargando modulos..."
> fi
> ##########################################
> ### Nos aseguramos que tenemos cargados
> ###+ los modulos necesarios
> modprobe ip_conntrack_irc
> modprobe ip_conntrack_ftp
> modprobe ip_nat_irc
> modprobe ip_nat_ftp
>
>
> if [ $QUIET = "0" ]; then
> echo " Limpiando FW..."
> fi
> ##########################################
> ### Limpiamos la configuracion existente
>
> # Limpiamos (flush) las reglas
> $IPTABLES -F
> # Borramos 'cadenas' de usuario
> $IPTABLES -X
> # Ponemos a cero paquetes y contadores
> $IPTABLES -Z
> # Limpiamos las reglas de NAT
> $IPTABLES -t nat -F
> # Borramos 'cadenas' de usuario de NAT
> $IPTABLES -t nat -X
>
>
> if [ $QUIET = "0" ]; then
> echo " Estableciendo politicas..."
> fi
> ##########################################
> ### Establecemos las politicas por omision
> ###+ de las 'cadenas'
>
> # Por omision descartamos los paquetes
> $IPTABLES -P INPUT ACCEPT
> $IPTABLES -P OUTPUT ACCEPT
> $IPTABLES -P FORWARD ACCEPT
> # PREROUTING - NAT sobre la IP destino: normalmente desde inet hacia LAN
> # POSTROUTING - NAT sobre la IP origen: normalmente desde LAN hacia inet
> $IPTABLES -t nat -P PREROUTING ACCEPT
> $IPTABLES -t nat -P POSTROUTING ACCEPT
>
> # Relajamos la politica de salida
> #+ Dejamos salir paquetes de LAN_IP por LAN_IF
> $IPTABLES -A OUTPUT -o $LAN_IF -s $LAN_IP -j ACCEPT
> #+ Dejamos salir paquetes de EXT_IP por EXT_IF
> $IPTABLES -A OUTPUT -o $EXT_IF -s $EXT_IP -j ACCEPT
>
>
>
> if [ $QUIET = "0" ]; then
> echo " -> Denegacion de redes invalidas..."
> fi
> ##########################################
> # No admitimos desde el exterior redes locales (RFC 1918)
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 192.168.0.0/16 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 10.0.0.0/8 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 172.16.0.0/12 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 224.0.0.0/4 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 240.0.0.0/5 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s $LOO_RED -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 0.0.0.0/8 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 169.254.0.0/16 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s 255.255.255.255 -j DROP
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -s $EXT_IP -j DROP
> # Desde el interior solo admitimos nuestra red LAN
> $IPTABLES -t nat -A PREROUTING -i $LAN_IF -s ! $LAN_RED -j ACCEPT
>
>
> if [ $QUIET = "0" ]; then
> echo " -> Denegacion de broadcast de NetBIOS..."
> fi
> ##########################################
> # Bloquear paquetes broadcast de NetBios salientes
> iptables -A FORWARD -p tcp --sport 137:139 -o $EXT_IF -j DROP
> iptables -A FORWARD -p udp --sport 137:139 -o $EXT_IF -j DROP
> iptables -A OUTPUT -p tcp --sport 137:139 -o $EXT_IF -j DROP
> iptables -A OUTPUT -p udp --sport 137:139 -o $EXT_IF -j DROP
>
>
> if [ $QUIET = "0" ]; then
> echo " Activando NAT..."
> fi
> ##########################################
> # Activamos el bit de forward
> echo 1 > /proc/sys/net/ipv4/ip_forward
> # Enmascaramos la salida de la LAN
> $IPTABLES -t nat -A POSTROUTING -s $LAN_RED -o $EXT_IF -j MASQUERADE
>
>
>
> if [ $QUIET = "0" ]; then
> echo " Accesos a la maquina local permitidos..."
> fi
> ##########################################
> ### Permitimos ciertos accesos a la maquina
>
> if [ $QUIET = "0" ]; then
> echo " -> loopback..."
> fi
> # Permitimos todas las conexiones del interfaz loopback
> $IPTABLES -A INPUT -i lo -j ACCEPT
> $IPTABLES -A OUTPUT -o lo -j ACCEPT
> $IPTABLES -A INPUT -i lo -s $LOO_RED -d $LOO_RED -j ACCEPT
> $IPTABLES -A OUTPUT -o lo -s $LOO_RED -d $LOO_RED -j ACCEPT
> # Permitimos el PostEnrutado de paquetes enviados localmente
> $IPTABLES -t nat -A POSTROUTING -o lo -s $LOO_RED -j ACCEPT
>
>
> if [ $QUIET = "0" ]; then
> echo " -> LAN..."
> fi
> # Damos acceso desde la red local
> $IPTABLES -A INPUT -s $LAN_RED -i $LAN_IF -j ACCEPT
> $IPTABLES -A OUTPUT -d $LAN_RED -o $LAN_IF -j ACCEPT
>
> if [ $QUIET = "0" ]; then
> echo " -> DNS..."
> fi
> # Aceptamos conexiones DNS
> $IPTABLES -A INPUT -s $ANY_RED -i $EXT_IF -p udp -m udp --sport 53 --dport
> 1024:65535 -j ACCEPT
> $IPTABLES -A OUTPUT -d $ANY_RED -o $EXT_IF -p udp -m udp --dport 53 --sport
> 1024:65535 -j ACCEPT
>
> if [ $QUIET = "0" ]; then
> echo " -> ntpd..."
> fi
> # Aceptamos conexiones ntpd
> $IPTABLES -A INPUT -p udp -m udp --dport 123 -i $EXT_IF -s $ANY_RED -j
> ACCEPT
> $IPTABLES -A OUTPUT -p udp -m udp --sport 123 -j
> ACCEPT
>
> if [ $QUIET = "0" ]; then
> echo " -> icmp..."
> fi
> # Permitimos paquetes ICMP (ping, traceroute...)
> #+ con limites para evitar ataques de DoS
> # Aceptamos ping y pong
> $IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/s
> -j ACCEPT
> $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -m limit --limit 2/s
> -j ACCEPT
> $IPTABLES -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 2/s
> -j ACCEPT
> $IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -m limit --limit 2/s
> -j ACCEPT
> # Aceptamos redirecciones
> $IPTABLES -A INPUT -p icmp --icmp-type redirect -m limit --limit 2/s
> -j ACCEPT
> $IPTABLES -A OUTPUT -p icmp --icmp-type redirect -m limit --limit 2/s
> -j ACCEPT
> # Aceptamos tiempo excedido
> $IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -m limit --limit 2/s
> -j ACCEPT
> $IPTABLES -A OUTPUT -p icmp --icmp-type time-exceeded -m limit --limit 2/s
> -j ACCEPT
> # Aceptamos destino inalcanzable
> $IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -m limit
> --limit 2/s -j ACCEPT
> $IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -m limit
> --limit 2/s -j ACCEPT
>
> if [ $QUIET = "0" ]; then
> echo " -> ssh..."
> fi
>
> # Abrimos el puerto xxxx para ssh
> #$IPTABLES -A INPUT -p tcp -i $EXT_IF -s $ANY_RED -m tcp --dport 22
> --sport
> 1024:65535 -j ACCEPT
> $IPTABLES -A INPUT -p tcp -s $ANY_RED -m tcp --dport 22 --sport 1024:65535
> -m state --state NEW -j LOG --log-prefix "[FW -SSH] "
> $IPTABLES -A INPUT -p tcp -s $ANY_RED -m tcp --dport 22 --sport 1024:65535
> -j ACCEPT
> # ...y conexiones salientes relacionadas
> $IPTABLES -A OUTPUT -p tcp -m tcp --sport 22 -m state --state
> RELATED,ESTABLISHED -j ACCEPT
>
>
> if [ $QUIET = "0" ]; then
> echo " Redirecciones..."
> fi
>
> ##########################################
> ### Generamos redireccionamientos
> ###+ transparentes para el resto de maquinas
>
> if [ $QUIET = "0" ]; then
> echo " -> Proxy web transparente (Squid)..."
> fi
>
> #+ Con la redireccion activa (primera linea)
> #+ no se llega a la segunda linea
> #+ Para bloquear todo acceso a la web comentar
> #+ solo la primera linea
> #+ Para anular el proxy comentar las dos reglas
> $IPTABLES -t nat -A PREROUTING -i $LAN_IF -s $LAN_RED -p tcp --dport 80 -j
> REDIRECT --to-port 3128
> $IPTABLES -A FORWARD -i $LAN_IF -p tcp --dport 80 -j DROP
>
> #if [ $QUIET = "0" ]; then
> # echo " -> Filtro de correo (P3Scan)..."
> #fi
> #+ Con la redireccion activa (primera linea)
> #+ no se llega a la segunda linea
> #+ Para bloquear todo acceso a POP comentar
> #+ solo la primera linea
> #+ Para anular el filtrado comentar las dos reglas
> #$IPTABLES -t nat -A PREROUTING -i $LAN_IF -s $LAN_RED -p tcp --dport 110
> -j
> REDIRECT --to-port 8110
> #$IPTABLES -A FORWARD -i $LAN_IF -p tcp --dport 110 -j DROP
> ###$IPTABLES -t nat -A OUTPUT -p tcp --dport 110 -m owner --owner-id p3scan
> -j ACCEPT
> ###$IPTABLES -t nat -A OUTPUT -p tcp --dport 110 -j REDIRECT --to-port 8110
>
>
> if [ $QUIET = "0" ]; then
> echo " -> DNAT (21 y 20)..."
> fi
> # Redirigimos "$EXT_IP":2220-1 a "$IP_SERVIDOR_FTP":20-1
> ###$IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 21
> -j LOG --log-prefix "[FW - FTP] "
> $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 20 -j
> DNAT --to "$IP_SERVIDOR_FTP":20
> $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 21 -j
> DNAT --to "$IP_SERVIDOR_FTP":21
>
> # SERVIDOR WEB NACHO
> $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 80 -j
> DNAT --to "$IP_SERVIDOR_WEB":80
> #$IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -p tcp --dport 80 -j
> DNAT --to "$IP_SERVIDOR_WEB":80
>
> # ...y conexiones salientes relacionadas (ftp pasivo)
> $IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j
> ACCEPT
> # Permitimos postruteos a "$IP_SERVIDOR_FTP":20-1
> $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_FTP -p tcp
> --dport 20 -j ACCEPT
> $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -d $IP_SERVIDOR_FTP -p tcp
> --dport 21 -j ACCEPT
> # Permitimos reenvios desde el exterior a "$IP_SERVIDOR_FTP":20-1
> $IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_FTP -p tcp --dport 20 -j
> ACCEPT
> $IPTABLES -A FORWARD -i $EXT_IF -d $IP_SERVIDOR_FTP -p tcp --dport 21 -j
> ACCEPT
>
>
>
> if [ $QUIET = "0" ]; then
> echo " Reenvios..."
> fi
> ##########################################
> ### Aceptamos algunos reenvios
>
> if [ $QUIET = "0" ]; then
> echo " -> icmp..."
> fi
> # Permitimos paquetes ICMP (ping, traceroute...)
> #+ con limites para evitar ataques de DoS
> # Aceptamos ping y pong
> $IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 2/s
> -j ACCEPT
> $IPTABLES -A FORWARD -p icmp --icmp-type echo-reply -m limit --limit 2/s
> -j ACCEPT
> # Aceptamos redirecciones
> $IPTABLES -A FORWARD -p icmp --icmp-type redirect -m limit --limit 2/s
> -j ACCEPT
> # Aceptamos tiempo excedido
> $IPTABLES -A FORWARD -p icmp --icmp-type time-exceeded -m limit --limit 2/s
> -j ACCEPT
> # Aceptamos destino inalcanzable
> $IPTABLES -A FORWARD -p icmp --icmp-type destination-unreachable -m limit
> --limit 2/s -j ACCEPT
> # Aceptamos todas en LAN_IF
> $IPTABLES -t nat -A PREROUTING -i $LAN_IF -p icmp --icmp-type any -m limit
> --limit 2/s -j ACCEPT
> $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -p icmp --icmp-type any -m limit
> --limit 2/s -j ACCEPT
>
>
>
>
> if [ $QUIET = "0" ]; then
> echo " Salida general..."
> fi
> ##########################################
> ### Aceptamos conexiones salientes
>
> # Permitimos cualquier salida tcp desde la propia maquina
> $IPTABLES -A OUTPUT -o $EXT_IF -p tcp -m state --state
> NEW,ESTABLISHED,RELATED -j ACCEPT
> # ...y conexiones entrantes relacionadas
> $IPTABLES -A INPUT -i $EXT_IF -p tcp -m state --state
> ESTABLISHED,RELATED -j ACCEPT
>
> # Permitimos el reenvio de paquetes enviados desde la LAN
> $IPTABLES -A FORWARD -i $LAN_IF -j ACCEPT
> # ...y conexiones salientes relacionadas
> $IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
>
> # Permitimos el NAT de paquetes enviados desde la LAN
> $IPTABLES -t nat -A PREROUTING -i $LAN_IF -j ACCEPT
> # ...y conexiones salientes relacionadas
> $IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j
> ACCEPT
>
> # Permitimos el NAT de paquetes enviados desde inet hacia la IP publica
> $IPTABLES -t nat -A PREROUTING -i $EXT_IF -d $EXT_IP -j ACCEPT
> # ...y conexiones salientes relacionadas
> $IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j
> ACCEPT
>
> # Permitimos el NAT de paquetes enviados desde la IP publica hacia inet
> $IPTABLES -t nat -A POSTROUTING -o $EXT_IF -s $EXT_IP -j ACCEPT
> # ...y conexiones salientes relacionadas
> $IPTABLES -t nat -A POSTROUTING -m state --state RELATED,ESTABLISHED -j
> ACCEPT
>
> # Permitimos el PostEnrutado de paquetes enviados localmente
> $IPTABLES -t nat -A POSTROUTING -o $LAN_IF -s $LAN_RED -j ACCEPT
>
>
> if [ $QUIET = "0" ]; then
> echo " Cerrando puertos restringidos..."
> fi
> ##########################################
> ### Puertos restringidos (telnet, ftp, imap, pop3, etc.)
> ###+ Reiterativo: para pruebas
> $IPTABLES -A INPUT -p tcp --dport 1:1024 -j DROP
> $IPTABLES -A INPUT -p udp --dport 1:1024 -j DROP
>
>
> ###echo " ACTIVADO DEBUG..."
> ##########################################
> ### Reglas utilizadas en debug para detectar
> #+ paquetes no tratados todavia
> #+ -j LOG --log-prefix "--PR> "
> ###$IPTABLES -t nat -A PREROUTING -j LOG --log-prefix "[FW - PR] "
> ###$IPTABLES -t nat -A POSTROUTING -j LOG --log-prefix "[FW - PO] "
> ###$IPTABLES -A FORWARD -j LOG --log-prefix "[FW - FW] "
> ###$IPTABLES -A INPUT -j LOG --log-prefix "[FW - IN] "
> ###$IPTABLES -A OUTPUT -j LOG --log-prefix "[FW - OU] "
>
> if [ $QUIET = "0" ]; then
> echo " Configuracion FW terminada."
> echo ""
> echo " A continuacion podria desear:"
> echo " - verificar reglas: iptables -nvL && iptables -nvL -t nat"
> echo " - guardar reglas: iptables-save > reglas"
> echo " - restaurar reglas: iptables-restore < reglas"
> fi
> ##########################################
> exit 0
>
> El 4 de abril de 2011 19:58, Ramón Macías Zamora <
> ramon.macias en raykasolutions.com> escribió:
>
> > No llega, supongo que una restricción de la lista.
> >
> > Podrías pegar el contenido
> > --
> >
> >
> >
> > Ramón Macías Zamora
> > Tecnología, Investigación y Desarrollo
> > Guayaquil - Ecuador
> > msn: ramon_macias en hotmail.com
> > skype: ramon_macias
> > UserLinux# 180926 (http://counter.li.org)
> > Cel: 593-8-0192238
> > Tel: 593 4 6044566
> >
> > <http://www.raykasolutions.com/>
> >
> >
> > WEB SITES, HOSTINGS, DOMINIOS, MANTENIMIENTO DE EQUIPOS, REDES,
> SERVIDORES
> > LINUX, SOPORTE.
> >
> >
> >
> > El 4 de abril de 2011 19:55, Mario Villela Larraza <
> > mario.villelalarraza en gmail.com> escribió:
> >
> >> ahora si aquí esta el archivo adjunto perdón :s
> >>
> >> El 4 de abril de 2011 19:37, Ramón Macías Zamora <
> >> ramon.macias en raykasolutions.com> escribió:
> >>
> >> > No llegó el adjunto :(
> >> > --
> >> >
> >> >
> >> >
> >> > Ramón Macías Zamora
> >> > Tecnología, Investigación y Desarrollo
> >> > Guayaquil - Ecuador
> >> > msn: ramon_macias en hotmail.com
> >> > skype: ramon_macias
> >> > UserLinux# 180926 (http://counter.li.org)
> >> > Cel: 593-8-0192238
> >> > Tel: 593 4 6044566
> >> >
> >> > <http://www.raykasolutions.com/>
> >>
> >> >
> >> >
> >> > WEB SITES, HOSTINGS, DOMINIOS, MANTENIMIENTO DE EQUIPOS, REDES,
> >> SERVIDORES
> >> > LINUX, SOPORTE.
> >> >
> >> >
> >> >
> >> > El 4 de abril de 2011 16:35, Mario Villela Larraza <
> >> > mario.villelalarraza en gmail.com> escribió:
> >> >
> >> >> Hola amigos ya hace un muy buen rato que estoy batallando con un
> proxy
> >> que
> >> >> quiero levantar pero no encuentro cual es el problema tengo un
> servidor
> >> >> con
> >> >> la squid levantado y un script (que anexo en este correo) con un
> >> servidor
> >> >> de
> >> >> DHCP pero no logro que las maquinas dentro de la red que pasarian por
> >> el
> >> >> proxy obtengan señal de internet ya revise y revise la configuracion
> de
> >> mi
> >> >> squid de echo ahorita no esta restringiendo nada, ya tengo una
> lista
> >> ACL
> >> >> que apara todas mis direcciones del squid pero aun asi no obtengo
> >> >> resultados
> >> >> diferentes.
> >> >>
> >> >> Así que acudo a ustedes para que me ayuden con este pequeño proyecto
> >> que
> >> >> traigo en manos esperando que todos estén bien les mando un saludo y
> >> >> agradesimentos de antemano.
> >> >>
> >> >> --
> >> >> Mario Villela Larraza
> >> >> mario.villelalarraza en gmail.com
> >> >> Cel 0445512591926
> >> >>
> >> >> _______________________________________________
> >> >> CentOS-es mailing list
> >> >> CentOS-es en centos.org
> >> >> http://lists.centos.org/mailman/listinfo/centos-es
> >> >>
> >> >>
> >> >
> >>
> >>
> >> --
> >> Mario Villela Larraza
> >> mario.villelalarraza en gmail.com
> >> Cel 0445512591926
> >>
> >> _______________________________________________
> >> CentOS-es mailing list
> >> CentOS-es en centos.org
> >> http://lists.centos.org/mailman/listinfo/centos-es
> >>
> >>
> >
>
>
> --
> Mario Villela Larraza
> mario.villelalarraza en gmail.com
> Cel 0445512591926
> _______________________________________________
> CentOS-es mailing list
> CentOS-es en centos.org
> http://lists.centos.org/mailman/listinfo/centos-es
>
Más información sobre la lista de distribución CentOS-es