¡Bienvenido!

Al registrarte con nosotros, podrás discutir, compartir y enviar mensajes privados con otros miembros de nuestra comunidad.

¡Regístrate ahora!

Articulo Ahorrar Datos Móviles en Cuba | Configurar Squid Proxy

AkaMe's iconAkaMe

blah, blah, blah... shut up
Moderador
Nivel 6
Mensajes
1,164
Puntos de reacción
4,543
Luego de las recientes (y no tan agradables) medidas de ETECSA, volver a ahorrar datos como cuando 1 GB costaba 10 CUC es casi una prioridad.

En dispositivos móviles, muchos lo que hacen es instalar un cortafuegos para evitar que ciertas aplicaciones consuman en segundo plano (irónicamente, por datos móviles las aplicaciones no suelen consumir en segundo plano a menos que lo permitas explícitamente). Por otro lado, los compañeros de Windows usan, en su mayoría, SimpleWall; cosa que no está mal, porque Bill Gates en realidad no usa datos móviles y no le importa que te los consuma.

El problema es que este tipo de aplicaciones lo único que hacen es evitar que otras aplicaciones consuman; es decir, que si accedes a cierto recurso permitido por el cortafuegos, este te va a consumir una y otra vez mientras sigas accediendo a él. ¿Por qué? Porque no controlan el contenido al que accedes ni cómo lo haces. Si abres el navegador y te metes en una web que no está bien cacheada o que siempre pide los datos frescos del servidor, da igual que hayas abierto la misma página hace 5 segundos: te vuelve a chupar datos como si fuera la primera vez. Y si es cierto que a veces no consume porque está en caché, pero depende de cómo esa web esté configurada. Y spoiler: la mayoría no piensa en tu paquetico de 500 MB. Entonces sí, puedes tener SimpleWall, NetGuard o el cortafuegos que quieras, pero te vas a quedar igual: sin datos y echándole la culpa al pobre Facebook Lite.

Pero bueno, vengo yo a salvarles el día con un dato que realmente no es necesario, pero me gusta pasar trabajo. Ahí es donde les muestro como configurar Squid Proxy; tanto como para ahorrarte los megas, como para ahorrar ancho de banda de tu contrato de 2 mbps de nauta hogar.

Es un proxy caché que se pone en el medio entre tú e Internet, como el primo metiche que escucha todo lo que pides y, si ya lo tiene guardado, te lo da sin volver a pedirlo. O sea, si abres el mismo sitio diez veces y no ha cambiado, Squid lo guarda la primera vez y luego te lo sirve desde su disco, ahorrándote datos y tiempo. Ideal si estás raspando megas o si tienes una red compartida y no quieres que todo el mundo esté bajando lo mismo mil veces.

Y si, aunque es un subforo de GNU/Linux, también está para Windows; pero como lo de ustedes es tan simple como descargarlo e instalarlo, ahí van.

Por otro lado, para mis amiguitos de Linux (puedes dejar de leer si no lo usas(? ):

(Y sí, si llegaste hasta aquí y te pareció mucho texto, tranquilo, en el fondo ya todo está resumido más abajo. Esto era por si querías entender qué demonios estás copiando y pegando, pero si lo tuyo es apretar enter sin leer, también se respeta.)

Todo empieza por el inicio, instalando squid. Porque sí, aunque parezca obvio, sin instalarlo no hace mucho (excepto ocupar espacio en tu mente).

En los que sudo apt todo (Debian/Ubuntu y derivados):
Bash:
sudo apt update && sudo apt install squid

Arch, Manjaro y derivados:
Bash:
sudo pacman -Sy squid

Fedora, RHEL, CentOS (no uses CentOS porfa):
Bash:
sudo dnf update && sudo dnf install squid

OpenSUSE (sí, aún existe):
Bash:
sudo zypper refresh && sudo zypper install squid

Después de eso, ya puedes encontrar el archivo de configuración en /etc/squid/squid.conf, que es donde realmente empieza la diversión (o el caos, dependiendo de cuántas ganas tengas de leer comentarios en inglés).

Bueno, definitivamente si eres de Windows, ya si puedes dejar de leer. Ahora sí viene lo chido: configurarlo para que no parezca un proxy corporativo del 2003.

En primer lugar hay que crear la carpeta donde vivirá el certificado, ese que va a firmar todo como si fuera el FBI con tiempo libre. Puedes ponerle el nombre que quieras, pero por sanidad mental, algo como ssl_cert está bien. Porque sí, sin certificados no hay HTTPS interceptado, y sin HTTPS interceptado... pues eres solo un espectador más. Hazle su carpetica con cariño, porque la vas a ver bastante:

Bash:
sudo mkdir -p /etc/squid/ssl_cert
sudo chown proxy:proxy /etc/squid/ssl_cert
sudo chmod 700 /etc/squid/ssl_cert

Y luego, a crear esos certificados que le dan poderes a Squid para mirar dentro de las conexiones seguras (sin que te des cuenta, como el gobierno):
Bash:
sudo openssl genrsa -out squid-ca.key 4096
sudo openssl req -new -x509 -days 3650 -key squid-ca.key -out squid-ca.crt -subj "/O=Fuck ETECSA/OU=Los Chapuseros/CN=Squid Proxy CA"
sudo openssl x509 -in squid-ca.crt -outform DER -out squid-ca.der

Vale, ahora vengo como el Profe Alex (el de mates de yt... No lo conoces? wtf?). Bueno, en la primera linea estas creando la clave privada; en la segunda firmas el certificado de tu organizacion por 3650 dias (si, 10 años, para que no tengas que preocuparte por nada) con esa clave privada (lo que esta después del -subj... da igual con que lo llenes); y el ultimo no me acuerdo pero no es un malware. Básicamente, estás creando una CA raíz autofirmada para Squid Proxy para poder interceptar las conexiones SSL y que no pasen como TCP_TUNNEL (por toda la casa hasta el patio como si nada).

Con esto ya tienes la base para hacer que Squid se meta en HTTPS y empiece a cachar lo que antes era magia negra. (No, Usuario Desconocido, no puedes hackear Facebook con esto)

Ahora podemos saltar a la siguiente parte, esclavizar al ne... perdon, seguimos con el ejemplo del FBI que va a firmar los certificados por cada dominio.

Esto es lo que le dice a Squid: “ok, ya tienes tu certificado raíz... ahora ponte a firmar como loco, uno por cada dominio que la gente abra”. Iniciamos su base de datos:
Bash:
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
El 4MB es el espacio de la BD (son unos 1000 certificados activos en memoria), pero no vas a esclavizar tanto al ... del FBI, asi que no te hace falta mas para un par de usuarios

Luego, como todo lo de Squid corre bajo el usuario proxy, le damos permiso:
Bash:
sudo chown -R proxy:proxy /var/lib/ssl_db

Y listo, ya tiene su pequeño laboratorio de certificados. Sin esto, HTTPS Bump no funciona, y lo único que vas a ver es un montón de errores raros que no te van a decir mucho.

Ahora viene la parte más sabrosa. Acá es donde todo cobra vida, o se rompe y no sabes por qué... pero vamos paso a paso, que es puro copy-paste con sentido común.

Abre el archivo de configuración con vim /etc/squid/squid.conf.
(Sí, puedes usar el editor que te dé la gana, pero como esto es Linux y queremos aparentar que sabemos lo que hacemos, vamos a usar vim. [si no sabes salir, solo toca ESC un par de veces y luego escribe :q! o :wq si quieres guardar los cambios o reinicia el pc]

Agrega:
Código:
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/squid-ca.crt key=/etc/squid/ssl_cert/squid-ca.key

Esto permite que Squid intercepte conexiones HTTPS y pueda mirar dentro sin que el navegador se queje (bueno, a veces se queja igual, pero se le pasa si le instalas el certificado).

IMPORTANTE: Si te crees cool y quieres cambiar el puerto, debes alternarlo con 3128 y tenerlo en cuenta. Las rutas de cert= y key= deben coincidir con la ruta donde tienes el certificado y la llave.

Squid necesita saber cuándo y cómo interceptar el tráfico.

Agrega estas líneas para que pueda chismear:
Código:
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

Ya preparamos antes la base con /var/lib/ssl_db, ahora hay que decirle a Squid que use eso:
Código:
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5

Aquí viene lo que permite o bloquea conexiones:
  • Se definen puertos seguros
  • Se permite CONNECT solo hacia puertos SSL 'conocidos'
  • Y se asegura que solo localhost tenga acceso porque no queremos que todo el barrio tenga acceso
El resto lo denegamos amablemente.

Agrega:
Código:
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 22
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all

IMPORTANTE: Estas son mis políticas ACL, cámbialas a tu gusto; si quieres darle acceso a red local, agrega acl localnet src <tu red> y http_access allow localnet (lo que pongas debajo del deny all no va a funcionar... se lee de arriba hacia abajo, línea por línea)

Ahora si, el cache. Es básicamente la memoria de Squid. Cada vez que alguien pide una página, una imagen, un video o lo que sea, Squid guarda una copia (si puede). Entonces, la próxima vez que alguien pida lo mismo, en vez de volver a bajarlo de Internet, se lo da desde su copia local, mucho más rápido y sin gastar datos.

En el squid.conf le decimos a Squid cuánto espacio puede usar para guardar, qué cosas vale la pena guardar, y por cuánto tiempo. Por ejemplo: Imágenes, videos y archivos estáticos se pueden guardar por días; páginas HTML se guardan por menos tiempo porque cambian más seguido. Y si algo es muy grande, tal vez ni se guarda (porque ocupa mucho y no vale la pena).

Agrega:
Código:
cache_dir ufs /var/cache/squid 5120 16 256
maximum_object_size 128 MB
cache_mem 512 MB
maximum_object_size_in_memory 16 MB

La primera línea define la ruta donde se va a guardar el caché, el espacio, la cantidad de carpetas del primer nivel de directorios y el segundo (para un SSD usa 64 en vez de 256); la segunda, el tamaño máximo del archivo a cachear; la tercera el espacio de RAM destinado a almacenar cache y la cuarta lo mismo que la segunda, pero en RAM.

Cada tipo de archivo tiene su propio “tiempo de vida” en el caché, según qué tan seguido suelen cambiar. Ese es el trabajo de estas lineas:
Código:
refresh_pattern -i \.(jpg|png|gif|jpeg|css|js|mp4|avi|mkv)$ 1440 50% 10080 ignore-reload
refresh_pattern -i \.(html|htm)$ 60 20% 480
refresh_pattern . 0 20% 4320


Ahora deberias poder hacerlo funcionar.
Corre:
Código:
sudo squid -k parse #para verificar errores
sudo squid -z #basicamente para crear los directorios de cache de antes (debes correrlo cada vez que hagas cambios en esas opciones)
sudo systemctl enable --now squid #para iniciar Squid Proxy cada vez que enciendas el pc (--now para iniciarlo ahora)



Debian, Ubuntu y derivados:
Bash:
sudo apt update && sudo apt install squid

Arch, Manjaro y derivados:
Bash:
sudo pacman -Sy squid

Fedora, RHEL, CentOS y derivados:
Bash:
sudo dnf update && sudo dnf install squid

OpenSUSE:
Bash:
sudo zypper refresh && sudo zypper install squid

Bash:
sudo mkdir -p /etc/squid/ssl_cert
sudo chown proxy:proxy /etc/squid/ssl_cert
sudo chmod 700 /etc/squid/ssl_cert

Código:
sudo openssl genrsa -out squid-ca.key 4096
sudo openssl req -new -x509 -days 3650 -key squid-ca.key -out squid-ca.crt -subj "/O=Fuck ETECSA/OU=Los Chapisteros/CN=Squid Proxy CA"
sudo openssl x509 -in squid-ca.crt -outform DER -out squid-ca.der

Bash:
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
sudo chown -R proxy:proxy /var/lib/ssl_db

# === Puerto / SSL Bump ===
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/squid-ca.crt key=/etc/squid/ssl_cert/squid-ca.key

# === Leer HTTPS ===
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

# === Certificados ===
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5

# === ACL ===
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 22
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all

# === Cache ===
cache_dir ufs /var/cache/squid 5120 16 256
maximum_object_size 128 MB
cache_mem 512 MB
maximum_object_size_in_memory 16 MB

refresh_pattern -i \.(jpg|png|gif|jpeg|css|js|mp4|avi|mkv)$ 1440 50% 10080 ignore-reload
refresh_pattern -i \.(html|htm)$ 60 20% 480
refresh_pattern . 0 20% 4320
 
Por último, que lo olvide: Como usarlo

Squid puede estar interceptando, firmando y cacheando como todo un pro, pero si no importas el certificado raíz en el navegador, lo único que vas a ver son advertencias rojas, sitios bloqueados y caras largas.

Tienes que importar el archivo squid-ca.der como una autoridad certificadora en el navegador para que confíe en los certificados falsos (pero bien intencionados) que genera Squid.


Cómo se hace depende del navegador, pero la idea es:
  • Ir a configuración > seguridad o certificados.
  • Importar el .der
  • Y marcar que confías en él para identificar sitios web.

Y ya que estamos, mira los logs para ver si está funcionando 🕵️

Bash:
sudo tail -f /var/log/squid/access.log

Puedes ver en tiempo real qué se está accediendo, si se cachea, si se intercepta o si Squid está de adorno.
 
Atrás