LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

La ventaja principal del proxy transparente es que no tienes que configurar nada en los navegadores individuales para trabajar con estos proxies.

Esta simple guía explica cómo configurar un proxy transparente con el cortafuego IPTables y Squid (DNAT) en tres fáciles pasos.

Mi programa de instalación:

i) Sistema: Sistema CPU dual Xeon HP con 8 GB de RAM (suficiente para squid).

ii) Eth0: IP: 192.168.1.1

iii) Eth1: IP: 192.168.2.1 ( red 192.168.2.0/24 (aproximadamente 150 sistemas Windows))

iv) Sistema operativo Red Hat Enterprise Linux (Siguiendo la instrucción debería funcionar con Debian y todas las otras distribuciones Linux)

Eth0 conectado a internet y eth1 conectado a lan es decir, actúan como sistema local router.

Configuración del servidor

  • Paso # 1: configuración de Squid para que actúe como un proxy transparente
  • Paso # 2: configuración Iptables
    • a) Configurar Sistema como enrutador
    • b) Remitir todas las peticiones HTTP a 3128 (DNAT)
  • Paso # 3: ejecutar secuencias de comandos y se inicia el servicio de squid

En primer lugar, el servidor Squid instalado (squid uso up2date) y configurar agregando siguientes directivas para presentar:

# vi /etc/squid/squid.conf

Modificar o añadir siguientes directivas de squid:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan

Donde:

    • httpd_accel_host virtuales: Squid como un acelerador de httpd
    • httpd_accel_port 80: 80 es el puerto que desea enrutar
    • httpd_accel_with_proxy on: Usar Squid tanto como un acelerador de httpd local y como un proxy.
    • httpd_accel_uses_host_header on: Cabecera está encendido, que es el nombre de host de la URL.
    • acl lan src 192.168.1.1 192.168.2.0/24: lista de control de acceso, sólo se permiten equipos de la LAN para utilizar el squid
    • http_access allow localhost: acceso Squid para LAN y localhost ACL sólamente
    • http_access allow lan: - ídem -

Aquí está la lista completa de squid.conf para su referencia (grep eliminará todos los comentarios y sed eliminará todas las líneas vacías)

# grep -v "^#" /etc/squid/squid.conf | sed -e '/^$/d'

O intente con sed:

# cat /etc/squid/squid.conf | sed '/ *#/d; /^ *$/d'

Salida:

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
hosts_file /etc/hosts
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
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 to_localhost dst 127.0.0.0/8
acl purge method PURGE
acl CONNECT method CONNECT
cache_mem 1024 MB
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan
http_access deny all
http_reply_access allow all
icp_access allow all
visible_hostname myclient.hostname.com
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
coredump_dir /var/spool/squid

Configuración de iptables

A continuación, añadir las siguentes reglas para desviar todas las peticiones http (próximos al puerto 80) al puerto del servidor Squid 3128:

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

Aquí está el script completo. Primero configurar el sistema Linux como router y reenvía todas las peticiones HTTP con el puerto 3128

#!/bin/sh
# squid server IP
SQUID_SERVER="192.168.1.1"
# Interface connected to Internet
INTERNET="eth0"
# Interface connected to LAN
LAN_IN="eth1"
# Squid port
SQUID_PORT="3128"
# DO NOT MODIFY BELOW
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
#modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# set this system as a router for Rest of LAN
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
# DROP everything and Log it
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP

Guardar script de shell. Ejecutar secuencia de comandos para que el sistema actúe como un router y redirigir los puertos:

# chmod +x /etc/fw.proxy
# /etc/fw.proxy
# service iptables save
# chkconfig iptables on

Iniciar o reiniciar el squid:

# /etc/init.d/squid restart
# chkconfig squid on

Configuración de la computadora de escritorio / cliente

Apunte todos los clientes de escritorio a su dirección IP eth1 (192.168.2.1) como Router / Gateway (utilice DHCP para distribuir esta información). Usted no tendrá que configurar los navegadores individuales para trabajar con el servidor proxy.

¿Cómo puedo probar si mi proxy squid está funcionando correctamente?

Ver archivo de registro de acceso /var/log/squid/access.log:

# tail -f /var/log/squid/access.log

El comando de arriba supervisará todas las peticiones entrantes y los ingresa al archivo de registro /var/squid/access_log. Ahora bien, si alguien accede a un sitio web a través del navegador, squid registrarán información.

Problemas y soluciones

(A) Cliente FTP de Windows

Todo cliente de Escritorio que solicite una sesión FTP terminará con un error: Comando PORT ilegal.

Esto es por que no había cargado el módulo del kernel ip_nat_ftp. Sólo tienes que escribir el siguiente comando y pulsar Enter y ¡voilá!

# modprobe ip_nat_ftp

Tenga en cuenta que comando modprobe ya se añade a un script de shell (arriba).

(B) Redirección del puerto 443:

Tuve a bloquear todas las solicitudes de conexión del router a excepción de nuestro servidor proxy (192.168.1.1). Así que todos los puertos incluyendo el 443 (HTTPS / SSL). No se puede redirigir el puerto 443, extraje a partir de la lista de correo Debian: "Respuesta larga: SSL está específicamente diseñado para impedir el ataque "man-in-the-middle", y consecuente el uso de squid, de tal manera que sería lo mismo que un ataque "hombre en el medio". Puede que se puede llegar a alcanzar con éxito esto, pero no sin romper el cifrado y la certificación de que es el punto detrás de SSL ".

Por lo tanto, yo había reabrir rápidamente el puerto 443 del (firewall router) para todos mis equipos de la LAN y problema estaba resuelto.

(C) la autenticación Squid Proxy en un modo transparente

No se puede interceptar la autenticación de squid con un proxy transparente.

Comentarios  

-1 # ben 25-11-2016 23:48
amigo y para bloquear trafico ***s de manera transparente
-3 # Traftrans 28-11-2016 16:40
Para bloquear el tráfico por el puerto 443, bloquea el puerto a nivel del cortafuegos.
# Así lo permites.
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
# Así lo bloqueas
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j DROP
# kevin 05-04-2017 17:08
sed '/^$/d; /^#/d' fichero1 > fichero2

Aquesta instrucció esborrarà les línies que comencen amb el símbol # (comentaris) i també eliminarà les línies en blanc.

Fichero1 és el fitxer a processar (squid.conf), fichero2 serà el fitxer de destí.
# Lorenzo 03-10-2017 18:10
Gracias por el tutorial.
¿Cómo configuramos el script i las instrucciones iptables si nuestro ordenador proxy sólo tiene una tarjeta de red?
El "script completo" es el que luego guardamos como fw.proxy, ¿verdad?
Si se reinicia el pc, ¿hay que ejecutar de nuevo el script?

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Formulario de acceso

Filtro por Categorías