Ir al contenido principal

Squid con https - en Cento


Muchos hemos tenido dolores de cabeza para bloquear las páginas que más consume ancho de banda, como por ejemplo el Facebook Youtube etc. Por lo mismo que que se conectan por conexión segura https (443), bueno al menos yo ( Edson Vela ).



Empecemos :
Mi servidor tiene 2 tarjetas de RED.
El cual eth0 esta conectado al router y eth1 a mi LAN.
Yo acostumbro trabajar con CENTOS 6, me parece muy estable.
Asi que baje el “minimal iso centos 6”
Y lo actualicé
[root@ns1 ~]# yum update –y


Luego se instala otras las librerías que necesita para compilar y trabaje nuestro SQUID.


yum install -y perl gcc autoconf automake make openssl sudo wget


yum install libxml2-devel libcap-devel gcc gcc-c++ avr-gcc-c++


yum install libtool-ltdl-devel openssl-devel


yum install ksh perl-Crypt-OpenSSL-X509.x86_64


Descagarmos el squid 3.x


Tar xfzv squid.tar
Entramos a la carpeta donde lo descomprimimos
Cd squid/
Realizamos la confugracion básica para la estructura de centos6 y añadimos las líneas para compilarlo con ssl
./configure --build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--enable-internal-dns' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-arp-acl' '--enable-follow-x-forwarded-for' '--enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SMB,YP,getpwnam,multi-domain-NTLM,SASL,DB,POP3,squid_radius_auth' '--enable-ntlm-auth-helpers=smb_lm,no_check,fakeauth' '--enable-digest-auth-helpers=password,ldap,eDirectory' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-referer-log' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-storeio=aufs,diskd,ufs' '--enable-useragent-log' '--enable-wccpv2' '--enable-esi' '--with-aio' '--with-default-user=squid' '--with-filedescriptors=16384' '--with-dl' '--with-pthreads' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'target_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fpie' 'LDFLAGS=-pie' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fpie' --with-squid=/builddir/build/BUILD/squid-3.1.10 '--enable-ssl' '--enable-ssl-crtd' '--with-openssl' '--with-included-ltdl'


Luego hacemos un make y make install
Make
Make install
Hasta aca ya tenemos instalado nuestro squid
Creamos el usuario squid


adduser -M squid
darle los permisos para squid a las carpetas


chown -R squid /var/log/squid


chown -R squid /var/cache/squid






Podemos crear el script de arranque o simplmente correrlo con squid –f /etc/squid/squid.conf
Pero no lo correremos todavía.
Creamos el script :
Cd /etc/init.d
Yo uso nano para editar y crear mis archivos.
Nano squid
Y copiamos lo siguiente.
#!/bin/bash
# chkconfig: - 90 25
# pidfile: /var/run/squid.pid
# config: /etc/squid/squid.conf
#
### BEGIN INIT INFO
# Provides: squid
# Short-Description: starting and stopping Squid Internet Object Cache
# Description: Squid - Internet Object Cache. Internet object caching is \
# a way to store requested Internet objects (i.e., data available \
# via the HTTP, FTP, and gopher protocols) on a system closer to the \
# requesting site than to the source. Web browsers can then use the \
# local Squid cache as a proxy HTTP server, reducing access time as \
# well as bandwidth consumption.
### END INIT INFO




PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH


# Source function library.
. /etc/rc.d/init.d/functions


# Source networking configuration.
. /etc/sysconfig/network


if [ -f /etc/sysconfig/squid ]; then
. /etc/sysconfig/squid
fi


# don't raise an error if the config file is incomplete
# set defaults instead:
SQUID_OPTS=${SQUID_OPTS:-""}
SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}
SQUID_CONF=${SQUID_CONF:-"/etc/squid/squid.conf"}
SQUID_PIDFILE_DIR="/var/run/squid"
SQUID_USER="squid"
SQUID_DIR="squid"


# determine the name of the squid binary
[ -f /usr/sbin/squid ] && SQUID=squid


prog="$SQUID"


# determine which one is the cache_swap directory
CACHE_SWAP=`sed -e 's/#.*//g' $SQUID_CONF | \
grep cache_dir | awk '{ print $3 }'`


RETVAL=0


probe() {
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 1


[ `id -u` -ne 0 ] && exit 4


# check if the squid conf file is present
[ -f $SQUID_CONF ] || exit 6
}


start() {
# Check if $SQUID_PIDFILE_DIR exists and if not, lets create it and give squid permissions.
if [ ! -d $SQUID_PIDFILE_DIR ]; then mkdir $SQUID_PIDFILE_DIR; chown -R $SQUID_USER.$SQUID_DIR $SQUID_PIDFILE_DIR; fi
probe


parse=`$SQUID -k parse -f $SQUID_CONF 2>&1`
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo -n $"Starting $prog: "
echo_failure
echo
echo "$parse"
return 1
fi
for adir in $CACHE_SWAP; do
if [ ! -d $adir/00 ]; then
echo -n "init_cache_dir $adir... "
$SQUID -z -F -f $SQUID_CONF >> /var/log/squid/squid.out 2>&1
fi
done
echo -n $"Starting $prog: "
$SQUID $SQUID_OPTS -f $SQUID_CONF >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
timeout=0;
while :; do
[ ! -f /var/run/squid.pid ] || break
if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
RETVAL=1
break
fi
sleep 1 && echo -n "."
timeout=$((timeout+1))
done
fi
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID
[ $RETVAL -eq 0 ] && echo_success
[ $RETVAL -ne 0 ] && echo_failure
echo
return $RETVAL
}


stop() {
echo -n $"Stopping $prog: "
$SQUID -k check -f $SQUID_CONF >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
$SQUID -k shutdown -f $SQUID_CONF &
rm -f /var/lock/subsys/$SQUID
timeout=0
while :; do
[ -f /var/run/squid.pid ] || break
if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
echo
return 1
fi
sleep 2 && echo -n "."
timeout=$((timeout+2))
done
echo_success
echo
else
echo_failure
if [ ! -e /var/lock/subsys/$SQUID ]; then
RETVAL=0
fi
echo
fi
rm -rf $SQUID_PIDFILE_DIR/*
return $RETVAL
}


reload() {
$SQUID $SQUID_OPTS -k reconfigure -f $SQUID_CONF
}


restart() {
stop
rm -rf $SQUID_PIDFILE_DIR/*
start
}


condrestart() {
[ -e /var/lock/subsys/squid ] && restart || :
}


rhstatus() {
status $SQUID && $SQUID -k check -f $SQUID_CONF
}




case "$1" in
start)
start
;;


stop)
stop
;;


reload|force-reload)
reload
;;


restart)
restart
;;


condrestart|try-restart)
condrestart
;;


status)
rhstatus
;;


probe)
probe
;;


*)
echo $"Usage: $0 {start|stop|status|reload|force-reload|restart|try-restart|probe}"
exit 2
esac


exit $?






# fin


Preparar la carpeta ssl
/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db


chown -R squid.squid /var/lib/ssl_db


generar las llaves para squid


/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db


chown -R squid.squid /var/lib/ssl_db




mkdir /etc/squid/ssl_cert


chown -R squid.squid /etc/squid/ssl_cert


cd /etc/squid/ssl_cert


Para el squid


openssl req -new -newkey rsa:1024 -days 1365 -nodes -x509 -keyout myca.pem -out myca.pem




Para Browser Windows


openssl x509 -in myca.pem -outform DER -out myca.der




Ahora la configuración de squid
Inicialmente pensé en bloquear el Facebook y el youtube, pero para evitar las miradas asesinas preferí no bloquearlas pero si ponerlos lentos hasta llegar a la desesperación usando el delay pools y claro también para que no saturen nuestro ancho de banda.


acl miredlocal src 192.168.1.0/24
acl lan src 192.168.2.0/24 # Lan extereno
acl redinterna src 192.168.0.0/24
acl usuarioslentos src 192.168.1.0/24
# acl broken_sites dstdomain "/etc/squid/denegados"
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


acl sitiosdenegados dstdomain "/etc/squid/denegados"
acl listaextensiones urlpath_regex "/etc/squid/extensiones"


#PONER LENTO YOUTUBE, FACEBOOK
delay_pools 1
delay_class 1 1
delay_parameters 1 5000/5000
acl lento url_regex .flv$
acl lento url_regex .mp4$
acl lento url_regex -i watch?
acl video dstdomain .youtube.com
acl fb dstdomain .facebook.com
acl youtube dstdomain .googlevideo.com
delay_access 1 allow lento
delay_access 1 allow video
delay_access 1 allow fb
delay_access 1 allow youtube


# REGLAS


http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports


# http_access allow usuarioslentos !sitiosdenegados !listaextensiones
http_access allow all !sitiosdenegados !listaextensiones
# http_access allow miredlocal !sitiosdenegados !listaextensiones
# http_access allow redinterna
# http_access allow localhost




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






http_port 3130


http_port 3128 intercept
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/myca.pem key=/etc/squid/ssl_cert/myca.pem


# HTTPS trafico
# acl broken_sites dstdomain "/etc/squid/denegados"
#always_direct allow all
# ssl_bump none broken_sites


ssl_bump server-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


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




shutdown_lifetime 1 second


# Listo.
Para la configuracion del cliente windows


Es necesario copiar el archivo /etc/squid/ssl_cert/myca.der en un usb mediante el WinSCP
y añadirlo al explorer.




For Internet Explorer :


HErramientas -> opciones de internet -> contenido -> certificado Click En


Importar , seleccionar myca.der file , asegura importantlo en


Root Trusted Certificates


Luego re direccionamos los puertos con iptables para los que hagan peticiones en el puerto 80 re direccionarlos al puerto 3130


El siguiente articulo es de la autoria de mi amigo Edson Vela
Si existen otro método por favor envíenlo a edsonvela@gmail.com



Comentarios

  1. Excelente mi estimado, con eso ando mas contento que perro con dos colas, saludos amigo

    ResponderBorrar
  2. Ya subiendo actualizaciones, buena página!

    ResponderBorrar
  3. Ya subiendo actualizaciones, buena página!

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

BBS - Boletin Board Sistem

Antes de que Internet fuera tan grande y Google todavía no existía! Teníamos los BBS Eran Personas que tenían sus computadoras prendidas con sistemas para recibir llamadas. Te contestaba por medio de tu modem Dial UP uff tenia un 9600 en ese tiempo y una 8086 con DOS me conectaba a FileGallery para poder pegar al Internet que tiempos... En Puerto Rico tuvimos 42 BBS de los que visite por Dial-UP http://bbslist.textfiles.com/787/ Ya casi no existen pero me gustaria algundia toparme con alguno de los sysop. BBS Existentes en Puerto Rico bbs.thewallbbs.com bbs.efectolinux.com tiene DIALUPy trabaja:)

DOH cloudflare dns on Mikrotik V7

Protecting home Internet connections from malware With home Internet usage on the rise, it’s never been more important to protect your family from dangerous and malicious sites. 1.1.1.1 for Families is built on top of the same site categorization and filtering technology that powers Cloudflare’s enterprise products. It uses Cloudflare’s Internet intelligence to filter content on your home Internet network.