En este tutorial básico explicaré brevemente como instalar un proxy transparente con filtro de contenidos. También quedara cubierta la generación de informes web con el tráfico y accesos de los usuarios.
Premisas.
1) Se entenderá en todo momento que el sistema instalado es Ubuntu 12.04 Server con la opción LAMP instalada y configurada.
2) El sistema tendrá dos tarjetas de red, eth0 y eth1. La tarjeta de red eth1 estará conectada directamente al router y la tarjeta eth0 estará conectada a un switch.
3) La red interna (las máquinas contectadas al switch) tendrá ip en el formato 192.168.2.X
4) La red externa (la que conecta con el router) tendrá ip en el formato 192.168.1.X
Instalando
Instalamos squid3, dansguardian y sarg
sudo apt-get install squid3 dansguardian sarg
Configurando
1.-Configuración de Squid.
Editamos el fichero de configuración de squid
sudo nano /etc/squid3/squid.conf
y nos aseguramos de que existe esta linea y no esta comentada, si no existe la creamos.
http_port 3128 transparent
Con esto le decimos a squid que funcione en el puerto 3128 y de forma transparente.
Añadimos también lo siguiente:
acl localnet src 192.168.2.0/24
http_access allow localnet
http_access allow localhost
visible_hostname server
cache_dir ufs /var/spool/squid3 7000 16 256
Con esto definimos nuestra red y el permiso de acceso, así como la cantidad de mb que queremos de cache (7000).
2.-Configuración de Dansguardian:
Editamos el fichero de configuración de dansguardian:
sudo nano /etc/dansguardian/dansguardian.conf
Localizamos la línea con la directiva «logfileformat» y la establecemos a «3» para que los logs sean idénticos a los que genera squid. Esto lo haremos para que Sarg los entienda.
logfileformat = 3
Localizamos la línea donde se define donde debemos dejar los logs y la dejamos asi
loglocation = ‘/var/log/dansguardian/access.log’
Buscamos la diretiva filterport y la establecemos a 8080, esto sera el puerto donde Dansguardian permanecerá a la escucha.
filterport = 8080
Ahora definiremos la ip del proxy, que por defecto es el propio servidor.Debe quedar así:
proxyip = 127.0.0.1
Por último definimos el puerto en el que Dansguardian se conecta al proxy:
proxyport = 3128
Para finalizar ponemos una almohadilla # en la línea que empieza por UNCONFIGURED para indicarle a Dansguardian que está todo configurado. Que quede así:
#UNCONFIGURED – Please remove this line after configuration
Y con esto terminamos la configuración de dansguardian.
3.-Configuración de Sarg.
Sarg es un generador de informes, lo que hace es leer el log de Squid o Dansguardian (en nuestro caso Dansguardian) y generar una web donde podremos ver gráficamente quién accede a internet, dónde accede y cuanto pesa lo que está descargando o visitando. Manos a la obra:
sudo nano /etc/sarg/sarg.conf
Comentamos la linea access_log del principio del fichero ya que la añadiremos al final con otro valor.
#access_log /var/log/squid/access.log
Y al final añadimos la siguiente configuración, que no voy a comentar por pura pereza 😛
Fijaos que la primera línea es igual al access_log que hemos comentado antes, y que ahora queda activa y definida.
access_log /var/log/dansguardian/access.log
dansguardian_conf /etc/dansguardian/dansguardian.conf
graphs yes
graph_days_bytes_bar_color orange
title «Reportes de Acceso de Usuarios»
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 9px
background_color white
text_color #000000
text_bgcolor lavender
title_color green
temporary_dir /tmp
output_dir /var/www/sarg
resolve_ip
user_ip no
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
exclude_users /etc/sarg/exclude_users
exclude_hosts /etc/sarg/exclude_hosts
date_format u
lastlog 0
remove_temp_files yes
index yes
index_tree file
overwrite_report yes
records_without_userid ip
use_comma yes
mail_utility mailx
topsites_num 100
topsites_sort_order CONNECT D
index_sort_order D
exclude_codes /etc/sarg/exclude_codes
max_elapsed 28800000
report_type topusers topsites sites_users users_sites date_time denied auth_failures site_user_time_date downloads
usertab /etc/sarg/usertab
long_url no
date_time_by bytes
charset Latin1
show_successful_message yes
show_read_statistics yes
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
topuser_num 0
site_user_time_date_type table
download_suffix «zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv,lha,lzh,mdb,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg»
Ahora tenemos que crear una serie de directorios donde sarg generará los informes,
sudo mkdir /var/www/sarg /var/www/sarg/diario /var/www/sarg/semanal /var/www/sarg/mensual
y otorgarle la propiedad a www-data para que podamos accederlos más tarde
sudo chown -R www-data:www-data /var/www/sarg
Ahora crearemos unos script para generar los informes, diariamente, semanalmente y mensualmente.
-Script diario.
sudo nano /usr/sbin/sarg-informe-diario
con el siguiente contenido
TODAY=$(date +%d/%m/%Y)
YESTERDAY=$(date --date "1 day ago" +%d/%m/%Y)
sarg /var/log/dansguardian/access.log -o /var/www/sarg/diario -z -d $YESTERDAY-$TODAY
exit 0
-Script semanal.
sudo nano /usr/sbin/sarg-informe-semanal
con el siguiente contenido
TODAY=$(date +%d/%m/%Y)
YESTERDAY=$(date --date "1 week ago" +%d/%m/%Y)
sarg /var/log/dansguardian/access.log -o /var/www/sarg/semanal -z -d $YESTERDAY-$TODAY
exit 0
-Script mensual.
sudo nano /usr/sbin/sarg-informe-mensual
con el siguiente contenido
TODAY=$(date +%d/%m/%Y)
YESTERDAY=$(date --date "1 month ago" +%d/%m/%Y)
sarg /var/log/dansguardian/access.log -o /var/www/sarg/mensual -z -d $YESTERDAY-$TODAY
exit 0
Asignamos permisos a los scripts que hemos creado para que se puedan ejecutar
sudo chmod 755 /usr/sbin/sarg-informe*
Y los añadiremos a crontab para automatizar la ejecución. Abrimos crontab.
sudo crontab -e
Y añadimos las siguientes lineas
00 00 * * * /usr/sbin/sarg-informe-diario > /dev/null 2>&1
00 01 * * 1 /usr/sbin/sarg-informe-semanal > /dev/null 2>&1
03 02 1 * * /usr/sbin/sarg-informe-mensual > /dev/null 2>&1
La coletilla «> /dev/null 2>&1» es para que no mande un correo con el resultado cada vez que se ejecuta.
Reiniciaremos crontab
sudo service cron restart
Con estas lineas conseguiremos que los informes se generen con caracter diario (primera línea), semanal (segunda línea) y mensual (tercera linea).
Y ahora a esperar a que se generen los primeros resultados (24h). Que seran visibles desde el servidor abriendo un navegador y accediendo a las siguientes direcciones:
Para el informe diario http://127.0.0.1/sarg/diario
Para el informe semanal http://127.0.0.1/sarg/semanal
Para el informe mensual http://127.0.0.1/sarg/mensual
Si no quereis esperar siempre podeis ejecutar el script a mano, por ejemplo el diario sería así:
sudo sarg-informe-diario
Tened en cuenta que en el punto en el que estamos no hemos reiniciado ni squid, ni dansguardian ni ha habido tráfico en la red como para que todo funcione. Probad a ejecutarlo al final del tutorial y vereis el resultado.
4.-Configurando la red
Para que la red conectada a eth0 pueda acceder a internet (que está en eth1) debemos habilitar el «ip forwarding». Editaremos el siguiente archivo:
sudo nano /etc/sysctl.conf
Y nos aseguramos de que esta activado, recordemos que 1 es activado y 0 desactivado.
net.ipv4.ip_forward=1
También necesitaremos decirle al sistema que aplique un par de reglas para que cuando reciba un intento de acceder a una web lo redireccione a Dansguardian para que lo analice y permita o no el acceso. Hay muchas maneras de hacer esto pero a mi me gusta crear un pequeño script que arranque al inicio del sistema.
Crearemos un fichero llamado reglas_iptables en /etc/init.d
sudo nano /etc/init.d/reglas_iptables
y le añadiremos las siguientes líneas:
#! /bin/sh
iptables -F
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Guardamos y le damos permiso de ejecución:
sudo chmod +x /etc/init.d/reglas_iptables
Crearemos un enlace simbólico en /etc/rc2.d/ para que se ejecute al iniciar.
sudo ln -sf /etc/init.d/reglas_iptables /etc/rc2.d/S20reglas_iptables
Ahora configuraremos las tarjetas de red (si es que aún no lo habeis hecho ya). Esto lo hacemos editando el fichero interfaces.
sudo nano /etc/network/interfaces
Y dejándolo como sigue:
auto eth1
iface eth1 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8#Segunda tarjeta red
auto eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.0
Con estos cambios le hemos dicho al sistema que la tarjeta eth1 que poseera la direccion ip 192.168.1.2, se conectará al router que tiene la ip 192.168.1.1 y usará los servidores de nombres (dns) de google, que son 8.8.8.8. Esta tarjeta es la que da acceso a internet.
Tambien le decimos que la tarjeta eth0 poseerá la dirección 192.168.2.1, esta tarjeta es la que se comunica con nuestra red interna.
Dicho esto solo queda reiniciar el equipo o los servicios y cruzar los dedos para que no me haya equivocado al escribir este pequeño y básico tutorial.
Reiniciamos servicios
sudo service squid restart
sudo service dansguardian restart
sudo /etc/init.d/reglas_iptables
Se agradeceran críticas constructivas y notificación de meteduras de pata. 😛
Hola, soy nuevo en ubuntu y te queria hacer algunas consultas.. yo tengo un router mikrotik que viene con un servidor proxy, pero solo me sirve para bloquear paginas, y lo que quiero es sacar informes… el ubuntu server tiene que tener necesariamente 2 placas de red? no entendi bien esa parte.. desde ya muchas gracias y muy buen tutorial.
te cuento que toda mi red esta en el mismo ip que eth0…
Hola Fernando, lo de poner dos placas de red es porque el ordenador que tiene ubuntu server instalado esta en medio de todo. Digamos que por un lado va la red interna que son todos los ordenadores que tienes conectados a un switch. Este switch no tiene acceso directo al router, en su lugar se conecta a una tarjeta de red del servidor. Y el servidor se conecta al router mediante la segunda tarjeta de red. De esta forma obligas a toda la red interna a pasar por el servidor para poder salir a internet, y es en ese paso donde capturas el trafico, lo filtras y lo gestionas segun tu criterio.
En el tema de tu router mucho me temo que no puedo ayudarte ya que desconozco ese router, aun asi puedes usar perfectamente el tutorial que he hecho simplemente desactivando el servicio de proxy que tiene el router ya que esa tarea la realizaría el servidor.
Salu2!
HOLA TE FELICITO POR TU POST!! EXCELENTE!!
pero que crees no me funciono la transparencia, todo chidote 192.168.2.1:3128 y me navega pero se lo quito del navegador y byes internet…. alguna sugerencia?
un cliente que es con el que estoy haciendo pruebas es win7 y con ip fija 192.168.2.12/24 tengo que agregarle el gateway o dejarlo vacio?
Hola Donato,
Si no has puesto gateway probablemente ese sea tu problema, si aun poniendole un gateway el problema persiste, entonces revisate las reglas de iptables.
Salu2 y suerte!
Hola!, algo bien extraño, estoy en un seven y tengo el gateway de mi server… y m emarca conexion y acceso a internet osea no me sale el triangulito, peeeero si le quito el proxy del navegador no navego y antes de seguir con las iptabes y eso ps nomas no… me pasas correo para si me puedes ayudar?
hola! te cuento que ya lo hice funcionar en el post aterior te comentaba que no me marcaba conectividad nula, lo unco que agrege fueron dns de google 8888 y 8884 y con eso furulo, el dilema ahora son los bloqueos 🙂 pero ese ya es otro cantar. Gracias
Hola Donato, me alegro que hayas conseguido resolverlo. 🙂
el archivo reglas_iptables me tira un error:
Bad argument ’80’
Try iptables -h for more information
imagino que es por la linea:
iptables -t nat -A PREROUTING -i eth0 -p tcp «“dport 80 -j REDIRECT «“to-port 8080
Aparte de eso, todo funciona genial.
Mil gracias Neil y porfa, echenme una manito con el problema de las reglas iptables
en efecto el fallo es porque has hecho un copiar y pegar, fijate que dport y to-port empiezan con un doble guion – –
Neil gracias loco! funciona a las mil maravillas. eso mismo me sirvió para corregir el informe diario, mensual y semanal, pues al frente de date, en la segunda linea que empieza con YESTERDAY también lleva doble linea.
Una pregunta cuando ejecuto el iptables me da los siguientes errores
/etc/init.d/reglas_iptables: 3: /etc/init.d/reglas_iptables: REDIRECT: not found
/etc/init.d/reglas_iptables: 4: /etc/init.d/reglas_iptables: MASQUERADE: not found
Alguna idea?
obama, prueba a ejecutar estas lineas:
Lo que hago con eso es comprobar que esten cargados los modulos correspondientes.
La salida deberia ser algo asi para la primera linea:
y asi para la segunda:
como puedo ver en modo grafico el sarg
yadi, sarg es una herramienta en modo texto, lo que hace es convertir los logs de dansguardian al formato que quieras, en este caso es formato web.
si has seguido esta guia deberias poder acceder a esa informacion en http://127.0.0.1/sarg/diario
por que me aparece error cuando reinicio la eth1
auto eth1
iface eth1 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 8.8.8.8
EL ERROR ES ESTE :
Reconfiguring network interfaces…postconf: fatal: open /etc/postfix/main.cf: No such file or directory
karen, te esta diciendo que no encuentra el fichero de configuracion de postfix. Deberias revisar la configuracion/instalacion de tu servidor de correo.
ya cheque lo dl servicio de correo ahora me aparece el siguiente ERROR:
running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces
Karen, ese es un mensaje de aviso y no te afecta en nada. De todas formas es algo que no tiene que ver con el post con lo que doy por zanajada esta conversación. Saludos.
hola alguien puede ayudarme en la configuracion de mi tarjeta que va de la eth1 al switch
considerando los siguientes
parametros
address 192.168.1.2
netmask 255.255.255.0
aqui aun no puedo hacer la conexion, podrian decirme en que estoy fallando?
en la tarjeta eth0 ya tengo conexion quedo asi
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.254
Hola Diana, me gustaria ayudarte pero no me queda claro cual es tu problema. ¿Puedes intentar describirlo con mayor detalle? Gracias. 🙂
que intento conectarme a una maquina local mediante la tarjeta de red conectada a un switch , pero la configuracion que tengo en la eth1 no me funciona, que parametros necesito para hacer conexion tomando en cuenta en la tarjeta 0 ya tiene internet y son los datos ke te describi anteriormente.
Hola diana, con la escasa información que aportas no puedo ayudarte. Intenta dar el maximo de informacion posible, te pongo unas preguntas de ejemplo:
-¿Que pruebas has hecho?
-¿A que servicio intentas conectarte?
-¿Es la unica maquina a la que no puedes conectarte o hay mas?
-¿Estan en el mismo rango de ip?
-¿responde a los ping?
-¿Comprobaste el cable de red?
Saludos.
Primero que nada felicitaciones por tan gran aporte, ahora desearía hacerte una consulta, debo realizar algún cambio para tener soporte SMTP, POP3 y aplicaciones que utilizasen java sin ningún problema o debo realizar algún otro cambio.
Gracias de ante mano por tu ayuda.
Hola Zulu,
Probablemente la informacion que necesitas la encontraras en http://www.guia-ubuntu.org/
Un saludo!
Hola Neil, disculpa la pregunta ya que lo aclaras al principio, pero queria saber si puedo aplicar esto con ubuntu 12.04 Desktop y LAMP instalado.
Hola Cristian,
No lo he probado en la Desktop aunque en teoría no deberias de tener ningún problema.
Un saludo.
Gracias por tu ayuda,,,, despues de realizar todo lo descrito e intentado acceder algunas paginas como descargar un controlador de HP desde una terminal y al momento de descargarlo me sale este mensaje (Access has Denied¡) Banned extension : .exe
categories:
Banned extension
you are seeing this error because what you attempted to contain, or is labeled ……….
Alguna solucion,,,, por cierto cuando accedo a noticias de google me pasa igual.
Disculpa ya lo solucione al menos el de la des carga de archivos edite e list de dansguardian y lo habilite, pero las noticias de google sigue siendo el mismo mensaje, creo que debe haber algun contenido que me lo reporta.
Gracias
Hola max, yo diria que estas en lo cierto ,dansguardian te debe estar bloqueando algun contenido.
Hola una pregunta por que al abrir sar no ma aparece:
sarg.conf
y pues asi no puedo configurar nada
solo m aparece
images sarg.php
como le ago para que me aparesca el archivo de configuracion
Ana, por lo poco que puedo entender de tu comentario, lo que quieres es abrir el fichero de configuracion de sarg. Para ello tal y como explico en la entrada hay que escribir :
sudo nano /etc/sarg/sarg.conf
Un saludo.
Hola NeiL. Ante todo TE FELICITO Y AGRADESCO que hayas compartido tu conocimiento con la comunidad de internet.
Estoy bajandome el ubunto server para comenzar a armar todo y te queria hacer una consulta de antemano. Mi idea es brindar acceso full a todos los usuarios de la red, ya que esta solucion la estoy armando para un complejo de viviendas. Por tal motivo no necesito bloquear nada, pero si restringir la descarga para que no me cuelguen un eMule o cualquier otro programa de red p2p.
saludos y gracias
sudo nano /etc/sarg/sarg.conf ya intente de esta forma y abre un archivo vacio.
tiene que mostrar letras y el mi esta vacio
buenas tardes
estoy configurando mi squid
y la configuracion que asigne es la siguiente:
pero al reiniciar el squid m marca error
# Recommended minimum configuration:
#LISTAS DE CONTROL DE ACCESO POR DEFECTO
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl manager proto cache_object
acl CONNECT method CONNECT
#LISTA DE CONTROL DE LAS IP PERMITIDAS
acl ips-permitidas src «/etc/squid3/ips-permitidas»
#LISTA DE CONTROL DE SITIOS DENEGADOS
acl sitios-denegados src «/etc/squid3/sitios-denegados»
#LISTA DE CONTROL DE ACCESO TOTAL-NUESTRA IP
acl acceso-total src «/etc/squid3/acceso-total»
#LISTA DE CONTROL CON EXTENCIONES DE DESCARGA LIMITADAS
acl limitar-descargas src «/etc/squid3/extenciones-limitadas»
#LISTA DE CONTROL PALABRAS DEFINIDAS EN UNA URL
acl porno src «/etc/squid3/porno»
#####INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS#####
#REGLAS
http_access allow localhost
http_access allow ips-permitidos
http_access allow acceso-total
http_access deny sitios-denegados
http_access deny extenciones-limitadas
#REGLA POR DEFECTO#
http_access deny all
#PARAMETROS CONFIGURADOS
http_port 3128
cache_dir aufs /var/spool/squid 2048 16 256
cache_mem 128
cache_swap_log 90
cache_swap_high 95
maximun_object_size_4096 KB
error_directory /usr/share/squid/errors/Spanish
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
Hola Guillermo, lo que tu necesitas se hace a nivel de firewall, suerte con ello porque no es nada facil 🙂
Ana, lo que me dices no es nada normal, ejecuta lo siguiente:
sudo dpkg -l | grep sarg
deberias obtener una salida como esta:
ii sarg 2.3.2-2 squid analysis report generator
Adela, puedes pegar el error que te da?
Me gustaria preguntarte una, en que parte de la configuracion puedo direccionar las paguinas que quiero restringir para que no se puedan visitar. Se puede hacer con la configuracion que estas explicando muchas gracias por tu respuesta
ESTE ES EL ERROR
2012/10/18 14:21:46| WARNING: (B) ‘::/0’ is a subnetwork of (A) ‘::/0’
2012/10/18 14:21:46| WARNING: because of this ‘::/0’ is ignored to keep splay tree searching predictable
2012/10/18 14:21:46| WARNING: You should probably remove ‘::/0’ from the ACL named ‘all’
2012/10/18 14:21:46| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2012/10/18 14:21:46| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2012/10/18 14:21:46| WARNING: For now we will assume you meant to write /32
Hola NEIL
COMO CONFIGURO MIS MAQUINAS LOCALES SI VAN A IR CONECTADAS AL SWITCH Y ESTE VA A ESTAR CONECTADO A LA TARJETA ETH0
CRISTINAS, lo que preguntas es un tema realmente básico, quizas este tutorial no sea para ti.
Jair, echa un vistazo en /etc/dansguardian/lists seguro que encuentras lo que buscas
Adela, vuelve a la configuracion original de squid, dejala como indico en el tutorial y haz las modificaciones de bloqueo usando las listas de dansguardian en /etc/dansguardian/lists
buenas tardes
ola neil
no m funcionan las iptables no tengo salida de internet
ojala m ayudes gracias
Adela, asegurate de los dobles guiones en –dport y en –to-port en las lineas referentes a iptables, es facil que al hacer copiar y pegar se hayan pegado con un guion simple en lugar de uno doble.
no m funciona ya cheke lo de los guiones y aun no tengo salida de internet en la segunda tajeta
Adela, aunque parezca obvio preguntarlo.. ¿has comprobado si tienes ping con el router?
Me encontré con un caso en que pasaba justamente esto y era un problema del cable lan.
Saludos.
Saludos, para los que como yo hicieronun copy paste al crear las reglas del script de iptables, el problema radica que al pegar, lo hace como un solo guion en –dport o –to-port, hay que borrar las que aparecieron al hacer paste y escribirlas manualmente…
Saludos y Felicitaciones!! un excelente pocketmanual!!!
Gracias Milo DC, me alegro que te sea util