Proxy transparente con soporte para MAC

Hoy documentaré como instalo un proxy transparente con soporte para MAC. Esto funciona en cualquier distribución, sólo se requiere descargar el código fuente, compilar, instalar, configurar y ejecutar. Algunas veces empleo el soporte para MAC para evitar que el usuario cambie el IP del terminal y logre acceder a privilegios de navegación no asignado. Si bien es cierto que el usuario podría cambiar la MAC de la tarjeta de red del terminal esto resulta siendo más tedioso, en fin, si el usuario desea saltar los controles siempre encontrará una forma de hacerlo por eso es recomendable monitorear los servicios de red para identificar anomalías e intentos de uso de servicios no autorizados.

Para este documento descargaré y compilaré desde el código fuente ya que puedo habilitar opciones que no se encuentran disponibles con un programa pre-compilado o en un programa empaquetado para una distribución en especial, por eso descargo el último código fuente desde y usando:

wget -c http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE8.tar.gz

Una vez descargado el código fuente, suelo desempaquetar en /opt, así que me ubico en /opt y ejecuto esto, como se observa en el ejemplo, el código fuente fué descargue en /tool:

root@armaged0n:/opt# tar -zxvf /tool/squid-3.0.STABLE8.tar.gz

Luego ingreso a la carpeta:

root@armaged0n:/opt$ cd  squid-3.0.STABLE8

Ahora ejecuto la siguiente linea:

root@armaged0n:/opt/squid-3.0.STABLE8# ./configure –enable-linux-netfilter  –enable-arp-acl

Espero un momento mientras se compila. Aquí lo que estoy haciendo es compilar habilitando el soporte para MAC y además para proxy transparente. Luego se ejecuta:

root@armaged0n:/opt/squid-3.0.STABLE8# make && make install

Esa es básicamente la instalación, a partir de este momento debo considerar las siguientes carpetas de trabajo:

/usr/local/squid —> Carpeta creada por la instalación indicada.

/usr/local/squid/etc/acls –> Carpeta donde localizo info de MAC y dominios permitidos -crear-.

/cache —> Carpeta donde alojaré la estructura de directorios de soporte al caché. -crear-.

/var/log/squid/ —> Carpeta donde se alojará los log de squid. Si no existe, crear.

Luego hacemos lo siguiente:

chown -R nobody:nobody /cache  /var/log/squid

chmod -R g+w /cache /var/log/squid

Ahora procedo a editar el archivo squid.conf para ello lo edito, aquí use el editor preferido, en mi caso:

root@armaged0n:/opt/squid-3.0.STABLE8# mcedit /usr/local/squid/etc/squid.conf

El archivo tiene muchas partes o secciones, sólo colacaré lo que es necesario:

#       WELCOME TO SQUID 3.0.STABLE8
#       —————————-

# ACCESS CONTROLS
# —————————————————————————–
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

acl restringido arp “/usr/local/squid/etc/acls/restringido” –> regla 1
acl listaweb dstdomain “/usr/local/squid/etc/acls/listaweb” –> regla 2
acl superior arp “/usr/local/squid/etc/acls/superior” –> regla3

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

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

http_access allow restringido listaweb –> asocio regla 1 y regla 2
http_access allow superior –> permito la regla 3 sin restriccion de acceso

http_access deny all
icp_access deny all
htcp_access deny all

# NETWORK OPTIONS
# —————————————————————————–
http_port 192.168.0.254:8080 transparent –> asocio la interfaz que escuchará y el port

# MEMORY CACHE OPTIONS
# —————————————————————————–
cache_mem 64 MB
maximum_object_size_in_memory 8 KB
memory_replacement_policy lru

# DISK CACHE OPTIONS
# —————————————————————————–
cache_replacement_policy lru
cache_dir ufs /cache 1000 16 256  –> la carpeta /cache tiene 1GB de espacio
maximum_object_size 4096 KB
cache_swap_low 90
cache_swap_high 95

# LOGFILE OPTIONS
# —————————————————————————–
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
logfile_rotate 10
mime_table /usr/local/squid/etc/mime.conf
pid_filename /var/log/squid/squid.pid

# OPTIONS FOR FTP GATEWAYING
# —————————————————————————–
ftp_user Squid@server.com
ftp_list_width 32
ftp_passive off  –> recomendable

# OPTIONS FOR TUNING THE CACHE
# —————————————————————————–
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern (cgi-bin|\?)    0       0%      0
refresh_pattern .               0       20%     4320

# HTTP OPTIONS
# —————————————————————————–
ie_refresh on

# ADMINISTRATIVE PARAMETERS
# —————————————————————————–
cache_effective_user nobody
cache_effective_group nobody

# ICP OPTIONS
# —————————————————————————–
icp_port 3130

# ERROR PAGE OPTIONS
# —————————————————————————–
error_directory /usr/local/squid/share/errors/Spanish -> El nombre lo dice

# DNS OPTIONS
# —————————————————————————–
dns_nameservers 208.67.222.222  200.48.225.146

Ahora procedo a declarar las MAC de los terminales con restricción -regla 1-

root@armaged0n:/usr/local/squid/etc/acls# cat restringido
00:1B:78:B7:3A:5D   ## ip 192.168.0.10
00:14:85:AC:4C:91   ## ip 192.168.0.11
00:14:85:AC:7C:53   ## ip 192.168.0.12

Ahora procedo a declarar los dominios que asociaré a la regla 1 -regla 2-

root@armaged0n:/usr/local/squid/etc/acls# cat listaweb
.dominiox1.com
.dominiox2.net

Ahora procedo a declarar las MAC de terminales sin restriccón -regla 3-

root@armaged0n:/usr/local/squid/etc/acls# cat superior
00:1B:78:B7:4A:5D   ## ip 192.168.0.13
00:14:85:AC:5C:91   ## ip 192.168.0.14

Casi terminado ejecuto esto: /usr/local/squid/sbin/squid -z  –> Creo la estructura de squid localizada en la carpeta /cache.

Luego ejecuto: /usr/local/squid/squid -D –> Ejecuto el demonio squid

Ejecuto netstat -l -n -v  y verifico que el port 8080 se encuentre escuchando, en mi caso:

tcp        0      0 192.168.0.254:8080      0.0.0.0:*               LISTEN

Para el firewall sólo es necesario colocar esta regla:

iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 80 -j REDIRECT –to-port 8080

En la regla anterior debo considerar que la interfaz eth1 del equipo se encuentra mirando hacia la Lan, por ello cambie según corresponda. Está de más decir que el IP asignado a eth1 es 192.168.0.254 por ello lo declaré así en squid.conf.

Con lo anteriormente indicado sólo necesito probar en un terminal de la red mientras monitoreo mediante el comando:

tail -f /var/log/squid/access.log

Game over.


Escribe un comentario