|
|
 |
|
|
| 1. 如何发现和防范内部网络的非法代理服务器和NAT(Part I) |
  |
|
 |
|
HP : 1030 / 1717
MP : 4151 / 30234
EXP : 68%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12453
金币总数: 456
所属组别: 管理员
注册日期: 2003/01/1

|
一些ISP和一些单位,需要限制内部网络的某些机器不能访问Internet,这时,一些能够访问Internet的机器会架设一台代理服务器或者NAT来让一些非法用户访问Internet,这篇文章,就是说明如何从技术角度来侦测(或者反侦测)这些非法的代理服务器或者NAT。
首先,得区分两个概念: Proxy和NAT 这两个概念都搞不明白的,偶想最好还是先找点相关资料看看再来看这篇文章。

 xxbin@netbuddy.org |
 |
|
|
| 2. 如何发现和防范内部网络的非法代理服务器 |
  |
|
 |
|
HP : 1030 / 1717
MP : 4151 / 30234
EXP : 68%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12453
金币总数: 456
所属组别: 管理员
注册日期: 2003/01/1

|
进入本系列文章的第一部分 如何发现和防范内部网络的非法代理服务器
本来是不想取这么个名字的,代理服务器,概念太大了,HTTP Proxy/FTP Proxy/SMTP Proxy/Telnet Proxy/Socks Proxy等等等等... xxbin经常用的代理,其实也就是HTTP Proxy,下面将会针对如何发现内部网络的非法HTTP Proxy来进行分析。(第一部分的文章的标题似乎改成如何发现内部网络的非法HTTP代理服务器更合适 不过还是保留这个标题吧,哪天知道其它协议的Proxy的检测方法也可以继续写在这里了。)
如何发现非法HTTP代理服务器? 1) 流量监控 若是有条件的话,进行流量监控是个不错的选择,代理别人的机器,其流量会比一般机器的平均流量大几倍,从流量,可以发现可疑的用户,不过,仅仅根据流量,你是没有证据说他用了代理软件的,碰上一些有资历的或者刁蛮的用户,你反而会吃不了兜着走的说。
2) 端口扫描 开一个nmap或者你所喜欢的端口扫描器,对某些网段进行端口扫描,然后再在扫描的结果中人工寻找可疑目标,比如哪些8080/3128什么的端口,多半是HTTP Proxy,最后再用代理猎手来确认,或者自己利用HTTP协议来手工确认(use telnet or netcat )。 不过,端口扫描仅仅是对菜鸟有用,高手会把自己的端口改成一个很怪异很高数值的端口(谁会愿意每隔一段时间去扫描几个网段的IP的1-64K的端口?),甚至,他还可以把代理服务器的端口仅仅开在他的内部IP上(就是那个接其它需要非法上网机器的非法IP),这样你从你的内部网络,是不可能用通常手段扫描到他的内部IP到底开了哪些端口的。
3) SNIFFER 以上的两个方法对侦测HTTP Proxy都不是太有效,不得已,我们可能需要从HTTP协议本身来下手分析某个HTTP请求是否用了非法的代理服务器。为了分析HTTP协议,首先要做的就是SNIFFER,若你真的是网络管理员,偶想你是有N个办法来搞到某个IP对外的HTTP请求甚至是整个内部网络所有的对外的HTTP请求(偶的建议是Internet出口采用Linux+IPTables+Squid来做一个透明代理服务器+防火墙,并且可以利用tcpdump来sniffer 当然你也可以选择你所喜欢的方法)。
首先来看看标准的HTTP协议,HTTP协议分HTTP请求和HTTP应答两部分,在通常的情况下,HTTP请求由浏览器发出,而HTTP应答是由HTTP Server来发出。 用telnet可以非常简单的模拟出这个过程: telnet www.netbuddy.org 80 (然后在TELNET窗口里面输入) GET / HTTP/1.1 Host: www.netbuddy.org
最后跟两个回车
以上就是HTTP请求部分,接着偶们的telnet窗口就会显示这个HTTP请求的应答: HTTP/1.1 200 OK Date: Fri, 28 Nov 2003 17:40:18 GMT Server: Apache/2.0.47 Last-Modified: Tue, 02 Sep 2003 13:12:50 GMT Accept-Ranges: bytes Content-Length: 755 Content-Type: text/html; charset=GB2312
<html><head><title>NetBuddy.Org首页</title></head> ...
通常,一般的浏览器(IE or Mozilla)都不会提交象偶上面这么简单的HTTP请求的,它还会把一些有关信息包括进去,比如浏览器的版本以及操作系统版本,(User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0),这样HTTP服务器就可以得到更多的客户端的信息,偶们监听这个HTTP会话的话,也可以看到这些信息。
HTTP客户端(浏览器)通过HTTP Proxy来访问某个HTTP服务器的过程大概如下:
HTTP请求-> HTTP请求-> HTTP Client ------------------ HTTP Proxy (更改某些HTTP头部信息) ------------------- HTTP Server <-HTTP应答 <-HTTP应答
HTTP Proxy基本上会做一个中间人的位置,以自己的身份向HTTP服务器发起请求,这个HTTP请求的主要内容来自HTTP Client发给HTTP Proxy的请求,但是某些细节可能会有改变,HTTP Proxy甚至会加一些信息进去(怎么样,是不是眼前一亮啊?这就是偶们的机会了)。
OK,确定我们的方向,只要发现某个HTTP请求中有HTTP Proxy加进去的信息,那么我们就可以判断某个IP是HTTP Proxy了,甚至可以判断出真正提交这个HTTP请求的非法用户的真实IP。 HTTP Proxy何其多啊,xxbin熟悉的只有Linux/UNIX下著名了squid和M$ ISA Server(原来的M$ Proxy)中带的HTTP Proxy,偶只能针对这两个HTTP Proxy来讨论,下面的方法,对其它的HTTP Proxy是否适应,偶没有条件测试不了。 而且下面所描述的协议的细节,并不是RFC中的规范,仅仅是针对某几个产品的一些特性。 (不过HTTP Proxy,这两大巨头是占了相当市场份额的,还算是有点代表性的说)
通常,HTTP Proxy会更改或者添加以下的HTTP请求变量: REMOTE_ADDR HTTP_VIA HTTP_X_FORWARDED_FOR
当没有使用HTTP Proxy的时候,这几个变量的值应该如下: REMOTE_ADDR: HTTP Client(浏览器)所在机器的IP HTTP_VIA: 无定义,也就是说不会在HTTP请求中出现 HTTP_X_FORWARDED_FOR: 无定义,同上
当你使用了普通配置的HTTP Proxy的时候,这几个变量就变成下面的样子了: REMOTE_ADDR: HTTP Proxy's IP (不变的话就容易判断了,呵呵) HTTP_VIA: HTTP Proxy's IP or HTTP Proxy' ServerName或HTTP协议版本号或HTTP Proxy版本信息(有什么办法呢,这可没有RFC定义的说,不同的厂商做出来的HTTP Proxy这个字段的东东是不一样的说) HTTP_X_FORWARDED_FOR: HTTP Client(浏览器)所在机器的IP (Squid使用,ISA不支持此字段)
其实分析到这里,偶们的目的已经可以实现了。 只要发现某个HTTP请求头部带有HTTP_VIA或HTTP_X_FORWARDED_FOR,那么这个发起HTTP请求的IP必定是个HTTP Proxy。OK,知道IP就好办了,接下去的事情~~~罚款!!!
4) 针对HTTP请求分析的其它变通办法 可能有人会觉得监听HTTP请求是件很困难和复杂的事情,那么有没有其它的变通办法呢?当然有。 一是可以利用IDS系统,若是Internet出口处放置了IDS设备,那么可以让它针对内部网络进行侦测,一旦发现内部网络发起的HTTP请求头中有那两个变量,就发出告警信息。 (怎么配置不要问偶啊,问厂商或者集成商吧。 ) 二是可以利用你们内部的某个网站的日志来记录那些非法代理,假设你的内部网络中有一台谁都要上的内部的WEB服务器(现在B/S结构流行,找这么个东东容易吧?),再假设这台HTTP服务器是Apache架设的(呵呵,假设太多了是不,偶不是很熟悉IIS的日志怎么实现这个,说白了是不喜欢M$),编辑你的httpd.conf,加入下面一行:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{HTTP_X_FORWARDED_FOR}e\" \"%{HTTP_VIA}e\"" proxy-log
然后再把你的网站的日志格式改成这个proxy-log格式,即修改CustomLog logs/access_log这一行为
CustomLog logs/access_log proxy-log
然后重启apache服务,然后就可以看你的日志了,若是发现最后两个变量有东西的,那么这条记录最前面那个IP必定是个HTTP Proxy,日志的范例如下:
192.168.1.1 - - [28/Nov/2003:17:43:14 +0800] "GET /phpinfo.php HTTP/1.0" 200 41339 "10.1.1.2" "192.168.1.1 (Squid/2.4.STABLE7)" 192.168.1.2 - - [28/Nov/2003:22:47:54 +0800] "GET /phpinfo.php HTTP/1.0" 200 2962 "-" "-" 192.168.1.3 - - [28/Nov/2003:23:00:02 +0800] "GET /phpinfo.php HTTP/1.0" 200 37561 "-" "1.0 ISA-SERVER"
很容易可以看出第一条记录是某个非法的用户(IP地址为10.1.1.2,其实这个地址要来没有太大用处),利用了外部地址是192.168.1.1的这台HTTP Proxy(版本信息:Squid/2.4.STABLE7)来访问这台服务器的某个网页,192.168.1.1这台机器是HTTP代理 呵呵,被发现了吧! 第二条记录是没有问题的; 第三条记录可以看出是代理服务器IP是192.168.1.3,有可能用的是ISA。
另外一个变通的方法是利用CGI脚本或者其它的HTTP服务器端的程序来判断HTTP_VIA等变量,以此判断客户端是否是非法代理。范例脚本如下(PHP写的,呵呵):
| CODE | <?php
if ( $GLOBALS[HTTP_VIA] == "" ) { echo "User Proxy is Not Available <br>"; } else { echo "User Proxy: $GLOBALS[HTTP_VIA] <br>"; echo "Proxy Server's IP: $GLOBALS[REMOTE_ADDR] <br>"; $yourip = isset($GLOBALS[HTTP_X_FORWARDED_FOR]) ? $GLOBALS[HTTP_X_FORWARDED_FOR]: "Unknown. are you use a M$ ISA Server?"; echo "Your IP: $yourip"; }
?> |
有兴趣的可以检测一下你是否用了代理。  http://www.netbuddy.org/tools/proxy-detect.php
你可以改改这个脚本,让它把信息记录到文本文件中,然后伪装成图片(象bug签名那种)或者用其它的形式包含到一个你的内部网用户都要访问的一个内部网页里面去。
5) 防范措施 对于高校的网管,偶的建议是在Internet出口采用Linux+IPTables+Squid来做一个透明代理服务器+防火墙,并用iptables对HTTP协议进行内容过滤,发现头部有HTTP_VIA什么的就DROP掉。
6) 其它补充 上面所描述的任何一种方式,都需要很多条件来实现,而且只能针对HTTP代理。而且那个针对HTTP协议细节的检测方法必须是HTTP代理所代理的那些客户端向外或者向你的内部站点发起请求之后,才能得到我们所要的信息。 除了上面偶说的那两个HTTP变量,当下面的变量出现在HTTP请求头部的时候,这个HTTP请求多半是HTTP Proxy发起的了。 HTTP_VIA, HTTP_X_FORWARDED_FOR, HTTP_USER_AGENT_VIA, HTTP_CACHE_CONTROL, HTTP_CACHE_INFO, HTTP_PROXY_CONNECTION 另外根据国外的资料,Netscape Proxy Server会增加一个名叫HTTP_PROXY_USER 的变量,其值为Client的真实IP地址。xxbin几年前调过这个代理服务器,因为在AIX平台上跑得不稳定,就换成Squid了,所以也就没有测试环境来检测这个说法是否正确,哪位有条件的可以测试一下。
上文是对HTTP代理检测的一个总结,具有非常强的针对性——仅仅针对管理大型内部网络的网络管理员,而且是那些不怕麻烦的管理员。另外,友情提醒一下,光靠技术是不行的,行政手段要跟上,技术仅仅只能是做为实施行政手段的一个有效的方法。
偶抛出这篇文章,仅仅想抛砖引玉,希望大家多多参与讨论,其实这个问题,是困扰网络管理员的一个非常头痛的问题。 另外有关NAT的检测,还是等到下一篇再说吧。 或者,谁把自己的玉拿出来给大家开开眼?

 xxbin@netbuddy.org |
 |
|
|
| 3. 非法代理服务器藏身之道 |
  |
|
 |
|
HP : 1030 / 1717
MP : 4151 / 30234
EXP : 68%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12453
金币总数: 456
所属组别: 管理员
注册日期: 2003/01/1

|
非法代理服务器藏身之道 所谓道高一尺,魔高一丈 处于"正义"的一方的网络管理员都是处于劣势的,那些用户们玩出一些新花招了,偶们管理员们才会想着去如何应付。 在非法代理服务器这个问题也是如此,其实,可以有多种办法来隐藏代理服务器。考虑到文章写到这个地步,似乎有点教唆的味道,有点犹豫不决,写或是不写,还是听听各位的意见吧。

 xxbin@netbuddy.org |
 |
|
|
| 4. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 0 / 295
MP : 63 / 5204
EXP : 83%
|
|
江湖奇侠
          
成员等级: 12
发表总数: 190
金币总数: 95
所属组别: 高级成员
注册日期: 2003/01/3

|
简直太好了!希望小兵继续写下去,很需要的说!

陆行鸟 |
 |
|
|
| 5. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 94 / 943
MP : 754 / 15486
EXP : 75%
|
|
重定向中
           
成员等级: 38
发表总数: 2263
金币总数: 679
所属组别: 核心成员
注册日期: 2003/05/31

|
刚回来就出手不凡啊,顶!

 一切都是没有结局的开始 一切都是稍纵即逝的追寻 |
 |
|
|
| 6. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 243 / 1219
MP : 1503 / 21389
EXP : 79%
|
|
测试中......
           
成员等级: 49
发表总数: 4509
金币总数: 301
所属组别: 核心成员
注册日期: 2003/01/10

|
ding

 |
 |
|
|
| 7. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 242 / 1210
MP : 1471 / 21225
EXP : 41%
|
|
Administrator
           
成员等级: 49
发表总数: 4413
金币总数: 616
所属组别: 管理员
注册日期: 2003/01/10

|

努力传递美好和希望--NBO One ought, every day at least, to hear a little song, read a good poem, see a fine picture, and if it were possible, to speak a few reasonable words. –Goethe |
 |
|
|
| 8. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 243 / 1219
MP : 1503 / 21389
EXP : 79%
|
|
测试中......
           
成员等级: 49
发表总数: 4509
金币总数: 301
所属组别: 核心成员
注册日期: 2003/01/10

|
关于NAT的检测,要做到自动检测,有点难度,这个时候要用上SNIFFER了。
可以根据一些特征来判断: 1 流量持续稳定,比较大。 2 一个流由四个部分组成:源IP,源端口,目标IP,目标端口。 当发现这样的流---源IP相同,而源端口很多,而且是持续增长的,目标IP很多,目标端口是80 可以推测,这个是经过NAT转换的流。
分析客户的能力,一般私立NAT的服务器都是WINDOWS,而软件用的最多的是SYGATE和WINROUTE等。如果是在局域网内部的话,一般有两个网卡、或者是两个IP。
在确定嫌疑目标后,可以对他做进一步的检测。
砖头拍出来,至于如何远程的检查改服务器安装有NAT服务器,这个得靠大家出玉了。

 |
 |
|
|
9. Re: 如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 0 / 11
MP : 2 / 177
EXP : 47%
|
|
新手上路

成员等级: 1
发表总数: 6
金币总数: 20
所属组别: 普通成员
注册日期: 2003/11/17

|
[/B][B][B][/B]请问各位大师,用什么软件可以测出它的流量呢.我也想知道用什么方法来监测网络速度呢.请指教,多 谢.!!!! |
 |
|
|
| 10. Re: Re: 如何发现和防范内部网络的非法代理服务器和NAT(Part I)...... |
  |
|
 |
|
HP : 92 / 920
MP : 706 / 16193
EXP : 80%
|
|
NBO幼儿园文宣组组长
           
成员等级: 37
发表总数: 2120
金币总数: 252
所属组别: 核心成员
注册日期: 2003/01/2

|
up
 《红楼梦》我看了五遍,也没有受影响,我是把它当历史读的……《红楼梦》里阶级斗争很激烈,有好几十条人命。 |
 |
|
|
| 11. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 0 / 28
MP : 3 / 421
EXP : 12%
|
|
初涉江湖
 
成员等级: 2
发表总数: 11
金币总数: 23
所属组别: 普通成员
注册日期: 2003/11/29

|
写下去,强烈要求小兵斑竹写下去,我们这些新手想知道呢!板主真好人! |
 |
|
|
| 12. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 0 / 153
MP : 22 / 2390
EXP : 15%
|
|
江湖游侠
     
成员等级: 7
发表总数: 68
金币总数: 100
所属组别: 普通成员
注册日期: 2003/09/17

|
呵呵,顶一下,鼓励下先,我引用下 |
 |
|
|
| 13. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 87 / 879
MP : 630 / 13847
EXP : 18%
|
|
天道酬勤
           
成员等级: 36
发表总数: 1891
金币总数: 418
所属组别: 核心成员
注册日期: 2003/08/22

|
顶 |
 |
|
|
| 14. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 0 / 265
MP : 52 / 4495
EXP : 62%
|
|
武林奇才
         
成员等级: 11
发表总数: 158
金币总数: 288
所属组别: 普通成员
注册日期: 2003/03/28

|
再顶 |
 |
|
|
| 15. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 0 / 169
MP : 26 / 2709
EXP : 77%
|
|
江湖游侠
     
成员等级: 7
发表总数: 78
金币总数: 137
所属组别: 普通成员
注册日期: 2003/07/21

|
不错,等下篇文章 |
 |
|
|
| 16. Re:如何发现和防范内部网络的非法代理服务器和NAT(Part I)... |
  |
|
 |
|
HP : 70 / 704
MP : 368 / 10924
EXP : 19%
|
|
名动江湖
           
成员等级: 29
发表总数: 1106
金币总数: 876
所属组别: 核心成员
注册日期: 2003/09/22

|
对我有用,顶!这个问题确实让网管讨厌,检测代理也确实没有好的方法,我打算在internet出口地方使用流量控制设备(硬件的),可以具体到一个ip地址做流量限制,那么从他过来的大了,这个ip就上不了了。看谁做?
 叹息莫不如奋起,因为同样花费时间! ——————————————————
 |
 |
|
|