[Squid]使用ssl_bump侦听https connect消息,实现url过滤

HTTP通信,在Squid中可以正常识别method和详细urlpath
但是HTTPS通信时,method一律识别成CONNECT,并且只显示domain,不显示详细urlpath
所以,有关url_regex和urlpath_regex的过滤都无法生效
如果想让squid能获取详细urlpath和method的话
就需要把Squid设置成一个中间人
Squid与Client使用虚假证书建立https通信
将request解密
再与Server建立https通信,将解密的request重新加密送出

零,版本要求

必须Squid3.5以上版本才可以实现

一,ssl_bump设置

原文连接:
Intercept HTTPS CONNECT messages with SSL-Bump

https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit#Features.2FDynamicSslCert.Create_Self-Signed_Root_CA_Certificate

1.创建自签名CA根证书

用于squid生成动态证书

cd /etc/squid
mkdir ssl_cert
chown squid:squid ./ssl_cert
chmod 700 ./ssl_cert
cd ssl_cert

使用openssl创建自签名证书

openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem  -out myCA.pem

创建der编码证书,用来导入客户端浏览器

openssl x509 -in myCA.pem -outform DER -out myCA.der
2.修改Squid配置文件

Squid必须具备以下模块

–with-openssl
–enable-ssl-crtd

一般yum安装的,都默认会添加上这些模块

以下是配置信息,需要粘贴到squid.conf中

文件默认位置:

/etc/squid/squid.conf

指定代理端口,指定ssl-bump模式,指定证书
pem证书已经包含了私有key,所以不用再指定私有key
生成主机证书,定义动态证书缓存大小

http_port 3128 ssl-bump \
  cert=/etc/squid/ssl_cert/myCA.pem \
  generate-host-certificates=on \ 
  dynamic_cert_mem_cache_size=4MB

对于Squid 3.5版本,使用以下配置

# For squid 3.5.x
sslcrtd_program /usr/local/squid/libexec/ssl_crtd -s /var/lib/ssl_db -M 4MB

对于Squid 4.0以上版本

# For squid 4.x
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /var/lib/ssl_db -M 4MB

注意: security_file_certgen的存放位置会有变化,centos8的存放位置是

/usr/lib64/squid/security_file_certgen

设定bump step

acl step1 at_step SslBump1
ssl_bump peek step1

设定ssl_bump的范围
全部request都ssl-bump

ssl_bump bump all

或者定义,只针对部分域名进行ssl-bump

acl bump_sites dstdomain "/etc/squid/ssl_cert/bump_sites.txt"
ssl_bump bump bump_sites
3.创建和初始化TLS证书缓存目录

Squid3.5

/usr/local/squid/libexec/ssl_crtd -c -s /var/lib/ssl_db -M 4MB
chown squid:squid -R /var/lib/ssl_db

Squid4.0以上

/usr/local/squid/libexec/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
chown squid:squid -R /var/lib/ssl_db

注意: security_file_certgen的存放位置会有变化,Centos 8的存放位置是

/usr/lib64/squid/security_file_certgen

这样基本就可以监听https的connect消息了

二,过滤
1.URL过滤

将需要过滤的路径添加到path_banned.ws中

acl banned_files urlpath_regex -i "/etc/squid/path_banned.ws"
http_access deny banned_files
2.Method过滤

过滤request header大于30k的POST送信

acl UPLIMIT req_header Content-Length [3-9][0-9]{4,}
acl UPLOAD method post
http_access deny UPLIMIT UPLOAD
最后.补充
1.Squid和父级代理连接的时候无法使用https
cache_peer IP_xx.xx.xx.xx parent HTTPPort_xxxx ICPPort_xxxx no-query default tls sslcert=/etc/squid/ssl_cert/myCA.pem sslflags=DONT_VERIFY_PEER

会提示SSL连接协商失败

Error negotiating SSL connection on FD 24: error:00000001:lib(0):func(0):reason(1) (1/-1)

即使父级代理开通了https_port也无法建立连接

所以,暂时无法实现ssl-bump的Squid向上一级代理转发

2.根据url,选择cache_peer

cache_peer_access peer-name allow|deny [!]aclname …

acl domain1 dstdomain www.domain1.com

cache_peer IP1 Port1 ICPport1 default name=peer1
cache_peer IP2 Port2 ICPport2 default name=peer2
cache_peer_access peer1 allow domain1
cache_peer_access peer2 deny domain1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值