squid on CentOS 7   2019-08-08


需求

Client不用設定 Proxy 伺服器 IP,即可讓client之流量皆經由squid發送,並對一特定網站限制連線,本機系統使用 CentOS 7.6。

系統建置

CentOS 7.6(need NetworkAdapter *2) CentOS 7 建置筆記

Enable ipv4_forward

1
vim /etc/sysctl.conf

加入

1
net.ipv4.ip_forward=1

apply

1
sysctl -p /etc/sysctl.conf

Squid Intercept 原理

用戶端不需設定proxy相關設定,所有http與https流量由NAT導向至proxy Server,proxy Server將成為LAN與WAN之中間人(squid-in-the-middle),此一功能除可避免手動設定proxy外,也可提升安全性需求。

squid 設定

squid.conf(add in config part )

1
2
3
4
5
6
7
8
9
10
11
12
13
http_port 3128 intercept #for http 

https_prot 3129 intercept ssl-bump /
generate-host-certificates=on dynamic_cert_mem_cache_size=16MB /
cert=/etc/squid/ssl_cert/gss.com.cert /
key=/etc/squid/ssl_cert/myCA.key #for http

#Configure SSL Bump
always_direct allow all #forward all request
acl bump_sites dstdomain "/etc/squid/ssl_cert/bump_sites.txt" #forbid domain
acl step1 at_step SslBump1 #connect client first
ssl_bump peek step1
ssl_bump bump bump_sites

make certificate(openSSL)

1
2
3
openssl genrsa -out myCA.key 2048
openssl req -new -key myCA.key -out gss.com.csr
openssl x509 -req -days 365 -in gss.com.csr -signkey myCA.key -out gss.com.cert

產生出cert後,client端需匯入此憑證。

iptables

將LAN端port 80(http)與443(https)流量導向至squid

1
2
3
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 443 -j REDIRECT --to-port 3129
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE

Screenshot

備忘錄

  1. CentOS 7 系統有default iptables rules,建議先全部清除。
  2. 當前模式為intercept,若client端指定proxy ip,則流量將被squid forbid,所以當squid為transparent(intercept)mode時,就不應該手動設定proxy ip 。
  3. 要清楚是squid本身擋掉封包,還是iptables。(善用wireshark與access.log)
  4. SELinux要關閉。

參考文獻

wiki squid(NAT REDIRECT)
wiki squid(DNAT)
build squid proxy with ssl bumping
squid正向代理
acl 設定
squid SSL相關特性
Squid configuration directive ssl_bump

目錄

  1. 需求
  2. 系統建置
  3. Squid Intercept 原理
    1. squid 設定
  4. make certificate(openSSL)
  5. iptables
  6. Screenshot
  7. 備忘錄
  8. 參考文獻