前言:
之前有写过一个 Linux:Nginx 正向代理实现内网访问互联网 博客,生产环境运行了好一段时间,一直相安无事;最近公司审计要求访问外网代理必须设置访问外网的网站白名单,我在网上搜索了一些方法,尝试了几种方式,并没有理想的效果(对http生效,但是https不生效),所以就打算另辟蹊径了。
一、安装
主要有两种方式,一是下载源码编译,我这边网络不具备条件就放弃了;二是直接dnf或者yum安装。
bash
#安装前更新下yum源
sudo yum update
#查一下源里面是有有squid(如果没有就只能下载源码编译安装了)
yum info squid
#安装
sudo yum install squid -y
二、配置
yum 安装后的配置文件在 /etc/squid/squid.conf,配置文件有英文的说明,如果不清楚可以网上搜索一下。
我这边的需求是:
1.支持源客户端IP的白名单控制;
2.支持访问外网网站的白名单控制;
3.需要有所有网站的访问日志(审计需要);
直接贴修改后的 squid.conf 配置文件:
bash
#源客户端IP的白名单控制(这里引用的是一个文件地址,相关的白名单在文件里面配置)
acl client_white src "/etc/squid/client_white.ip"
#外网网站的白名单控制(这里引用的是一个文件地址,相关的白名单在文件里面配置)
acl site_white dstdomain "/etc/squid/site_white.net"
#声明SSL端口443
acl SSL_ports port 443
#声明安全端口80
acl Safe_ports port 80
#声明安全端口21
acl Safe_ports port 21
#声明安全端口443
acl Safe_ports port 443
#这行配置高版本的上面没有,低版本需要加上要不然报错
acl CONNECT method CONNECT
#拒绝非安全端口访问
http_access deny !Safe_ports
#拒绝非 SSL 端口的 CONNECT 请求
http_access deny CONNECT !SSL_ports
#只允许来自本机(localhost)的用户访问 Squid 的管理接口
http_access allow localhost manager
#拒绝其他用户访问管理接口
http_access deny manager
#允许 client_white site_white (白名单在这里生效)访问
http_access allow client_white site_white
#允许本地用户访问
http_access allow localhost
#拒绝其他访问
http_access deny all
#服务端口
http_port 3128
# Squid 崩溃时生成的 core dump 文件(核心转储文件)的存放目录
coredump_dir /var/spool/squid
#访问日志
access_log /var/log/squid/access.log
#缓存日志
cache_log /var/log/squid/cache.log
#ftp的配置
refresh_pattern ^ftp: 1440 20% 10080
#动态内容永不缓存(防止缓存登录页、订单状态等动态内容)
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
#静态资源(HTML、CSS、JS、图片等)的默认策略
refresh_pattern . 0 20% 4320
源客户点白名单配置文件 client_white.ip,IP是CIDR格式,每行一个
bash
192.0.12.12/32
192.0.11.0/24
外网网站的白名单配置文件 site_white.net,点号表示匹配子域名
bash
.baidu.com
blog.csdn.net
三、服务
bash
#启动前先校验一下配置文件是否有错误(没有报错就行)
sudo squid -k parse
#服务启动
sudo systemctl start squid
#服务停止
sudo systemctl stop squid
#服务重启
sudo systemctl restart squid
#服务状态查看
sudo systemctl status squid
#开机自启
sudo systemctl enable squid
#关闭开机自启
sudo systemctl disable squid
另外,热加载命令经常用
bash
sudo squid -k reconfigure
其他
实测发现,依据上述配置,本地localhost使用代理时不会受白名单限制。