miércoles, 28 de agosto de 2013

Squid3 transparente en nuestro servidor Samba4

Squid no necesita presentación en este blog, y si no lo conoces, puedes ver los enlaces relacionados al final de esta entrada. Entranto ya en materia, luego de configurar nuestro Controlador de Dominio y Directorio Activo con Samba4, buena idea es configurar Squid como Proxy Caché Transparente (aunque lo de caché ya no es tan necesario con las altas velocidades de que disponemos hoy día, no obstante si eres dominicano sabes que no siempre es así).

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 accesar acceder a sus asuntos personales durante el almuerzo o tiempo libre.


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

3 comentarios:

  1. Muy bueno :)

    Por cierto, "accesar" no existe, es "acceder".

    Saludos.

    ResponderEliminar
  2. 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.

    ResponderEliminar
    Respuestas
    1. En 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.

      Un saludo.

      Eliminar