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
Excelente mi estimado, con eso ando mas contento que perro con dos colas, saludos amigo
ResponderBorrarYa subiendo actualizaciones, buena página!
ResponderBorrarYa subiendo actualizaciones, buena página!
ResponderBorrar