Server

Introducción

Squid es un Proxy cache Web para el apoyo a HTTP, HTTPS, FTP y mucho más. Se reduce el ancho de banda y mejora los tiempos de respuesta de la memoria caché y la reutilización de frecuencia-pidió páginas web. Squid tiene amplios controles de acceso y es un gran servidor del acelerador que está licenciado bajo la GNU GPL. Fragmento extraído desde la Web oficial de squid. Para más información sobre squid dirigirse a la siguiente URL: http://www.squid-cache.org/

# Asumiremos que la maquina donde va a ser instalado squid tiene conexión directa a Internet
# y habilitado dentro de /etc/systcl.conf la linea:
net.inet.ip.mforwarding=1      # 1=Permit forwarding (routing) of IPv4 multicast packets

Instalación

Como primera medida vamos a instalar squid, para esto vamos a instalar desde los packages de OpenBSD, tipeando lo siguiente desde la consola:

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/
# pkg_add squid-2.6.STABLE13-transparent.tgz

Una vez instalado procederemos a controlar que nuestro programa a sido añadido correctamente al sistema, tipeando el siguiente comando desde la consola:

# pkg_info

El mismo nos debe figurar en la lista de programas.

Otro método de instalación es por medio de ports, pero ustedes eligen.

Configuración de Squid

Para la configuración es recomendable tener unos puntos bien en claro, si bien la información que se suministrara a continuación puede ser copiada y pegada, es altamente recomendable leer desde las fuentes madres para no quedar colgados en ciertos puntos.

Para la edición de los archivos de configuración, se utilizara el viejo y conocido VI Para mas información sobre vi. Aquí. http://es.wikipedia.org/wiki/Vi

A la acción.

Desde la línea de comandos tripearemos:

# /usr/local/sbin/squid -z
2007/12/11 18:04:35| Creating Swap Directories
# 

Para que nos cree los espacios en disco para los temporales.

Editaremos en rc.local para que squid se ejecute durante el inicio del sistema.

# vi etc/rc.local
Agregando:

if [[|-x /usr/local/sbin/squid ]]; then
        echo -n ' squid';       /usr/local/sbin/squid
    fi
   
Salvamos el archivo presionado esc : wq
Ahora:   
# vi etc/squid/squid.conf

Squid.conf llevara todas las configuraciones de nuestro Proxy cache.

Solo se comentar los puntos que considere importantes.

Para este proyecto el archivo de configuración a sido reducido solamente a las líneas que solamente nos interesan. Este mismo restringirá direcciones webs, palabras claves (en este caso del tipo porno u otras que se pueden poner como reglas), Acceso a msn por horarios, etc.

Ejemplo de squid.conf utilizado:

#############################INICIO DE SQUID.conf#############################

http_port 3128

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY


cache_mem 2048 MB

# cache_swap_low 90
# cache_swap_high 95

maximum_object_size 4096 KB

minimum_object_size 0 KB

# Definimos la cantidad de espacio almacenado en memoria
# para los archivos, en este caso 240 KB
maximum_object_size_in_memory 240 KB

fqdncache_size 10240

cache_replacement_policy lru

memory_replacement_policy lru

# Definimos el espacio a utilizar en disco, en este caso 5120
cache_dir ufs /var/squid/cache 5120 16 256

cache_access_log /var/squid/logs/access.log

cache_log /var/squid/logs/cache.log

cache_store_log /var/squid/logs/store.log

emulate_httpd_log off

pid_filename /var/squid/logs/squid.pid

refresh_pattern ^http://.*.gif$ 1440 50% 20160 reload-into-ims
refresh_pattern ^http://.*.asis$ 1440 50% 20160
refresh_pattern -i .png$ 10080 150% 40320 reload-into-ims
refresh_pattern -i .jpg$ 10080 150% 40320 reload-into-ims
refresh_pattern -i .bmp$ 10080 150% 40320 reload-into-ims
refresh_pattern -i .gif$ 10080 300% 40320 reload-into-ims
refresh_pattern -i .ico$ 10080 300% 40320 reload-into-ims
refresh_pattern -i .swf$ 10080 300% 40320 reload-into-ims
refresh_pattern -i .flv$ 10080 300% 40320 reload-into-ims
refresh_pattern -i .rar$ 10080 150% 40320
refresh_pattern -i .ram$ 10080 150% 40320
refresh_pattern -i .txt$ 1440 100% 20160 reload-into-ims override-lastmod
refresh_pattern -i .css$ 1440 60% 20160
refresh_pattern ^http:// 1 100% 20160 reload-into-ims ignore-reload
refresh_pattern ^ftp:// 240 50% 20160
refresh_pattern ^gopher:// 240 40% 20160
refresh_pattern /cgi-bin/ 0 0% 30
refresh_pattern . 0 100% 20160 reload-into-ims

debug_options ALL,2

client_netmask 255.255.255.255


ftp_list_width 32

ftp_passive on

ftp_sanitycheck on

dns_timeout 1 minutes

hosts_file /etc/hosts

# Recommended minimum configuration:
# auth_param digest program <uncomment and complete this line>
# auth_param digest children 5
# auth_param digest realm Squid proxy-caching web server
# auth_param digest nonce_garbage_interval 5 minutes
# auth_param digest nonce_max_duration 30 minutes
# auth_param digest nonce_max_count 50
# auth_param basic children 5
# auth_param basic realm Squid proxy-caching web server
# auth_param basic credentialsttl 2 hours
# auth_param basic casesensitive off

request_header_max_size 20 KB

quick_abort_pct 95

negative_ttl 2 minutes

positive_dns_ttl 6 hours

negative_dns_ttl 1 minute

forward_timeout 2 minutes
# Default:
connect_timeout 1 minute
peer_connect_timeout 30 seconds
# Default:
read_timeout 10 minutes
request_timeout 3 minutes

# Default:
persistent_request_timeout 1 minute

# Default:
client_lifetime 1 day
half_closed_clients on
pconn_timeout 120 seconds
# Default:
ident_timeout 10 seconds
# Default:
shutdown_lifetime 30 seconds

# Definimos una lista de urls dentro del archivo(squid-block.acl)
# con accesos a paginas del tipo msn
acl messenger url_regex "/etc/squid/squid-block.acl"
acl restrict time MTWHF 00:30-20:00
http_access deny messenger restrict

# definimos la ruta del archivo (squid-porn.acl) que llevara
# un listado de palabras pornos y webs.
acl porn url_regex -i "/etc/squid/squid-porn.acl"
http_access deny porn

acl hotmail url_regex hotmail
http_access allow hotmail

# Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443 563    # https, snews
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


header_access WWW-Authenticate deny all
header_access Link deny all
header_access Warning deny all
header_access Via deny all
header_access User-Agent deny all
header_access Proxy-Connection deny all
header_access X-Forwarded-For deny all



#  TAG: http_access
#    Allowing or Denying access based on defined access lists
# 
#    Access to the HTTP port:
#    http_access allow|deny [[!]]aclname ...
# 
#    NOTE on default values:
# 
#    If there are no "access" lines present, the default is to deny
#    the request.
# 
#    If none of the "access" lines cause a match, the default is the
#    opposite of the last line in the list.  If the last line was
#    deny, the default is allow.  Conversely, if the last line
#    is allow, the default will be deny.  For these reasons, it is a
#    good idea to have an "deny all" or "allow all" entry at the end
#    of your access lists to avoid potential confusion.
# 
# Default:
# http_access deny all
# 
# Recommended minimum configuration:
# 
# Only allow cachemgr access from localhost

http_access allow manager localhost
http_access deny manager
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
# 
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

acl our_networks src 0.0.0.0/0
http_access allow our_networks

http_access deny all

http_reply_access allow all

http_reply_access allow all

icp_access allow all

# Default setting:
# miss_access allow all

# Default:
# cache_mgr webmaster

# Default:
# cache_effective_user _squid

# 
# Default:
# cache_effective_group _squid

httpd_accel_host virtual
httpd_accel_port 80

# Default:
httpd_accel_single_host off

# Default:
httpd_accel_with_proxy on

# Default:
httpd_accel_uses_host_header on

# Default:
# httpd_accel_no_pmtu_disc off


logfile_rotate 10

# Default:
# tcp_recv_bufsize 0 bytes

#    directory and point this tag at them.
# 
# Definimos el mensaje de error que se mostrara:
error_directory /usr/local/share/squid/errors/Spanish

#########################FIN SQUID.CONF#########################

Salvamos el archivo presionado esc : wq

Parámetro cache_mem

El parámetro cache_mem establece la cantidad de memoria a cachear Los datos de estos objetos se almacenan en bloques de 4 Kb. Por defecto se establecen 8 MB, si tenemos un servidor con al menos 128 MB de RAM, colocaremos 16 MB. Para agregar mas medidas o entender algunas de las que se incluyen en este ejemplo, es recomendable leer las FAQS oficiales de squid.

Ahora pasaremos a crear los archivos squid-block.acl y squid-porn.acl, que contendrán los sitios y palabras claves a restringir.

# vi etc/squid/squid-block.acl

Una vez dentro hemos puesto para el ejemplo lo siguiente:

senger.hotmail.com
.msn.com
microsoft

Salvamos el archivo presionado esc : wq

Ahora pasaremos a crear squid-porn.acl Para el ejemplo lo siguiente:

porn
porno
cojer
xxx
blowjob
lesbiana
lessbian
lesbian
hardcore
pene
concha
follando
orgia
xxx.jovencitas.xxx
xxx.sexo.xxx
p0rn
XXX
warez

Salvamos el archivo presionado esc : wq

Creado estos dos archivos, pasaremos a inicializar squid en modo debug, con el siguiente comando:

# /usr/local/sbin/squid -d 1 -N

(/usr/local/sbin/squid -k shutdown para detener squid)

Si todo sale bien podemos configurar nuestros navegadores con la dirección de IP asignada a este Proxy por el puerto 3128.

De esta manera ya tenemos squid de manera NO-Trasparente

Transparentando

Para setear squid en modo transparente tendremos que habilitar PF. (para mas info sobre PF: www.openbsd.org/faq/pf/ )

# vi etc/rc.conf 

y ubicar la línea

# pf=NO y remplazarla por pf=YES

Paso dos: Agregaremos dentro de: etc/pf.conf las siguientes líneas en las áreas correspondientes:

rdr on $int_if inet proto tcp from any to any port 80 -> 127.0.0.1 port 3128
# tomamos todo el trafico desde el Puerto 80
pass in on $int_if inet proto tcp from any to 127.0.0.1 port 3128 keep state
pass out on $ext_if inet proto tcp from any to any port 80 keep state

Salvamos el archivo presionado esc : wq Comprobamos el archivo PF con el comando:

# pfctl -nf /etc/pf.conf
Si hay alguna configuración fuera de lugar, pfctl -nf nos los indicara. De lo contrario si nuestro pf es correcto nos dejara en el path (root@path#) donde ejecutamos este comando.
Ahora si, cargamos nuestro pf.conf...
# pfctl -f /etc/pf.conf

De esta manera ya tendremos squid de modo trasparenté en nuestro sistema.

Algunos comandos

Para verificar el fichero de configuracion

# squid -k parse

Para parar SQUID manualmente:

# squid -k shutdown

Cuando cambies la configuración de SQUID hay que reiniciarlo

# squid -k reconfigure

Nos aseguramos de que SQUID esta ejecutándose

# ps waux | grep squid

Monitoreo de Squid

Miremos a squid trabajando en tiempo real con los usuarios conectados a el.

# tail -f /usr/local/squid/var/logs/access.log

Existen muchas herramientas para el tratamiento de Squid.. http://www.squid-cache.org/Scripts/

Depurando Errores

El archivo cache.log muestra que ocurre cuando squid arranca o es reconfigurado

# more /usr/local/squid/var/logs/cache.log

Ahora solo reiniciar

# shutdown -r now

y listo…. enjoy

Agradecimientos

Gracias P. por ayudar en squid.conf y OpenBSDeros por el espacio de publicación Salud amigos. Alekid…


Personal Tools