安装Squid
安装squid代理服务器非常简单。
对于基于 Red Hat 的发行版,我们可以像这样安装它:
$ dnf -y install squid
或者,如果我们使用的是基于 Debian 的发行版,我们可以像这样安装它:
$ apt-get -y install squid
现在我们可以启动 squid 服务并在启动时启用它:
$ systemctl start squid $ systemctl enable squid
对于squid代理服务器,可以查看配置文件
/etc/squid/squid.conf
在我们深入研究配置之前,让我们看看正在运行的代理服务器。
只需将浏览器上的代理设置更改为代理的 IP 地址和端口 3128,因为这是Squid默认端口。
我们可以通过更改配置文件中的 http_port 选项来更改默认端口。
如图所示,我将浏览器指向我的 Linux 代理服务器,我可以毫无问题地浏览网页。
如果你使用的是iptables防火墙,不要忘记打开squid服务器端口。
Linux 代理服务器或者代理服务器一般是保存访问过的网页供以后请求使用的服务器,因此如果我们尝试访问同一网页或者其他任何人,我们将从代理服务器获取该页面。
代理服务器的另一个主要优点是,我们可以使用一些访问控制设置来配置代理。
例如,我们可以限制对特定网站的访问。
修改内容
由于 Linux 代理服务器位于浏览器和 Internet 之间,因此这是更改交付内容的绝佳位置。
我们可以使用 url_rewrite_program 模块更改图像、AD或者任何内容。
你可以做得更多,但我们不想做坏事。
在我们的示例中,我们将翻转图像并浏览翻转后的图像而不是原始图像。
首先,我们需要安装 ImageMagick:
$ dnf -y install imagemagick
然后我们将编写能够发挥作用的脚本。
脚本在 Perl 中。
你可以在这里找到脚本。
这个 Perl 脚本在携带的内容中搜索 JPG、GIF 和 PNG 图像,一旦找到它们,它就会使用 ImageMagick 附带的 mogrify 实用程序来翻转图像并将翻转的图像放在 /var/www/html/ 中Apache 服务器的根目录。
apache 服务应该正在运行,然后发送翻转的图像作为响应。
只需确保为此文件夹添加 Squid 的所有权:
$ usermod -aG www-data squid
最后,我们必须将这个脚本告诉 Squid。
打开配置文件并键入以下内容:
url_rewrite_program /home/onitroad/flip.pl
然后重启你的Squid服务:
$ systemctl restart squid
匿名浏览
默认squid代理服务器将客户端IP地址转发到请求的站点,如果你想让代理匿名冲浪用户,你应该发送squid IP而不是客户端IP。
为此,请将 forwarded_for 选项更改为 off in
/etc/squid/squid.conf
文件。
forwarded_for off
并在配置文件的末尾添加这里提到的以下选项。
然后重启服务:
$ systemctl restart squid
我们可以查看公共IP地址;你会注意到你的IP是squid代理服务器IP。
Squid日志文件
日志文件是问题诊断和各种Squid操作的主要来源。
有 cache.log、access.log 和 store.log。
我们可以在 /var/log/squid 目录中找到它们。
cache.log 文件包含有关 Squid 操作的信息性消息。
我们可以在此文件中找到所有代理错误。
access.log 文件包含所有客户端的 HTTP 请求。
store.log 文件包含有关传递对象的信息。
阻止网站
我们可以阻止代理用户访问网站,只需创建一个单独的文件,该文件将是我们要阻止的域列表,并从 squid 配置中指向该文件,如下所示:
$ touch /etc/squid/blocked
然后在该文件中每行输入我们要阻止的所有网站并保存。
现在更改squid 配置以阻止acl 列表和http_access 列表下的那些网站。
acl blocked_sites dstdomain "/etc/squid/blocked" http_access deny blocked_sites
然后重启squid服务:
$ systemctl restart squid
网上有很多现成的列表,你可以在 Squid 中使用它们,比如 MESD 黑名单,Shalla 的黑名单。
允许特定端口
我们可以像这样找到配置文件中允许的所有端口:
acl Safe_ports port 80
考虑为客户端需要的任何端口添加 Safe_ports ACL 规则。
我们可以添加端口范围,而不是像这样为每个端口编写规则:
acl Safe_ports port 6000-7000
修改后别忘了重启squid代理服务器:
$ systemctl restart squid
允许 IP 地址范围
如果我们打开配置文件 /etc/squid/squid.conf ,我们将看到允许 IP 地址连接到代理服务器的规则,如下所示:
acl localnet src 192.168.0.0/16
但是,我们可以添加新的 ACL 条目以允许一系列 IP 地址连接到代理服务器:
acl localnet src 212.80.113.0/16
然后保存文件并重启squid服务:
$ systemctl restart squid
此外,如果我们从文件中删除任何 ACL,该范围内的所有 IP 地址都将无法连接到代理服务器。
连接 Squid 服务器
cache_peer 指令设置对等缓存并通知 Squid 如何与它们通信。
你可以这样写:
cache_peer hostname Server-type http-port icp-port [options]
第一个参数是另一个Squid主机名或者 IP 地址。
第二个参数指定其他服务器的类型。
第三个参数是端口号。
第 4 个参数指定 ICP 端口(Internet 缓存协议),即 3130 。
我们使用这个端口来查询其他缓存服务器。
cache_peer 有一些我们可以使用的选项,例如:
proxy-only :此选项可防止 Squid 保存从其他 Squid 服务器收到的任何响应。
no-delay :如果有任何延迟,它将被忽略。
login= user:password :其他服务器的身份验证凭据。
它需要这个公式 login =user:password
connect-timeout :此选项指定与其他Squid服务器的连接超时。
编写选项并保存配置文件并重新启动服务。
验证用户
我们可以使用 Apache 身份验证强制用户在使用 Linux 代理服务器之前进行身份验证。
首先,我们创建一个文件来存储用户:
$ touch /etc/squid/passwd
然后将所有权更改为 squid 守护程序,以便它可以访问该文件:
$ chown squid /etc/squid/passwd
现在我们将使用 htpasswd 命令创建一个新用户:
$ htpasswd /etc/squid/passwd onitroad
它会提示我们输入密码两次。
如果我们打开创建的文件,我们将看到用户和散列密码。
然后更改squid 配置以告诉它应该使用的身份验证。
在 ACL 端口下面添加以下几行,不要在其他地方启用身份验证:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Squid Basic Authentication auth_param basic credentialsttl 3 hours acl auth_users proxy_auth REQUIRED http_access allow auth_users
然后重启squid服务,再次尝试打开浏览器。
$ systemctl restart squid
如我们所见,如果我们尝试连接到 Linux 代理服务器,它会提示我们输入用户名和密码。