希望在公网环境中使用家庭局域网功能,直接访问必然是非常不安全的。本文将介绍 使用 Squid 建立带有身份认证的 HTTP 代理转发。
1 开启 HTTP 代理
默认配置中,Squid 拒绝所有连接。打开配置文件 /etc/squid/squid.conf
,找到
http_access deny all
将其中 deny 更改为 allow
http_access allow all
默认端口为 3128,可通过 http_port 配置修改。
http_port 3128
完成后,重启服务 systemctl restart squid
即可访问代理服务器。
2 HTTP 用户认证
通过 apt install apache2-utils
安装 htpasswd 工具用于生成密码文件。
apt install apache2-utils
htpasswd -c /etc/squid/passwd username
在配置文件中增加
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
acl auth_user proxy_auth REQUIRED
将上节的配置 http_access allow all
改为 http_access allow auth_user
。
3 设置上级 HTTP 代理
在配置文件中,修改 cache_peer 如:
# proxy icp
# hostname type port port options
# ----------- ------- ----- ----- ------------------
cache_peer 127.0.0.1 parent 1081 0 no-query no-digest
no-query 表示禁止向某个邻居节点发送 ICP查询。
ICP 是一种用于缓存服务器间通信的协议,其主要作用是在多个缓存服务器之间交换信息,以判断某个对象是否存在于其他缓存服务器中。当客户端请求一个对象时,本地缓存服务器可以先向其他邻居缓存服务器发送 ICP 查询,若该对象存在于邻居缓存中,就可以直接从邻居缓存获取,从而提高缓存命中率,减少对原始服务器的请求。
这里已知只有一个上级代理,所以这个功能单纯服务器性能和网络,所以予以禁止。
no-digest 用于禁止对缓存摘要的请求。
缓存摘要是 HTTP 协议的一项扩展功能,允许缓存服务器之间交换一份它们所拥有资源的摘要信息。代理使用本身缓存命中率较低,而且上级代理未必有兼容的缓存摘要功能,所以予以禁止。