• Ir al contenido principal
  • Ir a la barra lateral primaria
  • Ir al pie de página
  • Cachivaches
  • Ubuntu
  • Servicios en la nube
  • Raspberry Pi
  • La Historia de este Blog
    • ¿Quieres hablar?

Kacharreando

Kacharreando desde Antes que montara este blog

Instalar y configurar un proxy http en Ubuntu con Squid – Mega Guía

31 de octubre de 2017 por luidelkacha 27 comentarios

Loading...

Existen momentos que necesitamos acceder a páginas web con ciertos parámetros, o con varios usuarios y en estos casos un proxy HTTP es una buena solución.

Montar un proxy HTTP para tu navegación web es muy sencillo en un servidor con Ubuntu/Debian, y con el servidor que contratamos con Ramnode será muy fácil realizar la instalación.

En nuestro servidor de pruebas la configuración de un proxy nos permitirá navegar con su IP y poder acceder a servicios asociados al país de esa IP. Aunque nuestro servidor de pruebas tiene instalado Debian, y este manual está pensado para Ubuntu lo pasos a seguir van a ser tan parecidos que no te costará instalarlo en Debian.

La diferencia de utilizar un tunel OpenVPN respecto a un proxy, es que no necesitarás que todo el sistema operativo funcione con esa IP, sino que podrás configurar un navegador para que funcione con la IP del servidor y el resto del sistema funcione con tu prooveedor de internet.

1. ¿Qué es Squid?

Squid es un programa que te permite realizar un proxy/caché con una gran variedad de configuraciones y usos. En este artículo vamos a ver Squid como un proxy HTTP. Al usar una caché también consigue reducir el ancho de banda y los tiempo de respuesta gracias a su caché, y reutilizando las páginas web solicitadas con más frecuencia.

Con Squid puedes conseguir control de acceso, y es excelente para acelerar un servidor, ya que funciona como caché de las páginas que ofrece el servidor.

También vamos a ver en la última parte como crear un tráfico anónimo desde el proxy hacia internet de tal manera que tu dirección IP no se enviará en el encabezado X-Forwarded-For header. Ten en cuenta que el tráfico no estará encriptado, por lo que será visible en tu red local.

Si quieres saber más sobre la configuración de squid aquí: http://www.squid-cache.org.

2. Instalar Squid en Ubuntu

Squid está disponible en los repositorios de Ubuntu. Primero actualizaremos el sistema y luego instalaremos Squid con los siguientes comandos:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install squid

3. Configurar Squid

En la configuración de Squid veremos apartados que pueden ser interesantes para tu configuración, pero para el objetivo del proxy que voy a montar algunas configuraciones no son necesarias.

Así que vamos a verlas para que puedas decidir cuales te son útiles.

Crear el archivo de configuración

Como he dicho anteriormente las opciones de Squid son muy numerosas, por eso el archivo de configuración tiene casi 5000 líneas, por eso tiene tanta versatilidad. Como voy a configurar un sencillo proxy HTTP la mayoría no me interesa, por lo que voy a hacer una copia y quedarme con las opciones por defecto.

Hacemos un backup de la configuración por defecto:

sudo mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

Para quedarnos con lo importante, creamos una nuevo archivo de configuración que incluyan las líneas por defecto, eliminando el resto de líneas que están comentadas, y que se refieren a la documentación o a opciones que no están activas.

Ejecutamos el siguiente comando:

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Con esto ya tendríamos la configuración básica para configurar los parámetros que nos interesen.

ACLs y control de acceso

Squid tiene un sistema para permitir el acceso con una configuración basada en ACL’s, y según la documentación de Squid, se utilizan dos elementos:

  • Elementos ACL, definen alguna propiedad de las peticiones que se realizan al proxy. Por ejemplo, si el cliente tiene una IP (src), o incluso un dominio podemos permitir o denegar su acceso desde el archivo de configuración. También podemos permitir o bloquear los puertos de salida para que solo sea posible utilizar un protocolo que establezcamos. Aquí se encuentra la documentación de acl.
  • Listas de acceso: Estas consisten en una acción para permitir (allow) o denegar (deny) seguida de uno o varios elementos ACL.

Para que veas un ejemplo, si quieres permitir el acceso desde tu IP, por ejemplo 111.11.11.11 lo escribes de esta manera:

acl localnet src 111.11.11.11 # Tu Servidor IP 
http_access allow localnet

La primera línea crea un acl (access control list) con el nombre localnet que identifica la conexión, src es la fuente, y la IP corresponde a la de tu ordendor. Luego tenemos la directiva http_access que nos permite/deniega esa conexión que hemos identificado.

Si tuviéramos una red local podríamos configurarlo con la siguiente directiva:

acl localnet src 10.0.0.0/8

Permitiría todos los accesos desde la LAN 10.0.0.0/8.

Si tu IP es estática, sería tan fácil como poner la regla con tu IP:

acl localnet src 1.2.3.4

En el caso de que sea dinámica, la mejor solución es abrir un rango de IPs, así sería mucho menos inseguro que dejarlo abierto. Para abrir un rango de 1.2.3.0 to 1.2.3.254 tendrías que definirlo así:

acl localnet src 1.2.3.0/24

Y como en el ejemplo anterior, añadiríamos las lístas de acceso que nos permiten conectarnos a Squid:

http_access allow localhost
http_access allow localnet

También podríamos permitir una lista de IP’s definiéndolas en un archivo de texto, para eso crearíamos un archivo con las distintas IPs:

nano /etc/squid/allowed_ips.txt
xx.xx.xx.1
xx.xx.xx.2
xx.xx.xx.3
xx.xx.xx.4

Y por último definiríamos este archivo en la configuración de Squid:

# Clientes Permitidos
acl allowed_ips src "/etc/squid/allowed_ips.txt"
http_access allow allowed_ips

Con esto ya tendríamos definido los accesos a Squid, y este simplemente cargaría la configuración a usar en memoria para denegar o permitir cada petición.

NOTA: Cada petición se comprueba si pertenece a la lista de acceso y si no se produce ninguna coincidencia, la acción que se aplica por defecto es lo contrario de la última lista de acceso, así que para asegurarnos que nadie se cuele, si hemos definido listas de acceso añadir lo siguiente al final del archivo de configuración:

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

En la configuración por defecto nos aparece la siguiente línea:

http_access deny CONNECT !SSL_ports

Que quiere decir que deniega el acceso a aquellas solicitudes que coinciden con el elemento CONNECT y no coincidan con el elemento SSL_Ports.

En nuestro caso como queremos un proxy abierto con usuario y clave, vamos a permitir el acceso a todo el mundo, añadiríamos la siguiente instrucción:

http_access allow

Cambiar el puerto de acceso

Por razones de seguridad yo prefiero no usar el puerto por defecto, y cambiarlo por otro cuando sea posible. Para cambiarlo tienes que buscar la línea siguiente y poner el puerto que te interese:

http_port 8888

En este ejemplo he puesto el puerto 8888 en vez del 3128 que es el que viene por defecto, cualquier puerto > 1024 será válido.

Limitar número de accesos

Otra opción que puede ser interesante es limitar el uso simultaneo de accesos al proxy para limitar la conexión, si quisiéramos limitar a tres conexiones utilizaríamos esta opción:

acl maxuserconnections maxconn 3

Nombre del proxy

Anque yo no lo usaré, podemos confiugurar un nombre para el servidor proxy. Este Hostname puede ser cualquier nombre ya que Squid te lo permite, por defecto es localhost. Encuentra la opción visible_hostname, o añadela, con el nombre que quieras a continuación:

visible_hostname UbuntuServer

Caché de Squid

Squid tiene varias opciones para configurar la caché y es interesante saber cuales son y cómo podemos configurarlas.

Opción cache_dir. Esta opción se utiliza para establecer el tamaño que queremos que use Squid del disco duro. De modo predeterminado se utiliza el formato ufs y se crea un directorio /var/spool/squid una caché de 100MB, que se divide en jerarquías de 16 directorios subordinados, hasta en 256 niveles cada uno.

Una configuración podría ser esta:

cache_dir ufs /var/spool/squid 100 16 256

También puedes aumentar el tamaño de la caché, y cuanto más grande sea más objetos se almacenarán en esta, así se consumirá menos ancho de banda. Para una caché de 2GB la configuración sería la siguiente:

cache_dir ufs /var/spool/squid 2048 16 256

A veces el formato de caché ufs puede llegar a bloquear en Squid operaciones de entrada/salida sobre el sistema de archivos cuando se conectan muchos clientes. Para evitar esta situación, es recomendable utilizar el sistema asíncrono aufs que consigue un mejor desempeño:

cache_dir aufs /var/spool/squid 2048 16 256

Opción maximum_object_size. Con esta opción definimos el tamaño máximo de los objetos que se guardan en la caché. Es recomendable utilizarla con alta carga de trabajo, ya que evita el guardar objetos en la caché de gran tamaño, que lo más probable es que sean aprovechados solo por unos pocos usuarios, por lo que se optimiza la caché con objetos pequeños que generarían una gran cantidad de peticiones hacia las webs y se sospecharía del proxy.

Para una caché con límite de objetos de 48MB sería lo siguiente:

maximum_object_size 48 MB

Opciones para la caché cache_swap_low y cache_swap_high. Cada vez que se llene la caché se puede automatizar la limpieza de esta cuando llegue a cierta cantidad. cache_swap_low establece el porcentaje a partir del cual se comenzará a limpiar la caché, y cache_swap_high establece el porcentaje en la que se limpiará la caché de manera agresiva. Para una caché que se empieza a limpiar al 90% y de manera agresiva al 95%:

cache_swap_low 90
cache_swap_high 95

Con este ejemplo la caché se limpia automáticamente, y es recomendable cuando hay muchos usuarios usando el proxy.

Algoritmos de uso de caché con cache_replacement_policy. Esta opción soporta los siguientes algoritmos para la caché:

Loading...
LRU Acrónimo de Least Recently Used, y los objetos que fueron accedidos hace mucho tiempo son eliminados primero. Ésta política es la utilizada por Squid de modo predeterminado
LFUDA Acrónimo de Least Frequently Used with Dynamic Aging, en el que los objetos más solicitados permanecen en la caché sin importar su tamaño, de modo que un objeto grande que se solicite con mayor frecuencia impedirá que se pueda hacer caché de objetos pequeños que se soliciten con menor frecuencia.
GSDF Acrónimo de GreedyDual Size Frequency, el cual optimiza la eficiencia por objeto manteniendo en la caché los objetos pequeños más frecuentemente solicitados.

El algoritmo recomendado y que desempeña mejor rendimiento con alta carga de trabajo es LFUDA, la directiva a incluir en el archivo de Squid sería:

cache_replacement_policy heap LFUDA

La caché tiene una memoria para los objetos en tránsito, y esta se establece con la opción cache_mem, y estable la cantidad ideal necesaria de memoria para las siguientes situaciones:

  • Objetos en tránsito.
  • Objetos frecuentemente utilizados (hot)
  • Objetos negativamente almacenados en la caché.

Los datos de estos objetos se almacenan en objetos de 4kb y esta opción especifíca el límite máximo en tamaño de los bloques, donde los objetos en tránsito tienen mayor prioridad. Los objetos frecuentemente usados y aquellos negativamente almacenados, no tienen esta limitación.

Así que en la versión Squid 3, se establecen 256MB, que es más que de sobra para pocos usuarios, pero en redes de muchos usuarios, el rendimiento se mejora con una cantidada menor. Para un límite de 48MB la configuración es la siguiente:

cache_mem 48 MB

Cómo borrar la caché

En algunos casos puede que se nos llene la caché o necesitemos borrarla por lo tanto tendremos que seguir los siguientes pasos:

Saber donde se encuentra el directorio de la cache con el siguiente comando:

grep cache_dir /etc/squid/squid.conf

El resultado será algo así:

cache_dir ufs /var/spool/squid 100 16 256

Luego apagamos squid para borrar la caché:

sudo squid -k shutdown

Con los siguientes comandos borramos el directorio de la caché:

sudo rm -rf /var/spool/squid/*

Si hubiese más directorios de caché repetiríamos el anterior comando para cada directorio.

Al haber borrado el directorio tendríamos que volver a crearlo con permisos de acceso para squid:

mkdir /var/spool/squid
chown squid:squid /var/spool/squid

Y por último recrearíamos el directorio de la caché con el siguiente comando:

squid -zN

Con esto ya habríamos borrado la caché de squid.

Acceso por usuario y clave

Aunque permitamos el acceso por IP, en mi caso me interesa más crear un accceso por usuario y contraseña, para el proxy que voy a configurar. Vamos a usar la autorización «ncsa_auth» que permitirá a Squid leer y autentificar la información de usuario y contraseña usando un archivo de claves con formato NCSA http-style, cuando se acceda usando una atentificación básica de HTTP.

Lo primero que necesitamos es instalar la utilidad htpasswd de las herramientas de Apache. Para instalar estas herramientas escribimos el siguiente comando:

sudo apt-get install apache2-utils

El siguiente paso va ser crear el archivo donde vamos a guardar los usuarios y contraseñas y luego cambiar el propietario para que lo pueda abrir squid:

sudo touch /etc/squid/squid_passwd
sudo chown proxy /etc/squid/squid_passwd

Luego creamos el usuario y password:

sudo htpasswd -c /etc/squid/squid_passwd <strong>user1</strong>

El argumento ‘-c’ en el comando «htpasswd» forzará a usar la encriptación CRYPT para las claves. Cambia user1 por el usuario que va a tener acceso al proxy, y te saldrá la introducción de la clave:

New password:
Re-type new password:
Adding password for user user1

Podrás repetir este paso para cada vez que quieras añadir un usuario de acceso al proxy.

Por último solo nos quedará abrir el archivo de configuración de Squid y añadir las siguientes líneas:

nano /etc/squid/squid.conf

Y añade estas líneas:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid_passwd
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated

Guarda y cierra el archivo de configuración.

Si por alguna razón quieres eliminar un usuario de acceso al proxy, deberás borrar la entrada del archivo squid_passwd donde aparezca ese usuario. En el archivo cada usuario aparece en el formato `user:passwordhash`. Con el editor nano puedes borrar la línea donde se encuentre el cursor con el comando Ctrl+k.

Navegación anónima

Por defecto Squid reenvía la IP del cliente que está conectado al proxy hacia el sitio web solicitado, pero para configurar de manera anónima hay que desactivar esta función y ocultar las IP’s de los clientes para mostrar la dirección IP que tenemos configurada en el servidor de Squid.

Para enmascarar las IP de los que se conectan, lo primero es encontrar la siguiente línea en el archivo de configuración:

forwarded_for on

Y la cambias por:

forwarded_for off

Luego agregamos después las siguientes líneas al archivo de configuración de Squid:

request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
request_header_access All deny all

Una vez que has guardado el archivo de configuración, reinicia Squid y se aplicará la configuración que has guardado. Ejecuta en la consola lo siguiente para reiniciar:

sudo service squid restart

Logs de Acceso

Para finalizar puedes consultar los archivos de logs, y si te ocurre a algún error o si quieres saber qué sitios web están siendo visitados por personas que se conectan al proxy, puedes utilizar estos registros que estarán en el directorio /var/log/squid:

more /var/log/squid/access.log
more /var/log/squid/cache.log

También podrías cambiar la ubicación de tus archivos de logs, cambiando la el directorio en el archivo de configuración de Squid.

Convertir el timestamp del fichero de registro de Squid en otro formato

Una de las cosas que tiene el fichero de registro (el de logs en /var/log/squid/access.log) es que cuando realizamos una petición a una web, guarda la fecha y hora (el timestamp) en el siguiente formato: <unix timestamp>.<centésimas de segundo>.

Esto es complicado de leer, por lo que puedes cambiarle el formato del timestamp a otro que es legible con el siguiente comando:

cat access.log | perl -p -e 's/^([0-9]*)/"[".localtime($1)."]"/e'

4. Comprobar que todo funciona

Listo!!

Con esto ya tendríamos configurado nuestro proxy con Squid, solo nos faltaría configurar nuestro navegador con el usuario y la clave que hemos creado. En firefox sería en Editar -> Preferencias -> General -> Proxy de red y solo tendrías que poner la IP el puerto que has configurado en Squid. La contraseña y la clave te la pedirá al conectarte.

Si por alguna razón algo no funciona, primero tenemos que comprobar que Squid está escuchando en el puerto que hemos configurado. En la línea de comandos del servidor, para saber si escucha en el puerto 3128 escribiríamos:

sudo netstat -plunt | grep 3128
 tcp6 0 0 :::3128 :::* LISTEN 2185/squid3

También puedes hacer una prueba, haciendo una solicitud de página web al proxy para ver la respuesta que obtienes. Simplemente en la consola escribe:

curl -I IP:PUERTO
HTTP/1.1 200 OK
...
X-Cache: MISS from localhost.localdomain
X-Cache-Lookup: MISS from localhost.localdomain:3129
Via: 1.1 localhost.localdomain (squid/3.5.12)
...

Una vez que puedas acceder y todo esté correcto, podrás monitorizar el acceso que tienen tus usarios al servidor proxy. Con el siguiente comando de servidor verás el resultado:

sudo tail -f /var/log/squid/access.log
RECT/173.194.126.55 text/html
1409354804.372 1073 192.168.0.1 TCP_MISS/200 776 GET http://xml.alexa.com/data? proxyuser1 HIER_DIRECT/23.21.109.107 text/xml
1409354842.754 963 192.168.0.1 TCP_MISS/200 2285 POST http://sd.symcd.com/ proxyuser1 HIER_DIRECT/23.51.43.27 application/ocsp-response
1409354843.234 1489 192.168.0.1 TCP_MISS/200 915 POS

Ya solo te quedará visitar whatismyip y verás que estás accediendo con la IP de tu servidor linux.

VestaCP y Squid

Puede que te haya pasado como a mi, que con todo configurado no has sido capaz de hacer funcionar el Proxy.

Esto suele pasar cuando tienes un firewall en tu servidor linux y simplemente no has abierto el puerto para poder conectarte.

VestaCP configura un firewall y es necesario abrirlo para que tu proxy funcione correctamente.

Puedes ver en el artículo de configuración de vestacp, cómo abrir el puerto que has configurado en el proxy para que te funcione.

Conclusión

Con este manual tan completo vas a poder crear un proxy, y poder manejar Squid con soltura.

También con este servidor por 15$/año, tendrás un entorno de pruebas perfecto para configurar un proxy como este.

Y por si este manual te ha parecido poco, te recomiendo esta web donde explica en detalle más opciones de Squid.

Con esto ya podrás navegar con tu proxy y tendrás más posibilidades a tu alcance que con tu conexión habitual.

Loading...

Archivado en:Servicios en la nube

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Barra lateral primaria

Comentarios recientes

    Artículos recientes

    Un potente editor de texto para nuestro sistema operativo Ubuntu

    17 de diciembre de 2020 Por luidelkacha Dejar un comentario

    Footer

    Texto sobre la web

    Esto es un ejemplo de widget de texto.

    Seguiremos informando.

    Entradas recientes

    • Un potente editor de texto para nuestro sistema operativo Ubuntu
    • Instalar el universo Java en Ubuntu
    • 3 servicios de almacenamiento en la nube que uso
    • Mapas mentales en Ubuntu
    • Configurar el servidor en autologin con ssh sin usar pasword

    Buscar …

    Derechos de autor © 2021 · Magazine Pro en · WordPress · Iniciar sesión

    Utilizamos una galletitas (también llamadas cookies) para darte una navegación y brindarte la experiencia más relevante al recordar tus preferencias y quieras volver. Dándole a Aceptar, das tu consentimiento para el uso de TODAS las cookies.
    Ajustes CookieACEPTAR
    Manage consent

    Privacy Overview

    This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
    Necessary
    Siempre activado

    Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

    Non-necessary

    Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.

    GUARDAR Y ACEPTAR