前言:检测到jayproxy使用的squid作为代理服务器,固我们也使用此软件来搭建代理服务器。
翻墙分析:Squid是很好的代理服务器,但它不能直接翻墙,因为在连接到Squid的过程中,就已经被墙了。所以得把传输的数据先进行加密再传输,这样等于是绕过了防火墙,这里就需要使用Stunnel来传输加密数据。
服务器需求:
1、一台可以正常访问互联网的服务器,代号A(国外的)
2、一台可以正常访问服务器A的国内服务器,代号B
访问过程:
1、用户设置代理指向B服务器的Stunnel服务监听的端口,访问网站
2、访问国外网站时在弹出框输入ldap用户信息,认证通过即可访问国外网站
3、这时B服务器的Stunnel会将信息做加密处理,然后发送到A服务器的Stunnel服务上
4、A服务器的Stunnel会将加密的信息做解密处理,然后发送给A服务器的Squid服务上
5、A服务器的Squid会向目标网站请求数据,然后将信息返回。
实施步骤:
一、在服务器A上安装Squid和Stunnel
1、安装Squid
//安装
yum -y install squid
//初始化squid
squid -z
//启动squid
service squid start
如果什么配置都不做修改,那默认的商品号为3128,这时候,可以打开你的浏览器,设置代理,填上A服务器的IP和3128端口号,访问baidu,输入ip看ip地址是不是代理服务器的ip,如果是,说明Squid已经能正常使用了,不过还不能翻墙。
2、安装Stunnel
//下载软件包
$wget http://www.stunnel.org/downloads/stunnel-5.01.tar.gz
//解压
$tar -zvxf stunnel-5.01.tar.gz
//进入软件包
$cd stunnel-5.01
//编译安装
$./configure
$make
$make install
配置Stunnel:
Stunnel比Squid要麻烦一些,因为Squid如果你什么都设置,同样能运行,而Stunnel就不行。它需要一个配置文件,还需要一个签名证书。
//先进到目录
cd /etc/stunnel/
$openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem
这样会在/etc/sutnnel/里生成密钥文件stunnel.pem
接着给它生成Diffie-Hellman部分:
$openssl gendh 512>> stunnel.pem
网络上说这是4.X版本必须要做的,但我使用的5.01也这么做了。
设置配置文件:
在/etc/stunnel/目录下有一个stunnel.conf.simple文件(好像是这样的),可以cp一份为stunnel.conf或是新建一个stunnel.conf,这里使用新建
$vim stunnel.conf
将以下内容复制进去
cert =/etc/stunnel/stunnel.pem
CAfile =/etc/stunnel/stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
;;;chroot = /var/run/stunnel
pid = /tmp/stunnel.pid
verify = 3
;;; CApath = certs
;;; CRLpath = crls
;;; CRLfile = crls.pem
setuid = stunnel
setgid = stunnel
;;; client=yes
compression = zlib
;;; taskbar = no
delay = no
;;; failover = rr
;;; failover = prio
sslVersion = TLSv1
fips=no
debug = 7
syslog = no
output = stunnel.log
[sproxy]
accept = 34567
connect = 127.0.0.1:3128
这里有几个设置要说明一下:
第一行和二行是密钥文件的位置,如果按前面的做法,这里肯定是正确的。
setuid = stunnel
setgid = stunnel
是设置用户和用户组,都为stunnel,一般情况下是不会有它们的,所以要新建用户和用户组:
$groupadd -g 122 stunnel
$useradd -c stunnel -d /nonexistent -m -g 122 -u 122 stunnel
accept = 34567 是监听的端口号,也就是B服务器要指向的位置
connect = 127.0.0.1:3128 是本服务器,也就是A服务器Squid监听的端口号,也就是3128啦。
保存退出后,就可以试着启动stunnel了
$stunnel
如果正常是没有输出任何内容的,如果有问题,它会给出问题所在,仔细排查,基本上不会有什么问题。
检查是否正常运行:
$ps -ef | grep stunnel
如果看到stunnel用户运行的stunnel,说明已经成功运行了。
这样A服务器的Squid和Stunnel都配置完成了,接下来配置国内B服务器的Stunnel。B服务器不需要Squid,所以只需要配置Stunnel
二、在服务器B上安装配置Stunnel
安装同A,密钥不要再生成了,从服务器A上拷过来
登录服务器A,进到/etc/stunnel/目录,向服务器B的/etc/stunnel/目录里拷贝stunnel.pem密钥:
$cd /etc/stunnel/
$scp stunnel.pem [email protected]服务器B的IP:/etc/stunnel/
接着登录服务器B,设置配置文件,同服务器A,可以cp一个,也可以新建,这里同样新建:
$cd /etc/stunnel/
$vim stunnel.conf
将下面的内容复制到里面:
cert =/etc/stunnel/stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
verify = 2
CAfile =/etc/stunnel/stunnel.pem
client=yes
compression = zlib
ciphers = AES256-SHA
delay = no
failover = prio
sslVersion = TLSv1
fips = no
[sproxy]
accept = 0.0.0.0:7071
connect = 服务器A的IP:34567
这里要说明的是:
accept = 0.0.0.0:7071 中的7071是用户需要设置的代理端口,可以随意设置,只要大于500就好。0.0.0.0是为了让外网能使用,如果只是内部使用,改成127.0.0.1即可。
connect = 服务器A的IP:34567,很显然这里要填什么,34567是服务器A的Stunnel监听的端口号,保持和它一至就对了。
保存退出后,就可以启动Stunnel了
$stunnel
如果没有意外,整个代理就正常运行了,打开浏览器,将代理设置服务器B的IP+7071端口号,此时即可访问国外网站。
三、配置squid服务器使用LDAP认证
1、安装ldap客户端
yum -y install openldap-clients nss-pam-ldapd openldap
添加ldap服务器信息
vim /etc/openldap/ldap.conf
添加以下2行
BASE dc=shuyun,dc=com
URI ldap://ldap.shuyun.com:389
重启nslcd服务
/etc/init.d/nslcd restart
测试与ldap服务器连通性
ldapsearch -x
2、配置squid与ldap通信
执行此条命令测试squid是否能与ldap连通
/usr/lib64/squid/squid_ldap_auth -u -cn -f "uid=%s" -b "ou=people,dc=shuyun,dc=com" -D "cn=user,ou=people,dc=shuyun,dc=com" -w "password" -H ldap://ldap.shuyun.com
执行时需要输入用户和密码,连通后会显示ok
连通后请编辑/etc/squid/squid.conf文件
注释掉所有以http_access开头的内容,在最后面添加以下4行
auth_param basic program /usr/lib64/squid/squid_ldap_auth -u -cn -f "uid=%s" -b "ou=people,dc=shuyun,dc=com" -D "cn=user,ou=people,dc=shuyun,dc=com" -w "password" -H ldap://ldap.shuyun.com
acl ldapauth proxy_auth REQUIRED
http_access allow ldapauth
http_access deny all
重启squid
/etc/init.d/squid/restart
打开网站看是否会弹出对话框要求输入用户名和密码
四、生成PAC文件,定义白名单翻墙网站
可以下载shadowsocks软件运行,然后提取里面的本地pac文件
然后把pac文件里面服务器的地址改成B服务器的地址
var proxy = "PROXY B服务器地址:7071; DIRECT;";
pac文件保存好后,下载到本地然后在浏览器代理设置使用这个pac文件即可实现翻墙的域名走国外服务器线路。