Ejercicio Proxy en Ubuntu
En primer lugar debemos instalar Squid en nuestra máquina, desde un terminal ejecutamos el siguiente comando.
$ sudo apt-get install squid3
El siguiente paso será configurar nuestro Squid, editamos el fichero squid.conf
que encontraremos en /etc/squid3
.
nano /etc/squid3/squid.conf
Deberemos modificar las siguientes opciones.
http_port 3128
por esta otra
http_port 192.168.33.176:3128 transparent
3128 es el puerto de Squid y debemos indicar la dirección IP del servidor, la que se encuentre en la parte interna.
Si nuestra máquina tiene suficiente memoria, le quitamos la almohadilla a la opción cache_men
, y utilizamos un valor coherente a nuestra máquina.
cache_mem 512 MB
Buscamos la opción cache_dir
y la ajustamos como en la siguiente línea, aunque aquí los valores de Caché dependerán de nuestras preferencias y máquina.
cache_dir ufs /var/spool/squid3 2048 16 256
Y activamos las siguientes opciones, para asegurar que ningún usuario pueda acceder a los recursos gestionados por Squid.
cache_effective_user proxy
cache_effective_group proxy
Descomentamos la opción half_closed_clients
y la dejamos en off
, esto permitirá a Squid cerrar las peticiones de los clientes que se queden a medias cuando cierran la conexión TCP.
half_closed_clients off
Ahora limitamos el tamaño máximo de los objetos que se guardarán en memoria, esto puede ahorrarnos problemas con el tamaño de la Caché. Descomentamos la siguiente línea y la dejamos en 1024 KB.
maximum_object_size 4 MB
También vamos a indicar cuando debe Squid vaciar la Caché, esto nos permitirá un mejor mantenimiento. Descomentamos las siguientes líneas.
cache_swap_low 90
cache_swap_high 95
En mi caso dejo los valores que nos dan por defecto. Como última modificación en las opciones de configuración de Squid, buscamos la opción memory_pools
, la descomentamos y la ponemos en off
.
memory_pools off
Esta opción, hará que Squid libere la memoria RAM que no esté utilizando.
Por último, tras la siguiente línea,
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
Añadiremos la regla para permitir el acceso a Internet de nuestra red interna.
acl localnet src 192.168.33.0/24
http_access allow localnet
Y con esto ya podemos reiniciar Squid.
service squid3 restart
IPTABLES
Lo próximo es cambiar la regla en IPTABLES con respecto a la configuración de SQUID
iptables -t nat -A PREROUTING -i eth1 -p TCP --dport 80 -j DNAT --to 192.168.33.176:3128
iptables -t nat -A PREROUTING -i eth0 -p TCP --dport 80 -j REDIRECT --to-port 3128
Para crear un listado de dominios no permitidos, también llamados lista negra o blacklist
Instalaremos el SquidGuard
apt-get install squidGuard
Podemos utilizar para configurar el Squidguard según nuestra necesidad, la ubicación de los archivos es en /etc/squidGuard
Lo primero es agregar en /etc/squid3/squid.conf
nano /etc/squid3/squid.conf
url_rewrite_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf
Descargar las base de datos:
cd /var/lib/squidguard/ wget http://www.shallalist.de/Downloads/shallalist.tar.gz tar zxvf shallalist.tar.gz
Configuración básica del archivo /etc/squid3/squidGuard.conf
########################################################################### #### Archivo de configuración para squidGuard #### ## Directorio de listas negras y log dbhome /var/lib/squidguard/db logdir /var/log/squidguard ### ACL de tiempo. ## ¿Son estos los horarios que necesita? time laboral { weekly mtwhf 07:15 - 12:29 weekly mtwhf 13:15 - 16:00 } time almuerzo{ weekly mtwhf 12:30 - 13:14 } time noche { weekly mtwhf 15:45 - 23:55 weekly mtwhf 00:01 - 07:14 } ########################################################################### ### Clases de Filtrado ## Para agregar más, busque en el directorio especificado en dbhome, y revise el contenido de cada directorio. dest sca-sitios { urllist custom/sca-sitios.lst log sitio-dest } dest dropbox-sitios { domainlist custom/dropbox.lst log sitio-dest } dest sitios { urllist custom/sitios.lst log sitio-dest } dest archivos { expressionlist custom/extensiones.lst log archivo-dest } dest porn { domainlist BL/porn/domains log adulto-dest } dest sexo { domainlist BL/sex/lingerie/domains log adulto-dest } dest compras { domainlist BL/shopping/domains log ocio-dest } dest warez { domainlist BL/warez/domains log ocio-dest } dest peliculas { domainlist BL/movies/domains log ocio-dest } dest musica { domainlist BL/webradio/domains log ocio-dest } dest redes { domainlist BL/socialnet/domains log redes-dest } dest descargas { domainlist BL/downloads/domains log ocio-dest } dest proxy { domainlist BL/anonvpn/domains log proxy-dest } dest web-proxy { domainlist BL/redirector/domains log proxy-dest } dest tracker { domainlist BL/tracker/domains log proxy-dest } dest adv { domainlist BL/adv/domains log proxy-dest } ########################################################################### ## ACL de redes ## Combine acá las ACL de tiempo y redes. ## Especifique en el archivo /var/lib/squidguard/db/irrestrictos aquellas IP que puedan navegar sin restricciones src lista-youtube{ iplist custom/youtube.lst } src lista-dropbox{ iplist custom/dropbox-users.lst } src sca{ iplist custom/sca.lst } src lista-blanca{ iplist custom/irrestrictos.lst } src lista-negra{ iplist custom/restrictos.lst } src usuarios_laboral { IP 192.168.106.0/24 within laboral } src usuarios_almuerzo { IP 192.168.33.0/24 within almuerzo } src usuarios_noche { IP 192.168.33.0/24 within noche } # ACL RULES: # Propiamente dichas, los nombres se corresponden con las ACL de redes. # Falta la cuestión de listas negras acl { lista-blanca { pass any }else{ pass any } lista-negra { redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t }else{ redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t } sca { pass sca-sitios !in-addr !archivos !proxy !web-proxy !porn !redes !peliculas !musica !warez !descargas !compras !sexo !any redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t }else{ pass !any redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t } lista-dropbox { pass dropbox-sitios !in-addr !archivos !proxy !web-proxy !porn !redes !peliculas !musica !warez !descargas !compras !sexo !any redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t }else{ pass !any redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t } lista-youtube { pass sitios !in-addr !archivos !proxy !web-proxy !porn !redes !peliculas !musica !warez !descargas !compras !sexo !any redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t }else{ pass !any redirect HTTP://fwmaxbloch.salud.gob.sv/index.php?purl=%u&razon=%t } usuarios_laboral { pass !in-addr !archivos !proxy !web-proxy !porn !redes !peliculas !musica !warez !descargas !compras !sexo !any redirect HTTP://FwMaxBloch.salud.gob.sv/index.php?purl=%u&razon=%t } usuarios_almuerzo { pass !in-addr !archivos !proxy !web-proxy !porn !peliculas !sexo !compras !any redirect HTTP://FwMaxBloch.salud.gob.sv/index.php?purl=%u&razon=%t } usuarios_noche { pass !in-addr !archivos !proxy !web-proxy !porn !redes !peliculas !musica !warez !descargas !compras !sexo !any redirect HTTP://FwMaxBloch.salud.gob.sv/index.php?purl=%u&razon=%t } default { pass none redirect HTTP://FwMaxBloch.salud.gob.sv/index.php?purl=%u&razon=%t } }
Ejemplo de una categoría y una regla para todo:
#
# CONFIG FILE FOR SQUIDGUARD
#
dbhome /usr/local/squidGuard/db
logdir /usr/local/squidGuard/logs
dest porn {
domainlist porn/domains
urllist porn/urls
}
acl {
default {
pass !porn all
redirect HTTP://localhost/block.html
}
}
Ejemplo de tres categorías bloqueadas
dest adv {
domainlist adv/domains
urllist adv/urls
}
dest porn {
domainlist porn/domains
urllist porn/urls
}
dest warez {
domainlist warez/domains
urllist warez/urls
}
acl {
default {
pass !adv !porn !warez all
redirect HTTP://localhost/block.html
}
}
dbhome | Localización de las listas negras |
logdir | Ubicación de los archivos de Registro |
dest | Definición de una categoría a bloquear. Usted puede entrar en el archivo de dominio y url junto con una lista de expresiones regulares (hablar de expresiones regulares más adelante). |
acl | El DEFINICIÓN bloqueo real. En nuestro ejemplo sólo se muestra el valor predeterminado. Podemos tener más de un acl en su lugar. La categoría del porno que definimos en dest es bloqueado por la expresión !porno . Tenemos que agregar el identificador de all después de la lista de bloqueo o los usuarios no serán capaz de navegar. El redirect dice que página mostrar en lugar de la bloqueada. |
Compila la base de datos.
squidGuard -C all
Podemos utilizar un “script” para cargar en IPTABLES similar al siguiente:
nano /etc/iptables_proxy.sh
#!/bin/sh
# IP del servidor SQUID
SQUID_SERVER="192.168.33.176"
# Interface conectada a Internet
INTERNET="eth0"
# Interface interna
LAN_IN="eth1"
# Puerto Squid
SQUID_PORT="3128"
# Limpia las reglas anteriores
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Carga los modulos IPTABLES para NAT e IP con soporte conntrack
modprobe ip_conntrack
modprobe ip_conntrack_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Politica de filtro por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Acceso ilimitado a loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Permite UDP, DNS y FTP pasivo
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# Establece el servidor como Router para la red
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# acceso ilimiato a la LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# Redirige las peticiones de la red interna hacia el proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p TCP --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# Redirige la entrada al proxy
iptables -t nat -A PREROUTING -i $INTERNET -p TCP --dport 80 -j REDIRECT --to-port $SQUID_PORT
# Registrar todo
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP
Encontrar la Información original Cyberciti.
El inconveniente está en que las IPTABLES debes ejecutarlas cada vez que arranquemos la máquina, por eso crearemos un script y haremos que se ejecute siempre al iniciar el equipo.
Copiamos el script en /etc/init.d/
.
cp /etc/iptables_proxy.sh /etc/init.d/iptables_proxy.sh
Cambiamos el propietario y los permisos del script.
cd /etc/init.d
chown root:root iptables_proxy.sh
$ sudo chmod 700 iptables_proxy.sh
A continuación editamos el fichero /etc/init.d/rc.local
.
nano /etc/init.d/rc.local
Y añadimos las siguientes líneas bajo ### END INIT INFO
.
### END INIT INFO
cd /etc/init.d
./iptables_proxy.sh
Reiniciamos el equipo:
restart