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

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

squid+stunnel+用户密码认证的三种玩法的更多相关文章

  1. 实战Excel Add-in的三种玩法

    作者:陈希章 发表于 2017年11月26日 前言 这个系列文章应该有一阵子没有更新了,原因是一如既往的多,但是根本所在是我对于某些章节其实还没有完全想好怎么写,尤其是对于Office Add-in这 ...

  2. MYSQL添加远程用户或允许远程访问三种方法

    添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...

  3. HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法

    HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...

  4. EMQ -- 用户密码认证

    emq 的用户密码认证 MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous) ...

  5. 【Microsoft Azure 的1024种玩法】四. 利用Azure Virtual machines 打造个人专属云盘,速度吊打某云盘

    [简介] 1.Azure Virtual machines是Azure 提供的多种可缩放按需分配计算资源之一,Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或 ...

  6. 【Microsoft Azure 的1024种玩法】六、使用Azure Cloud Shell对Linux VirtualMachines 进行生命周期管理

    [文章简介] Azure Cloud Shell 是一个用于管理 Azure 资源的.可通过浏览器访问的交互式经验证 shell. 它使用户能够灵活选择最适合自己工作方式的 shell 体验,本篇文章 ...

  7. 【Microsoft Azure 的1024种玩法】七.Azure云端搭建部署属于自己的维基百科

    [简介] MediaWiki是全球最著名的开源wiki程序,运行于PHP+MySQL环境.MediaWiki从2002年2月25日被作为维基百科全书的系统软件,并有大量其他应用实例.MediaWiki ...

  8. 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)

    版权声明:本文由张宁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126547001488207964 来源:腾云阁 ht ...

  9. 历数依赖注入的N种玩法

    历数依赖注入的N种玩法 在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程 ...

随机推荐

  1. Media PLayer

    PotPlayer http://potplayer.daum.net/?lang=zh_CN KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的新一代作品.PotPlayer 的 ...

  2. struts2中修改Action后刷新浏览器后不能及时更新

    在学习strut2的时候,发现如果修改配置文件中Action的时候,刷新浏览器并不能加载修改后的Action,只能关闭服务,重新开启server才能获取到,上网找了许多资料后发现只要在配置文件中加上下 ...

  3. 8000401a错误解决方式(Excel)

    前一阵子做开发须要用到Excel和Word编程,本人用的是Vista系统,开发环境是VS2005和Office2007,測试无不论什么问题,但是到部署的时候出现了一些令人非常头痛的问题,老是会出现比如 ...

  4. LeetCode Maximum Product Subarray 解题报告

    LeetCode 新题又更新了.求:最大子数组乘积. https://oj.leetcode.com/problems/maximum-product-subarray/ 题目分析:求一个数组,连续子 ...

  5. [AngularJS] Services, Factories, and Providers -- Service vs Factory

    Creating a Service: Before actual create an angular service, first create a constructor in Javascrip ...

  6. 【iOS】Resumable Doanloads(断点下载)

    这里我们只讨论iOS平台下的通用app,我们可以自己写代码来实现resume downloads,解释如下. resume一个HTTP下载不难,但必须要理解一些关键的HTTP概念: entity ta ...

  7. AS 断点调试 debug

    debug面板 点击下图工具栏开启调试会话 此种调试方式是通过冻结应用运行的状态,仿佛时间停止了一般,然后我们逐一观察此时程序的各个参数是否符合我们的预期. 这种调试方法适用于对时间不敏感的程序.也就 ...

  8. css动画+照片清晰度动画

    源代码: <!DOCTYPE html><html><head> <title>donghua</title> <meta chars ...

  9. H1标签使用的七大注意事项

    H1标签使用的七大注意事项: 1 每个页面都应该有H1标签,H1标签是每个网页不可缺少的要素. 2 使用H1标签的内容应该简洁明了; 3 H1标签要尽量出现在源文件代码的开头的部分,这样可以让访问者和 ...

  10. nosqlunit开源框架

    import com.lordofthejars.nosqlunit.annotation.UsingDataSet;import com.lordofthejars.nosqlunit.core.L ...