CentOS7使用squid配合stunnel实现代理服务。
1. 服务端 配置 squid
yum -y install squid
添加认证用户 user1
# 需要安装 httpd-tools
htpasswd -c /etc/squid/passwd user1
配置 vi /etc/squid/squid.conf
# 认证方式为basic,认证程序路径和密码文件路径
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
# 认证程序的进程数
auth_param basic children 5
# 认证有效时间
auth_param basic credentialsttl 1 hours
# 浏览器显示输入用户/密码对话框时,显示的内容
auth_param basic realm my test prosy
acl myusers proxy_auth REQUIRED
# 普通用户需要通过认证才能访问
http_access allow myusers
# 最下面,匹配是从上到下的
http_access deny all
# 监听端口8089,如果只监听本地stunnel,可设置为 127.0.0.1:8089
http_port 8089
# 另加两行
via off
forwarded_for delete
初始化
squid -z
启动
systemctl enable squid
systemctl start squid
生成自签名证书
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 3650
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
2. 服务端 配置stunnel
先安装stunnel
yum -y install stunnel
配置 vi /etc/stunnel/stunnel.conf
[squid]
accept = 8087
connect = 127.0.0.1:8089
cert = /etc/stunnel/stunnel.pem
启动stunnel服务端
stunnel
3. 客户端 配置stunnel
安装stunnel
yum -y install stunnel
把服务器端生成好的证书拿下来。
配置 vi /etc/stunnel/stunnel.conf
[squid]
# 表示是客户端,注意与服务端的差别
client = yes
accept = 8189
connect = server_ip:8087
cert = /etc/stunnel/stunnel.pem
启动stunnel客户端
stunnel
4. 浏览器使用代理
假定stunnel客户端所在的内网IP为 192.168.0.125
编辑浏览器配置中的代理项
IP:192.168.0.125
PORT:8189 (stunnel客户端的监听端口)
用户名:user1
密码:password (执行htpasswd时设置的密码)
5. shell中使用代理
alias proxy='export all_proxy=http://user1:password@192.168.0.125:8189'
alias unproxy='unset all_proxy'
为什么要用stunnel
为什么要用stunnel而不是直接用squid的代理?
如果是在国内用代理访问国内的站点,或者在国外代理访问国外的站点,则完全用不到stunnel。但如果要科学上网,则需要用stunnel来加密转发,不然会收到Connection reset by peer
的错误,接下来几分钟内连国内的站点不能再访问,原因你懂的。
所以保险起见,还是用stunnel吧。
最后,只用一个stunnel
上面stunnel安装了两次,分别是服务器端和客户端,貌似有点麻烦。其实只装一个也可以,就是只装客户端,由客户端直接去监听squid。不是在国外服务器端装stunnel的客户端,要装在国内服务器上,不然等于没装!原因见上。
squid.conf 修改如下
# http端口
http_port 8089
# https端口
https_port 4430 cert=/path/to/cert.pem key=/path/to/key.pem
客户端stunnel.conf配置
connect = server_ip:4430
按楼主的文档 操作几次,不知道哪里的问题依然调式不通,可以加个QQ么?
你QQ多少,我加你。