Configuración básica de Squid en openSUSE Linux

Hace tiempo que tengo guardado los pasos para configurar un servidor de proxy Squid, de forma básica, muy básica y poco segura pero que cumple con su función, y que estos días decidí probarlo nuevamente en un equipo con openSUSE 13.2 para ver si sigue funcionando en las nuevas versiones de Squid.

Configurar correctamente un servidor proxy lleva tiempo y dedicación, por mi parte no recomiendo esta configuración para un entorno de producción, pero si alguien está interesado en probar o experimentar con dicho servicio pueden seguir leyendo este artículo que lo terminé de escribír para evitar la pérdida del poco know how que tengo acerca del tema.

Pasos de instalación y configuración

  1. Primero comenzamos por instalar el paquete squid, eso lo hacemos ejecutando el siguiente comando con el usuario root:
    testsrv:~ # zypper in squid
  2. Luego editamos el archivo de configuración con nuestro editor favorito, en mi caso el Vim como siempre..
    testsrv:~ # vi /etc/squid/squid.conf
  3. En mi caso se configuraron en el archivo las siguientes directivas:
    ###
    ### -->Configuracion de Importancia

    auth_param basic children 5
    auth_param basic realm Squid proxy-caching web server
    auth_param basic credentialsttl 2 hours

    ### -->Configuracion de Importancia
    acl to_localhost dst 127.0.0.0/8
    acl words url_regex "/etc/squid/palabras_denegadas"
    acl hosts src "/etc/squid/hosts_habilitados"

    ###acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
    ###acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
    ###acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
    ###acl localnet src fc00::/7 # RFC 4193 local private network range
    ###acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
    ###acl networks src 192.168.10.0/24 192.168.100.0/24


    acl SSL_ports port 443
    acl Safe_ports port 80 # http
    acl Safe_ports port 21 # ftp
    acl Safe_ports port 443 # https
    acl Safe_ports port 70 # gopher
    acl Safe_ports port 210 # wais
    acl Safe_ports port 1025-65535 # unregistered ports
    acl Safe_ports port 280 # http-mgmt
    acl Safe_ports port 488 # gss-http
    acl Safe_ports port 591 # filemaker
    acl Safe_ports port 777 # multiling http
    acl CONNECT method CONNECT

    #
    # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
    #

    ### -->Configuracion de Importancia

    http_access deny words
    http_access allow hosts
    ###http_access allow networks

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

    # TAG: http_reply_access
    # Allow replies to client requests. This is complementary to http_access.
    #
    # http_reply_access allow|deny [!] aclname ...
    #
    # NOTE: if there are no access lines present, the default is to allow
    # all replies
    #
    # If none of the access lines cause a match the opposite of the
    # last line will apply. Thus it is good practice to end the rules
    # with an "allow all" or "deny all" entry.
    #
    #Default:
    # none

    ###
    ### -->Directorio de Cache

    cache_dir ufs /var/cache/squid 2048 16 256

    ###
    ### -->Configuracion de Importancia

    http_reply_access allow all

    ###
    ### -->Configuracion de Importancia

    icp_access allow all

    ###
    ### -->Configuracion de Importancia

    cache_mem 2048 MB

    ###
    ### -->Tamanio maximo de objetos

    maximum_object_size 25600 KB

    ###
    ### --> Configuracion adicional

    emulate_httpd_log off
    Si bien podemos definir de forma explícita en el archivo de configuración squid.conf los equipos y las redes autorizadas a utilizar el servicio, en este caso se opta por registrarlos en un archivo externo así como también las palabras excluidas con las directivas acl hosts src y acl words url_regex respectivamente.

  4. Ahora pasamos a crear el archivo en el cual especificaremos las direcciones IP de los equipos o de las redes autorizadas a utilizar el proxy. Creamos el archivo en el directorio correspondiente y lo editamos:
    testsrv:~ # touch /etc/squid/hosts_habilitados
    testsrv:~ # vi /etc/squid/hosts_habilitados

    Y le agregamos contenido similar al que sigue para otorgar las autorizaciones:
    #!/bin/bash
    # Terminales y redes habilitadas para la navegacion en el sistema
    # ===============================================================

    192.168.1.10/255.255.255.255
    192.168.2.0/255.255.255.0
  5. Para facilitar la tarea de mantenimiento de los equipos y las redes autorizadas se crea a continuación un script bash que edita el archivo y posteriormente reinicia el servicio para que tome en cuenta las nuevas configuraciones:
    testsrv:~ # touch /bin/squidhosts
    testsrv:~ # chmod 755 /bin/squidhosts
    testsrv:~ # vi /bin/squidhosts

    El archivo debe contener el siguiente código:
    #!/bin/bash
    vim /etc/squid/hosts_habilitados
    clear
    /usr/bin/systemctl restart squid.service
    echo
    echo Configuracion aplicada y servicio reiniciado exitosamente!
    echo
  6. Pasamos a crear el archivo en el cual vamos a especificar las palabras que queremos denegar a partir de las url's a las que tratan de acceder los usuarios. Como siempre editamos el archivo y luego lo editamos:
    testsrv:~ # touch /etc/squid/palabras_denegadas
    testsrv:~ # vi /etc/squid/palabras_denegadas

    Y le especificamos nuestra lista de palabras denegadas.
    #!/bin/bash
    xxx
    blabla
    bleble
  7. Al igual como hicimos para modificar los equipos y las redes autorizadas, también creamos un script para facilitar la edición de la lista de palabras denegadas..
    testsrv:~ # touch /bin/squidwords
    testsrv:~ # chmod 755 /bin/squidwords
    testsrv:~ # vi /bin/squidwords

    Al archivo squidwords le agregamos el siguiente código:
    #!/bin/bash
    vim /etc/squid/palabras_denegadas
    clear
    /usr/bin/systemctl restart squid.service

    echo
    echo Configuracion aplicada y servicio reiniciado exitosamente!
    echo
  8. Nos falta habilitar el servicio en el firewall de openSUSE. Para ello editamos el archivo SuSEfirewall2 ubicado en el directorio /etc/sysconfig con el usuario root:
    testsrv:~ # vi /etc/sysconfig/SuSEfirewall2
    Buscamos la directiva FW_SERVICES_EXT_TCP que es normalmente la zona de firewall a la cual se encuentra asociada por defecto la interfaz de red y le agregamos el puerto 3128 correspondiente al servicio squid:
    FW_SERVICES_EXT_TCP="3128"
    Guardamos los cambios del archivo y reiniciamos el firewall:
    testsrv:~ # rcSuSEfirewall2 restart
  9. Por último habilitamos el servicio squid y lo arrancamos por primera vez de la siguiente manera:
    testsrv:~ # systemctl enable squid.service
    testsrv:~ # systemctl start squid.service

    Por supuesto, podemos verificar que el servicio esté corriendo correctamente
    testsrv:~ # systemctl status squid.service
  10. Para acceder al servicio desde otro equipo dentro de nuestra red tenemos que configurar el apartado Proxy del navegador especificando la dirección IP de nuestro servidor Proxy y el puerto del servicio 3128.

    Si necesitamos autorizar a un nuevo equipo o red para que puedan utilizar el proxy podemos ejecutar el script squidhosts:
    testsrv:~ # squidhosts
    O el script squidwords para agregar nuevas palabras a la lista de palabras denegadas de squid:
    testsrv:~ # squidwords
    Tampoco tenemos que olvidar de revisar uno de los archivos logs más importantes de squid: access.log.
    testsrv:~ # tail -f /var/log/squid/access.log

Fuentes:

  1. http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid
  2. http://www.squid-cache.org/

Comentarios