Como vimos en un post anterior, podemos crear nuestros propios certificados autofirmados para tratar con https en Apache y otras posibles aplicaciones locales, incluyendo Squid. A los fines de esta guía asumiremos que ya tenemos a Squid trabajando en modo transparente y que solamente estamos trabajando sobre el tráfico https.
Lo primero será crear un certificado autofirmado para Squid. Lamentablemente no podemos usar los mismos que fueron creados para Apache, ya que Squid solo trabaja con los certificados en formato PEM. Usando comandos similares podemos crear tanto la llave privada como el certificado o ambos en un mismo fichero, que sería el certificado con la llave privada incluida.
Creando el certificado
En un solo fichero crearemos el certificado autofirmado y su llave privada, usando el comando openssl, como en el post anterior. Vamos respondiendo interactivamente los requerimientos.
[fraterneo@rainbow ~]$ openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidcert.pem -out squidcert.pem Generating a 1024 bit RSA private key .++++++ .....................++++++ writing new private key to 'squidcert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:DO State or Province Name (full name) []:Santiago Locality Name (eg, city) [Default City]:Santiago de los Caballeros Organization Name (eg, company) [Default Company Ltd]:fraterneo Organizational Unit Name (eg, section) []:fraterneo Common Name (eg, your name or your server's hostname) []:rainbow.local Email Address []:certad@yahoo.comConfigurando Squid
Ya con el certificado listo y antes de continuar, debemos asegurarnos que el Squid que tenemos instalado en nuestro sistema fue compilado con los parámetros que le ayudarán a soportar el procedimiento que estamos haciendo. Estos parámetros son --enable-icap-client y --enable-ssl, y con los siguientes comandos estos parámetros, de existir, saldrán resaltados en color. En Fedora, sistema usado para esta guía, Squid ya los tiene.
[fraterneo@rainbow ~]$ squid -v | grep ssl [fraterneo@rainbow ~]$ squid -v | grep icapAhora copiamos el certificado en una ruta adecuada desde donde Squid lo pueda usar y configuramos el caché donde Squid guardará las copias de dichos certificados.
[fraterneo@rainbow ~]$ sudo mkdir /etc/squid/ssl_cert/ [fraterneo@rainbow ~]$ sudo cp squidcert.pem /etc/squid/ssl_cert/ [fraterneo@rainbow ~]$ sudo /usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db [fraterneo@rainbow ~]$ sudo chown squid /var/lib/ssl_db/Editamos el fichero de configuración de Squid para agregarle algunos parámetros de SSL Bump y la ruta a nuestro certificado autofirmado.
# # Recommended minimum configuration: # acl homenetwork src 192.168.2.0/24 acl pxenetwork src 10.0.2.0/24 acl forbidden url_regex "/etc/squid/forbidden" 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: # 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 # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # 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 #HTTPS (SSL) trafic interception options always_direct allow all ssl_bump client-first all #sslproxy_cert_error deny all sslproxy_flags DONT_VERIFY_PEER sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB sslcrtd_children 8 startup=1 idle=1 # # 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 deny forbidden http_access allow homenetwork http_access allow pxenetwork http_access allow localhost # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 10.0.2.1:3128 intercept # Config for SSL interception https_port 10.0.2.1:3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/squidcert.pem # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # 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 # Hostname of the local machine visible_hostname rainbow.localConfigurando el Firewall (iptables)
Es necesario configurar nuestro Firewall para que trate el tráfico entrante a los puertos correspondientes de la forma en que esperamos.
[fraterneo@rainbow ~]$ sudo iptables -t nat -A PREROUTING -i em+ -p tcp --dport 443 -j DNAT --to-destination 10.0.2.1:3129 [fraterneo@rainbow ~]$ sudo iptables -t nat -A PREROUTING -i em+ -p udp --dport 443 -j DNAT --to-destination 10.0.2.1:3129 [fraterneo@rainbow ~]$ sudo iptables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 3129 -j ACCEPT [fraterneo@rainbow ~]$ sudo iptables -t filter -A INPUT -m state --state NEW -m udp -p udp --dport 3129 -j ACCEPT [fraterneo@rainbow ~]$ sudo iptables -t filter -A FORWARD -i em+ -m state --state NEW -m tcp -p tcp -d 10.0.2.1 --dport 3129 -j ACCEPT [fraterneo@rainbow ~]$ sudo iptables -t filter -A FORWARD -i em+ -m state --state NEW -m udp -p udp -d 10.0.2.1 --dport 3129 -j ACCEPT [fraterneo@rainbow ~]$ sudo iptables-save [fraterneo@rainbow ~]$ sudo systemctl restart iptables.serviceConfigurando los clientes
En los clientes no es necesario hacer configuración, pero sí tomar en cuenta que la dirección IP de nuestro servidor Squid debe ser el gateway de los clientes para que los mismos procuren todo el tráfico http y https a través de Squid. Teniendo siempre presente que muchos sitios como facebook.com rechazan el certificado debido a que no está firmado por una autoridad, como ya mencionamos antes.
Más recursos:
http://wiki.squid-cache.org/Features/SslBump
http://www.squid-cache.org/Doc/config/https_port/
http://www.squid-cache.org/Doc/config/always_direct/
que versionn de squid usas y que version de linux
ResponderEliminarSe usó Fedora 20 con kernel 3.15.4 y Squid 3.3.12.
Eliminary una consulta no tienes una guia para centos????
ResponderEliminarNo. Pero la guía debiera funcionar, con los ajustes necesarios, igual en cualquier distribución de GNU/Linux.
Eliminartengo fallas para interceptar https en ubuntu
ResponderEliminarHice todos los pasos en Centos 7 y el squid funciona pero no se como probar que este funcionando con https. Cuando pido una pagina como www.hotmail.com que usa https el log del squid muestra esto: TCP MISS/301 770 GET http://www.hotmail.com/ HIER DIRECT/65.55.85.12 text/html. Puedo entrar y ver el correo pero no aparece registro alguno en el log. Solo algo parecido cuando leo un email o cuando salgo de hotmail. Fui en Linux al Sistema de Archivos donde se guardarían los certificados pero tampoco logre ver ninguno. Podrían orientarme?. Gracias.
ResponderEliminarBueno, lo recomendable es que haga la guía tal cual está y luego la adapte a su escenario.
EliminarEl ejemplo no es la mejor forma. Es la única.
Tengo una consulta , squid me intercepta sin problemas las paginas seguras , y unicamente me permite acceder a las que indico en mis reglas acl. El problema esta en que necesito entrar en una pagina segura donde si necesito cargar un certificado valido instalado en mi navegador y no se como evitarlo
ResponderEliminarGracias
No entiendo su comentario, explíquese mejor.
EliminarSaludos.
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola Juan.
ResponderEliminarPara permitir solo tu PC debes crear una acl solo con la IP: 192.168.10.255. Para que sea la red completa: 192.168.10.0/24. El 24 es la máscara, eso equivale a poner 255.255.255.0, y te permitirá la red 10 completa.
Pero ten en cuenta que la 255 es broadcast, mejor usa otra IP para tu PC, como de 254 hacia abajo.
Un saludo.
Muy buen blog y excelente el artículo. No lo he probado pero tiene mucho sentido. Solo deseo preguntar si un certificado comercial comprado puede reemplazar a uno generado y firmado por nosotros mismos para evitar bloqueos al facebook u mensajes de advertencia. Muchas gracias
ResponderEliminarCésar, gracias por su comentario.
EliminarEfectivamente, como dices, un certificado adquirido por un ente autorizado como Verisign evitará problemas de carga en los sitios.
Un saludo.
segui paso lo del manual pero no me funciona, una pregunta como deben de estar configurada las reglas ip tables por defecto?........ademas de las que hay que agregar segun este manual
Eliminargracias
Hola.
EliminarSi no modificó nada de esta guía, todo debe funcionar. Verifique los logs del sistema y revise los puertos con nmap y el firewall desde otro equipo.
Saludos.
hola soy nuevo quiero hacer un repositorio local de centos como ago que herramientas utilizo
ResponderEliminarEsto le puede ser de ayuda http://fraterneo.blogspot.com/2014/04/como-configurar-un-repositorio-local.html
EliminarSaludos.
pero el puerto dice 3129 en iptables y el trasparente 3128
ResponderEliminarEso es porque ya el 3128 se asume que fue trabajado. Lo que se está trabajando en esta guía en iptables es lo concerniente al puerto 3129. Pero ambos están en squid.conf.
EliminarSaludos.
Hola Claudio,
ResponderEliminarSoy Gabriel y trabajo para una importante empresa Argentina en el área de redes. Esta empresa cuenta con mas de 100 sucursales. En estos momentos estamos instalando Internet de cortesía a todas las sucursales. El todas las sucursales tenemos router cisco de la serie 800. El problema que tenemos es que no contamos con filtro de contenido. Para esto se me ocurrió la idea de instalar Squid con algún complemento, el tema es que no quiero instalar uno por cada sucursal, te imaginas que el costo de equipos sería muy alto y a su vez la administración se también se incrementara notoriamente.
Mi idea es hacer una VPN con casa central montar un único squid en casa central. Pero lo que no se si se puede hacer es que salgan a Internet a través del enlace local y que las consultas para permitir o no el trafico sea al único squid de casa central.
Que pensas? Si se te ocurre avísame a que mail te puedo escribir.
Mil gracias
Saludos
Gabriel
Hola Gabriel. Gracias por tu comentario.
EliminarEstá genial tu idea.
Entiendo que al configurar la VPN debes indicarle a la misma que envíe como Gateway a los clientes la IP del host o servidor donde está Squid en modo transparente.
Saludos cordiales.
necesito que me ayudes a denagar descarga desde las paginas https, saludos desde cuba
EliminarNuevamente configure siguiendo este articulo mi Centos 7 y si funciono, puedo ver los https en el log de squid y los certificados en /var/lib/ssl db. El problema es que en los clientes los navegadores encuentran problema con el Certificado. Me parece bien la idea de sustituirlo por uno comprado de una institución como Verisign ahora Symantec pero estoy confundido no se cual escoger de los que venden. Cómo lo han solucionado para que las páginas abran bien? Agradezco la ayuda.
ResponderEliminarHola
ResponderEliminarSeguí tu configuración y me sale un error al querer reiniciar squid (No valid signing SSL certificate configured for https_port :3129)
Podrías ayudarme?
Necesito un algun tipo de certificado en específico?
Hola mi consulta es la siguiente, yo quiero realizar el filtro pero de forma selectiva, digamos que a algunos miembros de la red pueden ingresar y otros no
ResponderEliminarAmigo sabes como puedo hacer esto con Zentyal?
ResponderEliminarTe agradeciese mucho ya que no puedo bloquear por modo transparente los sitios HTTPS
Tengo una consulta, como podría hacer con esto con un certificado firmado digitamente con empresa autorizada y cuales son las empresas autorizadas para dicho trabajo para no tener problemas.
ResponderEliminarHola, he comprobado que el squid no fue instalado con enable ssl, ¿que debo hacer? ¿debo reinstalar?
ResponderEliminar