1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

雷斯林的网络随想

本帖由 不学无术2006-01-04 发布。版面名称:新人报道

  1. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    今天清闲.没上WOW.没有事情.公司发呆.
    群里面开始发经典的URL.跟着上来看看.

    首发经典论坛.Blueidea.com 转载请保留作者信息.

    [WWW.REISTLIN.CN]

    随便写写吧.谢谢.

    1. 希望各位朋友把 "路由器" 与 "带路由功能的ADSL设备" 与 "支持路由协议的宿主" 之间的差异与概念弄清楚.不要上来就一句: "我的路由器怎么怎么了?" 你可以说我挑剔和无聊.但是我仅仅是为你考虑.因为你发在技术区.证明你是搞技术的.所以请不要以后让别人觉得.技术不值钱.

    路由器的功能很容易实现.无论是单片机还是X86架构的设备或者ASIC芯片级的设备.
    一般来说非单接口支持OSI三层数据包转发的设备都可以称为路由设备.
    我们习惯性的路由器我个人认为是CISCO为代表的.至于如今的ADSL终端带路由功能的设备.
    请说清楚.不要让入门的菜鸟误解.比如:网管一词.请说清楚.到底是网络管理员WEBMASTER或者NETMASTER.还是网吧管理人员.谢谢.

    2.希望明确防火墙的概念.如硬件.软件之分.
    不要跟我谈什么硬件防火墙与软件防火墙.有个铁BOX盒子就是硬件的?装个SOFT就是软件的?
    醒醒吧.各位.不要想当然.国内N多所谓的企业级硬件千M防火墙在我看来就是一个X86的板.
    PIII的CPU.256M内存装个REDHAT LINUX企业版本.重新编译下内核.整个工控的INTEL的网口.
    卖给你.说是硬件的.你觉得呢?(抱歉我不想说厂家名,但是我是亲眼所见.)

    这个星球上最优秀最高端的防火墙.我很遗憾的告诉你.是软件.
    同样很遗憾的告诉你.你通过网络访问的每一个数据都会通过它.
    而这个名为CheckPoint的软件防火墙可以支持包括WINDOWS.LINUX.SUN.UNIX几乎所有的操作系统.
    请把你的眼睛从无聊的OSI 1-3层模型脱离出来.不要认为数据包是独立的.一个一个没有逻辑关系的.
    不要认为数据包的行为只有IN和OUT.不要认为数据包只涉及到IP和MAC.还有很多4-7层的应用是你无法想象的.

    真 正从物理上属于硬件的防火墙恰恰是最最弱智最不够AI的.因为你不能指望ASIC芯片能具有智能的CPU的运算能力.ASIC芯片只会做你告诉他做过的事 情.重复的重复.快速的重复.而不能像CPU一样可以运算和逻辑分析.(业内的硬件防火墙我所知道的是NetScreen与Fortigate).

    硬件防火墙的优势就是快速.快到什么程度.说白了就是接近线速.行话叫跑背板.
    最大的缺点是.不够智能.防火墙存在的目的是做访问控制与安全.不是交换机.
    所以一款没有安全性只有速度的防火墙是愚蠢的.非常非常的愚蠢.

    而软件防火墙的优势我就不说了.主要的问题是要通过CPU处理4-7层的应用攻击.比如SQL攻击.
    或者恶意的入侵等.这些攻击其实数据量很小的.对于此类防御来说.AI是最重要的.
    当然了.也要讲究算法.具体什么算法我下面继续说.

    3.状态检测入门.数据的流向.
    明确这些就不会问: "啊?封了我的80那我们不是都不能上网!" 这种可笑的问题.
    人人似乎都知道三次握手.人人都知道OSI.但是真正理解的有多少?

    A访问主机B.是由A来主动发起访问请求.并且B回应A的请求.并且A与B会维持一个正常的网络会话.
    这个过程是从OSI的1-7层的一系列过程.我们不能只到3层就放弃继续理解了.
    在第3层的时候我们都知道会Routeing.然后呢?就是建立整个会话.协商窗口.这个属于4到7层的范围.

    如果在A和B之间有一台4-7层的网络设备.比如.代理也好.防火墙也好.他必然会有A和B所有的通讯的状态与会话的列表.这个列表你一旦拥有.你就可以做访问控制也好.做欺骗也好.随便你.

    OK.现在知道了访问是双向的.并且是需要2者同步维护的.端口虽然是一样的.比如80.
    但是访问却不是简单的从A到B或者从B到A.需要说明的是.如果你是个3层设备.
    那非常遗憾的告诉你.你只能做的事情就是:要么全部拒绝80端口的流量.要么全部允许.
    三层设备是无法知道你到底是由A发起到B的访问还是由B到A发起的访问.
    他只知道.这个数据包.流过我.要去80.那我就砍掉.或者放行.
    在三层设备看来.所有的数据包都是一个一个独立的.一个接一个的流过自己.

    但是实际呢?我们的通讯不是一个包就可以OVER的.要很多个包.每个包有自己的状态和特征.
    到目标地址后重新逻辑的组合.然后在解开.这一切的逻辑.三层设备根本就不知道的.
    包与包之间维系的状态的检测与智能的分析.就叫做状态检测.

    访问的发起.决定了会话的流向与访问的方式.

    4. NAT.PNAT.包过滤与状态检测的区别.

    上面已经说过了.包过滤工作在OSI的第三层.
    看到的只有源的MAC和IP以及目标地址的MAC和IP.
    因为只有满足了上面的4点数据包才能在网络上传输.

    讲包过滤之前我们先看NAT.

    同样的.我们大家熟悉的NAT技术.就是工作在这一层.
    NAT的原理简单的描述就是:替换数据报的源IP地址与源MAC地址.目标地址保持不变.
    同时在宿主上增加一条三层会话表.将此会话与原始的内部源做一一对应的关系.
    等待目标返回的数据包.当收到目标返回的数据包的时候做反操作然后路由到对内接口.

    智商正常的应该已经发现了.关键的问题是一一对应.
    换句话说.你有3个私有地址.就必须有对应的3个公网地址才能一一对应!
    但是这显然是不可能的.否则干吗还要多对一的节约地址呢?干吗还要NAT呢?

    回答是这样的.NAT技术是为了保护内部DMZ的服务器的真实IP地址.
    一一对应的NAT现在更多用在双向通讯上.也就是说.内部主机既可以上网出站访问.
    外部的用户也可以访问到内部的主机.虽然内部主机是私有地址.
    这种NAT的模式叫做Static NAT.Cisco称为静态NAT.
    在网络内的主机Cisco称为堡垒主机.而网络安全业界更喜欢叫做DMZ主机.

    对于多内部私有地址共享上网.实现的技术叫PNAT.也叫HIDE NAT.
    NAT必须要建立一个会话表来对应数据包与内部真实主机的对应关系.
    如何使用一个公共IP地址来对应多个主机呢?其实很简单.就是用端口.

    你可以这么想象.地址202.96.128.86这个地址给A和B和C同时使用.

    当A发起对外访问的请求的时候.A将使用202.96.128.86这个地址做为转换后的地址.
    端口呢?可以选择任意一个.比如1024.即对应关系表是:

    202.96.128.86:1024 <=> A

    那么B访问的时候我们使用1025.C用1026.则:

    202.96.128.86:1024 <=> A
    202.96.128.86:1025 <=> B
    202.96.128.86:1026 <=> C

    现在大家看到的.就不是刚才所说的三层会话表.因为设计到端口了就进入到了第四层.
    所 以我们可以看到.四层会话表比三层的多了一个端口的状态.所以四层会话表会相对庞大一点.当然了.端口是有限的.当同时超过65535-的用户同时访问网 络的时候.你们会发现.肯定是丢包严重无法上网.因为公共IP只有一个.并且端口只有65535-这么多.显然不够用了.

    不要怀疑会不会出现这种情况.一个大学很容易就会有这种局面.

    怎么解决.对了.我们可以做一个地址范围: 202.96.128.86 - 202.96.128.166 之间.
    这一段来作为转换的POOL.我们叫地址池.这样应该就够了吧.恩.差不多够了.呵呵.

    需要特别说明的是.这个池里的地址是随机选择的.不是顺序的.
    我的顺序的意思是.当第一个地址的端口用完以后顺着用第二个.其实不是这样的.
    都是随机的.不相信的朋友可以通过DUMP抓包看看就知道了.

    看到这里.希望有人会有个初步的印象.看不懂没关系.
    如果真看的明白了.那么恭喜你.远离了无聊的IT考试制度.

    进入了第四层.很高兴的通知你.你不是一个拉线的.不是一个维护.不是一个"网管"了.

    包过滤.数据包的过滤.一样的道理.原始的包过滤工作在第三层.
    与工作在第四层的包过滤有什么区别?如果你回答不上来.
    我奉劝你节约社会与网络资源.转行吧.去广州开个粥粉面的档口.挺不错的.真的.
    我老总他老婆一天毛利7K多.比你现在有前途多了.

    答案是: 第三层包过滤只能按照IP地址来过滤.
    无法区分是哪个端口的信息.比如80端口.比如21端口的通讯.
    在三层设备看来: 1.1.1.1:21 的数据包 与 1.1.1.1:80 的数据包是一种类型.没区别.
    而实际呢.前者是访问FTP服务的应用.而后者是访问WEB的应用.

    按照这个思路.如果在第四层来做包的过滤与访问的控制不就完美了?
    因为可以看到具体是通过哪个端口传输的?

    基本没错.我只能说.基本.

    有没人注意到.我上面说的.一直都是用"具体是哪个端口"的"端口"这个词.
    而没有说"具体是哪个服务.比如FTP".为什么?

    人人都知道21端口是FTP.80端口是WEB.
    但是我告诉你.并不是21端口就绝对等于FTP服务.80端口就绝对是WEB的访问.

    没错.人们可以修改端口.同样可以访问.就比如窗户就是可以打开的.
    但是具体打开窗户将进来的是垃圾还是阳光.你不见得是可以随时知道的.

    所以.指望通过第四层的IP+端口来判断数据包的真实目的是比较愚蠢的.
    因为我完全可以把FTP的端口改成22.同样可以访问.
    但是人人都知道.22端口是SSH.但这并不影响我把21改成22当成FTP来用.

    这个致命的问题.让无数的攻击者兴奋.
    普通的防火墙根本无法区分端口上到底跑的是什么应用?
    或许一个攻击者在你的服务器上种植了木马使用了你原来没有使用的21端口.
    而你的防火墙确认为21端口是FTP的通讯.默认保持放行.那实在是太悲哀了.
    我仅仅是举个例子.实际中我遇到的是将木马设置为RTSP的端口或者NETMEETING.

    怎么办?

    --- 状态检测!

    防火墙需要应用CheckPoint的状态检测专利技术.
    必须要深入的了解到整个会话的状态.通讯的协议规范.
    很显然.RFC对于FTP的通讯协议规范肯定与SSH的不同.
    否则这2个协议不是可以互连互通.那还不如就当做一种协议了.

    真正的状态检测的防火墙会严格检测你端口与其上应用的连接和会话状态.
    只要不符合RFC的标准.不符合TCP/IP的规范.一律给你DROP掉.
    比如我防火墙上的策略规定允许21端口也就是FTP入站访问.
    假如你的数据包通过防火墙的时候.虽然端口是21.但是请求与特征不符合RFC里对FTP特征的定义.那么对不起.你还是靠边站吧.

    基本了解了吧?恩.好样的.不过.状态检测在如今仍然也不算太AI的技术.
    是不是觉得有点受不了了.那什么才叫更安全更AI的呢?

    以后在说!
     
  2. alpha

    alpha New Member

    注册:
    2005-12-15
    帖子:
    683
    赞:
    0
    这也没啥看的。呵呵。.........~~