Proxy con squid
Contents
Proxy simple para uso doméstico
(Por RicardoYanez)
A veces tenemos en casa un computador de escritorio o una estación de trabajo, que tiene más de un usuario; el cache que crean los navegadores web en la raíz del usuario son mal utilizados al no compartirse entre usuarios. En ente caso es conveniente instalar un proxy de sistema, accesible a todo usuario local. Vamos a suponer que el computador está conectado a Internet por ADSL o cable, directamente o detrás de un Router, con DHCP o no, y que no tiene un FQDN, es decir, el típico computador de casa conectado al servicio de un ISP.
Instala squid con:
# aptitude install squid
La instalación intenta levantar el proxy pero va a fallar.
Edita /etc/squid/squid.conf. En la sección "NETWORK OPTIONS" modifica http_port a,
http_port 3128 transparent
En "ADMINISTRATIVE PARAMETERS" agrega visible_hostname,
# TAG: visible_hostname # If you want to present a special hostname in error messages, etc, # define this. Otherwise, the return value of gethostname() # will be used. If you have multiple caches in a cluster and # get errors about IP-forwarding you must set them to have individual # names with this setting. # #Default: # none visible_hostname mimaquina
en dónde "mimaquina" representa el nombre de pila del sistema sin FQDN. (Un computador con FQDN no necesita este instructivo), puedes obtener este nombre ejecutando:
$ hostname -f
Inicia squid con:
# /etc/init.d/squid start
Usar proxy local con iceweasel/firefox
Anda a "Edit/Preferences". Marca la viñeta "Advanced". En "Connection" marca "Settings". Marca "Manual proxy configuration". En "HTTP proxy" escribe "localhost" (sin cremillas) y en "Port" escribe el puerto del proxy, que es 3128, según el instructivo http_port de arriba. Reinicia el navegador.
Squid para controlar el trafico de la red local
(Por MichellMuñoz)
Instala squid con,
# aptitude install squid
La instalación intenta levantar el proxy pero va a fallar. Edita /etc/squid/squid.conf. En la sección "NETWORK OPTIONS" modifica http_port a,
http_port 3128 transparent
En la sección "ACCESS CONTROL" pon lo siguiente:
acl red_local src 192.168.1.0/24 192.168.2.0/24 http_access allow red_local
La sección "ACCESS CONTROL", especifica que red_local es el nombre para la acl y 192.168.1.0/24 192.168.2.0/24 son nuestras subredes.
En "ADMINISTRATIVE PARAMETERS" agregavisible_hostname,
# TAG: visible_hostname # If you want to present a special hostname in error messages, etc, # define this. Otherwise, the return value of gethostname() # will be used. If you have multiple caches in a cluster and # get errors about IP-forwarding you must set them to have individual # names with this setting. # #Default: # none visible_hostname mimaquina
en donde "mimaquina" representa el nombre de pila del sistema sin FQDN. (Un computador con FQDN no necesita este instructivo).
Luego agregamos una regla al IPTABLES:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
en esta regla indicamos que todo lo que entra por la interfaz de red eth0 con destino el puerto TCP 80 se redireccione al puerto 3128 donde está escuchando squid.
Luego
# squid -z
el cual crea los directorios donde estará el cache de nuestro proxy.
Inicia squid con,
# /etc/init.d/squid start
El cache se crea en /var/spool/squid/.
Usar proxy de red local con iceweasel/firefox
Nada que configurar. con IPTABLES redireccionamos automaticamente el trafico para que utilice el puerto del proxy.
Concepto de ACL en Squid
(Fuentes: Pedro Pablo Fábrega Martínez, SquidFaq)
Un ACL es una definición de control de acceso, que en Squid se especifica mediante el parámetro acl según la siguiente sintaxis:
acl nombre_acl tipo_acl descripción ...
o bien
acl nombre_acl tipo_acl "fichero_de_descripciones" ...
cuando usamos un "fichero_de_descripciones", cada descripción se corresponde con una línea del fichero.
Tipos de ACL
src: Especifica una dirección origen de una conexión en formato "IP/máscara".
Por ejemplo, utilizamos una acl del tipo src para especificar la "red_local":
acl red_local src 192.168.1.0/24
También podríamos especificar rangos de direcciones mediante una acl de tipo src:
acl profes src 192.168.1.10-192.168.1.25/32
dst: Especifica una dirección destino de una conexión en formato "IP/máscara".
Por ejemplo, podríamos utilizar una acl del tipo dst para especificar la "red google_cl":
acl google_cl dst 64.233.0.0/24
También podríamos especificar hosts concretos mediante una acl de tipo dst:
acl google_es2 dst 216.239.59.104/32 216.239.39.104/32 216.239.57.104/32
Las definiciones son idénticas a las acl de tipo src salvo que se aplican al destino de las conexiones, no al origen.
srcdomain y dstdomain: Estos tipos de acl especifican un nombre de dominio. En el caso de srcdomain es el dominio origen y se determina por resolución DNS inversa de la IP de la máquina, es decir, tendremos que tener bien configurado el DNS de la red local. En el caso de dstdomain el nombre del dominio se comprueba con el dominio que se haya especificado en la petición de página web.
Por ejemplo, podríamos utilizar una acl del tipo dstdomain para especificar la "red google_com":
acl google_com dstdomain google.com
srcdom_regex y dstdom_regex: Especifican una expresión regular que verifican los dominios de origen o destino. La expresión regular hace distinción entre mayúsculas y minúsculas salvo que incluyamos la opción "-i" que evita dicha distinción.
Por ejemplo, podríamos utilizar una acl del tipo dstdom_regex para especificar la "red gogle_todos":
acl google_todos dstdom_regex -i google\..*
Observemos que al incluir -i estamos indicando que no haga distinción entre mayúsculas y minúsculas.
time: Este tipo de acl permite especificar una franja horaria concreta dentro de una semana. La sintaxis es la siguiente:
acl nombre_acl_horaria time [dias-abrev] [h1:m1-h2:m2]
Donde la abreviatura de los días es:S - Sunday (Domingo)
M - Monday (Lunes)
T - Tuesday (Martes)
W - Wednesday (Miércoles)
H - Thursday (Jueves)
F - Friday (Viernes)
A - Saturday (Sábado)
además la primera hora especificada debe ser menor que la segunda, es decir h1:m1 tiene que ser menor que h2:m2.
Por ejemplo, con la siguiente acl:
acl horario_laboral time M T W H F 8:00-15:00
estarímos especificando un horario de 8hrs a 15hrs, de lunes a viernes.url_regex: Permite especificar expresiones regulares para comprobar una url completa, desde el http:// inicial.
Por ejemplo, vamos a establecer una acl que se verifique con todos los servidores cuyo nombre sea adserver:
acl serv_publicidad url_regex ^http://adserver.*
En otro ejemplo, podemos establecer una acl que se verifique con las peticiones de ficheros mp3:
acl ficheros_mp3 url_regex -i mp3$
Nota: ver expresiones regularles
Tipos de Reglas de Accesos
http_access: Esta es la regla de acceso principal, que permite o deniega accesos a una o más acl a través del puerto HTTP. La sintaxis de uso es:
http_access allow|deny [!]acl ...
Observamos que cada acl puede ir precedida por un signo ! (negación) que indica que la acl no se establece.
Por ejemplo, para permitir acceso fuera del horario laboral, según una acl que definimos anteriormente:
http_access allow ! horario_laboral
En otro ejemplo, para denegar el acceso en horario laboral:http_access deny horario_laboral
Y en otro ejemplo, para dar acceso completo a la red local:http_access allow red_local