找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 9429|回复: 8

配置透明代理,自动身份认证?

[复制链接]
发表于 2014-4-19 20:27 | 显示全部楼层 |阅读模式
公司用的suqid代理,用户必须设置代理ip地址和端口后,然后弹出身份验证后才能上网。

想用路由器设置代理并自动身份验证,实现透明代理上网,让连接路由器用户免除麻烦。


网上查过tinyproxy,squid等都无法实现此功能,有高手对此有研究吗?就是类似于校园网认证的那种。
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2014-4-20 09:13 | 显示全部楼层
经查,Squid+iptables是可以实现透明代理的,但是不能同时实现用户认证
iptables -t nat -A PREROUTING -i eht1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
只是让80端口自动转发到3128而已,但是在此状态下无法实现用户认证
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-20 09:14 | 显示全部楼层
Squid+iptables的透明代理配置
Firer2000
2003-06-27
硬件环境:兼容机 双网卡
软件环境:linux7.1+squid-2.3.STABLE4-src.tar
一.squid的安装配置
1.下载squid
  可以从squid主站下载:http://www.squid-cache.org
2.编译安装squid
  第一步:[root@www root]#tar xzvf squid-2.3.STABLE4-src.tar.gz
  第二步:[root@www root]#cd squid-2.3.STABLE4
  第三步:[root@www squid-2.3.STABLE4]#./configure --prefix=/usr/localsquid enable-ipf-transparent

/*指定squid的安装目录和启用透明代理*/
  第四步:[root@www squid-2.3.STABLE4]#make all
  第五步:[root@www squid-2.3.STABLE4]#make install
以上五步执行完毕,squid整个程序就会被安装在/usr/local/squid目录下.接下来再执行以下几步:
  第六步:进入目录/usr/local,以root身份执行下面的命令,创建cache目录和改变整个squid目录的所有者为

nobody.nobody:
         [root@www squid-2.3.STABLE4]#cd /usr/local/squid
         [root@www squid]# mkdir cache
         [root@www squid]# cd ..
         [root@www local]# chown nobody.nobody -R squid
  第七步:改变用户为nobody,进入/usr/local/squid/bin目录,执行./squid -z创建cache交换目录
         [root@www local]# su nobody
         [root@www local]$cd /usr/local/squid/bin
         [root@www local]$./squid -z
  第八步:修改squid.conf文件,确保以下配置:
         httpd_accel_host virtual(记得把一句加上,我用的这个squid版本没有这一句)
         httpd_accel_port 80
         httpd_accel_with_proxy on
         httpd_accel_uses_host_header on
cache_effective_user nobody
cache_effective_group nobody
  http_access allow all
cache_dir ufs /usr/local/squid/cache 100 16 256
         ...
  最后启动squid:
        [root@www local]#/usr/local/squid/bin/squid
  查看进程列表:
        [root@www local]#px ax
  应该出现如下几个进程:
......... usr/local/squid
......... squid
......... unlink
并且系统中应该有如端口被监听:
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:3130 0.0.0.0:*
这些说明squid正常启动了.
###如果squid不能正常工作,可能是域名的设置问题,需要设置域名。
让系统启动时自动运行squid
编辑/ect/rc.d/local文件,在末尾加上:
su nobody -c "/usr/local/squid/bin/squid"
------------------------------------------------------------------------------------------------
OK,通过以上设置我们就以就squid代理上网了.
可以在ie浏览器中设置使用代理服务器,添入192.168.0.101:3128就可以上网了.
但这一步还没有实现透明代理,接下来我们开始设置iptables

二.设置iptables
1、        首先使用linuxconf工具将enable routing 项打开。在configure linuxconf modules 里选择firewall的项。
2、        #setup
进入services 去掉ipchains。
3、在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewall以改变文件属性,编辑

/etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall以确保开机时能自动运行该脚本.
firewall内容为:
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
echo 1>;/proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eht1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 172.16.0.0/23 -o eth0 -j SNAT --to 211.141.67.10
##############################################################################
下面是原文给出的firewall脚本,共参考
#!/bin/sh
echo "Enable IP Forwarding..."
echo "1">;/proc/sys/net/ipv4/ip_forward
echo "Starting iptables rules..."
/sbin/modprobe iptable_filter
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
#Refresh all chains
/sbin/iptables -F -t nat
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to a.b.c.d
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#######################################################################################
其中,eth1是内部网卡,eth0是外部网卡。
内网ip地址为172.16.0.0/23
eth0对应的ip地址为:211.141.67.10
结束.
然后设置网关和dns后就可上网了.
如需要还可以添加一些防火墙以增强安全性,具体参考本站:
http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables1.htm
http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables2.htm
三:设置squid支持用户认证:
说明:透明代理和用户认证功能不能同时应用。否则用户认证功能不起作用。
假定squid source目录在/tmp/ squid-2.3.STABLE4
2. # cd /tmp/ squid-2.3.STABLE4/auth_modules/NCSA
# make ncsa_auth

3. 拷贝生成的执行文件ncsa_auth到squid执行文件目录
# cp ncsa_auth /usr/local/squid/bin

4. 从Apache软件包中得到程序htpasswd
假设apache软件安装在/var/www目录下
#cd /usr/www/bin
5.用htpasswd生成供Squid利用的用户名和密码认证数据库文件
生成的密码文件放在/usr/local/squid/etc 下。
[root@mail bin]# ./htpasswd -c /usr/local/squid/etc/passwd test
New password:
Re-type new password:
Adding password for user test
这时在/usr/local/squid下就生成了passwd文件,并且加入了用户test。
6. 加其它更多的用户
#htpasswd /usr/loal/squid/etc/passwd newuser

7. 修改squid.conf,enable ncsa_auth用户认证功能

[root@linux etc]# more squid.conf | grep ncsa_auth
authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd

8.修改ACL部分,象下面这样:
定义相关的用户类
acl auth_user proxy_auth REQUIRED
注意,REQUIRED关键字指明了接收所有合法用户的访问。
7.设置http_access
http_access allow auth_user
注意,如果你在改行中指定了多个允许访问的用户类的话,应该把要认证的用户类放在第一个。如下所示:
错误的配置:http_access allow auth_user all manager
正确的配置:http_access allow auth_user manager all



转载:http://blog.chinaunix.net/uid-20672803-id-3348283.html
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-20 09:15 | 显示全部楼层
但是经过一些大师的讨论,确实可以实现透明代理+用户认证。如下文
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-20 09:17 | 显示全部楼层
问题一:用户认证不能在透明代理上实现
在squid.conf里提到:
# # WARNING: proxy_auth can't be used in a transparent proxy. It
# # collides with any authentication done by origin servers. It may
# # seem like it works at first, but it doesn't.

说明透明代理和用户认证根本不能同时使用。squid不支持。但是我发现坛子里好多贴子,都没有说明这一点。可能有些人忽略了这些。或者没有做过测试?


问题二:所谓的透明代理其实就是http透明代理
实际上就是把所有客户端发来的80端口请求转发到squid的代理端口。其它的透明还得通过iptables等来实现 。在squid上做的策略实际上只对转发来的数据进行处理。因此经常会有人问,为什么在squid上设了时间限制,但MSN和QQ还能用。


问题三:squid页面出错信息时间问题
squid用的是格林威治时间,而我们的系统是+8的北京时区,所以如果squid提示出错的时候,是-8小时的时间。
可以验证一下,
ping www.163.com
ping www.sina.com
得到IP地址,用这个地址去访问,发现他们也一样,哈哈!


段誉 回复于:2005-02-24 04:49:54

认同第一、二两个问题,对于第三个问题,我查了www.squid-cache.org的FAQ,发现不是用的格林威治标准时间(GMT),而是UTC时间(没搞清楚是什么含义, :em06: ,“Univer-sal Time Code-世界时间代码”?)。

原文引用如下:
access.log native format in detail
It is recommended though to use Squid's native log format due to its greater amount of information made available for later analysis. The print format line for native access.log entries looks like this:


    "%9d.%03d %6d %s %s/%03d %d %s %s %s %s%s/%s %s"


Therefore, an access.log entry usually consists of (at least) 10 columns separated by one ore more spaces:


time
A Unix timestamp as UTC seconds with a millisecond resolution. You can convert Unix timestamps into something more human readable using this short perl script:

        #! /usr/bin/perl -p
        s/^\d+\.\d+/localtime $&/e;

platinum 回复于:2005-02-24 09:13:02

对于access.log,在squid.conf里设置emulate_httpd_log on就可以解决问题

不过squid报错页面下面的时间,就恐怕只能修改源代码了
我查了源代码,里面用到了rfc的一个库里面的一个gmt函数,取当前时间并以字符串形式返回

水中风铃 回复于:2005-02-24 09:15:20

引用:原帖由 "段誉" 发表:
is recommended though to use Squid's native log format due to its greater amount of information made available for later analysis. The print format line for native access.log entries looks like this:
..........


不好意思,我写错的,我说的是网页出错信息是GMT格式,

platinum 回复于:2005-02-24 09:17:34

是的,163、新浪等网站,他们也用squid做反向代理,且他们的GMT时间也比北京的真正时间-8小时,而且查阅了squid手册,没有找到可以修正GMT时间偏差的参数

另外针对水中风铃提出的问题一,我虽然知道这个规定,但是不知道为什么不行,squid解释的也不是很清楚,不行的原因是什么能说说吗?

60133056 回复于:2005-02-25 14:54:50

期待

zbyue 回复于:2005-02-28 15:50:11

关于第一个问题我有意见,我经过试验是可以用户认证和透明代理上同时实现的,我已经使用了一年多了,200多个用户IP+MAC+user.passwd,这个是事实的。

platinum 回复于:2005-02-28 16:04:30

zbyue,能否把你的squid.conf去掉“#”后贴上来看一下
还有iptables -t nat表的内容

关于风铃说的第一点,那个是官方文档上说的,我也不是很明白

yahwist7 回复于:2005-03-08 23:04:59

请教,如果squid对多个域名反向代理,如何将每个域名的access.log分开。就像apache下多个域名,但是每个域名有自己的access.log

cjpercy 回复于:2005-03-11 09:37:28

引用:原帖由 "zbyue"]关于第一个问题我有意见,我经过试验是可以用户认证和透明代理上同时实现的,我已经使用了一年多了,200多个用户IP+MAC+user.passwd,这个是事实的。
发表:


关于这个问题我也曾经作过,但一直没成功,可否给把你的配置给我们贴上来呢?

platinum 回复于:2005-03-11 09:50:39

引用:原帖由 "cjpercy" 发表:


关于这个问题我也曾经作过,但一直没成功,可否给把你的配置给我们贴上来呢?

去官方网站看看就知道了
官方网站上明确指出,用户认证的squid,用透明代理是无法实现的
我研究过,没研究出来,才去查的资料,才发现官方网站这么说的
你也去研究一下,如果你万一成功了别忘了告诉我 :mrgreen:

chinaglwo 回复于:2005-04-24 02:14:29

学习......
等待zbyue大侠的回复

zbyue 回复于:2005-04-25 08:27:42

我非常歉意,这些天忙的很,又回了一下老家四川,所以就这样了,你们先试一下这个,我确实没问题,你们也可以给我打电话,也可以发邮件给我,zbyue@starlight.net.cn
acl all src 0.0.0.0/0.0.0.0
# acl manager proto cache_object
# acl localhost src 127.0.0.1/255.255.255.255
# acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80         # http
acl Safe_ports port 21         # ftp
acl Safe_ports port 443 563        # https, snews
acl Safe_ports port 70         # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535        # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl auth_user proxy_auth REQUIRED
acl CONNECT method CONNECT
# acl advance src "/etc/squid/advance_ip"
acl mmxfile urlpath_regex -i \.mp3$ \.avi$ \.eml$ \.rm$
acl denyip dstdomain .tencent.com .tencent.com.cn
acl allowed_ip src "/etc/squid/normal_ip"
acl allowed_mac arp "/etc/squid/normal_mac"
http_access deny denyip
http_access deny mmxfile
http_access deny !allowed_mac
http_access deny !allowed_ip
http_access allow auth_user allowed_mac
http_access allow all

zbyue 回复于:2005-04-25 08:29:41

满不满意?

zbyue 回复于:2005-04-25 08:30:28

解决问题没有?

DreamJiang 回复于:2005-04-25 12:28:48

上樓的朋友,你用得好象不是“透明代理”,而是“非透明代理”。不知我的理解是否正確?請問你在“透明代理”中有沒有實現過?

platinum 回复于:2005-04-25 12:32:01

引用:原帖由 "DreamJiang"]上述的朋友,你用得好象不是“透明代理”,而是“非透明代理”。不知你的理解是否正確?請問你在“透明代理”中有沒有實現過?
发表:

你指实现什么?认证吗?
官方宣称认证不支持透明

zbyue 回复于:2005-04-25 13:34:29

我是用透明代理呀,说了你不信,不信到我公司来看了,但你也可以不设网关也可以使用代理上网吗。

就是透明代理+用户认证+IP限制+MAC限制

platinum 回复于:2005-04-26 10:09:02

可否贴出
/etc/squid/normal_ip
/etc/squid/normal_mac
看一下?

DreamJiang 回复于:2005-04-26 12:37:24

引用:原帖由 "zbyue" 发表:
我是用透明代理呀,说了你不信,不信到我公司来看了,但你也可以不设网关也可以使用代理上网吗。

就是透明代理+用户认证+IP限制+MAC限制


朋友,你能否談一下你的實現方案(即原理)?再者,你有沒有在iptables中進行其它的設置?

zbyue 回复于:2005-04-26 15:47:39

这里面就是一些IP地址和MAC地址哟!

一行一条就可以了吗!

normal_ip:
172.16.16.1
172.16.16.2

normal_mac:
00:00:00:00:00:00
00:00:00:00:00:00

就这样罗!

关于在Iptables 中要加入nat控制语句吗?这个简单的很,网上到处有,我根据我们公司不同的情况面改变了一下了而已!

实现原理你就要看squid的了:
1、限制部分域名和IP不可以被浏览。
2、限制一些扩展名的文件被下载。
3、限制在MAC列表中没有的IP。
4、限制在IP列表中没有MAC地址。
5、打开并允许用户论证,而且受到MAC地址列的约束上网!
这就样了!

zbyue 回复于:2005-04-26 15:55:21

acl mmxfile urlpath_regex -i \.mp3$ \.avi$ \.eml$ \.rm$
acl denyip dstdomain .tencent.com .tencent.com.cn
acl allowed_ip src "/etc/squid/normal_ip"
acl allowed_mac arp "/etc/squid/normal_mac"
http_access deny denyip
http_access deny mmxfile
http_access deny !allowed_mac
http_access deny !allowed_ip
http_access allow auth_user allowed_mac

platinum 回复于:2005-04-27 08:16:53

请教zbyue
你前面的配置里面有这样的,后面这个却没有了,我有些诧异

http_access deny denyip
http_access deny mmxfile
http_access deny !allowed_mac
http_access deny !allowed_ip
http_access allow auth_user allowed_mac
http_access allow all

为什么前面deny以后又allow,最后又allow all呢?

zbyue 回复于:2005-04-27 09:08:02

http_access deny !allowed_mac
http_access deny !allowed_ip
http_access allow auth_user allowed_mac

在allowed_mac列表中有很多MAC 地址,http_access deny !allowed_mac 是指凡是在allowed_mac列表中不存在的全部禁。


在allowed_IP列表中有很多IP 地址,http_access deny !allowed_IP 是指凡是在allowed_ip列表中不存在的全部禁。

http_access allow allowed_mac 是指允许存在allowed_mac中的mac地址通过,关于http_access allow all的意思是除了
上面的deny 和 allow的外全部可以通过(具体我也不知道,但是这样用没错!)。

DreamJiang 回复于:2005-04-27 09:30:05

上樓的朋友,你的“透明代理”具體體現在哪裡?這是“透明代理”嗎?請指教!

zbyue 回复于:2005-04-27 09:35:01

这是透明代理,透明代理体现在IPtables nat上面,然后将数据80port ->; squid 3128 port上。

DreamJiang 回复于:2005-04-27 14:02:41

我原來利用"iptables+squid"做過“透明代理”,能夠正常訪問internet,但是在這種情況下無法實現用戶認證(注:在“非透明代理”中是可以實現用戶認證的)。所以,我只是想請問你的squid.conf中哪條語句能實現透明代理的用戶認證?是http_access allow auth_user allowed_mac 嗎?如果將你的語句改寫成如下的樣子,請問還能實現用戶認證嗎(針對“透明代理”)?

http_access allow auth_user
http_access deny denyip
http_access deny mmxfile
http_access deny !allowed_mac
http_access deny !allowed_ip
http_access allow all

據squid中的FAQ中介紹好象在透明代理中是實現不了用戶認證功能的。

zbyue 回复于:2005-04-27 14:57:03

写道:

>;zbyue,您好!
>;
>;        现在我的情况是这样:
>;
>;我用squid做代理,现在代理已经成功,但是限制上网方面还有些不明白,望指点一下:
>;一、公司分为192.168.0.1/192.168.1.1/192.168.2.1三个网段,其中要求,192.168.0.1这个网段一定能够上固定的网址:http://www.163.com,就比如上这一个?..胛矢萌绾巫隽耍?/a>;
>;二、如果用MAC来控制上网的方法可否一并告之?
>;三、acl allowedmac arp "/etc/squid/maclist.txt"这种方法可以将mac做在一个文件中,那各位可以帮我想想办法也把上面这些要求做在一个文件中吗?谢谢。
>;       麻烦您了,谢谢。
>;        致
>;礼!
>;        
>;
关于第一个问题是很容易实现的,你先装www.163.com放入一个文件中,然后
acl denyip dstdomain "//file.txt"
http_access deny !denyip
就可以实现,但是如果你只允许一些IP访问的话也应该是没有问题的,但放这些东西是要有顺序的,不能没有顺序,就象用户
认证一样有的人做不出来有的人做的出来,就是一个放http_access的顺序的问题,明白吗?但关于这个问题也可以用iptables
来控制也是很好的方法哟!
关于第二个问题,我在贴子上已经搞的很清楚的了。

关于第三个问题是可以的,我在回答第一个问题时已经解答了你!

--
美好的祝愿......

FAQ说做不到,实际上在2.5以后的版本就已经可以了,但http_access语句放的时候顺序是最重要的。

platinum 回复于:2005-04-28 07:51:22

引用:原帖由 "zbyue"]FAQ说做不到,实际上在2.5以后的版本就已经可以了,但http_access语句放的时候顺序是最重要的。
发表:

我用的是squid-2.5.9,自行编译安装
在不用透明代理的时候,在IE里面指定代理地址,可以出现认证框
如果用iptables直接指向3128,浏览时会直接出现一个squid的错误页面
引用:
ERROR
The requested URL could not be retrieved

--------------------------------------------------------------------------------

While trying to retrieve the URL: http://www.163.com/

The following error was encountered:

Access Denied.
Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is webmaster.



--------------------------------------------------------------------------------

Generated Wed, 27 Apr 2005 23:45:08 GMT by PT-Proxy (squid/2.5.STABLE9)


我又重新分析了你的规则

http_access deny denyip
http_access deny mmxfile
http_access deny !allowed_mac
http_access deny !allowed_ip
http_access allow auth_user allowed_mac
http_access allow all

你如果删掉最后一个allow all,是不是透明代理就无效了?
你现在的状态是不是虽然能够透明代理,但是不能出现认证框,或者认证不能通过?
你试试去掉allow all是什么情况?

platinum 回复于:2005-04-28 07:56:22

对了zbyue,你说实现了透明方式的认证,麻烦你把IP和端口告诉我,我在我的网关上DNAT过去,把TCP/80转到你的squid上

如果我访问网页,出现了密码提示框,且可以进行认证,那么就证明没问题了

说实话,我对你现在说的这个还持有怀疑态度,我想亲眼看一下什么样子

PS: 我上面那个你试一下,我认为最后一句allow all存在逻辑漏洞

zbyue 回复于:2005-04-28 10:22:29

写道:

>;zbyue,您好!
>;
>;        目的:所有的电脑都能够上一些三个的IP网站,IP文件为squid-url.txt,也能够根据域名来访问三个网定的网址,网址文件为squid-url.txt,我根据MAC来判断是否能够上除了这三个网址和IP的其他网址,能够上所有网址的MAC地址在squid-mac.txt文件中,现在这三个文件我都放在附件中,具体的配置的规则如下:
>;acl all src 0.0.0.0/0.0.0.0
>;acl mac arp "/etc/squid/squid-mac.txt"
>;acl ip src "/etc/squid/squid-ip.txt"
>;acl url src "/etc/squid/squid-url.txt"
>;http_access allow mac
>;http_access deny !mac
>;http_access allow !mac ip
>;http_access allow !mac url
>;而现在mac地址在etc/squid/squid-mac.txt文件中的是可以上所有的网站了,而不在MAC文件中的也可以上网,请大家帮我看看,我该如何改了?
>;squid-ip.txt
>;http://192.168.25.22/
>;http://61.146.192.148/
>;http://201.252.189.64/
>;squid-mac.txt
>;00-0D-56-61-FC-86
>;00-0C-76-60-B1-50
>;squid-url.txt
>;*.fsvod.com
>;
>;  
>;
允许MAC地址的能够访问所有的网站(放在最前面):
http_access allow mac
未允许的MAC地址能够且只能访问一共六个网站:
squid_ip.txt and squid_url.txt 可以放在一个文件中squid_url.txt写就是:
192.168.25.22
61.146.192.148
201.252.189.64
fswod.com
sina.com
china.com.cn

acl ip nomacurl "/etc/squid/squid-url"

这样就可以。
http_access deny !nomacurl
http_access allow nomacurl

现在就变成这样的:

acl all src 0.0.0.0/0.0.0.0
acl mac arp "/etc/squid/squid-mac.txt"
acl nomacurl src "/etc/squid/squid-url.txt"

http_access allow mac
http_access deny !nomacurl
http_access allow nomacurl
http_access allow !mac

看看有没有问题,我只是分析了一下,具体还要看情况

zbyue 回复于:2005-04-28 10:26:56

你在编译时有没有说明使用透明代理?

DreamJiang 回复于:2005-04-28 17:05:30

我在iptables中加入了如下一行:

#forward to squid for www services
/usr/sbin/iptables  -t nat -A PREROUTING -i eth1 -p tcp -s $in_ip_range --dport 80 -j REDIRECT --to-port 3128

在squid.conf文件中設置了如下語句片段(注:squid是squid-2.5.STABLE8版本的):

......
http_port 3128
cache_mem 64 MB
#Default:
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 8 KB
cache_dir ufs /usr/local/squid/var/cache 100 16 256
cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
pid_filename /var/run/squid.pid
ftp_passive on
dns_nameservers 192.168.60.1
redirect_children 5

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

#authenticate_program /usr/sbin/squid_ldapauth

auth_param basic children 5

auth_param basic credentialsttl 2 hours
authenticate_ttl 1 hour

acl password proxy_auth REQUIRED
#acl fileupload req_mime_type -i ^multipart/form-data$

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl acl_query urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
acl SSL_ports port 443 563
acl Safe_ports port 80         # http
acl Safe_ports port 21         # ftp
acl Safe_ports port 443 563        # https, snews
acl Safe_ports port 70         # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535        # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
acl ftpok proto ftp
acl allowed_mac arp "/usr/squid/mac"
acl allowed_ip src 192.168.60.60/32 192.168.60.61/32

http_access allow manager localhost
http_access deny manager

http_access allow localhost
http_access allow SSL_ports
http_access allow Safe_ports
http_access allow ftpok
http_access deny !allowed_ip
http_access deny !allowed_mac
http_access allow password allowed_mac
http_access allow all
http_access deny all

icp_access allow all

miss_access allow all

auth_param basic realm Welcome to Proxy.abc.com

cache_effective_user nobody
cache_effective_group nogroup

no_cache deny acl_query
no_cache deny denyssl

httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
visible_hostname proxy
......

通過squid+iptables原來就實現了透明代理,但是卻無法在透明代理中實現“用戶認證”的功能。其實,對於透明代理來講,主要起作用的就是iptables中的那條forward語句以及squid.conf中的如下幾條語句:
httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
visible_hostname proxy

在透明代理中,這些acl以及http_access語句是沒有起到任何作用的。因為,如果將這些語句注釋掉的話,仍然能夠正常的訪問internet的。也就是說:在透明代理中,有無那些http_access語句都不會影響到訪問internet的(注:在非透明代理中,那些acl以及http_access語句卻有著很重要的作用,利用它們能夠很好的進行一些控制或限制等功能)。

其實,可以了解一下“透明代理”的工作過程及原理。我個人認為:如果要在“透明代理”中實現“用戶認證”的話,可能必須自己寫腳本。你們認為呢?

真的不明白“zybue”那位朋友是如何在“透明代理”中實現用戶認證的!!!還請指教!

zbyue 回复于:2005-04-28 17:19:57

其实问题是在当客户端通过网关访问代理服务器时,当80号端口的数据转向3128时,squid 发现有人要通过squid取数据,这时就要用户认证才把3128的数据包转到80号上通过网关到达上网人的Browse.

实际上用户认证只能控制3128端口的数据包,如果你通过8000的UDP去访问QQ服务器又是不需要的。

zbyue 回复于:2005-04-28 17:30:13

不知道我的解释对不对,但我通过这个确实实现了透明代理,用户也需要输入密码,但这只能控制3128端口的数据包,也许是一个偶然!!!!我用了两年多了,有500多个用户。

szkingrose 回复于:2005-04-29 20:18:40

透明代理和用户认证是可以并存的

讨论透明代理和用户认证问题前,有一个概念大家要区分清楚。

透明代理实现后的用户认证并不是说的只要访问外网就会出来了对话框让

你输入用户名及密码,这样理解是错误的。是不可能做到这样的。

试想一下,在console下面走port 21,53让系统跳出一个认证对话框,这是多么滑稽的事情。

现在有nat的认证,我看过一些资料。不过我再也没有找到相关的资料了。



所以现在讲的透明代理+用户认证都是要设置IE的代理服务器选项的并是在访问WEB时才做得到的。

不是你访问任何port 都会弹出个对话框的。

也不是说你不设置IE也会弹出个对话框让你输入用户名及密码。呵呵。



我们首先要讲的用户认证,是脱离NAT做的认证。原来如下

以squid默认配置讲解

http_port 3128  这里是以3128做代理port


如果你要用户认证的话,那么上http及http方式的ftp就只能从这个3128上过了。

不能做的事情很多,如不能用pop方式收邮件等。因为你不能解析域名,也没有做网关。数据出不去。


有些公司可能需要这样。经理级以上人员不做管控,下面的人员用用户名登录,以便查核访问记录。

公司有这样的要求,我在Linuxaid.com.cn问过,没有好办法。所以只能自己尝试。

后来我将原理弄清楚后,就实现了这样一个功能。

原理如下:

   透明代理及squid用户认证启用后,就有 port 3128,80 这两个都可以上外网。

   port 3128  普通代理(传统代理,需认证)

   port  80   透明代理

   试想一下,如果我们不让用户能直接访问到 80 ,只让他访问到 3128 。

   那么,这台电脑如果想上WEB,那么他只能通过 3128 ,而3128有做认证,所以这台电脑一定要用户认证

   所以,如果你想让用户认证,阻止他直接访问 80 就可以了。 (当然,隧道技术不在此讲)

  怎么样阻止用户直接访问 80 呢,用iptables就可以做的。

  iptables -A FOWARD -s 192.168.0.100 -j DROP

   
  这样认证用户就没办去用透明代理的 80 直接上WEB了,那就老老实实设置IE代理上网吧。

  
  呵呵。原理很简单,是吧?

  注:我不清楚squid官方说的透明代理与用户认证不能共存是什么意思,还望大家指点一二。

http://bbs.chinaunix.net/forum/v ... =asc&highlight=

squid和一些别的工具在一起,是可以实现上面贴子中的内容的。

platinum 回复于:2005-04-30 01:55:11

透明代理弹出认证框并不荒谬,记得有一次瞎改,竟然能弹出认证框,但无论如何也无法通过密码认证

zbyue 回复于:2005-04-30 17:05:03

我也认为透明代理弹出认证框并不荒谬,我公司以前提出这个透明代理还要用户认证要求时,我看了资料是不行的,但后来我通过了上100次的试验,是可以的,这是不可以否认的。

是决对可以的,事实胜于雄辨!!!!!

zbyue 回复于:2005-04-30 17:06:53

我也认为透明代理弹出认证框并不荒谬,我公司以前提出这个透明代理还要用户认证要求时,我看了资料是不行的,但后来我通过了上100次的试验,是可以的,这是不可以否认的。

是决对可以的,事实胜于雄辨!!!!!

如果有谁不相信,我提供机会并请他吃饭,到我这里看看!

platinum 回复于:2005-05-01 01:49:12

引用:原帖由 "zbyue" 发表:
我也认为透明代理弹出认证框并不荒谬,我公司以前提出这个透明代理还要用户认证要求时,我看了资料是不行的,但后来我通过了上100次的试验,是可以的,这是不可以否认的。

是决对可以的,事实胜于雄辨!!!!!

如果有谁不相信,我提供机会并请他吃饭,到我这里看看!

提供你的proxy地址就可以了,我用自己的网关将tcp/80转到你那里去,上网试试看是否提示认证框就知道了

platinum 回复于:2005-05-10 21:29:52

又消失了?
怎么一说给个地址测试一下效果就转移话题或者消失?
顶一下!谁说肯定没问题的,出来让我试一下啊!你那里什么什么的我也就不去了,也不用请我吃饭,试一下就好了!

zbyue 回复于:2005-05-11 08:37:22

我天天要写程序呀,我已经试过了,做代理的IP被防火墙封了,打不进数据包,这个不是我说了算的,我只负责开发软件和管理20多台服务器,硬件部分全不是我说了算。

我向platinum致歉,希望你大人有大量,就当这个世界根本做不成功了。我也正式宣布不可能实现,我误导大家。

我误导你们应该把牢座穿。



转载地址:不详
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-20 09:19 | 显示全部楼层
但是,即使他们说的这种透明代理+用户认证实现了,也不是我想要的那种,我想要的用户认证在路由器里面自动输入账户和密码。
求大神继续讨论
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-20 12:04 | 显示全部楼层
redsocks 支持普通的用户名/密码方式连接上级代理,iptables 转发到 redsocks 的监听端口就不用输用户名密码了:

  1. redsocks{
  2.     local_ip=0.0.0.0;
  3.     local_port=10810;
  4.     ip=1.2.3.4;
  5.     port=1080;
  6.     type=http-connect;
  7.     login="myuserid";
  8.     password="mypassword";
  9. }
复制代码


我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-20 13:40 | 显示全部楼层
SZPUNK 发表于 2014-4-20 12:04
redsocks 支持普通的用户名/密码方式连接上级代理,iptables 转发到 redsocks 的监听端口就不用输用户名密 ...

必须是http代理,或者是https代理啊。redsocks支持http代理吗?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-3-16 11:26 | 显示全部楼层
这种认证还是可以有的
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 06:42

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表