En esta ocasión instalaremos squid para permitir que servidores dentro de una red interna tengan comunicación a internet. Squid permite una gran cantidad de opciones y configuraciones según las politicas y necesidad de nuestra organización. En este tutorial lo configuraremos en su modo mas sencillo
Instalar squid
Squid se encuentra disponible en la lista de paquetes de Ubuntu, por lo que se puede instalar con apt
sudo apt-get update && sudo apt-get install -y squid
Configuración básica
Una vez instalado squid editaremos su archivo de configuración para permitir que los equipos en la red interna puedan utilizarlo.
Primero crearemos una copia de seguridad de este archivo para restablecer la configuración inicial por si cometemos algún error con nuestra configuración
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
sudo chmod a-w /etc/squid/squid.conf.original
Dirección IP y puerto de proxy
Por defecto squid funciona en el puerto 3128, si deseamos utilizar un puerto diferente tenemos que buscar en el archivo de configuración la entrada http_port y modificar el valor original por el puerto deseado. En el siguiente ejemplo utilizaremos el puerto 9998
http_port 9998
Si el servidor que funcionará como proxy cuenta con diferentes direcciones IP y se desea que el proxy funcione solo en una en lugar de todas, tenemos que agregar la dirección a la configuración del puerto como se muestra de la siguiente manera donde la dirección 192.168.1.120 escuchará las peticiones de los equipos internos:
http_port IP:PUERTO
http_port 192.168.1.120:9998
Control de acceso
Por defecto squid esta configurado para que solo localhost pueda utilizar el proxy, por lo que tenemos que indicarle el rango de direcciones IP que tienen autorización para utilizar este servicio
En el archivo de configuración agregaremos este rango al final de la configuración inicial.
El archivo luce similar a como se muestra a continuación:
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
Al final de estos valores debemos indicar las direcciones de los equipos que utilizaran squid, a continuación se muestra como agregar a los equipos en el segmento 192.168.1.0/24 los cuales agruparemos con el nombre de red_interna
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl red_interna src 192.168.1.0/24
Ahora configuraremos que los equipos definidos en red_interna puedan utilizar el proxy agregando en la parte superior del control de acceso lo siguiente:
http_access allow red_interna
Después de esto el archivo de configuración debe lucir de la siguiente manera:
http_access allow red_interna
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
Con esto procederemos a guardar los cambios en el archivo de configuración y a reiniciar el servicio squid para ver los cambios reflejados
sudo systemctl restart squid.service
Validación
Para validar que squid esta funcionando de forma correcto podemos utilizar curl para lanzar una petición consumiendo un servicio externo de la siguiente forma
curl -v -x http://IP_PROXY:PUERTO_PROXY URL_A_CONSUMIR
En el siguiente ejemplo consultaremos la pagina principal del blog (https://nestortechtips.com) utilizando el proxy recién configurado
curl -v -x http://192.168.1.120:9998 https://nestortechtips.com
* Trying 192.168.1.120:9998...
* TCP_NODELAY set
* Connected to 192.168.1.120 (192.168.1.120) port 9998 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to nestortechtips.com:443
> CONNECT nestortechtips.online:443 HTTP/1.1
> Host: nestortechtips.online:443
> User-Agent: curl/7.68.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established