Translate - ترجم - Traduire - 翻訳する

viernes, 24 de agosto de 2012

8 Squid3 en Ubuntu/Debian como Proxy transparente

Introducción

Squid3 es una herramienta de filtrado de contenido(Proxy), la cual puede leer las cabeceras de ciertos protocolos dentro de las tramas de una conexión. Antes de llevar acabo esta instalación, debemos cerciorarnos de donde sera instalado, eso es HARDWARE ya que squid3 esta diseñado para trabajar con dos tarjetas de red (ethX, ethX:0), en el caso de no tenerlas, debemos hacer una subinterface de la tarjeta que se tenga en ese momento (lo inverso a suma de puertos [Bonding]). 

Instalación

Debemos asegurarnos de haber hecho una actualización de nuestras maquinas (Linux) con el siguiente comando:
                           
                   $ sudo apt-get update && upgrade
Ahora ya que el sistema tiene la lista de repositorios mas recientes, instalamos “Squid3” (ojo es la nueva versión de Squid, a diferencia de Squid2.9Estable este incluye mas opciones y herramientas para administración del mismo) con el siguiente comando:

                   $ sudo apt-get install squid3
Esto instalara squid3 en nuestras maquinas, ahora lo importante se encuentra en /etc/squid3/ la cual es la carpeta donde se encuentra un archivo de configuración (“squid.conf”), del cual haremos un respaldo en donde queramos, recomiendo el escritorio para rápido acceso ya que incluye todo un manual completo de uso. Ahora después de hecho el respaldo, eliminamos el fichero o modificamos para aquellos temerosos que no viven al limite =D. 

Configuración

Ahora creamos un nuevo archivo de configuración o modificamos el squid.conf y agregamos las lineas que hagan falta obviamente cambiando mis IP por las suyas, lo llenamos con lo siguiente:
        
##Declaracion de Reglas del Squid
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 22               # SSH
acl Safe_ports port 80               # http
acl Safe_ports port 21               # ftp
acl Safe_ports port 443 563 1863 # https
acl Safe_ports port 70               # gopher
acl Safe_ports port 210              # wais
acl Safe_ports port 1025-6553    # 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 CONNECT method CONNECT

##Aqui se aplican/ejecutan los parametros definidos en las reglas
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
always_direct allow all         #Esta linea es una caracteristica nueva de squid3
acl hora time MTWHF 10:00-22:00 # horario en el que permite el acceso a internet
acl redLan src 192.168.1.0/27 # acceso de red
acl paginas dstdomain .youtube.com .facebook.com #se definen paginas o listas
#Empezamos con las politicas de acceso
http_access deny !hora   #negamos la hora es decir decimos que nadie se puede conectar en un horario diferente al definido
http_access deny paginas  #El proxy puede bloquear paginas por dominio o ip, aqui se dice que bloqueara lo definido en "paginas"
http_access allow redLan #Aqui definimos que nuestra lan tendra acceso a internet
http_access allow localhost #nos permite que el usuario local pueda trabajar localmente acceso a internet ssh etc
http_access deny all #squid trae unas variables definidas, all es una de ellas y se entiende que lo que no declaramos sera bloqueado.

##Definicion de paginas que no queremos guardar cache
##  ejemplo:
##     hierarchy_stoplist cgi-bin ? hotmail gmail yahoo escuela.factor.com.mx
hierarchy_stoplist cgi-bin ?

##Configuracion estandar para la cache
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:                1440    20%     10080
refresh_pattern ^gopher:     1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0  0%      0
refresh_pattern .            0       20%     4320

##Configuraciones para que sea Transparente, Tenga dominio, las paginas
##de error esten en español, acepte el puerto 3130 y se configura la cache
http_port 3128 transparent #aqui se indica que el proxy sera trasparente y estara escuchando en el puerto 3128
#icp_port 3130
visible_hostname VM_Proxy #el nombre de nuestro proxy
cache_dir ufs /var/spool/squid3 10240 16 256   #Esto nos dice que constara de 10GB en 16 directorios con 256 subdirectorios   
error_directory /usr/share/squid3/errors/Spanish #Esto indica que idioma queremos usar en las paginas de bloqueo u error

  Como podemos ver en el se encuentran declarados puertos, paginas e incluso como debe estar configurado el cache, ahora para que esta configuración tenga efecto debemos reiniciar el servicio para eso tenemos de 3 sopas:

                $ sudo squid3 -k reconfigure
                $ sudo /etc/init.d/squid3 restart
                $ sudo service squid3 restart
Esto reiniciara el servicio, pero como la configuración para el squid3 es TRANSPARENTE debemos modificar unas cosas en el IPTABLES de Linux, el cual nos permitirá además de dar acceso, controlar las interfaces de entrada, salida e incluso podríamos dejar que el squid3 solo bloquee lo que el IPTABLES filtre (es decir solo sera cache, si queremos el IPTABLES puede ser un Firewall y ademas permitir acceso solo a lo que querramos). Para eso se utilizara el siguiente script, el cual consiste en solo direccionar (NO BLOQUEAR) los puertos de Http hacia el squid3, solo los protocolos reconocidos por el squid3 que se encuentran declarados en el “squid.conf”. El script nos queda de esta manera (ojo se recomienda usar el script con una configuración de IPTABLES básica es decir que no tenga configuraciones anteriores ya que el script reiniciara algunas tablas a tablas básicas para que el script funcione adecuadamente):

#!/bin/sh

# Squid server IP
SQUID_SERVER="172.16.0.12" #ip de la interfaz donde escuchara nuestro proxy

# Interface connected to Internet
INTERNET="eth0"

# Address connected to LAN
LOCAL="192.168.1.0/27" #como declaramos en squid.conf es el rango de ips a escuchar

# Squid port
SQUID_PORT="3128" #el puerto en que escucha el proxy (para redirigir el trafico a el)

Limpiamos firewall anterior
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Se cargan modulos de IPTABLES para NAT e "IP conntrack support"
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
#modprobe ip_nat_ftp

# Habilitamos forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Configuramos una politica de filtrado por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

# Permitimos el acceso ilimitado al loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Permitimos UDP, DNS y Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s $LOCAL -m state --state ESTABLISHED,RELATED -j ACCEPT

# Esta es la mas importante ya que prepara este systema como router para la LAN
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
iptables -A FORWARD -s $LOCAL -j ACCEPT

# Permitimos que la LAN tenga acceso ilimitado
iptables -A INPUT -s $LOCAL -j ACCEPT
iptables -A OUTPUT -s $LOCAL -j ACCEPT

# Redireccionamos (DNAT) las peticiones del puerto 80 de la LAN al squid por el puerto 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -s $LOCAL -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
#OJOOOO!!!! el squid3 NO repito NO hace cache de HTTPS (443) en las notas dire por que
#iptables -t nat -A PREROUTING -s $LOCAL -p tcp --dport 443 -j DNAT --to $SQUID_SERVER:$SQUID_PORT

# si son del mismo proxy
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
#iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 443 -j REDIRECT --to-port $SQUID_PORT

#abrimos los demas puertos desde internet a la lan
iptables -A INPUT -i $INTERNET -j ACCEPT
iptables -A OUTPUT -o $INTERNET  -j ACCEPT

# DROP lo demas y lo agregamos al LOG
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP


Ahora guardamos el script con el nombre que queramos, y lo ejecutamos con el siguiente comando:

                   $ sudo sh squid3script.sh
Con esto ya se puede usar el squid3 como proxy transparente, es decir simplemente lo ponemos antes de nuestros routers, y dejamos que el trafico pase por ellos, en pocas palabras este sera el gateway de nuestra lan.


       Notas:
           Se debe considerar que por una interfaz entrara el trafico, así que esta
                   NO debe tener gatway, o puerta de enlace predeterminada a internet.
                   La otra interfaz debe estar configurada para permitir el acceso a internet
                   y evitar conexiones provenientes de ella (considerando que no existan IDPS
                   u otro método de verificación y protección).
                   Se debe tener cuidado al agregar mas reglas a la tabla IPTABLE, ya que NO
                   sobreescribe las anteriores. (después posteare una configuración para por así decirlo
                   mejorar el rendimiento de nuestro Proxy ya que genera un Firewall básico.
                   Squid3 no maneja HTTPS el protocolo no esta soportado en la compilacion,
                   sin embargo se puede agregar la bandera al momento de la compilacion para que 
                   use SSL y otras cosillas por ahí con las cuales por cuestiones legales no podemos usar
                   en la institución donde logre esto. Ahora si es posible encontrar estos paquetes en la red.
                   Tener sumo cuidado en el formato en el squid.conf ya que si no se lleva el
                   orden adecuado, este mostrara errores.

8 comentarios:

Publicar un comentario

ask me!!!

 

Just Linovaxion Copyright © 2013 - |- Template created by O Pregador - |- Powered by Blogger Templates