Filtrado de contenido en la escuela basado en Ubuntu 18.04 y Squid transparente, con integración en la red en MikroTik y no solo



1. Introducción


El tema del filtrado de contenido en las escuelas está bastante trillado y lleno de información, pero ya está bastante desactualizado debido a la transición de muchos sitios al protocolo HTTPS seguro, con el que la mayoría de las soluciones propuestas no funcionan. Por lo tanto, decidí escribir el artículo más completo de la A a la Z, recopilando toda la información que encontré en las extensiones de Google juntas. El artículo está diseñado para conocimientos básicos en el campo de la administración y es adecuado para profesores de informática.

2. Términos de referencia


Dado: 436-FZ y una escuela en la que muchas computadoras están conectadas en red y conectadas a Internet a través de un enrutador MikroTik o cualquier otro.

Objetivo: hacer el filtrado de contenido de HTTP y HTTPS por la lista blanca para todos excepto su amado y la administración de la escuela.


3. Resolución de problemas


Se encontró una computadora de escritorio no utilizada con un Intel-ohm de doble núcleo, 1 GB de RAM y 80 GB de disco duro.
Para resolver esto, se hará lo siguiente:

  1. Linux Ubuntu Server 18.04 LTS instalado
  2. Transparent Proxy Squid se instala y configura en el servidor, compilado a partir de códigos fuente habilitados para HTTPS.
  3. Integración del servidor en la subred, redirigiendo las solicitudes a Proxy o una opción alternativa (al final)

Empecemos

3.1. Instalar y configurar Ubuntu 18.04


El proceso de instalación es simple. Descargue la distribución de Ubuntu Server 18.04 del sitio oficial. Recomiendo descargar con el instalador anterior, ya que el nuevo, personalmente de mi parte, se descargó infinitamente durante la instalación. Escribimos la imagen en una unidad flash / disco USB de cualquier manera conveniente. Para grabar en una unidad flash USB, recomiendo usar Rufus y al comienzo de la grabación seleccione "Grabar imagen DD". Luego, siguiendo la información en pantalla, instale el sistema. Nos detenemos solo en la elección de los componentes, donde puede seleccionar inmediatamente OpenSSH y eso es todo. No necesitamos mucho, pero necesitamos instalar lo que necesitamos.

Entonces, Ubuntu está instalado. La red, si tiene DHCP, ya está configurada. Entraremos en modo superusuario para que cada vez que no agreguemos sudo a los comandos.

sudo -s 

Ingrese su contraseña y actualice el sistema.

 apt-get update apt-get upgrade 

Instale un editor de texto y un administrador de archivos.

 apt-get install nano mc 

Para guardar el archivo en nano , debe presionar Ctrl + O seguido de Y. Salga del editor presionando Ctrl + X. Puede guardar el archivo inmediatamente antes de salir presionando Ctrl + X seguido de Y.
Para abrir el administrador de archivos, escriba mc . Un NortonCommander DOS o Windows TotalCommander / FAR típico se abre con dos paneles. Aunque estoy acostumbrado a trabajar con la consola, el administrador de archivos también a veces ayuda, por ejemplo, a encontrar el archivo deseado más rápido.

Si no tiene DHCP o si desea una dirección IP separada para su servidor, como yo quería, pasaremos a la configuración.

Configurar dirección IP estática
A diferencia de las versiones anteriores de Ubuntu, en el nuevo 18.04 la red ya no está configurada en las interfaces / etc / network / usual, sino a través de netplan en el archivo /etc/netplan/*.yaml . El archivo puede tener un nombre diferente, pero está ahí solo. / Etc / network / interfaces nos escribe lo siguiente:



Además, si desea actualizar desde una versión anterior a 18.04, la configuración de red permanecerá donde estaba. Netplan solo es relevante para una instalación limpia de 18.04.

Vayamos a configurar la red.

Primero, veamos el nombre de la interfaz de red asignada al sistema operativo y recuérdelo.

 ifconfig 

Ahora abra el archivo de configuración.

 nano /etc/netplan/*.yaml 

Ya debería tener una configuración de DHCP. Traigamos el archivo al siguiente formulario.

 # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets:   : dhcp4: no dhcp6: no addresses: [/24] gateway4:  nameservers: addresses: [77.88.8.7, 77.88.8.3] 

Ingrese su interfaz, dirección y puerta de enlace. DNS recomienda dejar estos: Yandex.DNS Children será una protección adicional. El mismo DNS está configurado en mi enrutador. En cualquier caso, debe especificar el DNS que distribuye el enrutador.

Aquí debe prestar atención a los espacios (es decir, espacios, no pestañas). Cada uno, un tipo de párrafo está separado del espacio anterior. Por ejemplo, si después de los servidores de nombres, la línea de dirección no está separada por un espacio, sino que está alineada con la línea de arriba, cuando intente aplicar la configuración, netplan generará un error.

Aplicar la configuración.

 netplan apply 

Reinicie el servidor, por si acaso.

 reboot 


Además, agregó una opción de configuración de red alternativa tanto para DHCP como para IP estática, si netplan no es adecuado.
Configuración de red alternativa
En Ubuntu 18.04, puede volver a la opción de configuración de red familiar a través de / etc / network / interfaces . Para hacer esto, el archivo en sí mismo indica que necesita instalar la utilidad ifupdown . Instalarlo:
 apt-get install ifupdown 

Ahora abra el archivo de configuración inicial en netplan
 nano /etc/netplan/*.yaml 

y comentar todo su contenido para que no haya conflictos.
A continuación, abra el archivo de configuración de red
 nano /etc/network/interfaces 

Y agréguele:
para IP estática
 auto ___ iface ___ inet static address IP- netmask  gateway  dns-nameservers 77.88.8.7 77.88.8.3 

para dinámico (DHCP)
 auto ___ iface ___ inet dhcp 

Reiniciar el servidor
 reboot 

Si usa esta opción para la configuración de red, en la configuración de Firewall, puede optar por no participar en Webmin por completo y usar la opción de configuración en el spoiler (aunque la variante con Webmin también funcionará)


Ahora debe habilitar el paso de paquetes a través de nuestro servidor. Abra el archivo /etc/sysctl.conf
 nano /etc/sysctl.conf 

Buscamos la cadena net.ipv4.ip_forward = 1 y la descomentamos. Si el valor es 0 , cambie a 1 .
Ingrese el comando para aplicar la configuración
 sysctl -p /etc/sysctl.conf 


Después de configurar la red, le recomiendo que vaya directamente al terminal y continúe trabajando en él. Para hacer esto, si no seleccionó OpenSSH durante la fase de instalación, instálelo.

 apt-get install ssh 

De forma predeterminada, SSH ya está configurado para el inicio de sesión de usuario / contraseña en el puerto 22, pero puede configurarlo usted mismo a través de, por ejemplo, una clave de autorización y con otro puerto para proteger el servidor de ataques externos. Cómo hacer esto está lleno de información en Internet.

Como terminal, uso XShell. Puedes usar el que prefieras.

No necesitamos un servidor DHCP y una segunda tarjeta de red, ya que redirigiremos las solicitudes de los usuarios a nuestro Proxy utilizando el enrutador.

Se ponen los cimientos. Ahora pasemos a instalar y configurar Squid.

3.2. Instalación y configuración de Squid con soporte HTTPS y filtrado de listas


3.2.1. Construye e instala Squid

Como no hay un paquete Squid listo para usar con soporte SSL en los repositorios, deberá ensamblarlo manualmente desde la fuente. Primero, abra el archivo con los repositorios.

 nano /etc/apt/sources.list 

En él descomentamos (eliminamos # al principio) las líneas que comienzan con deb-src .

Después de eso, actualizaremos los paquetes.

 apt-get update 

A continuación, instale las herramientas de ensamblaje.

 apt-get install fakeroot build-essential devscripts 

Y agregue todos los paquetes necesarios para el ensamblaje.

 apt-get build-dep squid3 

Instale la biblioteca para soporte SSL.

 apt-get install libssl1.0-dev 

Vayamos a la carpeta de inicio y creemos una carpeta para el ensamblaje, configurando inmediatamente los derechos necesarios.

 cd ~ mkdir build chown _apt:root build 

Vaya a la carpeta creada y descargue las fuentes de Squid.

 cd build apt-get source squid3 

Aparecerá una carpeta en la carpeta de compilación con el nombre squid3 y el número de versión. En Ubuntu 18.04.3 es 3.5.27. Vamos a entrar en eso.

 cd squid3-3.5.27 

Antes del ensamblaje, debe especificar las opciones. Abre el archivo con ellos.

 nano debian/rules 

Estamos buscando una lista de opciones, como en la imagen


Agregue las siguientes opciones.

 --enable-ssl \ --enable-ssl-crtd \ --with-openssl 

Tenga en cuenta que las opciones ya se han agregado a la imagen, y el carácter "\" debe aparecer después de cada línea en las opciones, excepto la última .

Entonces, todo está listo para el montaje. Ahora pasemos a la carpeta de origen Squid, aunque ya debería estar en ella.

 cd ~/build/squid3-3.5.27 

E ingrese el comando para construir.

 debuild -d 

El montaje llevará mucho tiempo, me llevó un promedio de 2 a 4 horas. Depende de la velocidad de la computadora. Al final del ensamblaje, verá un error de firma del paquete. Esto es normal: ignore el error.

Ahora ve a la carpeta Build.

 cd ~/build 

E instala Squid.

 dpkg -i squid*.deb 

Inmediatamente se encuentra con un error sobre dependencias insatisfechas e ingrese el comando

 apt-get install -f 

Después de la instalación, marcamos los paquetes para que no se sobrescriban después de actualizar el sistema.

 apt-mark hold squid apt-mark hold squid-common apt-mark hold squidclient 

3.2.2. Configurando Squid y Filtrando

Entonces, Squid está instalado, queda por configurarlo para nuestras necesidades.

Todas las configuraciones están en el archivo /etc/squid/squid.conf . Contiene muchos comentarios y a primera vista parece muy complicado, pero de hecho no hay nada súper complicado. Para comenzar, lo limpiaremos de los comentarios copiando primero el original, si de repente desea estudiarlo con más detalle. Para mayor comodidad, iremos directamente a la carpeta con Squid.

 cd /etc/squid cp squid.conf squid.conf.backup cat squid.conf.backup | egrep "^[^#]" > squid.conf 

Ahora abra squid.conf

 nano squid.conf 

Como puede ver, se despejó de comentarios y dejó de ser tan voluminoso como parecía.
Debajo del spoiler, publicaré mi archivo con configuraciones que funcionan perfectamente, y debajo describiré en bloques qué y cómo.

Configuración de Squid.conf
 acl localnet src 192.168.0.0/24 acl worktime time 08:00-15:00 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 acl blacklist url_regex -i "/etc/squid/blacklist" acl whitelist url_regex -i "/etc/squid/whitelist" http_access allow localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow CONNECT http_access deny blacklist http_access allow whitelist http_access deny all worktime http_access allow all http_port 3128 http_port 3129 intercept https_port 3130 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squid.pem always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER acl blacklist_ssl ssl::server_name_regex -i "/etc/squid/blacklist_ssl" acl whitelist_ssl ssl::server_name_regex -i "/etc/squid/whitelist_ssl" acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate blacklist_ssl ssl_bump splice whitelist_ssl ssl_bump terminate all worktime ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB # cache_mem 512 MB maximum_object_size_in_memory 512 KB memory_replacement_policy lru cache_dir aufs /var/spool/squid 2048 16 256 # access_log daemon:/var/log/squid/access.log squid logfile_rotate 1 coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320 


El primer bloque es el siguiente.

 acl localnet src 192.168.0.0/24 acl worktime time 08:00-15:00 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 

Es responsable de los parámetros estándar de acl. En ella, en localnet, cambiamos la red local a la nuestra, y también agregamos un tiempo de trabajo (opcional). Agregué tiempo de trabajo en vista del hecho de que los maestros a menudo acuden a mí quejándose de que no pueden encontrar nada, todo es inaccesible. Por supuesto, me alegro de que todo funcione como debería, pero, francamente, estoy cansado de escuchar esto. Ahora estoy informando su reclamo de que después de las 15:00 el filtro está desactivado y que pueden (casi) encontrar libremente la información que necesitan. Puede agregar su tiempo o dejar el filtro durante todo el día sin agregar esta acl.

El segundo bloque define las listas de sitios permitidos y prohibidos para HTTP y tiene el siguiente aspecto.

 acl blacklist url_regex -i "/etc/squid/blacklist" acl whitelist url_regex -i "/etc/squid/whitelist" 

Añadiremos listas de sitios permitidos y prohibidos más adelante, y se colocarán en los archivos especificados en acl.

El tercer bloque determina los parámetros de acceso a través de HTTP y se ve así

 http_access allow localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow CONNECT http_access deny blacklist http_access allow whitelist http_access deny all worktime http_access allow all 

Aquí se requiere el elemento http_access allow CONNECT , ya que sin él Squid no permitiría que nadie en Internet. Las siguientes son las reglas en las listas en blanco y negro. Los parámetros denegar y permitir niegan y permiten el acceso, respectivamente. Después de ellos viene la regla de prohibir completamente todo el tráfico HTTP durante el horario comercial. Si no estableció las horas de trabajo, elimine el tiempo de trabajo y la prohibición será permanente. Un punto importante es el orden de las reglas, ya que Squid las lee de arriba a abajo
El cuarto bloque define la configuración del puerto para Squid.

 http_port 3128 http_port 3129 intercept https_port 3130 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squid.pem 

El primer parámetro es necesario para que el error "ERROR: no se hayan configurado puertos de proxy de reenvío" no aparezca infinitamente en los registros. Llena el registro y, por lo tanto, la memoria. Un error común, pero por alguna razón, en nuestro segmento ru no encontré cómo solucionarlo, los foros extranjeros ayudaron. El segundo parámetro define el puerto del protocolo HTTP. Interceptar significa transparencia de proxy, es decir, no será necesario prescribir configuraciones en cada computadora.
El tercer parámetro define el puerto HTTPS y sus opciones. Esta es una larga línea. El archivo squid.pem es nuestro certificado, que crearemos más adelante.

El quinto bloque define los parámetros de la conexión SSL con Squid. En particular, indica que todo el tráfico debe dirigirse inmediatamente a Internet, sin usar cachés superiores, y los dos últimos permiten conexiones incluso con errores de verificación de certificados, ya que la decisión de visitar dicho recurso debe ser tomada por el usuario, no por el servidor. Se ve así.

 always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER 

El sexto bloque establece los parámetros de acl de las listas "negra" y "blanca", que se crearán más adelante, así como la profundidad de la intercepción del tráfico HTTPS.

 acl blacklist_ssl ssl::server_name_regex -i "/etc/squid/blacklist_ssl" acl whitelist_ssl ssl::server_name_regex -i "/etc/squid/whitelist_ssl" acl step1 at_step SslBump1 

El séptimo bloque determina los parámetros de acceso utilizando el protocolo HTTPS. Aquí, la prohibición y el permiso ya son responsables de rescindir y empalmar, respectivamente. Nuevamente, no olvide eliminar el horario laboral si no tiene un horario laboral específico.

 ssl_bump peek step1 ssl_bump terminate blacklist_ssl ssl_bump splice whitelist_ssl ssl_bump terminate all worktime ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB 

El octavo bloque establece el caché y el registro de nuestro calamar. Aquí vale la pena señalar solo el parámetro logfile_rotate , que indica la cantidad de días durante los cuales se almacena el registro.

 # cache_mem 512 MB maximum_object_size_in_memory 512 KB memory_replacement_policy lru cache_dir aufs /var/spool/squid 2048 16 256 # access_log daemon:/var/log/squid/access.log squid logfile_rotate 1 coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320 

Esto completa la configuración de squid.conf. Guardamos el archivo y procedemos a la creación del certificado y las listas.

Vamos a la carpeta con Squid

 cd /etc/squid/ 

E ingrese el siguiente comando para crear el certificado

 openssl req -new -newkey rsa:1024 -days 36500 -nodes -x509 -keyout squid.pem -out squid.pem 

A continuación, deberá ingresar los datos del certificado. El certificado es válido por 100 años para olvidarlo por mucho tiempo. Solo es necesario para Proxy.

Ahora crea nuestros archivos de lista.

 touch blacklist touch whitelist cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

Los sitios se enumeran en forma de expresiones regulares. Por ejemplo, para desbloquear mail.ru, abra la lista blanca

 nano whitelist 

y agregue la siguiente expresión.

 mail\.ru 

Ahora bloquee Games.Mail.ru. Abramos nuestra lista negra

 nano blacklist 

y escribe la siguiente expresión en ella

 games\.mail\.ru 

Dado que, por regla general, un bloqueador de la lista negra está por encima de nuestra lista blanca, cuando cambia a mail.ru, el sitio se abrirá como se esperaba (excepto las imágenes, pero más sobre eso más adelante), y si intenta cambiar a Juegos, Squid us No lo dejaré ir.

Algunos sitios tienen muchos subdominios, subdominios, etc. Como, por ejemplo, mail.ru almacena sus imágenes en imgsmail.ru. Con respecto a otros sitios similares, debe abrir el sitio deseado en cualquier navegador (uso Chrome) y, posteriormente, las herramientas de desarrollador (en Chrome se llaman presionando F12).



Vaya a la pestaña Fuentes y vea de qué otros recursos carga información el sitio.

Después de agregar sitios, cópielos a las listas para HTTPS.

 cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

Sugerencia de relleno de lista
Cree un archivo de texto plano en su computadora, busque y copie la lista de sitios permitidos en él, agréguelo al suyo. Luego, en un cuaderno normal, reemplace automáticamente el punto con una barra diagonal (\.) Y elimine el innecesario con el mismo reemplazo automático (www, http, el carácter "/", etc.). Luego, dicho archivo, usando el terminal, puede copiarse inmediatamente en las hojas del servidor.

Ahora verifique la configuración.

 squid -k check 

Si todo está bien, detén a Squid.

 /etc/init.d/squid stop 

Reconstruir el caché

 squid -z 

Y corre Calamar otra vez

 /etc/init.d/squid start 

Después de cualquier cambio en las listas o en la configuración de Squid, debe volver a cargarse con el comando

 /etc/init.d/squid restart 

También puede cambiar la página de restricción de acceso (solo funciona en HTTP) en la ruta / usr / share / squid / errors / ~ Russian-1251 . Busque en la carpeta el archivo ERR_ACCESS_DENIED y edítelo . La sintaxis del archivo es HTML.

3.3. Supervisión del estado del servidor y configuración del firewall


Para monitorear el estado de nuestro servidor, instale la utilidad Webmin , con la ayuda de la cual configuramos nuestro Firewall. Además, a través de él puede monitorear el estado de la CPU, RAM, etc., actualizar paquetes, agregar y configurar componentes, y mucho más. Tiene su propio terminal, aunque torpe. La utilidad funciona a través de cualquier navegador, por lo tanto, puede conectarse a nuestro servidor desde cualquier computadora en la red, lo cual es lo suficientemente conveniente, aunque no seguro. Si lo desea, la conexión puede limitarse solo a direcciones IP individuales en el "Control de acceso IP" en Webmin.

Antes de comenzar la instalación, agregue el repositorio de Webmin. Fuentes abiertas.lista.

 nano /etc/apt/sources.list 

Y agregue la línea de abajo.

 deb http://download.webmin.com/download/repository sarge contrib 

Ahora instale la clave GPG con la que se firman los paquetes en el repositorio de Webmin

 cd /root wget http://www.webmin.com/jcameron-key.asc apt-key add jcameron-key.asc 

A continuación, actualizamos la lista de paquetes e instalamos la utilidad

 apt-get update apt-get install webmin 

Puede conectarse al servidor en cualquier navegador ingresando a la barra de direcciones

 IP__:10000 

Por defecto, Webmin se conecta a través de SSL, y la mayoría de los navegadores dan un error de certificado no confiable. Para no elegir la confianza cada vez, deshabilite SSL. Para hacer esto, abra el archivo /etc/webmin/miniserv.conf

 nano /etc/webmin/miniserv.conf 

Encuentre la cadena ssl = 1 en ella y reemplácela con ssl = 0 . En el mismo archivo, puede cambiar el puerto de conexión. Por defecto es 10000. Puedes poner cualquiera gratis.

Una vez conectado a Webmin, vaya a Webmin -> Configuración de Webmin y cambie el idioma al ruso. Luego vaya a Red -> Firewall . Por defecto, nuestro firewall está limpio. Vamos al final y enfrente de " Habilitar en el arranque", seleccione "Sí" . Haga clic en "Aplicar configuración" . Ahora la configuración de nuestro Firewall se especifica en el archivo /etc/webmin/firewall/iptables.save y se inicia con el sistema. Si no existe dicho archivo, mire lo que está escrito en la línea "Archivo con reglas" en la pestaña Firewall en Webmin. Vamos a abrirlo en la terminal.

 nano /etc/webmin/firewall/iptables.save 

Vamos al bloque * nat y al final antes de COMMIT agregamos las siguientes reglas.

 -A PREROUTING -p tcp -m tcp -i _ --dport 80 -j DNAT --to-destination ip_:3129 -A PREROUTING -p tcp -m tcp -i _ --dport 443 -j REDIRECT --to-ports 3130 

Estas reglas dirigen el tráfico que va a los puertos 80 (HTTP) y 443 (HTTPS) del servidor a los puertos de nuestro Squid. Aquí presenté dos variantes de las reglas con DNAT y REDIRECT. Puede usar ambos, o tomar una opción colocando los puertos apropiados.

Configurar FIrewall para una configuración de red alternativa
Esta opción es adecuada si utilizó la configuración de red alternativa descrita anteriormente.
Primero, cree un archivo con las reglas para nuestro Firewall y dele el derecho de ejecutarlo.
 touch /etc/nat chmod +x /etc/nat 

Ábrelo
 nano /etc/nat 

Y agregue el siguiente contenido
 #!/bin/sh #Firewall iptables -t nat -A PREROUTING -p tcp -m tcp -i _ --dport 80 -j DNAT --to-destination ip_:3129 iptables -t nat -A PREROUTING -p tcp -m tcp -i _ --dport 443 -j REDIRECT --to-ports 3130 

Como en el caso de Webmin, presenté dos variantes de las reglas con DNAT y REDIRECT. Puede usar ambos, o tomar una opción colocando los puertos apropiados.
Ahora agregue nuestro archivo a la descarga inmediatamente después de iniciar la red. Abra el archivo de configuración de red
 nano /etc/network/interfaces 

Y agregue la línea al final del archivo
 post-up /etc/nat 

PD: la ventaja de esta opción es que puede agregar sus propias reglas en el futuro simplemente editando el archivo / etc / nat. Webmin es un poco más complicado.

Esto completa la configuración del servidor. Reiniciarlo.

 reboot 

Y pasemos a configurar el enrutador MikroTik.

3.4. Configuración de un enrutador MikroTik para redirigir el tráfico a Proxy


Suponemos que ya ha descargado la utilidad WinBox para control remoto, Internet y la red local están configurados, el firewall en el enrutador está limpio. conoce el nombre de la interfaz LAN (puede verla en IP - Servidor DHCP - DHCP ).

a) Vaya a WinBox, vaya a IP - Servidor DHCP - Arrendamientos . En la lista buscamos computadoras IP para las cuales el filtrado no funcionará (director, administración), haga clic derecho sobre ellas y seleccione Make Static en el menú. Junto a ellos, la letra "D" debería desaparecer, lo que significa Dinámico. Ahora, estas direcciones se asignarán de forma estática inmediata a estas computadoras, independientemente del tiempo de arrendamiento, por la dirección MAC. Si la computadora portátil se usa a través de Wi-Fi y cable, debe seleccionar Make Static en ambas direcciones MAC.

b) A continuación, vaya a IP - Firewall - Listas de direcciones y haga clic en el signo más azul "+" . En el campo Nombre , especifique el nombre de nuestro grupo de direcciones brillantes sin filtrar, por ejemplo, "Administradores". En el campo Dirección , especifique una dirección IP de aquellos a quienes se les ha asignado una estática. Repetimos esto para cada dirección, seleccionando nuestro grupo en el campo Nombre con una flecha.

c) Vaya a la pestaña Mangle en la misma IP - Firewall y haga clic en "+" . Se abrirá una ventana con pestañas. En la pestaña General , complete los siguientes campos:

 Chain - Prerouting Src. Address - __proxy Protocol - 6 (tcp) Dst. Port - 80 In. Interface - __ 

En la pestaña Acción , verifique el valor Aceptar y haga clic en Aceptar.

Repita el proceso, pero en el campo Dst. Puerto establece el valor en 443 .

d) Haga clic en "+" nuevamente y en la pestaña General , nuevamente completamos los siguientes campos:

 Chain - Prerouting Protocol - 6 (tcp) Dst. Port - 80 In. Interface - __ 

Vaya a la pestaña Avanzado y en el campo Src. Lista de direcciones seleccione nuestra lista de direcciones de administración " Administradores ". Asegúrese de hacer clic en el cuadro que aparece junto a la lista. Aparecerá un signo de exclamación "!". , que significa lógico NO o NEGATIVO.

Vaya a la pestaña Acción y complete los campos:

 Action - mark routing New Routing Mark - to_proxy Passthrough -   

Haga clic en Aceptar y realice las mismas acciones, pero en el campo Dst. Puerto especifica el valor 443 .

e) Finalmente, agregue la última regla. Haga clic en el signo más y complete los siguientes campos en la pestaña General :

 Chain - Prerouting In. Interface - __ Routing Mark - to_proxy 

Como resultado, lo siguiente debería suceder con sus parámetros. El orden es importante!



f) Entramos en IP - Rutas y presionamos "+". Rellene los siguientes campos:

 Dst. Address - 0.0.0.0/0 Gateway - __proxy Routing Mark - to_proxy 

Haga clic en Aceptar y listo. Con el servidor encendido, todo el tráfico HTTP y HTTPS pasará por nuestro Squid.

3.5. Configuración alternativa para MikroTik y otros enrutadores


Esta opción es adecuada tanto para el enrutador MikroTik como para cualquier otro, incluso el más simple (excepto las piezas de proveedor alquiladas que usted mismo sabe). En este caso, implementamos el uso compartido del acceso a Internet no en el enrutador, sino en Squid. Entonces comencemos.
a) Asumiremos que ha alcanzado este punto completando todos los niveles superiores, incluida la configuración de la redirección a Proxy en MikroTik. Para un funcionamiento sin problemas de la opción descrita, debemos cancelar el subpárrafo e) del párrafo 3.4 de este artículo. Puede cancelar todo el punto 3.4 (dejando, tal vez, el subpárrafo a) para que nuestras IP no cambien), pero esto es opcional: es importante que cancelemos el enrutamiento en sí. Para hacer esto, vaya a IP - Rutas , busque nuestra ruta, selecciónela y haga clic en la cruz roja (no un signo más, sino la cruz al lado de la marca de verificación). La ruta se volverá gris => está deshabilitada. El filtro también está desactivado, ahora todos los clientes van a Internet directamente a través de un enrutador.

b) Ahora ve a nuestro servidor y ve a la carpeta con Squid
 cd /etc/squid/ 

Abra el archivo de configuración.
 nano squid.conf 

Y lo agregamos en bloques:
en el primer bloque inmediatamente después de la línea con acl localnet ...
 acl admins src "/etc/squid/admins-ip" # IP   acl students src "/etc/squid/students-ip" # IP   

No necesitamos una lista con las computadoras de los maestros, ya que se entiende que todos los demás son maestros. Pero puede agregarlo usted mismo con las reglas correspondientes en otros bloques.
En el segundo bloque
 acl whitelist-stud url_regex -i "/etc/squid/whitelist-stud" #      

En el tercer bloque después de http_access, denegar la lista negra
 http_access allow admins #      http_access allow students whitelist-stud #       http_access deny students #        

Además, el bloque permanece sin cambios, ya que los maestros (todas las demás IP) lo siguen, filtrando por su lista blanca y durante las horas de trabajo (si está indicado). También puede permitir que el grupo de administradores omita la lista negra estableciendo la regla de permiso por encima de la prohibitiva, o agregue direcciones IP separadas (por ejemplo, la suya propia) a un acl separado y colóquelo en las reglas sobre la lista negra.
Los bloques cuarto y quinto no cambian.
En el sexto bloque, agregue
 acl whitelist-stud_ssl ssl::server_name_regex -i "/etc/squid/whitelist-stud_ssl" 

En el séptimo bloque, agregue después de ssl_bump terminar blacklist_ssl
 ssl_bump splice admins ssl_bump splice students whitelist-stud_ssl ssl_bump terminate students 

El principio es el mismo que en el tercer bloque.
El resto no ha cambiado. Guardar y salir

c) Ahora cree nuestras listas de direcciones IP.
 touch admins-ip touch students-ip 

Y listas blancas para estudiantes.
 touch whitelist-stud cp whitelist-stud whitelist-stud_ssl 

Agregue las direcciones IP y sitios requeridos a las listas apropiadas. En la lista de sitios de estudiantes, puede copiar la lista de maestros eliminando los sitios que los estudiantes no necesitan. La copia de archivos en Linux se realiza mediante el comando
 cp <    > <    > 

Reiniciar Calamar
 /etc/init.d/squid restart 


d) Hemos llegado a lo más importante, a saber, cómo hacer que los clientes se conecten en línea a través de nuestro Proxy. Necesitamos cambiar la puerta de enlace de nuestro servidor DHCP de la dirección del enrutador a la dirección de nuestro servidor. Por supuesto, para esto, la dirección del servidor debe ser estática o estar vinculada al MAC.
En MikroTik:
Vaya a IP - Servidor DHCP - Red y haga doble clic en nuestra red. En el campo Puerta de enlace, cambie la dirección del enrutador a la dirección del servidor proxy. Haga clic en Aceptar y listo. Puede reiniciar el enrutador para que la configuración se actualice correctamente para todos los clientes activos. Después de eso, es probable que los clientes cambien el tipo de red a pública (si era privada).
En un enrutador normal:
busque en el manual de su enrutador dónde cambiar la puerta de enlace del servidor DHCP, pero diré lo que hay en su configuración :)

En pocas palabras: como resultado de esta solución alternativa, pudimos ajustar el acceso por IP y listas, y obtener direcciones IP normales de clientes en los registros de Squid. Si necesita que algunos clientes se conecten en línea evitando Proxy a través de un enrutador, lea el spoiler.
Proxy de omisión de Internet
, - Squid , , ,


4. Conclusión


Entonces, para resumir todo lo anterior. Logramos instalar y configurar Linux Ubuntu 18.04 LTS desde cero, construir e instalar Squid con soporte HTTPS, configurar el filtrado de la lista blanca, integrar el servidor Proxy en nuestra red sin la necesidad de instalar un servidor DHCP adicional.

5. Lista de fuentes


Al crear el artículo, se utilizaron diversos materiales de los sitios del Blog técnico de Interface LLC y especialistas en seguridad web: filtro web para su red , así como conocimiento y experiencia personal.
Al editar y complementar el artículo, los siguientes usuarios ayudaron mucho: Kanlas , PetRiot , Barsook . Muchas gracias a ellos por su ayuda y ayuda.

6. Notas del autor.


  1. Cualquier trabajo con el servidor debe hacerse en modo superusuario agregando sudo antes del comando o ingresando el comando sudo -s una vez .
  2. Squid \ , , , . .
  3. , . , 1000 .
  4. , IP- Squid. Squid IP- — Mikrotik. , DHCP , . , , , IP .Barsook
  5. Para que Squid funcione con una gran cantidad de clientes (más de 50), se requiere al menos 1 GB de RAM. Más preferiblemente, como Squid come memoria. Puede verificar el estado de la memoria ingresando el comando superior .
  6. Recomiendo usar ambas opciones para configurar el enrutador, ya que si especifica explícitamente una puerta de enlace diferente en la configuración de red (el enrutador mismo), puede omitir el bloqueo.


UPD1: se agregó una configuración de red alternativa y Firewall
UPD2: se agregó una opción de configuración de enrutador alternativa, donde se solucionaron los problemas con la visualización de direcciones en los registros de Squid.
UPD3: se agregó una solución en 3.1 - permitiendo que los paquetes pasen por el servidor, que olvidó agregar inicialmente. De lo contrario, Internet no funciona. Gracias a Dmitry1986 por probar el artículo.

Source: https://habr.com/ru/post/473584/


All Articles