基于Ubuntu 18.04和透明Squid在学校进行内容过滤,并且不仅集成到MikroTik上的网络中



1.简介


学校中的内容过滤这一主题颇具技巧性,并充满了信息,但是由于许多站点向安全HTTPS协议的过渡,该内容已经过时了,大多数提议的解决方案都无法使用该协议。 因此,我决定写从A到Z的最完整的文章,收集我在Google扩展中发现的所有信息。 本文专为管理领域的基础知识而设计,适合计算机科学教师使用。

2.职权范围


给定的: 436-FZ和一所学校,其中许多计算机通过MikroTik路由器或任何其他路由器进行联网并连接到Internet。

目标:通过白名单对除您心爱的学校管理人员之外的所有人进行HTTP和HTTPS内容过滤。


3.解决问题


发现未使用的台式计算机具有双核Intel-ohm,1 GB RAM和80 GB硬磁盘。
为了解决这个问题,将执行以下操作:

  1. 已安装Linux Ubuntu Server 18.04 LTS
  2. 透明代理Squid已在服务器上安装和配置,并通过具有HTTPS支持的源代码进行编译。
  3. 通过将请求重定向到Proxy或其他选项(最后),将服务器集成到子网中

让我们开始吧。

3.1。 安装和配置Ubuntu 18.04


安装过程很简单。 从官方站点下载Ubuntu Server 18.04发行版。 我建议使用旧的安装程序进行下载,因为新的安装程序(是我本人亲自安装的)在安装过程中会无休止地下载。 我们以任何方便的方式将图像写入USB闪存驱动器/磁盘。 对于在USB闪存驱动器上进行录制,我建议使用Rufus,并在录制开始时选择“录制DD图像”。 接下来,按照屏幕上的信息,安装系统。 我们只讨论组件的选择,您可以在其中立即选择OpenSSH就是这样。 我们不需要太多,但是我们需要安装所需的东西。

因此,已安装Ubuntu。 如果您有DHCP,则网络已配置。 我们将进入超级用户模式,这样每次我们都不会在命令中添加sudo。

sudo -s 

输入密码并更新系统。

 apt-get update apt-get upgrade 

安装文本编辑器和文件管理器。

 apt-get install nano mc 

要将文件保存在nano中 ,必须按Ctrl + O,然后按Y。 按下Ctrl + X退出编辑器 您可以在退出前按Ctrl + X,然后按Y ,以立即保存文件。
要打开文件管理器,请输入mc 。 典型的NortonCommander DOS或Windows TotalCommander / FAR带有两个面板。 尽管我习惯于使用控制台,但文件管理器有时还可以帮助例如更快地找到所需的文件。

如果您没有DHCP或想要一个服务器的单独IP地址(如我所愿),那么我们将继续进行配置。

配置静态IP地址
与以前版本的Ubuntu不同,在新的18.04中,不再在通常的/ etc / network / interfaces中配置网络 ,而是通过/etc/netplan/*.yaml文件中的netplan进行配置 。 该文件的名称可能不同,但仅此名称而已。 / etc / network / interfaces本身给我们写了以下内容:



另外,如果您想从18.04之前的版本升级,网络设置将保持原样。 Netplan仅与18.04的全新安装有关。

让我们开始建立网络。

首先,让我们看一下分配给OS的网络接口的名称,并记住它。

 ifconfig 

现在打开设置文件。

 nano /etc/netplan/*.yaml 

它应该已经有一个DHCP设置。 让我们将文件转换为以下格式。

 # 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] 

输入您的界面,地址和网关。 DNS建议不要使用这些内容-Yandex.DNS Children将作为附加保护。 在我的路由器中配置了相同的DNS。 无论如何,您都必须指定路由器分发的DNS。

在这里,您需要注意空格(即空格,而不是制表符)。 每个段落都与前一个空格分开。 例如,如果在名称服务器之后地址行不是由空格隔开,而是与上面的行对齐,那么当您尝试应用设置时,netplan将给出错误。

应用设置。

 netplan apply 

重新启动服务器,以防万一。

 reboot 


此外,如果netplan不适合,他还为DHCP和静态IP添加了备用网络配置选项。
备用网络设置
在Ubuntu 18.04中,您可以通过/ etc / network / interfaces返回熟悉的网络配置选项。 为此,文件本身指示您需要安装ifupdown实用程序。 安装它:
 apt-get install ifupdown 

现在在netplan中打开初始设置文件
 nano /etc/netplan/*.yaml 

并注释掉其所有内容,以免发生冲突。
接下来,打开网络设置文件
 nano /etc/network/interfaces 

并添加到它:
用于静态IP
 auto ___ iface ___ inet static address IP- netmask  gateway  dns-nameservers 77.88.8.7 77.88.8.3 

用于动态(DHCP)
 auto ___ iface ___ inet dhcp 

重新启动服务器
 reboot 

如果您将此选项用于网络设置,则可以在“防火墙”设置中完全选择退出Webmin,并使用扰流板下的配置选项(尽管带有Webmin的变体也可以使用)


现在,您需要启用通过我们服务器的数据包传递。 打开文件/etc/sysctl.conf
 nano /etc/sysctl.conf 

我们在其中寻找字符串net.ipv4.ip_forward = 1并取消注释。 如果值为0 ,则更改为1
输入命令以应用设置
 sysctl -p /etc/sysctl.conf 


设置网络后,建议您直接进入终端并继续操作。 为此,如果在安装阶段未选择OpenSSH,请安装它。

 apt-get install ssh 

默认情况下,SSH已经配置为在端口22上用于用户/密码登录,但是您可以通过(例如)授权密钥和其他端口为自己配置SSH,以保护服务器免受外部攻击。 如何做到这一点充满了Internet上的信息。

作为终端,我使用XShell。 您可以使用自己喜欢的一种。

我们不需要DHCP服务器和第二个网卡,因为我们将使用路由器本身将用户请求重定向到代理。

奠定基础。 现在,让我们继续安装和配置Squid。

3.2。 使用HTTPS支持和列表过滤安装和配置Squid


3.2.1。 编译并安装Squid

由于在存储库中没有现成的具有SSL支持的Squid软件包,因此您将不得不从源代码中手动组装它。 首先,使用存储库打开文件。

 nano /etc/apt/sources.list 

在其中,我们取消注释(在开头删除#)以deb-src开头的行。

之后,我们将更新软件包。

 apt-get update 

接下来,安装组装工具。

 apt-get install fakeroot build-essential devscripts 

并添加所有必需的程序包。

 apt-get build-dep squid3 

安装该库以获得SSL支持。

 apt-get install libssl1.0-dev 

让我们转到主文件夹并为程序集创建一个文件夹,立即为其设置必要的权限。

 cd ~ mkdir build chown _apt:root build 

转到创建的文件夹并下载Squid源。

 cd build apt-get source squid3 

一个文件夹将出现在构建文件夹中,名称为squid3和发行版号。 在Ubuntu 18.04.3上为3.5.27。 让我们开始吧。

 cd squid3-3.5.27 

组装之前,必须指定选项。 与他们一起打开文件。

 nano debian/rules 

我们正在寻找选项列表,如图所示


添加以下选项。

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

请注意,图片中已经添加了选项,并且除最后一行外,选项中的每行之后均应出现“ \”字符。

因此,一切准备就绪。 现在让我们继续进入Squid源文件夹,尽管您应该已经在其中了。

 cd ~/build/squid3-3.5.27 

并输入要构建的命令。

 debuild -d 

组装将花费很长时间,平均花了我2到4个小时。 取决于计算机的速度。 在程序集的末尾,您将看到程序包签名错误。 这是正常现象-忽略该错误。

现在转到Build文件夹。

 cd ~/build 

并安装Squid。

 dpkg -i squid*.deb 

立即遇到关于不满足的依赖关系的错误,并输入命令

 apt-get install -f 

安装后,我们会标记软件包,以使它们在更新系统后不会被覆盖。

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

3.2.2。 配置鱿鱼和过滤

因此,已经安装了Squid,仍然可以根据需要配置它。

所有设置都在/etc/squid/squid.conf文件中。 它包含许多评论,乍一看似乎很复杂,但实际上没有什么超级复杂的。 首先,如果您突然想更详细地研究它,我们将通过首先复制原件将其从注释中清除。 为了方便起见,我们将直接转到带有Squid的文件夹。

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

现在打开squid.conf

 nano squid.conf 

如您所见,他清除了评论,不再像看起来那样笨重。
在“破坏者”下,我将使用可以完美工作的设置来发布文件,在下面我将逐块描述内容和方式。

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 


第一个块如下。

 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参数。 在其中,我们在localnet中将本地网络更改为我们自己的网络,并且还添加了acl的工作时间(可选)。 考虑到教师经常来找我抱怨他们找不到任何东西,一切都无法访问,我增加了工作时间。 当然,我很高兴一切都能正常运行,但是,坦白地说,我已经厌倦了听这些。 现在,我向他们报告他们的主张:15:00之后,过滤功能已关闭,他们可以自由地(几乎)找到所需的信息。 您可以添加时间,也可以全天候进行过滤,而无需添加此ACL。

第二个块定义了HTTP允许和禁止站点的列表,如下所示。

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

稍后,我们将添加允许和禁止站点的列表,并将它们放置在acl中指定的文件中。

第三块通过HTTP确定访问参数,如下所示

 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_access allow CONNECT项是必需的,因为没有它,Squid不会允许互联网上的任何人。 接下来是黑白名单上的规则。 denyallow参数分别拒绝允许访问。 在它们出现之后,该规则将完全禁止在工作时间内使用所有HTTP通信。 如果您未设置工作时间,请删除worktime ,并且该禁令将是永久性的。 重要的一点是规则的顺序,因为Squid从上到下读取它们
第四个块定义了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 

第一个参数是必需的,以便“错误:未配置正向代理端口”错误不会无限出现在日志中。 它填充日志,并因此填充内存。 这是一个常见的错误,但是由于某种原因,在我们的细分市场中,我没有找到解决方法,外国论坛对此有所帮助。 第二个参数定义HTTP协议端口。 拦截意味着代理透明,也就是说,无需在每台计算机上规定设置。
第三个参数定义HTTPS端口及其选项。 这是一条长线。 squid.pem文件是我们的证书,我们将在以后创建。

第五块定义与Squid的SSL连接的参数。 他特别指出,所有流量都应立即引导到Internet,而不使用更高的缓存,并且后两者即使出现证书验证错误也允许连接,因为访问此类资源的决定必须由用户而非服务器决定。 看起来像这样。

 always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER 

第六块设置“黑名单”和“白名单”的acl参数(稍后将创建)以及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 

第七块使用HTTPS协议确定访问参数。 在这里,禁令和许可已经分别负责终止拼接 。 同样,如果您没有指定的工作时间,请不要忘记删除工作时间。

 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 

第八块设置鱿鱼的缓存和日志。 此处仅值得注意logfile_rotate参数,该参数指示存储日志的天数。

 # 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 

这样就完成了squid.conf的设置。 我们保存文件并继续创建证书和列表。

让我们用鱿鱼去文件夹

 cd /etc/squid/ 

并输入以下命令来创建证书

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

接下来,您将需要输入证书数据。 该证书的有效期为100年,可长时间忘记。 仅代理服务器才需要。

现在创建我们的列表文件。

 touch blacklist touch whitelist cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

网站以正则表达式的形式列出。 例如,要解锁mail.ru,请打开白名单

 nano whitelist 

并添加以下表达式。

 mail\.ru 

现在阻止Games.Mail.ru。 打开黑名单

 nano blacklist 

并将以下表达式写入其中

 games\.mail\.ru 

由于通常情况下,黑名单阻止程序位于我们的白名单上方,因此当您切换到mail.ru时,该站点将按预期方式打开(图片除外,但稍后会更多),如果您尝试切换到游戏,请乌贼不会放手。

一些站点具有许多子域,子域等。 例如,mail.ru将其图像存储在imgsmail.ru上。 对于其他类似的网站,您需要在任何浏览器(我使用Chrome)中打开所需的网站,然后在开发人员工具中打开(在Chrome中,按F12即可调用它们)。



转到“源”选项卡,查看网站从哪些其他资源加载信息。

添加站点后,将它们复制到HTTPS列表中。

 cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

列表填充提示
在您的计算机上创建一个纯文本文件,找到并将允许的站点列表复制到其中,然后将其添加到您的计算机中。 然后,在常规笔记本中,用斜杠(\。)自动替换该点,并使用相同的自动替换(www,http,“ /”字符等)删除不必要的点。 然后,可以使用终端将此类文件立即复制到服务器上的工作表中。

现在检查配置。

 squid -k check 

如果一切正常,请停止鱿鱼。

 /etc/init.d/squid stop 

重建缓存

 squid -z 

再次运行乌贼

 /etc/init.d/squid start 

对列表或Squid配置进行任何更改后,必须使用以下命令重新加载它

 /etc/init.d/squid restart 

您还可以在路径/ usr / share / squid / errors /〜Russian-1251下更改访问限制页面(仅在HTTP上有效)。 在文件夹中查找ERR_ACCESS_DENIED文件并进行编辑。 文件语法为HTML。

3.3。 监视服务器状态并配置防火墙


要监视服务器的状态,请安装Webmin实用程序,并借助它配置防火墙。 此外,通过它,您可以监视CPU,RAM等的状态,更新软件包,添加和配置组件等等。 它有自己的终端,尽管笨拙。 该实用程序可通过任何浏览器运行,因此,您可以从网络上的任何计算机连接到我们的服务器,这虽然不安全,但也很方便。 如果需要,可以将连接仅限制为Webmin本身的“ IP访问控制”中的各个IP地址。

开始安装之前,请添加Webmin存储库。 打开sources.list。

 nano /etc/apt/sources.list 

并在下面添加行。

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

现在,在Webmin资源库中安装用于签名软件包的GPG密钥

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

接下来,我们更新软件包列表并安装实用程序

 apt-get update apt-get install webmin 

您可以通过输入地址栏在任何浏览器中连接到服务器

 IP__:10000 

默认情况下,Webmin通过SSL连接,并且大多数浏览器都会给出不受信任的证书错误。 为了不每次都选择信任,请禁用SSL。 为此,请打开文件/etc/webmin/miniserv.conf

 nano /etc/webmin/miniserv.conf 

在其中找到字符串ssl = 1并将其替换为ssl = 0 。 在同一文件中,您可以更改连接端口。 默认情况下为10000。您可以放置​​任意一个。

连接到Webmin后,转到Webmin-> Webmin配置 ,然后将语言切换为俄语。 然后转到网络->防火墙 。 默认情况下,我们的防火墙是干净的。 我们转到最底部,在“ 启动时启用”对面选择“是” 。 单击“应用配置” 。 现在,我们的防火墙设置已在/etc/webmin/firewall/iptables.save文件中指定,并随系统一起启动。 如果没有这样的文件,请查看Webmin中“防火墙”选项卡上“带有规则的文件”行中写的内容。 让我们在终端中打开它。

 nano /etc/webmin/firewall/iptables.save 

我们转到* nat块,最后在COMMIT之前添加以下规则。

 -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 

这些规则将流向服务器端口80(HTTP)和443(HTTPS)的流量定向到我们的Squid端口。 在这里,我介绍了DNAT和REDIRECT规则的两种变体。 您可以同时使用它们,也可以通过放置适当的端口来选择一个选项。

配置FIrewall以进行备用网络设置
如果您使用了上述替代网络设置,则此选项适用。
首先,使用防火墙规则创建一个文件,并赋予其执行权。
 touch /etc/nat chmod +x /etc/nat 

打开它
 nano /etc/nat 

并添加以下内容
 #!/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 

与Webmin一样,我用DNAT和REDIRECT提出了规则的两个变体。 您可以同时使用它们,也可以通过放置适当的端口来选择一个选项。
现在,在启动网络后立即将我们的文件添加到下载文件中。 打开网络设置文件
 nano /etc/network/interfaces 

并在文件底部添加该行
 post-up /etc/nat 

PS:该选项的优点是将来您可以通过编辑/ etc / nat文件来添加自己的规则。 Webmin有点复杂。

这样就完成了服务器设置。 重新启动它。

 reboot 

让我们继续设置MikroTik路由器。

3.4。 配置MikroTik路由器以将流量重定向到代理


我们假设您已经下载了WinBox实用程序进行远程控制,已配置Internet和本地网络,路由器上的防火墙是干净的。 您知道LAN接口的名称(可以在IP-DHCP Server-DHCP中看到它)。

a)转到WinBox,转到IP-DHCP服务器-租赁 。 在列表中,我们寻找无法进行过滤的IP计算机(导演,管理),右键单击它们,然后在菜单中选择“ 设为静态 ”。 在它们旁边,字母“ D”应消失,表示动态。 现在,无论租用时间长短,这些地址都将立即通过MAC地址静态分配给这些计算机。 如果通过Wi-Fi和电缆使用笔记本电脑,则必须在两个MAC地址上选择“设为静态”。

b)接下来,转到IP-防火墙-地址列表 ,然后单击蓝色“ +” 。 在名称字段中,为我们的一组明亮的未过滤地址指定名称,例如“ Admins”。 在地址字段中,从已分配静态IP地址的地址中指定一个IP地址。 我们对每个地址重复此操作,在带有箭头的“名称”字段中选择我们的组。

c)转到同一IP-防火墙中Mangle选项卡,然后单击“ +” 。 将打开一个选项卡式窗口。 在“ 常规”选项卡上,填写以下字段:

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

在“ 操作”选项卡上,检查值“ 接受” ,然后单击“确定”。

重复该过程,但在Dst字段中 端口将值设置为443

d)再次单击“ +”,然后在“ 常规”选项卡上再次填写以下字段:

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

转到“ 高级”选项卡,然后在“ 源代码”字段中地址列表选择我们的“ 管理员管理地址列表确保单击列表旁边出现的框。将会出现一个感叹号“!”。,表示逻辑非或负逻辑。

转到“ 操作”标签,然后填写以下字段:

 Action - mark routing New Routing Mark - to_proxy Passthrough -   

单击“确定”并执行相同的操作,但在“目标”字段中端口指定值443

e)最后,添加最后一条规则。单击加号,然后在“ 常规”选项卡上填写以下字段

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

结果,您的参数将发生以下情况。订单很重要!



f)我们进入IP-路由,然后按“ +”。填写以下字段:

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

单击确定,仅此而已。打开服务器后,所有HTTP和HTTPS流量都将通过我们的Squid。

3.5。MikroTik和其他路由器的替代设置


此选项既适用于MikroTik路由器,也适用于任何其他路由器,即使是最简单的路由器也适用(除了租用的提供商,您自己知道什么)。在这种情况下,我们不是在路由器上而是在Squid本身上实现Internet访问共享。因此,让我们开始吧。
a)我们将假定您已完成上述所有步骤,包括在MikroTik中设置重定向到代理的位置,从而达到了这一点。为了使所描述的选项无故障运行,我们需要取消本文3.4段的e)。您可以取消整个点3.4(也许保留a子节,这样我们的IP不会改变),但这是可选的-对我们来说取消路由本身很重要。为此,请转到IP-路线,查找我们的路线,选择它并单击红叉(不是加号,而是复选标记旁边的叉)。该路线将变为灰色=>禁用。过滤功能也已关闭,现在所有客户端都直接通过路由器进入Internet。b)

现在转到我们的服务器,并转到包含Squid的文件夹
 cd /etc/squid/ 

打开配置文件
 nano squid.conf 

然后在块中添加:
acl localnet行之后的第一个块中 ...
 acl admins src "/etc/squid/admins-ip" # IP   acl students src "/etc/squid/students-ip" # IP   

我们不需要教师计算机的清单,因为据了解其他所有人都是教师。但是您可以自己添加其他块中的相应规则。
在第二块
 acl whitelist-stud url_regex -i "/etc/squid/whitelist-stud" #      

http_access之后的第三个区块中拒绝黑名单
 http_access allow admins #      http_access allow students whitelist-stud #       http_access deny students #        

此外,由于教师(所有其他IP)紧随其后,按白名单和在工作时间(如果有)进行过滤,因此该块保持不变。您还可以通过将禁止规则设置为禁止规则之上,或将单独的IP(例如,您自己的IP)添加到单独的ACL中,并将其放入黑名单之上的规则中,来让管理员组绕过黑名单。
第四和第五块保持不变。
在第六块中,添加
 acl whitelist-stud_ssl ssl::server_name_regex -i "/etc/squid/whitelist-stud_ssl" 

在第七块中,在ssl_bump终止blacklist_ssl后添加
 ssl_bump splice admins ssl_bump splice students whitelist-stud_ssl ssl_bump terminate students 

原理与第三块相同。
其余的保持不变。保存并退出

c)现在创建我们的IP地址列表。
 touch admins-ip touch students-ip 

以及学生的白名单。
 touch whitelist-stud cp whitelist-stud whitelist-stud_ssl 

将所需的IP地址和站点添加到适当的列表。在学生站点列表中,您可以通过删除学生不需要的站点来复制教师列表。在Linux上复制文件由以下命令完成
 cp <    > <    > 

重启鱿鱼
 /etc/init.d/squid restart 


d)我们谈到了最重要的事情,即如何使客户通过我们的代理服务器上网。我们需要将DHCP服务器的网关从路由器的地址更改为服务器的地址。当然,为此,服务器地址必须是静态的或绑定到MAC。
在MikroTik中:
转到IP-DHCP服务器-网络,然后双击我们的网络。在“网关”字段中,将路由器的地址更改为代理服务器的地址。单击确定,仅此而已。您可以重新启动路由器,以便为所有活动客户端正确更新设置。此后,客户端可能会将网络类型更改为公共网络(如果是私有网络)。
在普通路由器中:
路由器的手册中查找更改DHCP服务器网关的位置,但我会说一下其设置:)

底线:作为此替代解决方案的结果,我们能够按IP和列表微调访问权限,并在Squid日志中获取客户端的常规IP地址。如果您需要一些客户端通过路由器绕过Proxy来联机,请阅读破坏者。
互联网绕过代理
, - Squid , , ,


4.结论


因此,总结以上所有内容。我们设法从头开始安装和配置Linux Ubuntu 18.04 LTS,构建并安装具有HTTPS支持的Squid,配置白名单过滤,将代理服务器集成到我们的网络中,而无需安装其他DHCP服务器。

5.来源清单


创建文章时,使用了Interface LLC技术博客Web安全专家的站点-Web Filter for Your Network的各种材料以及个人知识和经验。
在编辑和补充本文时,以下用户提供了很多帮助:KanlasPetRiotBarsook非常感谢他们的帮助和帮助。

6.作者的评论


  1. 必须在超级用户模式下完成服务器的任何工作,方法是在命令添加sudo或一次输入sudo -s命令
  2. Squid \ , , , . .
  3. , . , 1000 .
  4. , IP- Squid. Squid IP- — Mikrotik. , DHCP , . , , , IP .Barsook
  5. 为了使Squid与大量客户端(超过50个)一起使用,至少需要1 GB的RAM。更优选地,因为鱿鱼吞噬了记忆。您可以通过输入top命令来检查内存状态
  6. 我建议同时使用这两个选项来配置路由器,因为如果您在网络设置(路由器本身)中明确指定了其他网关,则可以绕过锁定。


UPD1:添加了备用网络配置,而防火墙
UPD2:添加了备用路由器配置选项,解决了在Squid日志中显示地址的问题。
UPD3:在3.1中添加了一个修复程序-使数据包能够通过服务器,而他最初忘记添加该数据包。否则,Internet无法正常工作。感谢Dmitry1986对文章的测试。

Source: https://habr.com/ru/post/zh-CN473584/


All Articles