Servidor proxy con AV

De Wiki de BandaAncha.eu
Saltar a: navegación, buscar

Plantilla:Docs

Introducción

El propósito de este manual es describir la instalación y configuración del squid 2.7 (proxy http) + antivirus (ClamAV) + Dansguard (filtrado de paginas web + integración con ClamAV) en una Ubuntu 8.04.

No sé entrará demasiado en explicar cada aplicación que se va a instalar, se deja el tema de profundizar a discreción del lector ;) Se presuponen ciertos conocimientos sobre administración linux y los componentes que esta guia explica su instalación.

Así pues empecemos con la instalación y configuración de la solución proxy + filtrado + antivirus.

Requisitos

Paquetes/programas

Antes de proceder a la instalación se instalarán algunos requisitos previos para llevar a cabo la instalación de los componentes, teniendo en cuenta que el squid y el dansguardian se instalan desde fuentes y todas las opciones de compilación que se van a usar.

Así pues pasamos a instalar todo lo necesario

aptitude install gcc make perl build-essential libldap2-dev libsasl2-dev libpam0g-dev zlib-bin zlib1g-dev libpcre3-dev pkg-config

Parámetros kernel

Para un mejor funcionamiento se debe configurar una seria de parámetros en el kernel o comprobar que estén configurados con unos valores correctos.

Empecemos con los descriptores de ficheros, que por defecto solo se permiten en las sesiones bash 1024 ficheros abiertos, un número muy bajo para un squid con una carga moderada.

Por tanto se van a subir ese valor a algo más razonable como es 8192. Esto sólo se hará a nivel de sesión bash ya que el kernel el número de descriptores es bastante alto en la ubuntu 8.04

cat /proc/sys/fs/file-max
49910

Para configurar el número de descriptores basta con ejecutar el comando

ulimit -HSn 8192

Si queremos comprobar el valor de los descriptores basta con ejecutar el comando

ulimit -n

Por último hay que comprobar que el número de puertos dinámicos de cliente es suficientemente alto

cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

Instalación y configuración

A continuación pasaremos a instalar el primer componente, el antivirus clamav, necesario para bloquear los virus en la navegación web a través del proxy squid.

ClamAV

Optaremos por instalar el antivirus usando el sistema de paquetes de Ubuntu.

aptitude install clamav-daemon

Nota: Si estamos detrás de un proxy para acceder a internet se deberán configurar correctamente HTTPProxyUsername y HTTPProxyPassword en el fichero de configuración /etc/freshclam.conf

Una vez instalado basta que actualicemos manualmente la base de datos del ClamAV ejecutando el comando

freshclam

De forma predeterminada la base de datos de virus se actualiza cada hora.

Nota: Vigilar de vez en cuando que la versión del clamav sea lo suficiente reciente para soportar la detección de toda la base de datos de virus

A continuación se pasa a instalar el proxy squid versión 2.7

Squid

Primero de todo se baja y descomprime la última versión estable a día de hoy (04/04/09), la versión 2.7-estable6

wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE6.tar.gz
tar zxvf squid-2.7.STABLE6.tar.gz
cd squid-2.7.STABLE6

A continuación se va a pasar a compilar e instalar el squid (por defecto se instala en /usr/local/squid). Hay que tener en cuenta que antes de hacer el configure se debe configurar el número de descriptores de ficheros abiertos a 8192

ulimit -HSn 8192
./configure --enable-storeio="aufs coss diskd ufs null" --enable-coss-aio-ops --with-aio --enable-removal-policies="heap,lru" \ 
--with-large-files --enable-large-cache-files --enable-delay-pools --enable-snmp --enable-linux-netfilter \ 
--enable-auth="basic digest negotiate ntlm" --enable-basic-auth-helpers="DB LDAP MSNT NCSA PAM POP3 SASL SMB squid_radius_auth YP"  \ 
--enable-follow-x-forwarded-for && make && make install

Notas: Se va a usar el método de almacenamiento de cache aufs, ya que el coss tarda varios minutos en arrancar la cache, provocando prácticamente un DoS de acceso a disco (I/O) en el disco duro del servidor durante ese tiempo.
Si se quisiera usar el coss se debe tener en cuenta que el tamaño máximo de objeto "cacheable" debe ser menor que el valor del coss-membuf que se puede configurar en la compilación con la opción --enable-coss-membuf-size=COSS_MEMBUF_SIZE

Se puede ajustar el número de hilos que use el aufs mediante el parámetro de compilación --with-aufs-threads=NUMERO_HILOS

A continuacón debemos configurar el fichero /usr/local/squid/etc/squid.conf.
El de mi instalación queda así

###########################
# Squid 2.7 configuration #
###########################

# Listen port
http_port 3128


# Cache
cache_mem 512 MB
maximun_object_size 1000000 bytes

cache_dir aufs /opt/squid/squidcache/ 5000 16 256

#cache_dir coss /opt/squid/squidcache/coss 4000 max-size=1000000
#cache_dir coss /opt/squid/squidcache/coss 50000 max-size=1000000 maxfullbufs=4 membufs=20 block-size=4096
#cache_swap_log /opt/squid/log/cache_swap_log

cache_log /opt/squid/log/cache.log
cache_store_log /opt/squid/log/store.log


# Net config
client_netmask 255.255.255.255
ftp_user [email protected]
ftp_list_width 64


# Auth
auth_param basic program /usr/local/squid/libexec/squid_ldap_auth -b "ou=People,dc=empresa,dc=com" -f "uid=%s" -v2 -h 192.168.1.1
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
authenticate_ip_ttl 1800 seconds

acl Authenticate proxy_auth REQUIRED
acl CONNECT method CONNECT

# Clients ACL (OR)
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 Lan src 192.168.0.0/255.255.0.0
acl Local dst 192.168.0.0/255.255.0.0

# Ports
acl SSL_ports port 443
acl Safe_ports port 80 81       # 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-5221   # unregistered
acl Safe_ports port 5223-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 119         # multiling http
acl Safe_ports port 666         # multiling http
acl Safe_ports port 777         # multiling http


# Allow/deny (AND)
#http_access allow Authenticate
http_access allow Lan
http_access allow Manager Localhost
http_access allow Localhost
http_access deny Manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny All

no_cache deny Local

# Dansguardian
follow_x_forwarded_for allow localhost
acl_uses_indirect_client on
log_uses_indirect_client on


# Other
http_reply_access allow all
icp_access allow all
max_filedescriptors 8192

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache


#cache_effective_user squid
#cache_effective_group squid
#high_response_time_warning 1500 (Median response time)


# LOGS & CORE
#
#logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
#logformat squidmime %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt [%>h] [%<h]
#logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

logformat squidlog %tl %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
logfile_rotate 5

coredump_dir /opt/squid/spool/squid
access_log /opt/squid/log/access.log squidlog

Comentar que la cache y los logs "cuelgan" todos debajo del directorio /opt/squid

A continuación se van a crear los directorio y ficheros necesarios

mkdir -p /opt/squid/squidcache;chown nobody.nogroup /opt/squid/squidcache
mkdir -p /opt/squid/log/;chown nobody.nogroup /opt/squid/log/
mkdir -p /opt/squid/spool/squid;chown nobody.nogroup -R /opt/squid/spool/

A continuación se debe generar la estructura de directorio de la cache del squid ejecutando el comando

/usr/local/squid/sbin/squid -z -D -N -X

Si queremos lanzar el proceso de squid pero no como demonio (para realizar pruebas), podemos usar el comando

/usr/local/squid/sbin/squid -D -N -X

TODO

Aunque la solución descrita en este manual es bastante completa, se podría instalar alguna herramienta más como por ejemplo:

- Estadísticas (Sarg) - El gestor de la cache (Cache Manager) - Snmp