解剖NetGuard

来源:互联网 发布:淘宝下架的宝贝找不到 编辑:程序博客网 时间:2024/04/29 00:13

 

原文链接:http://blog.chinaunix.net/u/12313/showart_62633.html

本文对国产防火墙NetGuard作一简单点评, 阅读时最好配合NetGuard手册.
该手册可到http://www.topsec.com.cn/bbs/查问

 

解剖NetGuard v1.0

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn

0. 声明
本人不是NetGuard的开发者,只是一个普通Linux fans,属于想飞也飞不高的小菜鸟,本文仅仅是从技术角度分析如何实现NetGuard防火墙,即如果要把本人的一台Linux机器变成NetGuard防火墙估计要作那些工作,所有观点均为个人观点,不代表任何组织或团体,只谈技术,不带任何吹捧、攻击或贬低,欢迎大家一起讨论,有错误请指正,但对文章中如有不明白的名词和概念请问google而不要问我。

1. 参考资料:
ftp://fw4000:fw4000@219.234.81.78上的FW4000 v2.6.40手册。

2. 操作系统的确定

虽然NetGuard没有明确宣称自己的OS是Linux,但从一些系统参数,命令上可以看出来,最明显的就是网卡名称,eth*是Linux下的以太网卡的名称,这是最明显的,还有一些命令,如ifconfig, tcpdump,passwd等,这些都是Unix命令或应用程序的名称,不是告诉人本机是Unix类的系统么?另外从日志格式也可以看出来是Unix,在TA使用手册_v2.0专用版的17页,有个日志的例子,明显就是Unix的syslog格式的日志,“<3>”表示LOG_ERR级别,就被解释为非常危险,但更高的CRIT、ALERT、EMERG又是怎么解释的?:-)“Jul 14”是syslog的日期记法,看过syslog源码的知道这格式是从ctime()来的,不记年份,所以日志内容中又只好专门用了一个时间字段来记录日期时间,其实改改syslog源码不就可以把时间格式改过来了嘛,完全是浪费,那个vrc_server是不是就进程名呢?后面还跟着pid号,真是没必要,openlog()时就不用设LOG_PID标志,既透露了自己内部信息,对用户来说有用嘛?

开放源码的Unix类系统不是Linux就是freeBSD,但FreeBSD下的网卡名称也不是那么叫的,只有中网倒是明确号称自己是FreeBSD的。相信国内没有一家厂商会放着现成的Linux不用而去写一个全新类Unix的OS,而且也没那个能力,作为国内的防火墙老大,又号称自己的OS是专有的TOS,作的东西还是要专业点,包装仔细些,别让人一眼就看出来是拿人家GPL的资源来弄的,而自己的代码又不GPL。在国内可能没人管,但如果想发展成国际品牌,产品到国外可是会有人追究的,就象fortinet在德国就被人抓了小辫子,应该说fortinet把Linux包装得够狠的了,但按报道好象从initrd挑出的毛病,不太清楚怎么从这个进程看出东西来的,当然如果NetGuard就只满足国内市场的话,算我没说。

而且从系统软件的版本号来看,也和Linux内核编号太象了,2.2、2.4、2.6,没有奇数的,或者也表示系统用的Linux内核分别是2.2、2.4、2.6?

3. 支持串口登录
这个在serial howto中写的很明白了,看看就知道怎么弄。

4. 登录

NetGuard支持串口,telnet, SSH和自己的集中管理工具,串口登录算是本地登录,和用显示器类似,其他都是网络远程登录,telnet服务器有in.telnetd,SSH服务器有openssh,都是现成的,不过不知道为什么要开telnet服务,按国标远程访问防火墙通信数据必须是要进行保护的,说白了就是要加密,象telnet这种明文协议是不可能允许的。集中管理工具防火墙这边的服务器当然是得自己写了,没现成的了。

一登录后显示的产品信息可以写在/etc/issue, /etc/issue.net中,连上服务器后会自动显示,没让输用户名直接就让输口令了,用户名估计被固定为superman了,这种作法我不知道只通过修改配置文件的方法能否实现,哪位知道可以告诉我一声,要我作就干脆直接改login的源码了,把提示输入用户名的"login:"部分跳过,固定死用户名,直接到“Password:”就行,这样也防止root登录,不过在调试时应该要用root进去看看问题所在吧,怎么区分呢?我想到的一个办法是判断tty类型,串口tty是ttyS*,网络登录的tty是pts*,而通过显示器登录的就是tty*了,从tty*登录的就允许root登录,其他就直接挑过用户名,这是可以作到的。对于x86架构的防火墙,把防火墙盖子打开里面就一块工控板,上面都有显示器和键盘鼠标接口的,插上这些后防火墙本质上就是一台PC机了,但这个工控板比普通集成化主板要贵得多,这是俺在华控的同学告诉俺的,保密哦,:-)

openssh好象没改哦,登录时还是要输入用户名的,sigh,这么大的漏洞居然也不管管,不知道NetGuard用户用root登录会是什么情况,如果root不让登录,猜猜其他用户名,可惜没人给俺一台netGuard来hack一下,:-)

5. 命令行

登录进去后提示不是熟悉的bash,看来NetGuard是自己作了一个shell,命令大部分是自己定义的,不过还是很有Unix风格的,就是通过“-”来指定参数,不知道有没有象cisco, netscreen等那样的命令行补齐功能,手册里没提,估计就是没有,不知道对命令错误和参数缺乏时会有什么提示,还是只是向Unix下冷冰冰的告诉你执行错误,然后是一堆看不明白的简单帮助提示,基本还得靠man才了解得清楚怎么回事,如果是那样这个shell就属于不怎么样,毕竟不能按Unix的shell方式来作防火墙的shell,那样的CLI的确实对用户的耐心是个考验,而且很遗憾手册里也说有些功能不能在命令行完成,比如第一个命令adsl,对于习惯了用命令行配网络设备的用户不能不说是个遗憾。而象netScreen,在手册里所有功能描述都有相应的CLI,而且配置文件就是CLI命令。

NetGuard的大部分命令都是自己编的,不是Linux的标准命令,不作更多评价,现在说说和Linux下同名的几个命令:

ARP:arp是Linux下操作ARP信息的命令,功能相同,命令参数格式也没变

BRCTL:brctl是Linux下操作桥的控制命令,但NetGuard的命令完全无关,不知道是根据那个原型作的

IFCONFIG:ifconfig是Linux下操作网卡参数的控制命令,功能基本相同,但格式有所修改,增加了网卡速度配置功能,这在Linux下是ethtool实现的

PASSWD:passwd是Linux下修改用户口令的命令,似乎没变

EXIT,PING,REBOOT,TELNET:这些都没什么好说的

ROUTE:route是Linux下的路由控制命令,功能相同,格式有所改变,增加了源地址路由和路由优先权控制,估计不是原始的route作的,而是用iproute2实现的
''
TCPDUMP:tcpdump是Linux下的文本格式的sniffer工具,似乎没改,不过质疑有多少用户能看得动tcpdump的输出数据格式

6. NetGuard的数据流

Linux下现成的防火墙架构是netfilter/iptables,netfilter是内核实现,iptables用户层命令,其数据流程构架为一个PI(3.14159...)型结构,对防火墙来说,要限制的都是转发包,因此控制数据流重点是上面那一横,下面的那两竖基本只用于都防火墙本身的控制通信。

对应NetGuard数据流程分析如下:
1)接口状态检查:这时当然的
2)入侵过滤:对入侵模式检查可以在prerouting链中进行检查
3)查询会话表:-m state ESTABLISHED,RELATED匹配,应该还在PREROUTING链
4)通信策略:应该是指对接受的包如何转发,NetGuard分为了直接转发TRANSFER,NAT和MAP,直接转发就是路由;NAT是Netfilter的SNAT,修改源地址,是在POSTROUTING才作的;MAP是Netfilter的DNAT,修改目的地址,是在PREROUTING作的;
5)路由表:在PREROUTING后要判断路由数据是到防火墙本身还是要转发的,但NetGuard手册只说明了转发数据的处理,没提到INPUT链的数据处理;
6)访问策略:就是在FORWARD链中处理了
7)创建会话:通过策略检查后就成为合法连接,在Netfilter中连接信息是数据包一进入Netfilter就建立好的,如果规则verdit是DROP,则删除连接,但这对用户来说,什么时候建立并不重要
8)数据包处理,就是POSTROUTING的处理了
由此可见,NetGuard的过滤架构就是netfilter架构,但隐藏了关于目的NAT和源NAT的处理位置,但这其实很好判断:看规则中的地址是如何设置的,如果规则中对象地址是其本身实际地址,而不是转换后地址,则说明数据在进行过滤前进行了DNAT,在过滤后才进行SNAT;另外也隐藏了到本机的数据处理选择。

7. netfilter自身就能实现的防火墙功能
1)数据过滤,包括MAC地址,IP地址/地址段/网络,协议,端口,ICMP类型,时间,入网卡,出网卡,字符串等
2)NAT:SNAT,DNAT,可实现多对多,多对一的SNAT和DNAT,MASQUERADE是一种动态SNAT,透明代理的REDIRECT是一种DNAT
3)stateful inspection:可进行状态检查的协议包括TCP,UDP,ICMP,GRE等
4)动态协议:FTP,TFTP,IRC,TALK,NTALK,H.323,RTSP, QUAKE3,MMS,DIRECTX8,EGGDROP,PPTP等
5)数据修改mangle:TOS,MARK等

8. NetGuard的访问策略
1)包过滤
NetGuard的包过滤功能基本用netfilter自带的功能就全够了,NetGuard要作的是进行对象的包装,把所定义的协议地址端口等对象转换为数值格式形成相应的iptables命令即可

2)内容过滤
NetGuard的文件过滤、HTTP过滤、邮件过滤都属于内容过滤范畴。内容过滤的实现有两种方式,一种是在内核实现,一种是在用户空间实现,netfilter提供将数据从内核传到用户空间的方法,在用户空间修改包的数据后把包传回内核空间。本质都是字符串模式的搜索,在内核实现速度快一些,用户空间实现速度要慢一些,但可以进行的动作更方便一些,比如可以和其他设备进行连动,要放在内核中处理就会比较麻烦。

在内核实现时,可以参考string匹配模块的方法,写新的netfilter模式匹配模块,搜索相应数据中是否有相应的数据模式

需要注意的是内容过滤的拒绝模式,虽然把要拒绝的数据模式找出来了,但如何拒绝呢?对于URL过滤,访问一个非法的URL时是否能返回一个访问了非法URL的页面?而不是浏览器自己的不能访问那种,让用户不知道到底是因为网站连不通还是被防火墙拒绝的,这点手册里好象没明确说明内容过滤下的拒绝模式是什么,好的实现应该是一种“优雅”的拒绝,而不是网络断那样的突兀拒绝。

对于NetGuard,在设置匹配模式的时候居然必须是用“*”和“?”来泛匹配,不知道是否是大小写敏感的,看来是用fnmatch函数来处理,而这是个glibc的库函数,内核里是没有的,是否就表明NetGuard的过滤是在用户空间进行的?

内容过滤有个高门槛的功能就是数据包重组,是防止某个模式字符串刚好被分在不同包里传输的情况,也就是东软所鼓吹的“流过滤”,在用户空间实现相对容易,在内核里就能实现那就是比较牛了,不知道东软的是在内核还是在用户空间实现的,NetGuard没提,估计就是没实现,因为这种能力是绝对要拼了命吹的。不过窃以为正常通信中一个包长内所能载的信息已经足够分析了,如果信息不在一个包内,基本可以认为是特殊构造的攻击包了,MSN那种变态URL请求除外。

最早的内容过滤是在代理中作的,速度慢,效率低,灵活性差,现在如果还用这种方式属于贻笑大方了。

9. 认证
NetGuard支持Radius,TACACS+,OTP,SecurID,VieCA,以及VRC。前三个在Linux下都有现成的GPL的实现,不提也罢,不过为什么不支持LDAP呢,open source的ldap服务器客户端都有,为什么不支持呢?SecurID是RSA公司提出来的,不知道是否需要和RSA公司合作,这是需要另外弄硬件支持的,那就算了;VieCA也许是NetGuard自己定义的一种认证把,还要用到客户端机器的硬件信息,比较麻烦,也算了;VRC说不上是一种认证方法,只不过是证书方式的IPSec连接而已,现成的。

NetGuard 的VPN认证是Radius和CA认证,CA认证就不提了,感觉这不能算认证,只是为建立IPSec连接的必须步骤之一,只是为什么不提在IPSec认证中的专有名词XAUTH,XAUTH是IKE的认证扩展框架,可以使用不同的认证方法,Radius只是其中之一。

10. 交换网络支持
NetGuard支持的交换网络相关技术主要包括:VLAN 和生成树协议
Linux内核中已经自带了brdige的功能以及netfilter在birdge下的支持(版本稍老一些的Linux内核的bidge netfilter是补丁),支持STP,但没仔细看是否是PVST+或CST,用户空间控制程序是brctl。NetGuard支持的生成树协议是PVST+和CST,不知道是否有open source,可能还是作了些自己工作。
透明模式下的状态同步协议SSP应该是需要自己写,不知道是否支持路由模式?反正就是把一台设备上的连接发给另一台了,有些难度,现在好象有个netfilter-ha的项目正在作。

Linux内核中也自带了802.1QVLAN的支持,用户空间控制程序是vconfig
ISL是CISCO提出的VLAN协议,很早以前有过很老的Linux下的实现,但现在好象已经找不到了,不知道NetGuard是自己写的还是用的open source,因为TRX是95年成立的,那时候应该还能找到Linux的ISL

11. VPN
目前最常见的VPN模式为:
二层:PPTP、L2TP、MPLS
三层:IPSec
应用:SSL
MPLS一般都只在电信里用,防火墙里常见的是IPSec/PPTP/L2TP,SSL VPN是这两年的新的VPN模式,但一般是作成专有的VPN设备,而不是防火墙。

NetGuard好象只支持IPSec,Linux下有现成的PPTP和L2TP服务器的实现,为什么不把他们加进去呢?

IPSec在RFC2401-2412中定义,是一个标准协议,理论上是rfc based的IPSec设备之间都能连接。
Linux在2.6以前的IPSec实现是freeswan,这在一些非美国的Linux发布中作为标准件的,美国的如RedHat由于法律原因是不带的,必须自己打内核补丁,freeswan及其变种实现了IPSec的基本大部分功能;到了2.6以后,Linux内核中自带了自己的IPSec,被称为native ipsec,也许这个原因freeswan项目也停止的,虽然新版本也可以支持2.6,最终版本到2.06,在2.6中,native ipsec和freeswan只能取其一。freeswan的IKE好象没有实现野蛮模式,需要打补丁。

国内应该没有哪个厂商有能力开发自己的IPSec完整实现,基本都是在freeswan的基础上修改的,增加一些支持国内加密卡的支持等功能。

freeswan实现的IPSec和CheckPoint/NetScreen的差别在于freeswan是基于路由来判断是否加密的,必须要配专有的IPSec连接参数,包括本地设备IP、内网、网关和远程设备IP、内网、网关,加密是按路由点对点加密,两点之间的通信全部要加密;而CP、NS是把加密作为策略的一种,可以实现在两点之间进行选择性加密,比如只加密TCP不加密ICMP,这点freeswan是没实现的。

2.6的native ipsec还没怎么用过,不知道能否实现CP、NS那样的IPSec。

VPN远程客户端连接NetGuard时,好象说要求设置通信的认证数据库,如Radius认证服务器,这是必须的么?用户信息不能保存在防火墙中么?认证信息是通过证书中的名字,这不是XAUTH的做法,应该只是在证书交换后自己加的一点认证,那还支持共享密钥方式的VPN么?CA到底是由谁来作?一般公共CA发的证书都是要钱的,防火墙客户是否愿意支付这个开支呢?

NetGuard的VPN分为标准VPN模块和TOPSEC VPN模块,应该是通过内核模块方式实现的,没直接编入内核。TOPSEC VPN应该就是freeswan,只支持证书。不知道标准VPN是否真是自己开发的东西?
证书请求应该是用openssl作的,看文件后缀PEM就知道。

SCM服务器,在动态VPN节点间建立VPN隧道是必要的,设备在获取动态IP地址后将相关信息发送给SCM服务器,这样其他设备才能知道该设备的地址,很多家VPN厂商都有类似的东西,只是叫法不同。除了动态VPN外,该服务器还可以作其他功能,如策略分发等,主要用于集中管理。

USBKEY:USBKey用来保存私钥,没什么高级的,只要Linux支持USB接口就行,USB盘在Linux好象是作为SCSI设备来认的,只要把它mount上后就和普通磁盘一样读文件即可

TOPSEC VPN配置和freeswan很相似嘛,PUDP是否就是指NAT-T?

标准VPN配置界面虽然不一样了,但内容基本还是freeswan那套,不知道和TOPSEC VPN有什么不同?

自己要作的就是增加国密办加密算法的支持

为客户端动态分配IP,这个动态IP地址是在IKE协商过程中传的么?还是其他途径传?前者有些技术含量,后者没什么意思。

NetGuard VPN没提到的IPSec术语有XAUTH、DPD、NAT-T

现在好象TRX和华盾合作(还是收购?),NetGuard的VPN功能应该会上一个台阶吧。

12.入侵检测
NetGuard的入侵检测部分主要是IP、TCP层的,这些可以作为netfilter的功能模块实现,也可以单独在网络处理部分实现象LAND那样特制及其明确简单的随便在那进行检查都可以,对于象flood, ping sweep,smurf,port scan等攻击,需要使用统计信息来判断,tear drop之类是通过异常碎片偏移来实现的,Linux的碎片重组部分已经能够防御此类攻击包,只要将内核的ip_always_defrag设置为1,让防火墙对于大包都进行重组,重组成功再重新转发。

主要的IDS功能还是需要专有IDS来完成,NetGuard实现与IDS的连动,IDS发现网络攻击后通知防火墙阻断某种数据,这种通信没有标准,都是防火墙一套,IDS一套的,就看是谁支持谁,NetGuard应该有之间的IDS接口,一般的IDS就都是按这个来了,但象启明星辰这样的,不知道是按谁的标准了。定义一个IDS接口标准也不是很难,但一般都还要给个接口库方便IDS进行连接。

IDS的规则应该是动态的,所以NetGuard提供的阻断规则不知道有什么意思?和策略有什么区别呢?特制不见得更细粒,还不是协议、地址、端口之类,没有更细粒的东西。

13.实时监控
连接的监控:netfilter把连接信息通过/proc/net/ip_conntrack文件导出,NetGuard对于连接内容进行了一些扩展,增加了建立时间和流量等信息;iptables本身没有删除连接的命令,netfilter中虽然有现成的删除连接函数,但没向用户空间提供接口,所以要实现删除在线连接需要作些新的接口,从用户空间传入命令后调用连接删除函数即可。
NetGuard一个特别的地方是记录已断开的连接,一般来说连接信息都在内存中,删除后当然就是释放内存了,也就没了,不知道NetGuard是从哪获取这些已删除连接的信息的呢?种这些信息留着就是浪费内存,存盘也是不太可能,或者是在删除前发给GUI?不过这种功能没有也关系不大,想知道有那些连接是可以记录在日志中,由日志服务器去分析了。
最大连接数配置可以直接设置/proc下的文件,该参数内核是导出来的。

系统的监控:主要是CPU、内存的使用率,连接数等,内存直接读/proc/meminfo即可;CPU使用率是根据/proc/stat来进行计算,详细过程可参考top源码;连接数在内核中是有的,但没有提供给用户空间,可以在/proc命令下建一个新参数将其导出即可

管理信息:这些都是登录时进行记录的了,都是用户空间程序,难度不大

14. Web重定向
开始还以为NetGuard重定向是和NetScreen的运行时认证是同一回事,可是仔细看后好象又不是,并没提认证的事,如果不是认证,这么转一下到底是干什么用的呢?而且NetGuard是根据HTTP头中是否有重定向信息来判断是否重定向的,并没有在防火墙中记录保存,那是否以后新页面都要转一下?以为浏览器在访问新地址时应该不带重定向信息,这样每个访问都要进行转向?

这种功能有没有open source的不知道,我自己作的话,要实现这种功能,应该还是要根据IP地址记录,如果该IP是没有认证过的,第一次的访问会返回一个防火墙自己的认证页面,登录成功后才允许继续访问,防火墙上会记录这个IP,后续的访问就不会再认证了,如果该IP没有流量超时删除。

15. 高可用性HA
NetGuard的HA支持双机热备和负载均衡
双机热备:Linux下HA实现是heartbeat,是通过心跳信号来检查状态是否正常,不过这个项目针对是应用服务的HA,对防火墙来说有点不太合适,对防火墙来说,其实heartbeat过程自己定义一个反而比较简单,只是SSP实现相对有点难度。不过NetGuard要求将MAC地址配置得相同是没必要,从机起来时自动广播一下自己的ARP信息不就可以了?
负载均衡:防火墙的负载均衡确实是一个比较难实现的功能,包的分配是一个难题。不过NetGuard在这种情况下只能和HUB连接,就简化了实现,既然是HUB,两台设备都能得到包,只要作一个分配策略一台处理某些包,另一台处理其他包就可以,不是本机处理的包就扔掉,这样就简单了很多。由于使用了HUB,流量并不能加倍,所以这只是个取巧的方法,实际不能提高带宽,只是可靠性高些。

16.QoS
分片:分片包重组是防火墙安全策略之一,用来防御如tear drop之类的碎片攻击,现在倒是要不进行重组,安全性值得考虑,不过要实现指定网卡间通信不重组还是要作点工作,但倒是不算难
流量限制:netfilter提供了limit和bytelimit匹配模块,提供按包和按字节的流量限制功能,和其他匹配条件组合一起就可以实现各种流量限制功能;
数据优先权管理:Linux下的QoS可以通过iproute2来实现,配合netfilter的修改TOS和MARK的功能,可以把包进行分类设置不同的级别进行路由,提供保障带宽功能

17.misc
接口信息:增加了各种协议数据统计,Linux原来的接口信息只有包的信息,没统计到各协议,但增加这些参数倒也不难

设备属性:关于TCP连接的超时,在Linux2.4.20以后这些超时值都是可动态配的了,而且TCP超时类型也有多个,NetGuard可能觉得给用户解释起来太麻烦就减少到3种了,而且没有UDP和ICMP的超时。调试级别应该是日志记录的级别了,4应该是指LOG_WARNING吧?不知道日志类别如何区分呢?为什么不象NS那样一个矩阵形式,一维是日志类,一维是那8种日志级别,用checkbox设置,syslog本身就可以完全支持记录那些级别,不用改程序。

时间:主要是一个同步功能,是和GUI的机器时间同步,不知道是用什么协议,应该不是NTP,可能只是把GUI时间发给防火墙了,应该考虑支持标准NTP的。

SSL代理客户端:GUI与防火墙的通信是用SSL代理客户端来包装的,并不是自己直接使用SSL库,虽然简化了工作量,但感觉不好。

区段:NetGuard把各网卡分为了内、外、和SSN,SSN不知道和DMZ有什么区别,不过本来从Linux角度看到的不过就是各网卡,这些逻辑属性都是人为赋予的,好听点是用来方便用户理解,难听点就是愚弄用户的。

网卡属性:
虚口:应该就是网卡别名,如eth0:0之类,只是没有显示给用户,不过值得注意的是VLAN的ID,Linux的802.1QVLAN支持是使用新网卡来处理的,和原来的网卡完全不同,如eth2和eth2.100在Linux看来是完全不同的两个网卡了,NetGuard这点上包装得不错。
此区域机器可ping:应该就是-i eth* -p icmp --icmp-type echo-request -j ACCEPT了,不过如果是其他区域的呢?如内网想ping防火墙的外网卡的IP,这时NetGuard配置的是内网卡不可ping,外网卡可ping,那是否就ping不通呢?在NS中属性是接口可ping,但没有限制是区域。
拒绝病毒:应该是要和病毒服务器连动吧?自己检查可能太慢了吧?实现是把
syn代理:把SYN代理当作一个网卡属性倒是有点创意,SYN代理得自己作,Linux没带,不过象openbsd,freebsd中好象是带的,可以借鉴参考一下。不知道NetGuard的SYN代理除了路由模式外,是否支持NAT和透明模式?
缺省访问权限:NetGuard借用Unix的rwx来定义网卡访问权限,有点意思,不过也有点困难,因为要做到内容级的检查了,否则怎么区分一个HTTP连接是GET还是PUT?象TELNET这种协议如何区别是读还是写?象SMTP本质是写,POP3本质是读的协议如何处理呢?其他协议呢?感觉还是不太理解NetGuard的意思,而且这样作是否太影响性能了?

保存配置,恢复,证书,升级文件:这些都是GUI和防火墙之间的文件传输了,自己定一个协议说明传的是什么文件就可以了。

对象,组:
对象和组:将数值的IP网络地址对象化是进行包装的必要工作,对没有网络背景的用户也好管理和使用,值得注意的这点上NetGuard作的比较细致,以MAC地址对象基本固定参数,IP地址作为数量可变的参数管理;对于服务器可以设置SYN代理属性,半连接阈值,MTU等,不过此SYN代理和网卡的SYN代理有何关系?两种SYN代理同时存在是否有什么问题?另外还有操作系统类型,不知道会有什么不同的对待?
对象自动搜索:也就是IP/MAC的自动搜集,倒是方便用户的使用,而且除了搜索出MAC地址外(用ARP查询即可),还能搜索出主机名,对于Windows机器,可以通过netbios来获取主机名,Unix机器如何获取呢?finger之类的服务恐怕没什么Unix机器会开了吧
区域子网:比较有特点的是排除IP这一项,虽然技术上没什么难度,但属于考虑得比较周到
认证服务器:配置基本是和认证类型相关了,不过对于超时这点理解上有点疑惑,这个超时怎么是用户和服务器之间呢?应该是用户和防火墙之间吧?用户应该不知道自己是什么服务器来认证自己,只是提供相应信息给防火墙,由防火墙将信息提交给认证服务器来认证,用户和服务器应该不是直接通信的,不知道NetGuard认证是怎么个过程,难道是用户直接和服务器认证,这样有和防火墙有什么关系呢?
用户:管理内容基本如此了
负载均衡组:只是把服务器对象化了,增加了权重属性
文件资源、URL、邮件地址、关键字:应该只是为内容过滤时处理使用了
特殊端口:特殊端口只是作为内容过滤使用么?还是在连接跟踪时也能使用?如FTP是21端口,所以防火墙能跟踪21端口定义的子连接,如果FTP开在2121端口,还能跟踪此端口么?如果只是在内容过滤中使用,那倒没什么难度了。对于后者,如果FTP跟踪是用Linux模块来实现的,可以在模块插入时定义要跟踪的端口,如果直接编在内核就不行了。
NAT保留端口:这个功能比较特殊,应该是给某些限制源端口的应用定制的吧,正常情况下该功能没上面必要。要实现的话就要在内核中建立一个相应的端口表,在NAT时查找新端口时排除这些端口,但出现两台机器同时用相同的保留端口NAT出去时怎么办呢?
多播:NetGuard的多播只支持透明模式,路由下不能过防火墙,单独把这个对象列出来有什么意义呢?在透明防火墙看来不也是一个IP地址而已。

通信策略:
TRANSFER方式没什么好说的,就一路由了,等价于添加路由表
NAT:就是netfilter的SNAT,NetGuard的动态静态NAT似乎和一般的理解不一样,NetGuard把多对一称为静态,多对多称为动态;
MAP:就是netfilter的DNAT,负载均衡可以用ipvs实现,这是纳入Linux内核中为数不多的中国人(章文嵩先生,还有一个是写LIDS的谢华刚先生,景仰如滔滔江水ing...,)写的模块之一。
NetGuard在处理NAT情况服务器和内网又在同一内网段情况下使用了一种特殊的NAT处理,结果是把包的源和目的地址都改了,一般情况源和目的是只改其一的,颇为苦心。据俺所知还有两种办法解决此问题,一种是双DNS,内网里也有个DNS服务器把本地服务器域名解析为本地地址,好象东软是这么作的,这样作的缺点就是要多加一个DNS服务器,而且每个客户机都得配两个DNS,属于比较土的方法;另一种是方式是在防火墙上作DNS的内容NAT转换,把DNS返回的服务器外部地址修改为内部地址,这样内部客户机就直接和服务器内部IP连接了,优点是数据内容不再需要防火墙转发,节约防火墙资源,缺点是只能用域名方式访问,直接用外部IP访问是不行的,不过既然都知道IP了,用本地IP访问不行么?有款防火墙是这么作的,这个方法比较有特色而且有效。

访问策略
用户与IP绑定:NetGuard中用户本身不带IP信息,是使用时和地址对象进行绑定,这点和其他防火墙有点区别
策略:NetGuard的策略分为了包过滤、文件、HTTP、邮件过滤四种类型
包过滤:前面地址,协议定义都没什么好说的,重点是日志,日志会话应该是普通的netfilter日志,日志命令应该是NetGuard自己作的了,而且只支持FTP和HTTP,是需要特殊模块支持,可以增加netfilter目标模块,专门解析内容然后记录,然后ACCEPT;连接属性应该是说明连接是普通连接还是长连接,不知道是否长连接的超时可以自己任意配?还是就一个二值开关,长连接超时时间是固定值?后者比较简单,这可以在iptables命令中设置一个选项,在netfilter设置连接超时时根据这个标志设不同的值即可。
文件过滤:既然只支持FTP和HTTP,在服务页就不该列出其他协议。如果在内核过滤,文件资源描述应该对应一个netfilter匹配模块;如在用户空间过滤,直接在用户空间搜索匹配描述即可,把verdict传回内核
HTTP、邮件过滤应该类似文件过滤
应用或屏蔽应用层访问策略:这说明这些是通过内核模块实现的?没有直接打进内核?还是说只是一些功能起效的软开关?反正在模块没有起效时内容过滤等价ACCEPT就是

DHCP
Linux下有DHCPD的完全实现,包括DHCP服务器、客户端和DHCP中继等功能,NetGuard的DHCP功能没有超过其功能

防火墙系统参数
是否对非法报文回应:REJECT还是DROP
遇到重复连接请求时是否复位已建立的长连接:这属于在内核改点东西了
收到报文是否进行校验和检查:这个Linux里都有的,都做了很多次的
启用僵死连接功能:就是加一个删除超时了

ADSL
ADSL在Linux下的实现是rp-pppoe包,实现了完整的ADSL拨号及断开功能,也提供了Dial on demand功能,也就是NetGuard的自动拨号功能,PPPOE要在以太头中增加8个字节,这就是MTU为1492的原因。
但时间限制得自己加,也就是拨号前先判断一下时间即可。

登录管理
这些和防火墙具体功能无关了,属于系统管理范畴,自己根据情况设计了

日志服务器是防火墙导出日志所必须的了,syslog本身就能传出日志和接收,自己写一个日志服务器也是可以的,不算很难。

SNMP
Linux下有net-snmp的SNMP实现,可以直接提供SNMP功能,相关的MIB库自己加一些就是。

报警
NetGuard支持声音、MAIL、NETBIOS和SNMP TRAP,其他都没什么,也是一般都有的,NETBIOS这个倒是比较有意思。不过不是实时报警,10分钟才报一次,看来是有个守护进程每10秒钟检查一次

手册附录A的服务端口明显就是/etc/services文件了,要包装好点把“/tcp”、“/udp”分开,单独作为一列

18.总结
作为国内防火墙的老大,NetGuard应该算代表国内防火墙的最高水平,整体框架和界面都属于国内领先,有些细节地方作得还是不错,如各种对象的定义很细致,这些连NS之类也要自叹不如。但这些属于界面上的功夫了,从核心技术来说,NetGuard的各种核心技术在Linux基本都有open source的实现,并没有表现的比open source强多少,和NS相比应该差得还不少,没有虚拟系统、动态路由、VPN不支持PPTP、L2TP、IPSec也不是很完善、统计信息也不如NS多等等,在内容过滤功能上在即使在国内也说不上领先,防CC,阻QQ都没什么更好的方法,任重道远。

 
原创粉丝点击