Esencialmente lo que haremos es poner a Squid transparente (para no configurar los navegadores en los clientes) y agregar algunas reglas sencillas para bloquear todo el acceso a Internet con excepción de algunos sitios necesarios y durante un horario determinado y de lunes a viernes, etc. Lo del horario es para ser flexibles en ciertas horas y que los usuarios puedan
Algo adicional que quería hacer es configurarlo para que el acceso a Squid sea autenticado contra el Directorio Activo del Dominio usando cualquiera de los métodos de autenticación que soporta (SMB, NTLM, Kerberos, etc.), pero lamentablemente no será posible debido a un inconveniente con el Protocolo TCP/IP, los navegadores y el modo Transparente, que impide la correcta negociación al cliente creer que está hablando a un origen (puerto 80) y no a un intermediario.
Más adelante, en otra entrada, veremos cómo hacerlo con autenticación de usuarios del Dominio sacificando la Transaprencia y configurando cada cliente para que vea el proxy.
Pero manos a la obra...
Lo primero es instalar Squid
[root@sambapdc01 ~] # yum install -y squid
Ahora crearemos los siguientes archivos (sitiospermitidos y extenegadas) en los cuales tendremos las URL's permitidas y algunas extensiones de archivos que no queremos que descarguen los usuarios.
[root@sambapdc01 ~]# nano /etc/squid/sitiospermitidos dgii.gov.do tss.gov.do jce.gov.do jce.gob.do jce.do datacredito.com.do dida.gov.do dida.gob.do popularenlinea.com bpd.com.do ocsp.verisign.com seal.verisgn.com
[root@sambapdc01 ~]# nano /etc/squid/extdenegadas \.avi$ \.mp4$ \.mp3$ \.mpg$ \.mpeg$ \.mov$ \.ra$ \.ram$ \.rm$ \.rpm$ \.deb$ \.vob$ \.wma$ \.wmv$ \.wav$ \.mbd$ \.ppt$ \.pps$ \.ace$ \.bat$ \.exe$ \.lnk$ \.pif$ \.scr$ \.sys$ \.zip$ \.rar$ \.iso$ \.msi$
Luego editamos el fichero de configuración ubicado en /etc/, quedando de la manera siguiente.
[root@sambapdc01 ~]# nano /etc/squid/squid.conf # # Recommended minimum configuration: # acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 ############################################################################# acl sitiospermitidos url_regex "/etc/squid/sitiospermitidos" acl extdenegadas url_regex "/etc/squid/extdenegadas" acl almuerzo time MTWHF 12:00-14:00 ############################################################################# # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #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 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 # # Recommended minimum Access Permission configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # 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 # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed #http_access allow localnet http_access allow localhost ########################################## http_access allow sitiospermitidos http_access allow all almuerzo !extdenegadas ########################################## # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 ########################################## http_port 3128 intercept ########################################## # We recommend you to use at least the following line. hierarchy_stoplist cgi-bin ? # Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /var/spool/squid 8000 12 128 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # Add any of your own refresh_pattern entries above these. 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
También debemos configurar iptables para que redireccione las peticiones al puerto 80 hacia el 3128, que es el puerto en que trabaja Squid. Solo añadiremos estas dos reglas, ya que toda la configuración de iptables está explicada en la guía de Samba4.
[root@sambapdc01 ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.5.1:3128 [root@sambapdc01 ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128 [root@sambapdc01 ~]# service iptables save [root@sambapdc01 ~]# service iptables restart
Finalmente reiniciamos Squid.
[root@sambapdc01 ~]# service squid restart
Y procedemos a monitorear el tráfico pasando a través de Squid, haciendo uso de perl para obtener un formato de hora "human readable".
[root@sambapdc01 ~]# tail -f /var/log/squid/access.log | perl -pe 's/\d+/localtime($&)/e' Wed Aug 28 09:05:22 2013.964 1 192.168.5.11 TCP_DENIED/403 3756 GET http://www.update.microsoft.com/v9/1/windowsupdate/redir/muv4wuredir.cab? - NONE/- text/html Wed Aug 28 09:05:22 2013.975 2 192.168.5.11 TCP_DENIED/403 411 HEAD http://www.update.microsoft.com/v9/1/windowsupdate/redir/muv4wuredir.cab? - NONE/- text/html Wed Aug 28 09:05:22 2013.980 0 192.168.5.11 TCP_DENIED/403 3756 GET http://www.update.microsoft.com/v9/1/windowsupdate/redir/muv4wuredir.cab? - NONE/- text/html Wed Aug 28 09:05:22 2013.988 0 192.168.5.11 TCP_DENIED/403 411 HEAD http://www.update.microsoft.com/v9/1/windowsupdate/redir/muv4wuredir.cab? - NONE/- text/html Wed Aug 28 09:05:22 2013.996 1 192.168.5.11 TCP_DENIED/403 3756 GET http://www.update.microsoft.com/v9/1/windowsupdate/redir/muv4wuredir.cab? - NONE/- text/html Wed Aug 28 09:32:56 2013.514 175 192.168.5.11 TCP_MISS/200 582 GET http://www.google-analytics.com/__utm.gif? - DIRECT/74.125.229.163 image/gif Wed Aug 28 09:32:57 2013.701 50 192.168.5.11 TCP_MISS/200 582 GET http://www.google-analytics.com/__utm.gif? - DIRECT/74.125.229.163 image/gif Wed Aug 28 09:33:06 2013.580 1 192.168.5.11 TCP_DENIED/403 4187 GET http://fraterneo.blogspot.com/ - NONE/- text/html Wed Aug 28 09:33:06 2013.847 1 192.168.5.11 TCP_DENIED/403 3898 GET http://www.squid-cache.org/Artwork/SN.png - NONE/- text/html Wed Aug 28 09:33:06 2013.952 1 192.168.5.11 TCP_DENIED/403 4188 GET http://fraterneo.blogspot.com/favicon.ico - NONE/- text/html
Muy bueno :)
ResponderEliminarPor cierto, "accesar" no existe, es "acceder".
Saludos.
Muy buena guía, el problema es que no aborda el tema del condenado puerto 443 que no es posible redirigirlo con iptables o shorewall. Si alguien desea solucionarlo les comentos que se puede hacer. La solución es simple, busquen en internet acerca de WPAD. Con eso, olvidaran que squid transparente se limita solo al puerto 80.
ResponderEliminarEn squid también es posible trabajar la redirección del puerto 443. Pero es un tema que pone en juego la ética de su red debido a que es la privacidad de los datos de los usuarios con lo que se está tratando.
EliminarUn saludo.