Squid代理服务器应用案例 多出口多用户认证上网

最近帮朋友接了个小项目,客户在他们的美国机房租了几台服务器,然后想在上面做上网用的代理服务器,供客户在国内使用。具体需求如下

1,客户的这台服务器具有多个出口ip地址

2,客户希望使用认证的方式使用代理服务器上网

3,客户希望通过不同的认证用户实现从不同的出口ip访问网络

4,隐藏代理信息,隐藏真实上网ip

此客户需求相当明确,根据上面罗列,条理也很清晰。接下来就是对于客户的以上需求逐一的实现了。

笔者在这里使用的是squid,Squid是一种在Linux系统下使用的优秀的代理服务器软件。同时squid还可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。更多关于squid的介绍就不在这里多讲了,有需要的去官方网站上看吧

这里先看下我设计的逻辑图

根据图中所示,红色的用户1会通过红色的出口ip1访问internet,绿色的用户2会通过绿色的出口ip2访问internet,用户3和用户4同样对应相应颜色的出口访问internet。

接下来根据上面的需求进行逐一的分解

一、需求分析

1,客户的这台服务器具有多个出口ip地址

对于需求一来说,这没什么可以解决的,条件就想图示中一样,就在这里摆着呢

客户的出口ip为:

10.100.10.1

10.100.10.2

10.100.10.3

2,客户希望使用认证的方式使用代理服务器上网

对于这条需求来讲,就要用到squid的认证功能了,说到squid的认证功能,包括的还真不少呢。大类包括basic_auth,digest_auth,external_acl,negotiate_auth,ntlm_auth这5种(注:squid-2.7.STABLE9版本),每个大类下面还有具体的认证方式,如NCSA,LDAP,DB等等,具体支持哪些可以去这些目录下面看。

笔者在这里主要介绍的是NCSA的方式,此种认证方式类似apache的auth认证方式,通过用户名密码来验证,密码文件也是通过htpasswd程序来创建。后面会给出具体配置

3,客户希望通过不同的认证用户实现从不同的出口ip访问网络

先说实现不同出口ip访问网络,这个主要是依靠squid的tcp_outgoing_address配置实现的,此参数可以根据source ip或者用户名的不同,分配不同的出口ip出去。

如此一来,搭配第二个需求中的用户验证,正好就可以实现第三个需求了。后面会给出具体的配置。

4,隐藏代理信息,隐藏真实上网ip

这个需求很多人应该都想到使用什么配置文件了,对,就是squid的header_access这个参数。主要就是隐藏掉HTTP_VIA,VIA和X-forwarded-for。后面会给出具体配置。

二、安装配置

首先要做的就是下载一个squid安装包。下载地址http://www.squid-cache.org/Versions/,笔者这里使用的是2.7 STABLE9,笔者操作的当前目录是/tmp,下面所有涉及到目录的都是基于此目录。squid源文件路径是/tmp/squid-2.7.STABLE9.tar.gz

安装步骤如下:

tar zxvf squid-2.7.STABLE9.tar.gz

cd squid-2.7.STABLE9

./configure --prefix=/usr/local/squid --enable-async-io=320 --enable-icmp --enable-delay-pools --enable-kill-parent-hack --enable-snmp --enable-arp-acl --enable-htcp --enable-cache-digests --enable-removal-policies=heap,lru --enable-default-err-language=Simplify_Chinese --enable-x-accelerator-vary --enable-follow-x-forwarded-for --with-aufs-threads=320 --with-pthreads --with-dl --with-maxfd=65536 --enable-basic-auth-helpers=DB,NCSA --enable-digest-auth-helpers=password --enable-large-cache-files --with-large-files

make

make install

如果以上步骤中无报错,squid就被正确安装完毕了。

接下来执行:

cd /usr/local/squid/ (之后的所有操作均在此目录下完成)

grep -v "^#" etc/squid.conf.default|uniq > etc/squid.conf

将创建一份未注释的配置文件。

接下来编辑此文件

vi etc/squid.conf

修改编辑的内容如下:

20 acl CONNECT method CONNECT

21

22 http_access allow manager localhost

这两行中间加入:include "/usr/local/squid/etc/auth.conf",auth.conf文件的内容后面会有详细介绍。

32 icp_access deny all

33

34 http_port 3128

这两行中间加入:always_direct allow all,意思是对所有ip过来的请求都允许转发。

将49 broken_vary_encoding allow apache行后面的所有内容删除,加上如下内容

forwarded_for off 隐藏x-forwarded-for头

header_access HTTP_VIA deny all 隐藏HTTP_VIA头

header_access VIA deny all 隐藏VIA头

cache_effective_group daemon 设置squid执行的用户组,这里使用了系统自带的daemon用户组

cache_effective_user daemon 设置squid执行的用户,这里使用了系统自带的daemon用户

visible_hostname test 设置错误页面中出现的服务器名称,可自行更改

cache_dir aufs /usr/local/squid/cache 100 16 256 设置squid的缓存,可自行调整

cache_store_log none 关闭store.log

都修改添加完毕后,保存退出。

紧接着我们来创建auth.conf。

vi /usr/local/squid/etc/auth.conf

输入如下内容

# 设置验证相关的配置内容,指定密码文件

1 auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd

2 auth_param basic children 10 设置验证子进程数

3 auth_param basic credentialsttl 2 hours 设置验证有效期

4 auth_param basic casesensitive off 设置是否区分大小写

5

# 后面这三行分别定义了三个用户组。每个用户组指定了一个用户文件。

6 acl usergroup1 proxy_auth "/usr/local/squid/etc/ip1user"

7 acl usergroup2 proxy_auth "/usr/local/squid/etc/ip2user"

8 acl usergroup3 proxy_auth "/usr/local/squid/etc/ip3user"

9

# 后面三条允许这三个组的用户可以访问网络

10 http_access allow usergroup1

11 http_access allow usergroup2

12 http_access allow usergroup3

13

# 这三条用来分配哪个组的用户走哪个出口ip

14 tcp_outgoing_address10.100.10.1 usergroup1

15 tcp_outgoing_address10.100.10.2 usergroup2

16 tcp_outgoing_address 10.100.10.3 usergroup3

编辑完成后保存退出。

接下来是创建用户文件,vi /usr/local/squid/etc/ip1user,填入如下内容

user1

user2

保存退出,这里用户数量不限,每个用户名占用一行。

如果一开始没有那么多用户,建议使用touch命令将文件创建好,不然启动squid的时候会出错。

接下来创建用户的密码文件,第一次创建密码文件请使用下面的命令

htpasswd -cb /usr/local/squid/etc/passwd user1 111111

倒数第二个字段是用户名,最后一个字段是用户对应的密码

如果之前创建过了密码文件,使用下面的命令就可以了

htpasswd -b /usr/local/squid/etc/passwd user2 111111

命令解释同上

到此为止呢,配置文件等相关工作就基本完成了,下面来说说squid的初始化工作。

首先,mkdir cache,创建cache目录

然后执行,chown -R daemon.daemon . 变更当前目录及所有子目录的的属主与属组。笔者这里使用系统自有的daemon用户和组。

这些工作都做好之后呢,就来执行 sbin/squid -z对squid进行初始化,如果没有报错信息呢,初始化工作就算是做完了,下面启动squid服务即可了,启动命令为

sbin/squid -ND &

然后通过下面的命令查看一下3128端口是否启动

netstat -ln|grep 3128

如果出现下面的内容,说明squid服务已经正常运行了

tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN

到此为止,一个支持用户身份验证的多出口代理服务器就完全配置完毕了,赶快打开浏览器,配置好代理服务器,测试一下吧。看看浏览网页是否会弹出验证的提示。

另外还可以登录http://www.iprivacytools.com/proxy-checker-anonymity-test/网站查看使用不同的用户组的用户,是否上网ip不一样,同时这个页面还能查看当前上网方式是否使用了代理。

由上图可知,最上面是上网的ip地址,最下方的proxy detected如果是no表示未检测出使用代理上网。

如果想让squid在开机的时候自动启动只需要在/etc/rc.loacl文件中加入

/usr/local/squid/sbin/squid -ND&即可了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值