Tutorial: Crea tu propio servidor proxy con Squid

  • Autor Autor moiseseccam
  • Fecha de inicio Fecha de inicio
moiseseccam

moiseseccam

Pi
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Un servidor proxy es un servidor que hace de intermediario en las peticiones de recursos que realiza un cliente a otro servidor.
1643927693908.webp


En esta oportunidad voy a enseñarles a crear un proxy en su propio servidor, ya sea porque te gusta tener el control sobre los datos que envías a través de él o no confías en la protección de datos de los proveedores.

Para empezar, usaré un VPS en Estados Unidos con Ubuntu Server 20.04 de Hetzner
1643927708796.webp


1. Primero nos conectamos mediante SSH al VPS y procedemos con la instalación de Squid, para ello digitamos
sudo apt-get update && sudo apt-get install squid y le damos Y para confirmar la instalación
1643928078866.webp


2. Si usas Amazon o algún otro servicio que tenga Firewall externo, no olvides abrir el puerto correspondiente añadiendo una regla que lo permita.
1643928101908.webp


La imagen es un ejemplo de Amazon Lightsail

3. Una vez que esté instalado todo, tendremos que ir al archivo de configuración, para ello vamos a la ruta /etc/squid/squid.conf para poder editar el archivo squid.conf
1643928135838.webp


Yo estoy usando MobaXterm para navegar mediante SFTP pero si quieres editar desde consola puedes usar nano digitando sudo nano /etc/squid/squid.conf
De igual manera puedes usar tu gestor de SFTP favorito para editar/subir el archivo de configuración.

4. Abrimos el archivo squid.conf y copiamos la siguiente configuración. Recuerda configurar el puerto en el que estará abierto para que te conectes con el proxy

YAML:
# Configuraciones Sencillas

tcp_outgoing_address 0.0.0.0 all
dns_nameservers 8.8.8.8 8.8.4.4
#Puerto por el cual  te conectaras al proxy
http_port 8080

# Configuraciones Avanzadas

acl to_localhost dst all
acl localhost src all
http_access allow all
acl localnet src all
acl lan src all

# Configuraciones Seguridad

acl manager proto cache_object
acl Safe_ports port 0-65535
acl CONNECT method CONNECT
acl SSL_ports port 443

# Otras Configuraciones

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

# Proteger la Identidad

via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access Via deny all
request_header_access From deny all
request_header_access Link deny all
request_header_access Server deny all
request_header_access Pragma deny all
request_header_access X-Cache deny all
request_header_access Referer deny all
#request_header_access User-Agent deny all
request_header_access Keep-Alive deny all
request_header_access Cache-Control deny all
request_header_access X-Cache-Lookup deny all
request_header_access X-Forwarded-For deny all
request_header_access Proxy-Connection deny all
request_header_access WWW-Authenticate deny all

5. Guardamos la configuración y reiniciamos el servicio squid
sudo service squid restart

Para probarlo, voy a usar Firefox para conectarme mediante el proxy
1643928184402.webp


Y ahora si entramos a páginas para ver la ip, veremos que estamos conectados mediante el servidor.
1643928198294.webp


Hasta allí sabremos que el proxy funciona correctamente. En el archivo de configuración podremos limitar a las ip que pueden conectarse al servidor. Pero si queremos ponerle una contraseña, tendremos que añadir una cuantas líneas al archivo squid.conf y crear un archivo de contraseña.

6. Para poder ponerle contraseña, se necesita apache-utils, así que lo instalamos.
sudo apt-get install apache2-utils
1643928215843.webp


7. Una vez instalado, configuraremos el usuario y contraseña, para ello digitamos en lo siguiente. En vez de davidmorales pongan el usuario que quieran (letra minúscula)
sudo touch /etc/squid/squid_passwd
sudo chown proxy /etc/squid/squid_passwd
sudo htpasswd -c /etc/squid/squid_passwd davidmorales

Les pedirá una contraseña para su usuario, así que digitan 2 veces el password.
1643928254703.webp


8. Ahora añadimos las siguientes lineas debajo de la linea Configuraciones avanzadas
YAML:
# Configuraciones Avanzadas

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

El archivo squid.conf en su totalidad quedaría así

YAML:
# Configuraciones Sencillas

tcp_outgoing_address 0.0.0.0 all
dns_nameservers 8.8.8.8 8.8.4.4
http_port 8080

# Configuraciones Avanzadas

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

acl to_localhost dst all
acl localhost src all
http_access allow all
acl localnet src all
acl lan src all

# Configuraciones Seguridad

acl manager proto cache_object
acl Safe_ports port 0-65535
acl CONNECT method CONNECT
acl SSL_ports port 443

# Otras Configuraciones

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

# Proteger la Identidad

via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access Via deny all
request_header_access From deny all
request_header_access Link deny all
request_header_access Server deny all
request_header_access Pragma deny all
request_header_access X-Cache deny all
request_header_access Referer deny all
#request_header_access User-Agent deny all
request_header_access Keep-Alive deny all
request_header_access Cache-Control deny all
request_header_access X-Cache-Lookup deny all
request_header_access X-Forwarded-For deny all
request_header_access Proxy-Connection deny all
request_header_access WWW-Authenticate deny all

9. Guardamos el archivo y reiniciamos el servicio Squid
sudo service squid restart

Ahora cada vez que intentes ingresar mediante el proxy, te pedirá una contraseña para poder conectarte.
1643928338168.webp


Eso sería prácticamente todo.
Hasta la próxima!
 
Gracias por ese aporte.
 
Muchas gracias. Ya solo me falta el VPS😅
 
Ahora toca enseñar como crear un proxy reverso o un balanceador de carga, eso si que seria super interesante.
@Carlos Frias ya lo hizo
 
Excelente aporte 👌
 
Gracias, no se nada de programación pero intentaré configurarlo
 
Guardado. Lo probaré!
 
Un servidor proxy es un servidor que hace de intermediario en las peticiones de recursos que realiza un cliente a otro servidor.
Ver el archivo adjunto 686345

En esta oportunidad voy a enseñarles a crear un proxy en su propio servidor, ya sea porque te gusta tener el control sobre los datos que envías a través de él o no confías en la protección de datos de los proveedores.

Para empezar, usaré un VPS en Estados Unidos con Ubuntu Server 20.04 de Hetzner
Ver el archivo adjunto 686347

1. Primero nos conectamos mediante SSH al VPS y procedemos con la instalación de Squid, para ello digitamos
sudo apt-get update && sudo apt-get install squid y le damos Y para confirmar la instalación
Ver el archivo adjunto 686351

2. Si usas Amazon o algún otro servicio que tenga Firewall externo, no olvides abrir el puerto correspondiente añadiendo una regla que lo permita.
Ver el archivo adjunto 686352

La imagen es un ejemplo de Amazon Lightsail

3. Una vez que esté instalado todo, tendremos que ir al archivo de configuración, para ello vamos a la ruta /etc/squid/squid.conf para poder editar el archivo squid.conf
Ver el archivo adjunto 686353

Yo estoy usando MobaXterm para navegar mediante SFTP pero si quieres editar desde consola puedes usar nano digitando sudo nano /etc/squid/squid.conf
De igual manera puedes usar tu gestor de SFTP favorito para editar/subir el archivo de configuración.

4. Abrimos el archivo squid.conf y copiamos la siguiente configuración. Recuerda configurar el puerto en el que estará abierto para que te conectes con el proxy

YAML:
# Configuraciones Sencillas

tcp_outgoing_address 0.0.0.0 all
dns_nameservers 8.8.8.8 8.8.4.4
#Puerto por el cual  te conectaras al proxy
http_port 8080

# Configuraciones Avanzadas

acl to_localhost dst all
acl localhost src all
http_access allow all
acl localnet src all
acl lan src all

# Configuraciones Seguridad

acl manager proto cache_object
acl Safe_ports port 0-65535
acl CONNECT method CONNECT
acl SSL_ports port 443

# Otras Configuraciones

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

# Proteger la Identidad

via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access Via deny all
request_header_access From deny all
request_header_access Link deny all
request_header_access Server deny all
request_header_access Pragma deny all
request_header_access X-Cache deny all
request_header_access Referer deny all
#request_header_access User-Agent deny all
request_header_access Keep-Alive deny all
request_header_access Cache-Control deny all
request_header_access X-Cache-Lookup deny all
request_header_access X-Forwarded-For deny all
request_header_access Proxy-Connection deny all
request_header_access WWW-Authenticate deny all

5. Guardamos la configuración y reiniciamos el servicio squid
sudo service squid restart

Para probarlo, voy a usar Firefox para conectarme mediante el proxy
Ver el archivo adjunto 686354

Y ahora si entramos a páginas para ver la ip, veremos que estamos conectados mediante el servidor.
Ver el archivo adjunto 686356

Hasta allí sabremos que el proxy funciona correctamente. En el archivo de configuración podremos limitar a las ip que pueden conectarse al servidor. Pero si queremos ponerle una contraseña, tendremos que añadir una cuantas líneas al archivo squid.conf y crear un archivo de contraseña.

6. Para poder ponerle contraseña, se necesita apache-utils, así que lo instalamos.
sudo apt-get install apache2-utils
Ver el archivo adjunto 686357

7. Una vez instalado, configuraremos el usuario y contraseña, para ello digitamos en lo siguiente. En vez de davidmorales pongan el usuario que quieran (letra minúscula)
sudo touch /etc/squid/squid_passwd
sudo chown proxy /etc/squid/squid_passwd
sudo htpasswd -c /etc/squid/squid_passwd davidmorales

Les pedirá una contraseña para su usuario, así que digitan 2 veces el password.
Ver el archivo adjunto 686359

8. Ahora añadimos las siguientes lineas debajo de la linea Configuraciones avanzadas
YAML:
# Configuraciones Avanzadas

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

El archivo squid.conf en su totalidad quedaría así

YAML:
# Configuraciones Sencillas

tcp_outgoing_address 0.0.0.0 all
dns_nameservers 8.8.8.8 8.8.4.4
http_port 8080

# Configuraciones Avanzadas

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

acl to_localhost dst all
acl localhost src all
http_access allow all
acl localnet src all
acl lan src all

# Configuraciones Seguridad

acl manager proto cache_object
acl Safe_ports port 0-65535
acl CONNECT method CONNECT
acl SSL_ports port 443

# Otras Configuraciones

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

# Proteger la Identidad

via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access Via deny all
request_header_access From deny all
request_header_access Link deny all
request_header_access Server deny all
request_header_access Pragma deny all
request_header_access X-Cache deny all
request_header_access Referer deny all
#request_header_access User-Agent deny all
request_header_access Keep-Alive deny all
request_header_access Cache-Control deny all
request_header_access X-Cache-Lookup deny all
request_header_access X-Forwarded-For deny all
request_header_access Proxy-Connection deny all
request_header_access WWW-Authenticate deny all

9. Guardamos el archivo y reiniciamos el servicio Squid
sudo service squid restart

Ahora cada vez que intentes ingresar mediante el proxy, te pedirá una contraseña para poder conectarte.
Ver el archivo adjunto 686360

Eso sería prácticamente todo.
Hasta la próxima!
Amigo está brutal el manual. Te hago una pregunta sabrás si es posible agregarle un pool de IPs públicas? Para que funcione como un proxy rotativo bien sea porque se configure para rotar o cambiar la ip cada cierto tiempo o manual. Sabrás si esto es posible?
 
Atrás
Arriba