martes, 18 de octubre de 2016

Squid: Revisa tus ACL del tipo port


Periódicamente suelo ingresar a los servidores para monitorear la actividad de navegación de los usuarios, debido a que hay algunos de ellos que por disposición de la dirección tienen acceso total al Internet pero abusan de este recurso. Cabe anotar que hay ciertos dominios que se encuentran expresamente bloqueados para todos.

Para realizar la tarea de monitoreo me apoyo principalmente de sarg, netstat y jnettop. Aunque de pronto es obvio, igual cabe anotar que uso Squid como proxy caché ;).

La semana pasada estaba en esta tarea de monitoreo (o caza de infractores jejeje) cuando observé con el jnettop que estaban accediendo hacia un servidor externo al puerto 4800. Con netstat comprobé dicho acceso. Por un momento pensé que se trataba de un FORWARD, así que fui a revisar las reglas de iptables y aparentemente todo estaba en orden.

Intrigado, revisé nuevamente la salida del jnettop y me dí cuenta que el equipo que accedía al exterior hacia ese puerto inusual era el mismo servidor proxy.

Abrí el squid.conf y es allí donde realmente estaba el problema:
acl SSL_ports port 443               # https
# acl SSL_ports port 563             # snews
# acl SSL_ports port 873             # rsync

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 Safe_ports port 631            # cups
# acl Safe_ports port 873            # rsync
# acl Safe_ports port 901            # SWAT
Para ser específicos en la siguiente línea:
acl Safe_ports port 1025-65535  # unregistered ports
Esto junto con la regla:
http_access deny !Safe_ports
Hacían que los usuarios con acceso total puedan acceder a direcciones del tipo:
http://miradioonline.com:4800/
Así que me dije, como diablos he estado tanto tiempo con este servidor así y porque carajo no he configurado bien mis reglas OUTPUT en el firewall.

Lo primero que hice fue dejar únicamente habilitadas las siguientes acl's de tipo port:
acl SSL_ports port 443                  # https

acl Safe_ports port 80                  # http
acl Safe_ports port 21                  # ftp
acl Safe_ports port 443                 # https
Y solucioné ese molestoso puerto destino 4800 en la salida de mi jnettop. Luego revisaré esas reglas OUTPUT del FW.

Lo más probable es que luego se presente la necesidad de dar acceso a algún puerto específico, pero para ello básicamente bastaría con un:
acl mi_puerto port 8400
http_access allow mi_puerto
La ventaja es que de los problemas siempre se aprende algo ;)

"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio