squid+stunnel+用户密码认证的三种玩法

时间:2024-04-01 08:07:44

没办法,应用越来越深入,就会越来越多要求。

squid+stunnel+用户密码认证的场景至少以下三个,我会遇到。

1,标准玩法

在服务器上建一个SQUID,加密码认证,然后,其它人通过它上网。(不要看这是正常玩法,在一个管理后台限制登陆,而维护VPN成本大时,这个小应用很有用处的)

2,标准加密玩法

在国外搞个服务器(翻嘛,用第1种时,会有问题,因为GFW会在你想去国外就拦之),然后,将本地发到国外的请求时加密。(本来客户端安装STUNNEL,这个适合很私密的东东,但在企业内部署,就很不好推广)

http://www.cnblogs.com/zenghui940/p/4304724.html

3,企业加密玩法

企业的东东,还是希望简单好用,最好对客户端的STUNNEL加密透明,不需要了解。这时,就是国外一个服务器(SQUID+STUNNEL解密转发),公司内局域网一个服务器(纯STUNNEL加密,代替第2种的每个客户端),然后再是客户浏览器简单配置(指定内网的一个IP地址及端口)。

http://blog.csdn.net/skylinethj/article/details/43816663

几个步骤的组合如下:

匿名IP:

squid.conf

via off

forwarded_for delete

生成认证的用户名,密码及同SQUID结合

htpasswd -c /etc/squid/user.pass xxx

squid.conf

auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/user.pass

auth_param basic children 

auth_param basic realm Welcome to test

auth_param basic credentialsttl  hours

acl lookwest proxy_auth REQUIRED

dns_nameservers 8.8.8.8

http_access allow all

需要安装的附加包:

Yum -y install  httpd-devel

yum  -y install openssl-devel

生成STUNNEL密钥:

openssl req -new -x509 -days  -nodes -out stunnel.pem -keyout stunnel.pem  

openssl gendh >> stunnel.pem  

国外服务器上的STUNNEL配置:

cert = /usr/local/etc/stunnel/stunnel.pem
CAfile = /usr/local/etc/stunnel/stunnel.pem
socket = l:TCP_NODELAY=
socket = r:TCP_NODELAY=

;;;chroot = /var/run/stunnel
pid = /tmp/stunnel.pid
verify = 

;;; 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 =
syslog = no
output = stunnel.log

[sproxy]
accept =
connect = 

国内服务器上的STUNNEL配置(共用同一个STUNNEL.PEM):

cert = /usr/local/etc/stunnel/stunnel.pem
socket = l:TCP_NODELAY=
socket = r:TCP_NODELAY=
verify =
CAfile = /usr/local/etc/stunnel/stunnel.pem
client=yes
compression = zlib
ciphers = AES256-SHA
delay = no
failover = prio
sslVersion = TLSv1
fips = no
[sproxy]
accept =
connect = 服务器A的IP:

Centos6.5 Squid3.1.10代理服务器(用户认证,加密,高匿)及使用指南

1,安装

Yum -y install squid http-devel

2,用apache的htpasswd 创建用户

htpasswd -c /etc/squid/user.pass test

3,使用openssl加密

Cd /root/

openssl req -new > wdzjsquid.csr

openssl rsa -in privkey.pem -out wdzjsquid.key

openssl x509 -in wdzjsquid.csr -out wdzjsquid.crt -req -signkey wdzjsquid.key -days 3650

4,修改配置文件 Vi /etc/squid/squid.conf

#最前面加入蓝色字体

auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/user.pass

auth_param basic children 5

auth_param basic realm Welcome to test

auth_param basic credentialsttl 2 hours

acl lookwest proxy_auth REQUIRED

dns_nameservers 8.8.8.8

http_access allow lookwest

#下面两行就是高匿配置

via off

forwarded_for delete

#http_access deny all #注释这个加入下面一句话

http_access allow all

#http_port 198.11.172.35:3128 #注释这个加入下面一句话

https_port 443 cert=/root/wdzjsquid.crt key=/root/wdzjsquid.key

5,启动

Service squid start

6,linux 客户端安装stunnel

Linux版下载地址:https://www.stunnel.org/downloads/stunnel-5.10.tar.gz

apt-get install libssl-dev ubuntu

Yum -y install libssl-dev centos

Tar zxvf stunnel-5.10.tar.gz

./configure --prefix=/usr/local/stunnel

Make && make install

cd /usr/local/stunnel/etc/stunnel

Vi stunnel.conf

[https]

accept = 127.0.0.1:8088

connect = 198.11.172.35:443

启动

/usr/locsal/stunnel/bin/stunnel /usr/local/stunnel/etc/stunnel/stunnel.conf

修改浏览器代理

http 127.0.0.1 8088

https 127.0.0.1 8088

等等

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

说明:

Squid代理服务器,但它不能直接FQ,因为在连接到Squid的过程中,就已经被墙了。所以得把传输的数据先进行加密再传输,这样等于是绕过了防火墙。这里使用的软件就是Stunnel,它用于加密数据。

服务器需求:
1、一台可以正常访问互联网的服务器,代号A(国外的)
2、一台可以正常访问服务器A的国内服务器,代号B

使用操作系统:

随意(我的是ubuntu)

访问过程:
1、用户设置代理指向B服务器的Stunnel服务监听的端口,访问网站
2、B服务器的Stunnel会将信息做加密处理,然后发送到A服务器的Stunnel服务上
3、A服务器的Stunnel会将加密的信息做解密处理,然后发送给A服务器的Squid服务上
4、A服务器的Squid会向目标网站请求数据,然后将信息返回。

一、在服务器A上安装Squid
1、安装Squid(个人建议自己下载一个编译安装,我是使用自动安装的)

  1. sudo apt-get install squid

配置Squid

自动安装后的配置文件在/etc/squid3路径下

打开配置文件

  1. cd /ect/squid3
  2. vi squid.conf

修改配置文件,在配置文件里面找到(注意前面是没有#的那一行)

  1. http_access deny all
  2. 修改为
  3. http_access allow all

网上有很多乱七八糟的配置说法,我们直接无视。修改上面一个地方就够了。

启动Squid

  1. sudo service squid3 --full-restart

到此已经成功安装Squid,如果出现错误百度一下吧。记得不用安装支持ssl的squid3之类的,因为我们下面用到自己的加密软件。

二、在A服务器上安装Stunnel
1、先到http://www.stunnel.org/downloads.html上找到最新的版本

  1. 在“Latest Version”中找到一个最新的就行了,以.tar.gz结尾的安装包
  2. 如:stunnel-5.10.tar.gz

2、下载软件包

  1. 在A服务器上使用命令行
  2. $wget http://www.stunnel.org/downloads/stunnel-5.10.tar.gz
  3. 或者直接下载到本地,再用工具上传到A服务器上

3、解压

  1. $tar -zvxf stunnel-5.10.tar.gz

4、进入软件包

  1. $cd stunnel-5.10

5、编译安装

  1. $./configure
  2. $make
  3. $make install

正常情况下不会出什么问题,如果make失败,大多会是没有安装openssl-devel,安装上即可:

$yum install openssl-devel
再次make应该能成功,如果再不行,请google,一般都会是一些软件未安装倒至的。之后,可以使用stunnel -version来查看是否安装成功。

6、配置Stunnel
Stunnel比Squid要麻烦一些,因为Squid如果你什么都设置,同样能运行,而Stunnel就不行。它需要一个配置文件,还需要一个签名证书。

我们还得自己来生成一个生成一个密钥文件stunnel.pem

a、先进到目录

  1. $cd /usr/local/etc/stunnel/

b、生成密钥

  1. $openssl req -new -x509 -days 365 -nodes -config openssl.cnf -out stunnel.pem -keyout stunnel.pem

如果报错找不到openssl.cnf,可以把-config openssl.cnf去掉,即:

  1. $openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem

这样会在/usr/local/etc/sutnnel/里生成密钥文件stunnel.pem

c、接着给它生成Diffie-Hellman部分:

  1. $openssl gendh 512>> stunnel.pem

网络上说这是4.X版本必须要做的,但我使用的5.01也这么做了。

d、设置配置文件:
在/usr/local/etc/stunnel/目录下有一个stunnel.conf.simple文件,可以cp一份为stunnel.conf或是新建一个stunnel.conf,这里使用新建

  1. $vim stunnel.conf

将以下内容复制进去

  1. cert = /usr/local/etc/stunnel/stunnel.pem
  2. CAfile = /usr/local/etc/stunnel/stunnel.pem
  3. socket = l:TCP_NODELAY=1
  4. socket = r:TCP_NODELAY=1
  5. ;;;chroot = /var/run/stunnel
  6. pid = /tmp/stunnel.pid
  7. verify = 3
  8. ;;; CApath = certs
  9. ;;; CRLpath = crls
  10. ;;; CRLfile = crls.pem
  11. ;setuid = stunnel
  12. ;setgid = stunnel
  13. ;;; client=yes
  14. compression = zlib
  15. ;;; taskbar = no
  16. delay = no
  17. ;;; failover = rr
  18. ;;; failover = prio
  19. sslVersion = TLSv1
  20. fips=no
  21. debug = 7
  22. syslog = no
  23. output = stunnel.log
  24. [sproxy]
  25. accept = 34567
  26. connect = 127.0.0.1:3128

这里有几个设置要说明一下:

第一行和二行是密钥文件的位置,如果按前面的做法,这里肯定是正确的。

connect = 127.0.0.1:3128 是本服务器,也就是A服务器Squid监听的端口号,也就是3128啦。

网上有说法是要配置下面两个,但是我没配置也成功,所以就不用那么麻烦了,直接忽略掉。
setuid = stunnel
setgid = stunnel

e、保存退出后,就可以试着启动stunnel了

  1. $stunnel

如果正常是没有输出任何内容的,如果有问题,它会给出问题所在,仔细排查,基本上不会有什么问题。

f、检查是否正常运行:

  1. $ps -ef | grep stunnel

如果看到运行的stunnel,说明已经成功运行了。

这样A服务器的Squid和Stunnel都配置完成了,接下来配置国内B服务器的Stunnel。B服务器不需要Squid,所以只需要配置Stunnel

三、在服务器B上安装配置Stunnel
安装同A,密钥不要再生成了,从服务器A上拷过来

1、登录服务器A,进到/usr/local/etc/stunnel/目录,向服务器B的/usr/local/etc/stunnel/目录里拷贝stunnel.pem密钥:

  1. $cd /usr/local/etc/stunnel/
  2. $scp stunnel.pem root@服务器B的IP:/usr/local/etc/stunnel/
  3. //当然也可以使用工具先从A服务器下载下来,再上传到B服务器

2、接着登录服务器B,设置配置文件,同服务器A,可以cp一个,也可以新建,这里同样新建:

  1. $cd /usr/local/etc/stunnel/
  2. $vim stunnel.conf

将下面的内容复制到里面:

  1. cert = /usr/local/etc/stunnel/stunnel.pem
  2. socket = l:TCP_NODELAY=1
  3. socket = r:TCP_NODELAY=1
  4. verify = 2
  5. CAfile = /usr/local/etc/stunnel/stunnel.pem
  6. client=yes
  7. compression = zlib
  8. ciphers = AES256-SHA
  9. delay = no
  10. failover = prio
  11. sslVersion = TLSv1
  12. fips = no
  13. [sproxy]
  14. accept  = 0.0.0.0:7071
  15. 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了

  1. $stunnel

如果没有意外,整个代理就正常运行了。打开你的浏览器,将代理设置为你服务器B的IP+7071端口号,然后访问一些不能访问的站点试试看。

补充手工安装Squid

到www.squid-cache.org上找最新版本的Squid,目前是3.4.5,下载地址是:http://www.squid-cache.org/Versions/v3/3.4/squid-3.4.5.tar.gz

//下载软件包
$wget http://www.squid-cache.org/Versions/v3/3.4/squid-3.4.5.tar.gz
//解压
$tar -zvxf squid-3.4.5.tar.gz
//进入软件包
$cd squid-3.4.5
//编译安装
$./configure  --with-openssl=/usr/lib64/openssl
$make
$make install
因为Squid需要openssl,所以configure需要带上openssl,openssl的路径需要根据你的系统来确定,我这里是在/usr/lib64/openssl,所以带上了它。

如果没有错误提示,说明基本上安装成功

启动Squid

$/usr/local/squid/sbin/squid -s
如果什么配置都不做修改,那默认的商品号为3128,这时候,可以打开你的浏览器,设置代理,填上A服务器的IP和3128端口号,访问baidu,看看remote是不是A服务器的地址和端口号,如果是,说明Squid已经能正常使用了。只是这时还不能FQ。

安装过程中可能会遇到的一些问题:

configure: error: no acceptable C compiler found in $PATH
本问题是没有安装GCC,安装即可:

$yum install gcc
configure: error: C++ compiler cannot create executables
本问题是安装了GCC,但没有安装C++,安装即可:

$yum install gcc-c++
/usr/bin/ld cannot find -lssl
本问题是没有指定openssl目录位置,在configure的时候把系统中openssl所在的目录带上

$./configure --with-openssl=/usr/lib64/openssl
make时报错:ext_file_userip_acl.cc:254: error: 'errno' was not declared in this scope
请修改文件:helpers/external_acl/file_userip/ext_file_userip_acl.cc

在#include "util.h"下面加一行

#include <cerrno>
外网访问提示:Access Denied
说明配置只允许本地访问,修改配置文件/usr/local/squid/etc/squid.conf

http_access allow all