jump to navigation

2006年100款最佳安全工具谱(引用自Xfocus) 九月 15, 2006

Posted by wansion in 技术.
1 comment so far
创建时间:2006-09-10
文章属性:翻译
文章提交:fatb (fatb_at_security.zz.ha.cn)
译者:天天安全网 tulip
在2000和2003年非常成功的推出了安全工具调查后,Insecure.Org 非常高兴为大家带来2006年度的安全工具调查。我-Fyodor对nmap-hackers 邮件列表中的用户进行了调查,让大家来分享他们最喜欢用的工具,结果有3243名用户提供了反馈信息。我从反馈信息中选取了大家最喜欢的前100种工具,并将它们进行了分类。建议安全界人士仔细阅读这份列表,并对不熟悉或未听说过的工具进行研究,相信会有很大帮助。我自己就从中发现了很多以前没有使用过但非常好用的工具。当很多菜鸟问我“我不知道当一个黑客该从何开始”时,我就让他们来读读这篇文章。
受访者被要求列出各种平台上的开源和商业工具。商业工具会在列表中进行标注。Nmap Security Scanner 没有参与投票,因为调查是在Nmap的邮件列表中进行的。因为受访者多为黑客的原因,所以此列表中攻击型的工具偏多一些,防守型的则少一些。
列表中每个工具都含有以下一种或几种属性:2003年调查列表中未出现的工具;相对于2003年调查列表排名升或降;需要花钱购买。但可以免费获得限制、演示、试用版本软件;可以工作于Linux平台之上;可以工作于OpenBSD、FreeBSD、Solaris 或其它UNIX平台之上;可以工作于苹果Mac OS X平台之上;可以工作于微软Windows平台之上;提供命令行操作方式;提供图形化用户界面;在互联网上可以找到源代码。
如果您发现列表中的工具有更新或者有其它建议–或者有更好的工具图标 可以发送邮件给我。如果您的工具入选此列表了,或者您认为您网站的访客也许会对此列表感兴趣,欢迎您通过link banners把本文链接到您网站上。以下开始为正式列表,按受欢迎程度降序排列:
#1 Nessus:最好的UNIX漏洞扫描工具
Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上。它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance–终端用户授权协议)。它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器,可以用其编写自定义插件,或用来阅读别人写的插件。Nessus 3 已经开发完成(now closed source),其现阶段仍然免费,除非您想获得最新的插件。
——————————————————————————–
#2 Wireshark:网络嗅探工具
Wireshark (2006年夏天之前叫做 Ethereal)是一款非常棒的Unix和Windows上的开源网络协议分析器。它可以实时检测网络通讯数据,也可以检测其抓取的网络通讯数据快照文件。可以通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的详细内容。Wireshark拥有许多强大的特性:包含有强显示过滤器语言(rich display filter language)和查看TCP会话重构流的能力;它更支持上百种协议和媒体类型; 拥有一个类似tcpdump(一个Linux下的网络协议分析工具)的名为tethereal的的命令行版本。不得不说一句,Ethereal已经饱受许多可远程利用的漏洞折磨,所以请经常对其进行升级,并在不安全网络或敌方网络(例如安全会议的网络)中谨慎使用之。
——————————————————————————–
#3 Snort:一款广受欢迎的开源IDS(Intrusion Detection System)(入侵检测系统)工具
这款小型的入侵检测和预防系统擅长于通讯分析和IP数据包登录(packet logging)。Snort除了能够进行协议分析、内容搜索和包含其它许多预处理程序,还可以检测上千种蠕虫病毒、漏洞、端口扫描以及其它可疑行为检测。Snort使用一种简单的基于规则的语言来描述网络通讯,以及判断对于网络数据是放行还是拦截,其检测引擎是模块化的。 用于分析Snort警报的网页形式的引擎 Basic Analysis and Security Engine (BASE)可免费获得。
开源的Snort为个人、小企业、集团用户提供良好的服务。其母公司SourceFire提供丰富的企业级特性和定期升级以丰富其产品线。提供(必须注册)5天免费的规则试用,您也可以在Bleeding Edge Snort找到很多免费规则。
——————————————————————————–
#4 Netcat:网络瑞士军刀
这个简单的小工具可以读和写经过TCP或UDP网络连接的数据。它被设计成一个可靠的可以被其它程序或脚本直接和简单使用的后台工具。同时,它也是一个功能多样的网络调试和检查工具,因为它可以生成几乎所有您想要的网络连接,包括通过端口绑定来接受输入连接。Netcat最早由Hobbit在1995年发布,但在其广为流传的情况下并没有得到很好的维护。现在nc110.tgz已经很难找了。这个简单易用的工具促使了很多人写出了很多其它Netcat应用,其中有很多功能都是原版本没有的。其中最有趣的是Socat,它将Netcat扩展成可以支持多种其它socket类型,SSL加密,SOCKS代理,以及其它扩展的更强大的工具。它也在本列表中得到了自己的位置(第71位)。还有Chris Gibson’s Ncat,能够提供更多对便携设备的支持。其它基于Netcat的工具还有OpenBSD’s nc,Cryptcat,Netcat6,PNetcat,SBD,又叫做GNU Netcat。
——————————————————————————–
#5 Metasploit Framework:黑掉整个星球
2004年Metasploit的发布在安全界引发了强烈的地震。没有一款新工具能够一发布就挤进此列表的15强(也就是说2000年和2003年的调查没有这种情况),更何况此工具更在5强之列,超过了很多广为流传的诞生了几十年的老牌工具。它是一个强大的开源平台,供开发、测试和使用恶意代码。这种可扩展的模型将负载控制、编码器、无操作生成器和漏洞整合在一起,使得Metasploit Framework成为一种研究高危漏洞的途径。它自带上百种漏洞,还可以在online exploit building demo(在线漏洞生成演示)看到如何生成漏洞。这使得您自己编写漏洞变得更简单,它势必将提升非法shellcode代码的水平,扩大网络阴暗面。与其相似的专业漏洞工具,例如Core Impact和Canvas已经被许多专业领域用户使用。Metasploit降低了这种能力的门槛,将其推广给大众。
——————————————————————————–
#6 Hping2:一种网络探测工具,是ping的超级变种
这个小工具可以发送自定义的ICMP,UDP和TCP数据包,并接收所有反馈信息。它的灵感来源于ping命令,但其功能远远超过ping。它还包含一个小型的路由跟踪模块,并支持IP分段。此工具可以在常用工具无法对有防火墙保护的主机进行路由跟踪/ping/探测时大显身手。它经常可以帮助您找出防火墙的规则集,当然还可以通过它来学习TCP/IP协议,并作一些IP协议的实验。
——————————————————————————–
#7 Kismet:一款超强的无线嗅探器
Kismet是一款基于命令行(ncurses)的802.11 layer2无线网络探测器、嗅探器、和入侵检测系统。它对网络进行被动嗅探(相对于许多主动工具,例如NetStumbler),可以发现隐形网络(非信标)。它可以通过嗅探TCP、UDP、ARP和DHCP数据包来自动检测网络IP段,以Wireshark/TCPDump兼容格式记录通讯日志,更加可以将被检测到的网络分块并按照下载的分布图进行范围估计。如您所想,这款工具一般被wardriving所使用。嗯!还有warwalking、warflying和warskating……
——————————————————————————–
#8 Tcpdump:最经典的网络监控和数据捕获嗅探器
在Ethereal(Wireshark)出现之前大家都用Tcpdump,而且很多人现在还在一直使用。它也许没有Wireshark那么多花里胡哨的东西(比如漂亮的图形界面,亦或数以百计的应用协议逻辑分析),但它能出色的完成很多任务,并且漏洞非常少,消耗系统资源也非常少。它很少添加新特性了,但经常修复一些bug和维持较小的体积。它能很好的跟踪网络问题来源,并能监控网络活动。其Windows下的版本叫做WinDump。Libpcap/WinPcap的包捕获库就是基于TCPDump,它也用在Nmap等其它工具中。
——————————————————————————–
#9 Cain and Abel:Windows平台上最好的密码恢复工具
UNIX用户经常声称正是因为Unix平台下有很多非常好的免费安全工具,所以Unix才会成为最好的平台,而Windows平台一般不在他们的考虑范围之内。他们也许是对的,但Cain & Abel确实让人眼前一亮。这种只运行于Windows平台的密码恢复工具可以作很多事情。它可以通过嗅探网络来找到密码、利用字典破解加密密码、暴力破解密码和密码分析、记录VoIP会话、解码非常复杂的密码、星号查看、剥离缓存密码以及分析路由协议。另外其文档也很齐全(well documented)。
——————————————————————————–
#10 John the Ripper:一款强大的、简单的以及支持多平台的密码破解器
John the Ripper是最快的密码破解器,当前支持多种主流Unix (官方支持11种,没有计算不同的架构)、DOS、Win32、BeO和OpenVMS。它的主要功能就是检测弱Unix密码。它支持主流Unix下的多种(3种)密码哈希加密类型,它们是Kerberos、AFS以及Windows NT/2000/XP LM。其它哈希类型可以通过补丁包加载。如果您希望从一些单词表开始的话,您可以在这里、这里和这里找到。
——————————————————————————–
#11 Ettercap:为交换式局域网提供更多保护
Ettercap是一款基于终端的以太网络局域网嗅探器/拦截器/日志器。它支持主动和被动的多种协议解析(甚至是ssh和https这种加密过的)。还可以进行已建立连接的数据注入和实时过滤,保持连接同步。大部分嗅探模式都是强大且全面的嗅探组合。支持插件。能够识别您是否出在交换式局域网中,通过使用操作系统指纹(主动或被动)技术可以得出局域网结构。
——————————————————————————–
#12 Nikto:非常全面的网页扫描器
Nikto是一款开源的(GPL)网页服务器扫描器,它可以对网页服务器进行全面的多种扫描,包含超过3200种有潜在危险的文件/CGIs;超过625种服务器版本;超过230种特定服务器问题。扫描项和插件可以自动更新(如果需要)。基于Whisker/libwhisker完成其底层功能。这是一款非常棒的工具,但其软件本身并不经常更新,最新和最危险的可能检测不到。
——————————————————————————–
#13 Ping/telnet/dig/traceroute/whois/netstat:基本命令
虽然有很多重型的高科技网络安全工具,但是不要忘记其基础!所有网络安全人士都要对这些基本命令非常熟悉,因为它们对大多数平台都适用(在Windows平台上whois为tracert)。它们可以随手捏来,当然如果需要使用一些更高级的功能可以选择Hping2和Netcat。
——————————————————————————–
#14 OpenSSH / PuTTY / SSH:访问远程计算机的安全途径
SSH(Secure Shell)现在普遍应用于登录远程计算机或在其上执行命令。它为不安全网络上的两台不互信计算机间通讯提供安全加密,代替非常不可靠的telnet/rlogin/rsh交互内容。大多UNIX使用开源的OpenSSH服务器和客户端程序。Windows用户更喜欢免费的PuTTY客户端,它也可以运行在多种移动设备上。还有一些Windows用户喜欢使用基于终端的OpenSSH模拟程序Cygwin。还有其它很多收费和免费的客户端。您可以在这里和这里找到。
——————————————————————————–
#15 THC Hydra:支持多种服务的最快的网络认证破解器
如果您需要暴力破解一个远程认证服务,Hydra经常会是选择对象。它可以同时对30个以上的端口进行基于字典的快速破解,包括telnet、ftp、http、https、smb、多种数据库及其它服务。和THC Amap一样,此Hydra版本来自于民间组织THC。
——————————————————————————–
#16 Paros proxy:网页程序漏洞评估代理
基于Java的网页程序漏洞评估代理。支持实时编辑和浏览HTTP/HTTPS信息,修改例如Cookie和表字段中的内容。它包含有网页通讯记录器、网页小偷(web spider)、哈希计算器和一个常用网页程序攻击扫描器,例如SQL注入和跨网站脚本等。
——————————————————————————–
#17 Dsniff:一款超强的网络评估和渗透检测工具套装
由Dug Song精心设计并广受欢迎的这款套装包含很多工具。Dsniff、filesnarf、mailsnarf、msgsnarf、urlsnarf和webspy通过被动监视网络以获得敏感数据(例如密码、邮件地址、文件等)。Arpspoof、dnsspoof和macof能够拦截一般很难获取到的网络通讯信息(例如由于使用了第二层转换(layer-2 switching))。Sshmitm和webmitm通过ad-hoc PKI中弱绑定漏洞对ssh和https会话进行重定向实施动态monkey-in-the-middle(利用中间人攻击技术,对会话进行劫持)攻击。Windows版本可以在这里获取。总之,这是一个非常有用的工具集。它能完成几乎所有密码嗅探需要作的工作。
——————————————————————————–
#18 NetStumbler:免费的Windows 802.11嗅探器
Netstumbler是广为人知的寻找开放无线访问接入点的Windows工具("wardriving")。其PDA上的WinCE系统版本名叫Ministumbler。此软件当前免费,但只能够运行在Windows平台上,且代码不公开。它使用很多主动方法寻找WAP,而Kismet或KisMAC则更多使用被动嗅探。
——————————————————————————–
#19 THC Amap:一款应用程序指纹扫描器
Amap是一款很棒的程序,它可以检测出某一端口正在被什么程序监听。因为其独有的version detection特性,所以其数据库不会象Nmap一样变得很大,在Nmap检测某一服务失败或者其它软件不起作用时可以考虑使用之。Amap的另一特性是其能够解析Nmap输出文件。这也是THC贡献的另一款很有价值的工具。
——————————————————————————–
#20 GFI LANguard:一款Windows平台上的商业网络安全扫描器
GFI LANguard通过对IP网络进行扫描来发现运行中的计算机,然后尝试收集主机上运行的操作系统版本和正在运行的应用程序。我曾经尝试收集到了Windows主机上的service pack级别、缺少的安全更新、无线访问接入点、USB设备、开放的共享、开放的端口、正在运行的服务和应用程序、主要注册表项、弱密码、用户和组别以及其它更多信息。扫描结果保存在一份可自定义/可查询的HTML报告文档中。它还含有一个补丁管理器,可以检查并安装缺少的补丁。试用版可以免费获得,但只能使用30天。
——————————————————————————–
#21 Aircrack:最快的WEP/WPA破解工具
Aircrack是一套用于破解802.11a/b/g WEP和WPA的工具套装。一旦收集到足够的加密数据包它可以破解40到512位的WEP密匙,它也可以通过高级加密方法或暴力破解来破解WPA 1或2网络。套装中包含airodump(802.11数据包捕获程序)、aireplay (802.11数据包注入程序)、aircrack(静态WEP和WPA-PSK破解),和airdecap(解密WEP/WPA捕获文件)。
——————————————————————————–
#22 Superscan:只运行于Windows平台之上的端口扫描器、ping工具和解析器
SuperScan是一款Foundstone开发的免费的只运行于Windows平台之上的不开源的TCP/UDP端口扫描器。它其中还包含许多其它网络工具,例如ping、路由跟踪、http head和whois。
——————————————————————————–
#23 Netfilter:最新的Linux核心数据包过滤器/防火墙
Netfilter是一款强大的运行于标准Linux核心上的包过滤器。它集成了用户空间IP列表工具。当前,它支持包过滤(无状态或有状态)、所有类型的网络地址和端口转换(NAT/NAPT)并支持多API层第三方扩展。它包含多种不同模块用来处理不规则协议,例如FTP。其它UNIX平台请参考Openbsd PF(只用于OpenBSD)或者IP Filter。许多个人防火墙(personal firewalls)都支持Windows (Tiny、Zone Alarm、Norton、Kerio…),但都不提供上述IP列表。微软在Windows XP SP2中集成了一款非常基础的防火墙,如果您不安装它,它就会不断地提示您安装。
——————————————————————————–
#24 Sysinternals:一款强大的非常全面的Windows工具合集
Sysinternals为Windows低级入侵提供很多非常有用的小工具。其中一部分是免费的,有些还附有源代码,其它是需要付费使用的。受访者最喜欢此集合中的以下工具:
ProcessExplorer 监视所有进程打开的所有文件和目录(类似Unix上的LSoF)。
PsTools 管理(执行、挂起、杀死、查看)本地和远程进程。
Autoruns 发现系统启动和登陆时加载了哪些可执行程序。
RootkitRevealer 检测注册表和文件系统API异常,用以发现用户模式或内核模式的rootkit工具。
TCPView 浏览每个进程的TCP和UDP通讯终点(类似Unix上的Netstat)。
生产此软件的公司已被微软于2005年收购,所以其未来产品线特征无法预测。
——————————————————————————–
#25 Retina:eEye出品的商业漏洞评估扫描器
象Nessus一样,Retina的功能是扫描网络中所有的主机并报告发现的所有漏洞。eEye出品,此公司以其security research而闻名。
——————————————————————————–
#26 Perl / Python / Ruby:简单的、多用途的脚本语言
常用的安全问题都能在网上找到工具解决,但使用脚本语言您可以编写您自己的(或编辑现有的)工具,当您需要解决某种特定问题的时候。快速、简单的脚本语言可以测试、发现漏洞甚至修复系统漏洞。CPAN上充满了类似Net::RawIP和执行协议的程序模块,可以使您的工作更加轻松。
——————————————————————————–
#27 L0phtcrack:Windows密码猜测和恢复程序
L0phtCrack也叫作LC5,用来尝试通过哈希(通过某种访问方式获得的)方法破解诸如Windows NT/2000工作站、联网服务器、主域控制器、或活动目录密码,有时它也可以通过嗅探获得密码的哈希值。它还可以通过多种手段来猜测密码(字典、暴力破解等等)。Symantec公司2006年已经停止了LC5的开发,但LC5 installer的安装文件随处可以找到。免费试用版只能使用15天,Symantec已经停止出售此软件的注册码,所以如果您不想放弃使用它,就必须找到一个与其对应的注册码生成器(key generator)。因为Symantec不再维护此软件,所以最好尝试用Cain and Abel或John the Ripper来代替之。
——————————————————————————–
#28 Scapy:交互式数据包处理工具
Scapy是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和包嗅探工具。它提供多种类别的交互式生成数据包或数据包集合、对数据包进行操作、发送数据包、包嗅探、应答和反馈匹配等等功能。Python解释器提供交互功能,所以要用到Python编程知识(例如variables、loops、和functions)。支持生成报告,且报告生成简单。
——————————————————————————–
#29 Sam Spade:Windows网络查询免费工具
Sam Spade为许多网络查询的一般工作提供了图形界面和方便的操作。此工具设计用于跟踪垃圾信息发送者,但它还可以用于许多其它的网络探查、管理和安全工作。它包含许多有用的工具,例如ping、nslookup、whois、dig、路由跟踪、查找器、原始HTTP网页浏览器、DNS地址转换、SMTP中继检查、网站搜索等等。非Windows用户可以在线使用更多其它工具。
——————————————————————————–
#30 GnuPG / PGP :对您的文件和通讯进行高级加密
PGP是Phil Zimmerman出品的著名加密程序,可以使您的数据免受窃听以及其它危险。GnuPG是一款口碑很好的遵守PGP标准的开源应用(可执行程序名为gpg)。GunPG是免费的,而PGP对某些用户是收费的。
——————————————————————————–
#31 Airsnort:802.11 WEP加密破解工具
AirSnort是一款用来恢复加密密码的无线LAN(WLAN)工具。Shmoo Group出品,工作原理是被动监控传输信息,当收集到足够多的数据包后开始计算加密密码。Aircrack和它很像。
——————————————————————————–
#32 BackTrack:一款极具创新突破的Live(刻在光盘上的,光盘直接启动) 光盘自启动Linux系统平台
这款卓越的光盘自启动Linux系统是由Whax和Auditor合并而成。它以其超级多的安全和防护工具配以丰富的开发环境而闻名。重点在于它的用户模块化设计,用户可以自定义将哪些模块刻到光盘上,例如自己编写的脚本、附加工具、自定义内核等等。
——————————————————————————–
#33 P0f:万能的被动操作系统指纹工具
P0f能够通过捕获并分析目标主机发出的数据包来对主机上的操作系统进行鉴别,即使是在系统上装有性能良好的防火墙的情况下也没有问题。P0f不增加任何直接或间接的网络负载,没有名称搜索、没有秘密探测、没有ARIN查询,什么都没有。某些高手还可以用P0f检测出主机上是否有防火墙存在、是否有NAT、是否存在负载平衡器等等!
——————————————————————————–
#34 Google:人人喜爱的搜索引擎
Google当然不是什么安全工具,但是它超级庞大的数据库却是安全专家和入侵者最好的资源。如果您想了解某一公司,您可以直接用它搜索 “site:target-domain.com”,您可以获得员工姓名、敏感信息(通常公司不对外公开的,但在Google上就难说了)、公司内部安装的软件漏洞等等。同样,如果您在Google上发现一个有某个漏洞的网站,Google还会提供给您其它有相同漏洞的网站列表。其中利用Google进行黑客活动的大师Johny Long建立了一个Google黑客数据库(Google Hacking Database)还出版了一本如何用Google进行黑客活动的书Google Hacking for Penetration Testers。
——————————————————————————–
#35 WebScarab:一个用来分析使用HTTP和HTTPS协议的应用程序框架
它的原理很简单,WebScarab记录它检测到的会话内容(请求和应答),使用者可以通过多种形式来查看记录。WebScarab的设计目的是让使用者可以掌握某种基于HTTP(S)程序的运作过程;也可以用它来调试程序中较难处理的bug,也可以帮助安全专家发现潜在的程序漏洞。
——————————————————————————–
#36 Ntop:网络通讯监控器
Ntop以类似进程管理器的方式显示网络使用情况。在应用程序模式下,它能显示用户终端上的网络状况。在网页模式下,它作为网页服务器,以HTML文档形式显示网络状况。它是NetFlow/sFlow发射和收集器,通过一个基于HTTP的客户端界面来生成以ntop为中心的监控程序,RRD(Round Robin Database)(环形数据库)用来持续储存网络通讯状态信息。
——————————————————————————–
#37 Tripwire:很老的文件完整性检查器
一款文件和目录完整性检查器。Tripwire是一种可以帮助系统管理员和一般用户监控某一特定文件或目录变化的工具。可以用以对系统文件作日常(例如:每天)检查,Tripwire可以向系统管理员通报文件损坏或被篡改情况,所以这是一种周期性的文件破坏控制方法。免费的开源Linux版本可以在Tripwire.Org下载到。AIDE是UNIX平台的Tripwire替代品。或者Radmind、RKHunter和chkrootkit也是很好的选择。Windows用户请使用Sysinternals出品的RootkitRevealer。
——————————————————————————–
#38 Ngrep:方便的数据包匹配和显示工具
ngrep尽可能多的去实现GNU grep的功能,将它们应用于网络层。Ngrep是一款pcap-aware工具,它允许指定各种规则式或16进制表达式去对数据负载或数据包进行匹配。当前支持TCP、UDP、以太网上的ICMP、PPP、SLIP、FDDI、令牌环(Token Ring)和空接口(null interfaces),还能理解类似Tcpdump和snoop等一样形式的bpf过滤器逻辑。
——————————————————————————–
#39 Nbtscan:在Windows网络上收集NetBIOS信息
NBTscan是一款在IP网络上扫描NetBIOS名称信息的工具。它通过给指定范围内所有地址发送状态查询来获得反馈信息并以表形式呈现给使用者。每一地址的反馈信息包括IP地址、NetBIOS计算机名、登录用户、MAC地址。
——————————————————————————–
#40 WebInspect:强大的网页程序扫描器
SPI Dynamics’ WebInspect应用程序安全评估工具帮您识别已知和未知的网页层漏洞。它还能检测到Web服务器的配置属性,以及进行常见的网页攻击,例如参数注入、跨网站脚本、目录游走等等。
——————————————————————————–
#41 OpenSSL:最好的SSL/TLS加密库
OpenSSL项目的目的是通过开源合作精神开发一种健壮的、可以和同类型商业程序媲美的、全功能的,且开源的应用于SSL v2/v3(Secure Sockets Layer)和TLS v1(Transport Layer Security)协议的普遍适用的加密库工具集。本项目由世界范围内的志愿者们维护,他们通过互联网联络、计划和开发OpenSSL工具集及其相关文档。
——————————————————————————–
#42 Xprobe2:主动操作系统指纹工具
XProbe是一款远程主机操作系统探查工具。开发者基于和Nmap相同的一些技术(same techniques),并加入了自己的创新。Xprobe通过ICMP协议来获得指纹。
——————————————————————————–
#43 EtherApe:EtherApe是Unix平台上的模仿etherman的图形界面网络监控器
包含连接层、IP和TCP三种模式,EtherApe网络活动图通过不同颜色来标识不同协议。主机和连接的图形大小随通讯情况而变化。它支持以太网、FDDI、令牌环、ISDN、PPP和SLIP设备。它可以实施过滤网络通讯,也可以抓取网络通讯快照文件。
——————————————————————————–
#44 Core Impact:全自动的全面入侵检测工具
Core Impact可不便宜(先准备个上万美元吧),但它却是公认的最强的漏洞检测工具。它有一个强大的定时更新的专业漏洞数据库,它可以轻易的黑掉一台计算机,并以它为跳板再去作别的事情。如果您买不起Core Impact,可以看看比较便宜的Canvas或者免费的Metasploit Framework。当然,三个同时用是最好的了。
——————————————————————————–
#45 IDA Pro:Windows或Linux反编译器和调试器
反编译器是一块很重要的安全研究方向。它可以帮您拆解微软的补丁,以了解微软未公开并悄悄修补的漏洞,或直接以二进制的方式对某个服务器进行检测,以找出为何某个存在的漏洞不起作用。反编译器有很多,但IDA Pro是遵守二进制包事实标准(de-facto standard)的恶意代码和漏洞研究分析工具。这个图形化的、可编程的、可扩展的、支持多处理器的反编译器现在有了一个和Windows一模一样的Linux(命令行模式)版本。
——————————————————————————–
#46 SolarWinds:网络发现/监控/攻击系列工具
SolarWinds生产和销售了许多专业的系统管理工具。安全相关的包括许多网络发现扫描器、一个SNMP暴力破解器、路由器密码解密器、TCP连接重置程序、最快最易用的一个路由器设置下载和上传程序等等。
——————————————————————————–
#47 Pwdump:一款Windows密码恢复工具
Pwdump可以从Windows主机中取得NTLM和LanMan哈希值,无论系统密码是否启用。它还能显示系统中存在的历史密码。数据输出格式为L0phtcrack兼容格式,也可以以文件形式输出数据。
——————————————————————————–
#48 LSoF:打开文件列表
这是一款Unix平台上的诊断和研究工具,它可以列举当前所有进程打开的文件信息。它也可以列举所有进程打开的通讯socket(communications sockets)。Windows平台上类似的工具有Sysinternals。
——————————————————————————–
#49 RainbowCrack:极具创新性的密码哈希破解器
RainbowCrack是一款使用了大规模内存时间交换(large-scale time-memory trade-off)技术的哈希破解工具。传统的暴力破解工具会尝试每一个可能的密码,要破解复杂的密码会很费时。RainbowCrack运用时间交换技术对破解时间进行预计算,并将计算结果存入一个名叫"rainbow tables"的表里。预计算确实也会花费较长时间,但相对暴力破解来说则短多了,而且一旦预计算完成破解开始,那么破解所需要的时间就非常非常短了。
——————————————————————————–
#50 Firewalk:高级路由跟踪工具
Firewalk使用类似路由跟踪的技术来分析IP数据包反馈,以确定网关ACL过滤器类型和网络结构。㊣ COPY BY TTIAN.NET ㊣ 这款经典的工具在2002年十月由scratch重写。这款工具的大部分功能Hping2的路由跟踪部分也都能实现。
——————————————————————————–
#51 Angry IP Scanner:一款非常快的Windows IP 扫描器和端口扫描器
Angry IP Scanner能够实现最基本的Windows平台上的主机发现和端口扫描。它的体积非常的小,它还可以通过挂载插件(a few plugins)来获得主机其它信息。
——————————————————————————–
#52 RKHunter:一款Unix平台上的Rootkit检测器
RKHunter是一款检测例如rootkit、后门、漏洞等恶意程序的工具。它采用多种检测手段,包括MD5哈希值对比、rootkits原始文件名检测、文件权限检测,以及LKM和KLD模块中的可疑字符串检测。
——————————————————————————–
#53 Ike-scan:VPN检测器和扫描器
Ike-scan是一款检测IKE(Internet Key Exchange)服务传输特性的工具,IKE是VPN网络中服务器和远程客户端建立连接的机制。在扫描到VPN服务器的IP地址后,将改造过的IKE数据包分发给VPN网中的每一主机。只要是运行IKE的主机就会发回反馈来证明它存在。此工具然后对这些反馈数据包进行记录和显示,并将它们与一系列已知的VPN产品指纹进行对比。Ike-scan的VPN指纹包含来自Checkpoint、Cisco、Microsoft、Nortel和Watchguard的产品。
——————————————————————————–
#54 Arpwatch:持续跟踪以太网/IP地址配对,可以检查出中间人攻击
Arpwatch是LBNL网络研究组出品的一款经典的ARP中间人(man-in-the-middle)攻击检测器。它记录网路活动的系统日志,并将特定的变更通过Email报告给管理员。Arpwatch使用LibPcap来监听本地以太网接口ARP数据包。
——————————————————————————–
#55 KisMAC:一款Mac OS X上的图形化被动无线网络搜寻器
这款Mac OS X下非常流行的搜寻器和Kismet功能差不多,但和Kismet不同的是Kismet是基于命令行的,而KisMac有很漂亮的图形化界面,在OS X上出现得也比Kismet早。它同时还提供映射、Pcap兼容格式数据输入、登录和一些解密、验证破解功能。
——————————————————————————–
#56 OSSEC HIDS:一款开源的基于主机的入侵检测系统
OSSEC HIDS的主要功能有日志分析、完整性检查、rootkit检测、基于时间的警报和主动响应。除了具有入侵检测系统功能外,它还一般被用在SEM/SIM(安全事件管理(SEM: Security Event Management)/安全信息管理(SIM:Security Information Management))解决方案中。因其强大的日志分析引擎,ISP(Internet service provider)(网络服务提供商)、大学和数据中心用其监控和分析他们的防火墙、入侵检测系统、网页服务和验证等产生的日志。
——————————————————————————–
#57 Openbsd PF:OpenBSD数据包过滤器
象其它平台上的Netfilter和IP Filter一样,OpenBSD用户最爱用PF,这就是他们的防火墙工具。它的功能有网络地址转换、管理TCP/IP通讯、提供带宽控制和数据包分级控制。它还有一些额外的功能,例如被动操作系统检测。PF是由编写OpenBSD的同一批人编写的,所以您完全可以放心使用,它已经经过了很好的评估、设计和编码以避免暴露其它包过滤器(other  packet  filters)上的类似漏洞。
——————————————————————————–
#58 Nemesis:简单的数据包注入
Nemesis项目设计目的是为Unix/Linux(现在也包含Windows了)提供一个基于命令行的、小巧的、人性化的IP堆栈。此工具套装按协议分类,并允许对已注入的数据包流使用简单的shell脚本。如果您喜欢Nemesis,您也许对Hping2也会感兴趣,它们是互补的关系。
——————————————————————————–
#59 Tor:匿名网络通讯系统
Tor是一款面向希望提高其网络安全性的广大组织和大众的工具集。Tor的功能有匿名网页浏览和发布、即时信息、irc、ssh以及其它一些TCP协议相关的功能。Tor还为软件开发者提供一个可开发内置匿名性、安全性和其它私密化特性的软件平台。在Vidalia可以获得跨平台的图形化界面。
——————————————————————————–
#60 Knoppix:一款多用途的CD或DVD光盘自启动系统
Knoppix由一系列典型的GNU/Linux软件组成,可以自动检测硬件环境,支持多种显卡、声卡、SCSI和USB设备以及其它外围设备。KNOPPIX作为一款高效的Linux光盘系统,可以胜任例如桌面系统、Linux教学光盘、救援系统等多种用途,经过这次在nmap中调查证实,它也是一款很小巧的安全工具。如果要使用更专业的Linux安全系统请看BackTrack。
——————————————————————————–
#61 ISS Internet Scanner:应用程序漏洞扫描器
Internet Scanner是由Christopher Klaus在92年编写的一款开源的扫描器工具。现在这款工具已经演变成了一个市值上亿美元生产无数安全产品的公司。
——————————————————————————–
#62 Fport:Foundstone出品的加强版netstat
Fport可以报告所有本地机上打开的TCP/IP和UDP端口,并显示是何程序打开的端口。所以用它可以快速识别出未知的开放端口以及与其相关的应用程序。它只有Windows版本,但现在很多UNIX系统上的netstat也提供同样的功能(Linux请用’netstat -pan’)。SANS article有Fport的使用说明和结果分析方法。
——————————————————————————–
#63 chkrootkit:本地rootkit检测器
chkrootkit是一款小巧易用的Unix平台上的可以检测多种rootkit入侵的工具。它的功能包括检测文件修改、utmp/wtmp/last日志修改、界面欺骗(promiscuous interfaces)、恶意核心模块(malicious kernel modules)。
——————————————————————————–
#64 SPIKE Proxy:HTTP攻击
Spike Proxy是一款开源的以发现网站漏洞为目的的HTTP代理。它是Spike Application Testing Suite的一部分,功能包括自动SQL注入检测、 网站爬行(web site crawling)、登录列表暴力破解、溢出检测和目录游走检测。
——————————————————————————–
#65 OpenBSD:被认为是最安全的操作系统
OpenBSD是将安全作为操作系统首要任务的操作系统之一,甚至有时安全性级别要高于易用性,所以它骄人的安全性是不言而喻的。OpenBSD也非常重视系统的稳定性和对硬件的支持能力。也许他们最伟大的创举就是创造了OpenSSH。 OpenBSD用户对此系统之上的[pf](OpenBSD上的防火墙工具,本列表中第57位有介绍)也褒奖有佳。
——————————————————————————–
#66 Yersinia:一款支持多协议的底层攻击工具
Yersinia是一款底层协议攻击入侵检测工具。它能实施针对多种协议的多种攻击。例如夺取生成树的根角色(生成树协议:Spanning Tree Protocol),生成虚拟CDP(Cisco发现协议:Cisco Discovery Protocol)邻居、在一个HSRP(热等待路由协议:Hot Standby Router Protocol)环境中虚拟成一个活动的路由器、制造假DHCP反馈,以及其它底层攻击。
——————————————————————————–
#67 Nagios:一款开源的主机、服务和网络监控程序
Nagios是一款系统和网络监控程序。它可以监视您指定的主机和服务,当被监视对象发生任何问题或问题被解决时发出提示信息。它的主要功能有监控网络服务(smtp、pop3、http、nntp、ping等等)、监控主机资源(进程负载、硬盘空间使用情况等等)、当发现问题或问题解决时通过多种形式发出提示信息(Email、寻呼机或其它用户定义的方式)。
——————————————————————————–
#68 Fragroute/Fragrouter:一款网络入侵检测逃避工具集
Fragrouter 是一款单向分段路由器,发送(接收)IP数据包都是从攻击者到Fragrouter,将数据包转换成分段数据流发给受害者。很多入侵检测系统都不能重建一段被视为一个整体的网络数据(通过IP分段和TCP流重组),详情请见这篇文章(this classic paper)。Fragrouter可以帮助骇客在逃避入侵检测后发起基于IP的攻击。它是Dug Song出品的NIDSbench套装中的一部分。Fragroute是Dug song出品的另一款和Fragrouter相似的工具。
——————————————————————————–
#69 X-scan:一款网络漏洞扫描器
一款多线程、支持插件的漏洞扫描器。X-Scan主要功能有全面支持NASL(Nessus攻击脚本语言:Nessus Attack Scripting Language)、检测服务类型、远程操作系统类型(版本)检测、弱用户名/密码匹配等等。最新版本可以在这里获取。请注意这是一个中文网站(原文为英文,所以原文作者提醒英文读者这是个中文网站)。
——————————————————————————–
#70 Whisker/libwhisker:Rain.Forest.Puppy出品的CGI漏洞扫描器和漏洞库
Libwhisker是一款Perl模板集用来测试HTTP。它的功能是测试HTTP服务器上是否存在许多已知的安全漏洞,特别是CGI漏洞。Whisker是一款基于libwhisker的扫描器,但是现在大家都趋向于使用Nikto,它也是基于libwhisker的。
——————————————————————————–
#71 Socat:双向数据传输中继
类似于Netcat的工具,可以工作于许多协议之上,运行于文件、管道、设备(终端或调制解调器等等)、socket(Unix、IP4、IP6-raw、UDP、TCP)、Socks4客户端、代理服务器连接、或者SSL等等之间。它提供forking、logging和dumping,和不同模式的交互式处理通讯,以及更多其它选项。它可以作为TCP中继(单次触发:one-shot或者daemon(Internet中用于邮件收发的后台程序))、作为基于daemon的动态Sockes化(socksifier)、作为Unix平台上sockets的shell接口、作为IP6中继、将面向TCP的程序重定向成串行线路(Serial Line)程序、或者建立用来运行客户端或服务器带有网络连接的shell脚本相关安全环境(su和chroot)。
——————————————————————————–
#72 Sara:安全评审研究助手
SARA是一款源于infamous SATAN扫描器的漏洞评估工具。此工具大约两个月更新一次,出品此工具的开源社区还维护着Nmap和Samba。
——————————————————————————–
#73 QualysGuard:基于网页的漏洞扫描器
在网站上以服务形式发布, 所以QualysGuard没有开发、维护和升级漏洞管理软件或ad-hoc安全应用程序的负担。客户端可以安全的通过一个简单易用的网页访问QualysGuard。QualysGuard含有5000种以上的单一漏洞检查,一个基于推理的扫描引擎,而且漏洞知识库自动天天升级。
——————————————————————————–
#74 ClamAV:一款UNIX平台上的基于GPL(通用公开许可证:General Public License)的反病毒工具集
ClamAV是一款强大的注重邮件服务器附件扫描的反病毒扫描器。它含有一个小巧的可升级的多线程daemon、一个命令行扫描器和自动升级工具。Clam AntiVirus基于AntiVirus package发布的开源病毒库,您也可以将此病毒库应用于您自己的软件中,但是别忘了经常升级。
——————————————————————————–
#75 cheops / cheops-ng:提供许多简单的网络工具,例如本地或远程网络映射和识别计算机操作系统
Cheops提供许多好用的图形化用户界面网络工具。它含有主机/网络发现功能,也就是主机操作系统检测。Cheops-ng用来探查主机上运行的服务。针对某些服务,cheops-ng可以探查到运行服务的应用程序是什么,以及程序的版本号。Cheops已经停止开发和维护,所以请最好使用cheops-ng。
——————————————————————————–
#76 Burpsuite:一款网页程序攻击集成平台
Burp suite允许攻击者结合手工和自动技术去枚举、分析、攻击网页程序。这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用从而发动攻击。
——————————————————————————–
#77 Brutus:一款网络验证暴力破解器
这款Windows平台上的暴力破解器通过字典猜测远程系统网络服务密码。它支持HTTP、POP3、FTP、SMB、TELNET、IMAP、NTP等等。不开放源码,UNIX平台上的类似软件有THC Hydra。
——————————————————————————–
#78 Unicornscan:另类端口扫描器
Unicornscan是一款通过尝试连接用户系统(User-land)分布式TCP/IP堆栈获得信息和关联关系的端口扫描器。它试图为研究人员提供一种可以刺激TCP/IP设备和网络并度量反馈的超级接口。它主要功能包括带有所有TCP变种标记的异步无状态TCP扫描、异步无状态TCP标志捕获、通过分析反馈信息获取主动/被动远程操作系统、应用程序、组件信息。它和Scanrand一样都是另类扫描器。
——————————————————————————–
#79 Stunnel:用途广泛的SSL加密封装器
stunnel用来对远程客户端和本地机(可启动inetd的:inetd-startable)或远程服务器间的SSL加密进行封装。它可以在不修改任何代码的情况下,为一般的使用inetd daemon的POP2、POP3和IMAP服务器添加SSL功能。它通过使用OpenSSL或SSLeay库建立SSL连接。
——————————————————————————–
#80 Honeyd:您私人的蜜罐系统
Honeyd是一个可以在网络上创建虚拟主机的小型daemon。可以对此虚拟主机的服务和TCP进行配置,使其在网络中看起来是在运行某种操作系统。Honeyd可以使一台主机在局域网中模拟出多个地址以满足网络实验环境的要求。虚拟主机可以被ping通,也可以对它们进行路由跟踪。通过对配置文件进行设置可以使虚拟计算机模拟运行任何服务。也可以使用服务代理替代服务模拟。它的库有很多,所以编译和安装Honeyd比较难。
——————————————————————————–
#81 Fping:一个多主机同时ping扫描程序
fping是一款类似ping(1)(ping(1)是通过ICMP(网络控制信息协议Internet Control Message Protocol)协议回复请求以检测主机是否存在)的程序。Fping与ping不同的地方在于,您可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping。如果某一主机ping通,则此主机将被打上标记,并从等待列表中移除,如果没ping通,说明主机无法到达,主机仍然留在等待列表中,等待后续操作。
——————————————————————————–
#82 BASE:基础分析和安全引擎(Basic Analysis and Security Engine)
BASE是一款基于PHP的可以搜索和实施安全事件的分析引擎,她的安全事件数据库来源于很多入侵检测系统、防火墙、网络检测工具生成的安全事件。它的功能包括一个查找生成器和搜索界面,用来搜索漏洞;一个数据包浏览器(解码器);还可以根据时间、传感器、信号、协议和IP地址等生成状态图。
——————————————————————————–
#83 Argus:IP网络事务评审工具
Argus是一款固定模型的实时的流量监视器,用来跟踪和报告数据网络通讯流中所有事务的状态和性能。Argus为流量评估定制了一种数据格式,其中包括连通性、容量、请求、丢包、延迟和波动,这些就作为评估事务的元素。这种数据格式灵活易扩展,支持常用流量标识和度量,还可以获得指定的应用程序/协议的信息。
——————————————————————————–
#84 Wikto:网页服务器评估工具
Wikto是一款检查网页服务器漏洞的工具。它和Nikto类似,但是添加了很多其它功能,例如一个整合了Google的后台发掘器。Wikto工作于MS ..NET环境下,下载此软件和源代码需要注册。
——————————————————————————–
#85 Sguil:网络安全监控器命令行分析器
Sguil(按sgweel发音)是由network security analysts出品的网络安全分析工具。Sguil的主要组件就是一个Snort/barnyard实时事件显示界面。它还包含一些网络安全监控的辅助工具和事件驱动的入侵检测系统分析报告。
——————————————————————————–
#86 Scanrand:一个异常快速的无状态网络服务和拓朴结构发现系统
Scanrand是一款类似Unicornscan的无状态主机发现和端口扫描工具。它以降低可靠性来换取异常快的速度,还使用了加密技术防止黑客修改扫描结果。此工具是Dan Kaminsky出品的Paketto Keiretsu的一部分。
——————————————————————————–
#87 IP Filter:小巧的UNIX数据包过滤器
IP Filter是一款软件包,可以实现网络地址转换(network address translation)(NAT)或者防火墙服务的功能。它可以作为UNIX的一个核心模块,也可以不嵌入核心,强烈推荐将其作为UNIX的核心模块。安装和为系统文件打补丁要使用脚本。IP Filter内置于FreeBSD、NetBSD和Solaris中。OpenBSD可以使用Openbsd PF,Linux用户可以使用Netfilter。
——————————————————————————–
#88 Canvas:一款全面的漏洞检测框架
Canvas是Aitel’s ImmunitySec出品的一款漏洞检测工具。它包含150个以上的漏洞,它比Core Impact便宜一些,但是它也价值数千美元。您也可以通过购买VisualSploit Plugin实现在图形界面上通过拖拽就可以生成漏洞。Canvas偶尔也会发现一些ODay漏洞。
——————————————————————————–
#89 VMware:多平台虚拟软件
VMware虚拟软件允许您在一个系统中虚拟运行另一个系统。这对于安全专家在多平台下测试代码和漏洞非常有用。它只运行在Windows和Linux平台上,但它可以虚拟运行几乎所有的x86操作系统。它对建立沙箱(sandboxes)也非常有用。在VMware虚拟系统上感染了恶意软件不会影响到宿主机器,可以通过加载快照文件恢复被感染了的虚拟系统。VMware不能创建虚拟系统的镜像文件。VMware最近刚刚宣布免费。另一款在Linux下颇受瞩目的虚拟平台软件是Xen。
——————————————————————————–
#90 Tcptraceroute:一款基于TCP数据包的路由跟踪工具
现代网络广泛使用防火墙,导致传统路由跟踪工具发出的(ICMP应答(ICMP echo)或UDP)数据包都被过滤掉了,所以无法进行完整的路由跟踪。尽管如此,许多情况下,防火墙会准许反向(inbound)TCP数据包通过防火墙到达指定端口,这些端口是主机内防火墙背后的一些程序和外界连接用的。通过发送TCP SYN数据包来代替UDP或者ICMP应答数据包,tcptraceroute可以穿透大多数防火墙。
——————————————————————————–
#91 SAINT:安全管理综合网络工具
SAINT象Nessus、ISS Internet Scanner和Retina一样,也是一款商业漏洞评估工具。它以前是运行在UNIX系统之上的免费开源工具,但现在收费了。
——————————————————————————–
#92 OpenVPN:全功能SSL VPN解决方案
OpenVPN是一款开源的SSL VPN工具包,它可以实现很多功能,包括远程登录、站对站VPN、WiFi安全、带有负载平衡的企业级远程登录解决方案、节点控制移交(failover)、严密的访问控制。OpenVPN运行于OSI 2层或3层安全网络,使用SSL/TLS工业标准协议,支持灵活的基于证书、智能卡、二元验证的客户端验证方法,允许在VPN虚拟接口上使用防火墙规则作为用户或指定用户组的访问控制策略。OpenVPN使用OpenSSL作为其首选加密库
——————————————————————————–
#93 OllyDbg:汇编级Windows调试器
OllyDbg是一款微软Windows平台上的32位汇编级的分析调试器。因其直接对二进制代码进行分析,所以在无法获得源代码的时候它非常有用。OllyDbg含有一个图形用户界面,它的高级代码分析器可以识别过程、循环、API调用、交换、表、常量和字符串,它可以加载运行时程序,支持多线程。OllyDbg可以免费下载,但不开源。
——————————————————————————–
#94 Helix:一款注重安全防护的Linux版本
Helix是一款自定义版本的Knoppix自启动Linux光盘系统。Helix远不止是一张自启动光盘。除了光盘启动到自定义的Linux环境,还具有超强的硬件支持能力,包含许多应付各种问题的软件。Helix尽量少的接触主机软硬资源。Helix不自动加载交换(swap)空间,不自动加载其它任何外围设备。Helix还可以自动加载Windows,以应对意外情况。
——————————————————————————–
#95 Bastille:Linux、Mac OS X和HP-UX的安全加强脚本
Bastille使操作系统固若金汤,减少系统遭受危险的可能,增加系统的安全性。Bastille还可以评估系统当前的安全性,周期性的报告每一项安全设置及其工作情况。Bastille当前支持Red Hat(Fedora Core、Enterprise和Numbered/Classic版本)、SUSE、Debian、Gentoo和Mandrake这些Linux版本,还有HP-UX和Mac OS X。Bastille旨在使系统用户和管理员了解如何加固系统。在其默认的最坚固模式下,它不断的询问用户问题,并对这些问题加以解释,根据用户对问题不同的回答选择不同的应对策略。在其评估模式下,它会生成一份报告旨在告诉用户有哪些安全设置可用,同时也提示用户哪些设置被加固了。
——————————————————————————–
#96 Acunetix Web Vulnerability Scanner:商业漏洞扫描器
Acunetix WVS自动检查您的网页程序漏洞,例如SQL注入、跨网站脚本和验证页面弱密码破解。Acunetix WVS有着非常友好的用户界面,还可以生成个性化的网站安全评估报告。
——————————————————————————–
#97 TrueCrypt:开源的Windows和Linux磁盘加密软件
TrueCrypt是一款非常出色的开源磁盘加密系统。用户可以加密整个文件系统,它可以实时加密/解密而不需要用户干涉,只要事先输入密码。非常巧妙的hidden volume特性允许您对特别敏感的内容进行第二层加密来隐藏它的存在。所以就算加密系统的密码暴露,黑客也不知道还有隐藏内容存在。
——————————————————————————–
#98 Watchfire AppScan:商业网页漏洞扫描器
AppScan按照应用程序开发生命周期进行安全测试,早在开发阶段就进行单元测试和安全保证。Appscan能够扫描多种常见漏洞,例如跨网站脚本、HTTP应答切开、参数篡改、隐藏值篡改、后门/调试选项和缓冲区溢出等等。
——————————————————————————–
#99 N-Stealth:网页服务器扫描器
N-Stealth是一款网页服务器安全扫描器。它比Whisker/libwhisker和Nikto这些免费的网页扫描器升级得更频繁,但是它网站上声称的可以扫描30000种漏洞(30000 vulnerabilities and exploits)和每天添加数十种漏洞(Dozens of vulnerability checks are added every day)的说法是很值得怀疑的。象Nessus、ISS Internet Scanner、Retina、SAINT和Sara这些防入侵工具都含有网页扫描组件,它们都很难做到每日更新。N-Stealth运行于Windows平台之上,且不开源。
——————————————————————————–
#100 MBSA:微软基准安全分析器(Microsoft Baseline Security Analyzer)
Microsoft Baseline Security Analyzer(MBSA)是一款简单易用的工具,帮助IT专业人员检测其小型和中型商业应用的安全性,将用户系统与微软安全建议(Microsoft security recommendations)进行比对,并给出特定的建议指导。通过与Windows内置的Windows自动升级代理器(Windows Update Agent)和微软自动升级基础架构(Microsoft Update infrastructure)的协作,MBSA能够保证和其它微软管理产品的数据保持一致,它们包括微软自动升级(Microsoft Update(MU))、Windows服务器自动升级服务(Windows Server Update Services(WSUS))、系统管理服务器(Systems Management Server(SMS))和微软运行管理器(Microsoft Operations Manager(MOM))。MBSA平均每周要扫描3百万台电脑。
——————————————————————————–
致谢
首先,我要感谢3243名Nmap用户,它们分享了对安全工具喜爱的信息,我才能完成这整个列表。列表中许多工具的说明都来源于工具的官方网页,或者Debian和Freshmeat的安装包说明,并都删除了有市场推广性质的广告内容。我还要感谢Doug Hoyte为我集成了所有这些数据。感谢Catherine Tornabene和Mark Brewis对文章的校对。
编后语:本文源自sectools.org,由天天安全网站内tulip忠于原文提供翻译。需注意的是里边的我指原文作者Fyodor,并非tulip本人。本文可任意转载和传播,但请保留天天安全网 tulip 翻译字样,我们非常感谢您的支持。也由于时间匆忙,不免有些错误,欢迎来EMAIL指正。本文很多工具在天天安全网都提供了本地下载,可通过搜索网站来查询。需要祝贺的是本次安全焦点的X-scan也入选了,排名第69,应该是国内的工具头次入选的。另外点击软件名称即可直接访问该软件官方站点。大家还可以访问 tulip blog 查阅完整的图文版。
Advertisements

Security Acronyms 一月 11, 2006

Posted by wansion in 技术.
add a comment

Security Acronyms

International Organizations and Standards

  • ACTS :: RACE的后续计划
  • BXA :: 美国商业部出口管理局
  • CASPR :: Commonly Accepted Security Practices and Recomendations
  • CCEVS :: 通用准则评估和认证体系
  • COBIT :: 信息及相关技术控制目标(Control OBjectives for Information and related Technology).COBIT按3个层次将IT治理架构的控制对象分为4个控制域,34个高级控制对象(流程),318个具体控制对象。
  • CSE :: 加拿大的通信安全法规
  • DPI:: Deep Packet Inspection, 深度包检测, 许多防火墙厂家提出的一种概念,类似思科的NBAD,在网络层识别应用层信息,以便细化安全策略。
  • EAD:: Endpoint Admission Defense, 端点准入防御, 华为3Com公司提出的类似思科NAC的一种终端集成防御体系。
  • EAR :: 出口管理条例
  • EESSI :: 欧洲电子签名标准化倡议
  • FIPS :: 联邦信息处理标准
  • FISMA :: 联邦信息安全管理法案Federal Information Security Management Act
  • FRAP :: 便利的风险分析过程(Facilitated Risk Analysis Process)。这是一种高效的,严格的过程方法,主要为了保证业务运营的信息安全相关风险能得到考虑并归档。FRAP的主要过程包括:信息收集(会谈,自动化工具,交互操作等方式),信息整理,信息分析,风险计算。整个过程涵盖技术、管理、运行三个方面的内容。
  • GAO :: General Accounting Office
  • IANA :: Internet Assigned Number Authority
  • ICTSB :: 欧洲信息和通信技术标准委员会
  • IDMEF :: Intrusion Detection Message Exchange Format, 即入侵检测消息交换格式,RFC标准,还处于草案阶段。Sourceforge上有一个为Snort开发IDMEF接口插件的项目。但是普遍来说,主流商业产品对IDMEF的支持不够好。
  • IDXP :: Intrusion Detection Exchange Protocol, 即入侵检测交换协议,an application-level protocol for exchanging data between intrusion detection entities. IDXP supports mutual-authentication, integrity, and confidentiality over a connection-oriented protocol. The protocol provides for the exchange of IDMEF messages, unstructured text, and binary data. 用以实现IDMEF通信过程的协议。同样处于RFC草案阶段
  • iMAAP: Identity Management, Authentication, Authorization, Protection, 德勤Deloitte公司在安全咨询方面的一个方法论。
  • IPS :: Intrusion Prevention System, 入侵阻断系统,从名称上可以看出来,相比IDS,IPS更加强调“实时阻断”,它在线工作的特点也给它带来了不利的变数 - 无法接受的误报。
  • ISACA :: 信息系统审计和控制协会(Information System Audit and Control Associates)
  • ISC2: The International Information Systems Security Certification Consortium, Inc., or (ISC)², is a non-profit organization, incorporated in the Commonwealth of Massachusetts, based in Palm Harbor, Florida.
  • ISL :: InterSwitch Link (Cisco proprietary protocol)和802.1q是实现Trunk的两种基本方式
  • ITGI :: IT治理协会(IT Governance Institute)
  • ITIL :: Information Technology Infrastructure Library信息技术基础设施库
  • ITSEM: ITSEC的评估方法论
  • ITSMF :: IT Service Management Forum
  • NAC::Network Admission Control, 思科公司提出的一种网络安全体系,倡导网络终端与网络设备的联动来保障基础设施,形成统一完整的安全防御体系。有防病毒厂家、终端安全等多家大公司加盟。
  • NIAP:国家信息保证联盟(PAIN的逆序)由NSA和NIST共同组建
  • NBAD: Network Based Anomaly Detection, 基于网络的应用识别,思科公司用于在其网络设备上面动态识别应用层信息的一种技术,正被大量用于BT, eDonkey等P2P应用的治理。
  • NIST: 美国国家标准和技术局National Institute of Standards and Technology
  • NSA:国家安全局
  • OASIS:Organization for the Advancement of Structured Information Standards.
  • OCTAVE: Operationally Critical Threat, and Vulnerability Evaluation
  • OMG:对象管理组织
  • OWASP:Open Web Application Security Project
  • PKI/PKA: PKI/PKI Enabled Application
  • RACE: 欧洲先进通信研究
  • RIP: 英国的调查权法案
  • SAML: Security Assertion Markup Language, OASIS标准,主要用于完成Web-based应用 or Web Servivce环境下的认证和单点登录。
  • SCIP: the Society of Competitive Intelligence Professionals
  • SCSSI: 法国国防部计算机安全部
  • SCSUG: 法国灵巧卡安全用户小组
  • SCC: Security Command Center, 安全总控中心,与安全管理中心相比更加强调“控制”能力,即状态监视和指令部署的能力。
  • SDN: Self-Defending Network, 自防御网络,Cisco公司提出的一种安全防护架构,重在IP骨干网的安全
  • SOC: Security Operations Center, 安全管理中心是一种技术组织形式,集中地、统一地管理、监视一个企业或组织范围内的网络信息安全元素和安全策略。
  • SOD: Segregation of Duties, 职责分隔是一种减少偶然或故意行为造成安全风险的方法。企业或组织应分散某些任务的管理、执行及职责范围,以减少误用或滥用职责带来风险的概率。
  • SOG-IS: 信息系统安全高级官员小组
  • SPML: Security Provisioning Markup Language,成为安全供应标记语言,或者安全配置标记语言,用于Web-based 应用or Web Service环境下的用户帐号管理。
  • SPN: Security Penetration Network, 安全渗透网
  • STP:Spanning Tree Protocol
  • TISPAN: Telecommunication and Internet converged Services and Protocols for Advanced NetworkingTISPAN 在ETSI 中负责目前未来融合网的标准化,包括VoIP、和NGN 的标准化。TISPAN 的成立不仅把ETSI 有关NGN 的工作进行了合并,而且大大加强了ETSI 在标准化方面的领导地位。
  • TMF: 国际电信管理论坛
  • UTM: Unified Threats Management, 统一威胁管理, 新近兴起的一种安全产品形态,组合多种安全要素于一身,通常会包括防火墙、VPN、反病毒、IDS、反垃圾邮件等功能。目前,按照IDC的统计, Fortinet公司的产品暂时领先这一市场。也有其他场合称为United Threats Management, or Universal Threats Management.
  • XACML :: Extensible Access Control Markup Language, 可扩展访问控制标记语言,OASIS标准,定义了一种通用的用于保护资源的策略语言和一种访问决策语言,帮助访问控制模型的实现。
  • XMPP :: Extensible Messaging and Presence Protocol, Jabber.org发展的一种标准协议
  • WfMC:工作流管理联盟”(Workflow Management Coalition,简称WfMC)
  • WSC: World Semiconductor Consortium

Certificates

  • CBA :: Certified Bank Auditor
  • CCP :: Certified Computing Professional
  • CIA :: Certified Internal Auditor
  • CISA :: Certified Information Systems Auditor
  • CISSP :: Certified Information Systems Security Professional
  • CPIM :: Certified in Production and Inventory Management
  • SNIA :: Storage Network Industry Association
  • SSCP :: Systems Security Certified Practitioner

系统总线的历史 十二月 22, 2005

Posted by wansion in 技术.
add a comment

PC总线与ISA总线

  [2005-10-17]  

     在计算机系统中,各个功能部件都是通过总线交换数据,总线的速度对系统性能有着极大的影响。而也正因为如此,总线被誉为是计算机系统的神经中枢。但相比 CPU、显卡、内存、硬盘等功能部件,总线技术的提升步伐要缓慢得多。在PC发展的二十余年历史中,总线只进行三次更新换代,但它的每次变革都令计算机的面貌焕然一新。在下面的文字中,我们将向大家介绍计算机系统总线的详细发展历程,包括早期的PC总线和ISA总线、PCI/AGP总线、PCI-X总线以及目前主流的PCI Express、HyperTransport高速串行总线。

PC总线与ISA总线

    PC总线是最古老的总线之一,虽然在它之前还有诸如MCA、VESA在内的多种总线规格,但它却是第一种被认可为广泛标准的总线技术。PC总线最早出现在IBM公司1981年推出的PC/XT电脑中,它基于8位结构的8088处理器,也被称为PC/XT总线。

    PC总线沿用了三年多时间,直到1984年,IBM推出基于16位英特尔80286处理器的PC/AT电脑,系统总线才被16位的PC/AT总线所代替。而这个时候,PC产业已初具规模,加之IBM允许第三方厂商开发兼容产品,PC/AT总线规范也被逐渐标准化,并衍生出著名的ISA总线(Industry Standard Architecture,工业标准架构)。

    与PC/AT总线不同,ISA总线采用8位和16位模式,它的最大数据传输率为8MBps和16MBps—今天来看这样的性能低得不可思议,但在当时8MBps的速率绰绰有余,完全可满足多个CPU共享系统资源的需要。既然是标准化的总线技术,ISA就基本不存在什么兼容性问题,后来的兼容PC也无一例外都采用ISA技术作为系统总线。ISA总线一直贯穿286和386SX时代,在当时,16位X86系统对总线性能并没有太高的要求,ISA也没有遭遇任何麻烦。但在32位386DX处理器出现之后,16位宽度的ISA总线就遇到问题,总线数据传输慢使得处理器性能也受到严重的制约。有鉴于此,康柏、惠普、AST、爱普生等九家厂商协同将ISA总线扩展到32位宽度,EISA(Extended Industry Standard Architecture,扩展工业标准架构)总线由此诞生—这是发生在1988年的事情。

    EISA总线的工作频率仍然保持在8MHz水平,但受益于32位宽度,它的总线带宽提升到32MBps。另外,EISA可以完全兼容之前的 8/16位ISA总线,用户已有扩展设备可继续使用,一定程度受到用户的欢迎。然而,EISA并没有重复ISA的辉煌,它的成本过高,且速度潜力有限;更要命的是,在还没有来得及成为正式工业标准的时候,更先进的PCI总线就开始出现,EISA也就成为附庸。不过,EISA总线并没有因此快速消失,它在计算机系统中与PCI总线共存了相当漫长的时光,直到2000年后EISA才正式彻底退出—而此时距EISA标准的提出已经过去了12年。

 

 

庞大的PCI总线家族

    PCI总线诞生于1992年。英特尔推出486处理器,这个时候,EISA总线成为瓶颈,因为CPU的速度已经明显高于总线速度,但受到EISA 的限制,硬盘、显卡和其它外围设备都只能慢速发送和接收数据,整机性能受到严重影响。为了解决这个问题,英特尔公司提出32位PCI总线的概念,并迅速获得认可成为新的工业标准。

    第一个版本的PCI总线工作于33MHz频率下,传输带宽达到133MBps,比ISA总线和EISA总线有了巨大的改进,很好满足当时计算机系统的发展需要。而且PCI采用了独特的中间缓冲器设计,显卡、声卡、网卡、硬盘控制器等高速外围设备都可以直接挂在PCI总线中,再与CPU实现通讯,这种做法不仅满足了当时配件对系统总线的性能要求,也提供了相当的灵活性,其设计思想一直延续至今。在PCI发布一年之后,英特尔公司紧接着提出64位的 PCI总线,它的传输性能达到266MBps,但主要用于企业服务器和工作站领域;由于这些领域对总线性能要求较高,64位/33MHz规格的PCI很快又不够用了,英特尔遂将它的工作频率提升到66MHz。而随着X86服务器市场的不断扩大,64位/66MHz规格的PCI总线理所当然成为该领域的标准,针对服务器/工作站平台设计的SCSI卡、RAID控制卡、千兆网卡等设备无一例外都采用64位PCI接口,乃至到今天,这些设备还被广泛使用。

    不过,PC领域的32位总线一直都没有得到升级,工作频率也停留于33MHz,随着时间的推移,PCI总线又遇到新的瓶颈。1996年,3D显卡出现,揭开3D时代的序幕。由于3D显卡需要与CPU进行频繁的数据交换,而图形数据又往往较为庞大,PCI总线显得力不从心。看到这种情况,英特尔便在 PCI基础上专门研发出一种专门针对显卡的总线标准,它就是大名鼎鼎的AGP总线(加速图形接口,Accelerated Graphics Port)。1996年7月,AGP 1.0标准问世,它的工作频率达到66MHz,具有1X和2X两种模式,数据传输带宽分别达到了266MBps和533MBps。AGP 1.0的出现,在一段时间内基本满足显卡与系统交换数据的需要,为早期的3D显卡广为使用,当然最流行的是AGP 2X模式,只能够支持1X模式的显卡非常罕见。

    AGP 1.0大约只流行了两年时间,原因在于显卡技术发展日新月异,显卡单位时间要处理的数据呈几何级数成倍增长,AGP 2X提供的533MBps带宽很快又无法满足需要。1998年5月,英特尔公司发布AGP 2.0版规范,它的工作频率仍然停留在66MHz,但工作电压降低到1.5V,且通过增加的4X模式,将数据传输带宽提升到1.06GBps,这近乎是个飞跃性的进步。很自然,AGP 4X获得非常广泛的应用,这一点相信众人皆知。而与AGP 2.0同时推出的,还有一种针对图形工作站的AGP Pro接口,这种接口具有更强的供电能力,可驱动高功耗的专业显卡。很自然,AGP Pro成为专业显卡的接口标准,而一些高端PC主板也采用该接口,毕竟它可以完全兼容标准的AGP显卡,在应用上并无障碍。

    AGP 2.0同样活跃了两年时间。2000年8月,英特尔公司推出AGP 3.0规范,它的工作电压进一步降低到0.8V,不过意义最重大的还是所增加的8X模式,这样,它便可以提供2.1GBps的总线带宽。可与前两代技术一样,AGP 8X标准没有辉煌太长时间,PCI Express总线的出现宣告PCI和AGP体系将被终结。但由于过渡不可能短时间完成,AGP 8X至今在市场上还非常活跃,尤其是在中低端领域还占据着主流地位。

    而在另一方面,PCI总线也早已无法满足PC扩展的需要,发展新技术势在必行。用于PC环境的32位/33MHz规格PCI总线只能提供 133MBps带宽,而且要求所有的扩展设备共同分享,这在九十年代初也许没有什么问题,但时过境迁,PC系统发生了巨大的变化,各个设备的接口速度暴涨,如硬盘接口速率超过100MBps,加上千兆网卡、磁盘阵列卡等高性能设备,133MBps共享带宽早已成为严重的瓶颈。而服务器领域虽然使用64位 /66MHz的PCI总线,但该领域的千兆网卡、SCSI硬盘或SCSI RAID系统更是带宽占用大户,PCI总线根本无法满足要求。在这种背景下,开发彻底代替PCI的新一代总线势在必行,对此服务器厂商与PC厂商持有不同的看法,这也导致PCI-X和PCI Express两大标准的同时出现—前者专门针对服务器/工作站领域,采用平滑升级的方式获得高性能,可以称为PCI技术的改良;而后者则是一种革命性的高速串行总线技术,主要用于PC系统中,这也是我们接下来两部分分别要讲述的内容。

图1 EISA总线传输架构,之前的ISA和后来的PCI总线均隶属于该体系。
PCI-X锁定服务器领域

    PCI-X总线由康柏、惠普和IBM等三家服务器厂商于九十年代末共同发起,后来提交给PCI SIG组织修订。这项工作耗费了不短的时间,最终在2000年正式发布PCI-X 1.0版标准,PCI-X宣告诞生。

图2 虽然PCI总线已然落伍,但它的应用极为广泛,至今仍然是PC扩展设备的首选接口。

    在技术上,PCI-X并没有脱离PC体系,它仍使用64位并行总线和共享架构,但将工作频率提升到133MHz,由此获得高达1.06GBps的总带宽。如果四组设备并行工作,每组设备可用带宽为266MBps;如果只有两组设备并行,那么每组设备就可分得533MBps;而在连接一组设备的情况下,该设备便可以独自使用到全部的1.06GBps带宽。相对于64位PCI总线,PCI-X的提升相当明显,在它的帮助下,服务器内部总线资源紧张的难题得到一定的缓解。不过,PCI-X带来的变化不仅如此,它在总线的传输协议方面有许多重要的改良,例如PCI-X启用“寄存器到寄存器”的新协议—发送方发出的数据信号会被预先送入一个专门的寄存器内;寄存器可将信号保持一个时钟周期,而接收方只要在这个时钟周期内作出响应即可。而原来的PCI总线就没有这个缓冲过程,如果接收方无暇处理发送方的信号,那么该信号就会被自动抛弃,容易导致信号遗失。PCI-X的另一个重要优点在于,它可以完全兼容之前的 64位PCI扩展设备,用户已有投资可以获得充分保障。平滑过渡的方式让PCI-X在服务器/工作站领域大获成功,并很快取代64位PCI成为新的标准。

 
图3 PCI-X总线已成为服务器主板的标准配备,主要用于千兆/万兆网卡、磁盘阵列卡、SCSI卡等需要高数据带宽的扩展设备。

    PCI-X 1.0没有辉煌太长时间,基于PCI基础改良的性质让它不可能彻底解决带宽不足的问题。2002年7月,PCI-SIG推出更快的PCI-X 2.0规范,它包含较低速的PCI-X 266及高速的PCI-X 533两套标准,分别针对不同的应用。同样,PCI-X 2.0并没有对总线架构做什么大改动,而只是将工作频率分别提升到266MHz和533MHz,以此获得更高的传输效能。PCI-X 266标准可提供2.1GBps共享带宽,PCI-X 533标准则更是达到4.2GBps的高水平。这两者最多都可以支持8组设备,扩展力相当强大;如果系统只安装4组设备,那么最高级的PCI-X 533标准允许每个设备获得超过1GBps的总线带宽,这完全可满足多路千兆以太网、光纤通道、SAS RAID系统的需求。此外,PCI-X 2.0也保持良好的兼容性,它的接口与PCI-X 1.0完全相同,可无缝兼容之前所有的PCI-X 1.0设备和PCI扩展设备。很自然,PCI-X 2.0成功进入服务器市场并大获成功,直到现在它仍然在服务器市场占据主流地位。

    受到PCI-X 2.0成功的鼓舞,PCI-SIG组织在2002年11月宣布将开发PCI-X 3.0标准、也就是PCI-X 1066。据悉,该标准将工作在1066MHz的高频上,共享带宽达到8.4GBps、每个设备至少都拥有1.06GBps带宽。但十分可惜,这项计划后来并没有下文,原因很可能在于遭遇来自PCI Express阵营的冲击。

    注:PCI-SIG(PCI Special Interest Group,PCI特别兴趣组)于1992年成立,为管理 PCI规范的行业组织,拥有900多个企业成员,核心成员包括IBM、英特尔、AMD、惠普、微软、Phoenix、ServerWorks和德州仪器(Texas Instruments)等八家企业。

PCI Express总线取代PCI

    在服务器领域遭遇总线速度困扰的时候,PC系统也面临相同的问题,而业界也认识到诞生多年的PCI总线是时候退出应用舞台了。在2001年的春季 IDF论坛上,英特尔公司提出3GIO(Third Generation I/O Architecture,第三代I/O体系)总线的概念,它以串行、高频率运作的方式获得高性能,而3GIO的体系设计也十分富有前瞻性,它将被设计为满足未来十年PC系统的性能需要。3GIO计划获得广泛响应,后来英特尔将它提交给PCI-SIG组织,于2002年4月更名为PCI Express并以标准的形式正式推出。它的效能十分惊人,仅仅是X16模式的显卡接口就能够获得惊人的8GBps带宽。更重要的是,PCI Express改良了基础架构,彻底抛离落后的共享结构,一个新的时代开始了。

    在工作原理上,PCI Express与并行体系的PCI没有任何相似之处,它采用串行方式传输数据,而依靠高频率来获得高性能,因此PCI Express也一度被人称为“串行PCI”。由于串行传输不存在信号干扰,总线频率提升不受阻碍,PCI Express很顺利就达到2.5GHz的超高工作频率。其次,PCI Express采用全双工运作模式,最基本的PCI Express拥有4根传输线路,其中2线用于数据发送,2线用于数据接收,也就是发送数据和接收数据可以同时进行。相比之下,PCI总线和PCI-X总线在一个时钟周期内只能作单向数据传输,效率只有PCI Express的一半;加之PCI Express使用8b/10b编码的内嵌时钟技术,时钟信息被直接写入数据流中,这比PCI总线能更有效节省传输通道,提高传输效率。第三,PCI Express没有沿用传统的共享式结构,它采用点对点工作模式(Peer to Peer,也被简称为P2P),每个PCI Express设备都有自己的专用连接,这样就无需向整条总线申请带宽,避免多个设备争抢带宽的糟糕情形发生,而此种情况在共享架构的PCI系统中司空见惯。

    由于工作频率高达2.5GHz,最基本的PCI Express总线可提供的单向带宽便达到250MBps(2.5Gbps×1 B/8bit×8b/10b=250MBps),再考虑全双工运作,该总线的总带宽达到500MBps—这仅仅是最基本的PCI Express ×1模式。如果使用两个通道捆绑的×2模式,PCI Express便可提供1GBps的有效数据带宽。依此类推,PCI Express ×4、×8和×16模式的有效数据传输速率分别达到2GBps、4GBps和8GBps。这与PCI总线可怜的共享式133MBps速率形成极其鲜明的对比,更何况这些都还是每个PCI Express可独自占用的带宽。

    PCI Express 1.0标准推出之后,实用化开发也随之启动。2004年6月,英特尔推出完全基于PCI Express设计的i915/925x系列芯片组,而nVIDIA和ATI两家显卡厂商也都在第一时间推出采用PCI Express ×16接口的显卡,PCI Express时代正式来临。不久以后,nVIDIA、VIA、SiS、ATI、Uli等芯片组厂商也都纷纷推出新一代PCI Express芯片组,移动平台也进入PCI Express时代。PCI Express取代PCI的运动开展得如火如荼,这也是我们今天看到的情况。

Zero Day Protection 十一月 28, 2005

Posted by wansion in 技术.
add a comment
发信人: Sinbad <anonymous@anonymous.com>
标  题: Zero Day Protection 市场噱头还是名副其实
发信站: 辛巴达 (Sun Dec 26 14:20:42 2004)

by stardust

NIDS/NIPS产品本身和相关技术总是能引起大大小的争议,最近有厂商声称自己的NIPS产品有
Zero Day Protection的功能,有人不解其意,跑到focus-ids邮件列表上来问,一些大牛按
自己的理解作答,基本上有以下几种想当然:

1. 指提取某些栈溢出、堆溢出、格式串溢出攻击的共同特征,通过检测这些与具体漏洞无关
的特征来实现对于利用未知漏洞的溢出类攻击,不需要已知漏洞或攻击代码就可能检测到未
知的溢出类攻击。

这种技术无疑是比较先进的,但从现在主流的NIPS/NIDS产品来看,比较完美实现这类技术的
基本没有,大多号称实现的也就是结合协议异常所做的shellcode特征深入分析,比如NIPS/
NIDS通过协议分析发现FTP协议某个命令所带的参数超长,然后发现参数串里有大量的0x90(
x86架构类CPU的NOP指令),以此认定这是一个溢出攻击企图,即便如此由于网络数据的复杂
性、攻击数据的可变性也只能处理那些常见的情况,对于ADMmute之类的变形则可用性大大降
低,因为可能引起的误报太多。要真正实现有用的检测,对溢出攻击普遍特征的分析是要加
强一方面,另一个方面则是提高NIPS/NIDS的计算处理能力,个人认为如果NIPS/NIDS硬件的
计算能力有很大幅度的提高,实现比较准确地对于未知溢出攻击的检测还是有可能的,但现
在就以此号称zero day protection显然是不合适的。

2. 指NIPS/NIPS实现类似一些先进病毒检测引擎的启发式、基于行为、协议异常、统计的分
析能力,以此来实现对于某些未知攻击和网络异常情况的检测。比如基于漏洞利用类蠕虫传
播的网络特征,统计同一源IP指向同一目地端口的相同payload数据包的数量,一旦出现了突
然大量此类流量则极有可能是某个已知或未知蠕虫的爆发,这也可以说是一个基于行为的分
析,发现某些未知的攻击。

目前号称的基于异常检测的NIPS/NIDS基本就是综合使用了上面所说的技术,这些技术往深里
做可能直接与人工智能的研究成果相关,而在那方面在近些年几乎没有突破性进展,传说中
的数据挖掘和神经网络也还只是论文里打转转,实用的工业级别的设备远未作为主要的检测
技术采用,完全基于异常检测的NIPS/NIDS产品必然存在误报高的问题。应该说基于异常和行
为的分析是NIDS/NIPS产品技术上的发展方向,但这一切有赖于理论上取得重大突破,不知道
这样的时候什么才能到来,我本人是持悲观态度的。还有就是永恒的性能问题,NIDS/NIPS与
运行于单机上的防病毒产品很大不同的地方在于,单机上的防毒产品只需要处理本身的文件
和内存,性能上的负担和实时性压力不是太大,从而允许其使用一些相对比较复杂的诸发启
发式的扫描分析,可NIDS/NIPS每秒可能需要处理上G的流量,做很深入的分析必定会极大的
影响吞吐率,厂商必须在性能和高级特性之间做出妥协。

3. 指在漏洞公布以后攻击代码出现以前,厂商根据自己对于漏洞的研究和分析在NIDS/NIPS
产品中加入利用此漏洞进行攻击的特征检测,如果厂商对漏洞的研究够深入,实现从原理上
的检测,那么以后出现的所有利用此漏洞的攻击都可以被检测到。比如前阵子被发现的Serv
-U FTP服务器带畸形参数的MDTM命令溢出漏洞,厂商在了解了漏洞的细节以后,可以加入检
测带有一定特征的超长参数的MDTM命令的规则,这样基本上可以检测到利用此漏洞的所有攻
击。

这种方式只能非常勉强地算作是zero day protection,因为漏洞公布先于攻击代码这点是很
难保证的,有些时候甚至是攻击代码先于漏洞被发现,某些黑客团体发现了可利用的严重漏
洞不公布,利用这些漏洞进行入侵活动,直到他们的活动被Honeypot所捕获或入侵响应人员
分析出系统被攻击时所利用的漏洞,到那时公众才意识到漏洞的存在,以前的WebDAV溢出漏
洞就是这样一个例子,我们是先看到了攻击发生,之后才发现存在的漏洞。即使漏洞先于攻
击代码公布,这里也有一个时间窗口的问题,NIDS/NIPS厂商分析的漏洞速度是不是就一定赶
得上攻击者,这其实就是一场时间上的赛跑,黑客团体的技术水平日渐提高,一个规模不大
的NIDS/NIPS厂商漏洞跟踪能力上极有可能赶不上数量巨大的黑帽子们,所以,由此方式实现
的所谓zero day protection实不足信。

综合如上的分析,个人感觉zero day protection基本上就是个市场噱头、宣传手段,因为从
当前主流的NIDS/NIPS实现攻击检测的方法来看,都没有相对比较成熟的检测未知攻击、异常
事件的能力,NIDS/NIPS要真正实现还有很长的路要走。

关于KSG的高可用性 七月 26, 2005

Posted by wansion in 技术.
1 comment so far
现在觉得作为常用的透明网关,双机就支持到SpanningTree就可以了,不用再往其他方面走了,其实,如果真的要实现到Vrrp或Hsrp那种层次的话,也没必要了。

后续:还是需要附加手段的,SpanningTree只有在网络接口发生故障时才能重新收敛,而其他软件故障则无法发现。

IPSec NAT 穿越概述 六月 27, 2005

Posted by wansion in 技术.
add a comment

IPSec NAT 穿越概述

欲了解关于The Cable Guy的所有专栏的的列表和更多信息,请点击此处

由于历史的原因,部署带 Internet 协议安全的第二层隧道协议(L2TP/IPSec)的问题之一在于无法定位网络地址转换(NAT)之后的 IPSec 对话方。 Internet 服务提供商和小型办公/家庭办公(SOHO)网络通常使用 NAT 来共享单个公共 IP 地址。 虽然 NAT 有助于节省剩余的 IP 地址空间,但是它们也给诸如 IPSec 之类的端对端协议带来了问题。

一种称为 IPSec NAT 穿越(NAT-T)的新技术正在由 Internet 工程任务组的IPSec 网络工作组标准化。 IPSec NAT-T 是在标题为 “UOSec 包的 UDP 封装”(draft-ietf-ipsec-udp-encaps-02.txt)和“IKE中的 NAT 穿越协商”(draft-ietf-ipsec-nat-t-ike-02.txt)的 Internet 草案中描述的。 IPSec NAT-T 对协商过程进行了修改,并且定义了发送受 IPSec 保护的数据的不同方法。

在 IPSec 协商过程中,支持 IPSec NAT-T的对话双方会自动确定:

发起 IPSec 对话的一方(通常是一个客户端计算机)和响应 IPSec 对话的一方(通常是一个服务器)是否都能执行 IPSec NAT-T。

它们之间的路径中是否存在任何 NAT。

如果这两个条件同时为真,那么双方将使用 IPSec NAT-T 来通过 NAT 发送受 IPSec 保护的流量。 如果其中一方不支持 IPSec NAT-T,则执行常规的 IPSec 协商(在前两个消息之后)和 IPSec 保护。 如果双方都支持 IPSec NAT-T,但是它们之间不存在 NAT,则执行常规的 IPSec 保护。

IPSec NAT-T 受Windows Server 2003、Microsoft L2TP/IPSec VPN Client(一个免费的 Web 下载组件,它支持运行 Windows 98、Windows Millennium Edition 和 Windows NT 4.0 Workstation 的计算机创建 L2TP/IPSec 连接)以及L2TP/IPSec NAT-T Update for Windows XP and Windows 2000(一个免费的 Web下载组件,它支持运行Windows 2000和Windows XP的计算机创建 L2TP/IPSec 连接)的支持。

本专栏研究与通过 NAT 使用 IPSec 相关联的问题,以及这些问题如何通过 IPSec NAT-T 来得到解决,以及用于快速模式和主模式的 Internet 密钥交换(IKE)协商中的结果变更。

注意: IPSec NAT-T 是仅为 ESP 流量定义的。

本页内容

与通过 NAT 使用 IPSec 相关的问题 对 IPSec 的 NAT-T 修改概述 通过 NAT 使用 IPSec 的问题的 IPSec NAT-T 解决办法 使用 IPSec NAT-T 的主模式和快速模式 SA 的 IKE 协商例子 更多信息

与通过 NAT 使用 IPSec 相关的问题

与通过 NAT 使用 IPSec 相关的问题如下:

NAT 无法更新上层校验和

TCP 和 UDP 报头包含一个校验和,它整合了源和目标 IP 地址和端口号的值。 当 NAT 改变了某个包的 IP 地址和(或)端口号时,它通常要更新 TCP 或 UDP 校验和。 当 TCP 或 UDP 校验和使用了 ESP 来加密时,它就无法更新这个校验和。 由于地址或端口已经被 NAT 更改,目的地的校验和检验就会失败。 虽然 UDP 校验和是可选的,但是 TCP 校验和却是必需的。

NAT 无法多路传输 IPSec 数据流

ESP 保护的 IPSec 流量没有包含可见的 TCP 或 UDP 报头。 ESP 报头位于 IP 报头和加密的 TCP 或 UDP 报头之间,并且使用 IP 协议号 50。 因此,TCP 或 UDP 端口号就无法将流量多路传输到不同的专用网主机。 ESP 报头包含一个名为 Security Parameters Index(安全参数索引,SPI)的字段。 SPI 与明文(plaintext)IP报头中的目标 IP 地址和 IPSec 安全协议(ESP 或 AH)结合起来用于识别 IPSec 安全关联(SA)。

对于到 NAT 的传入流量,目标 IP 地址必须映射到一个专用 IP 地址。 对于 NAT 专用端的多个 IPSec 对话方,多个 IPSec ESP 数据流的传入流量的目标 IP 地址是同一个地址。 为了将一个 IPSec ESP 数据流与另一个区分开,目标 IP 地址和 SPI 必须得到跟踪并映射到某个专用目标 IP 地址和 SPI。

由于 SPI 是一个 32 位的数字,多个专用网客户端使用相同 SPI 值的概率很低。 问题在于,您很难确定哪个传出 SPI 值对应于哪个传入 SPI 值。

NAT 无法映射 SPI,因为ESP尾部包含一个消息验证散列码(hashed message authentication code,HMAC),它检验 ESP 协议数据单元(PDU)的完整性(ESP PDU 包含 ESP 报头、ESP 有效载荷和 ESP 尾部),SPI 无法在 HMAC 值失效之前改变。

无法改变 IKE UDP 端口号

IPSec 的某些实现同时使用 UDP 端口 500 来作为源和目标 UDP 端口号。 然而,对于一个位于 NAT 之后的 IPSec 对话方,NAT 会改变初始 IKE 主模式包的源地址。根据具体的实现方式,来自 500 之外的其他端口的 IKE 流量可能会被丢弃。

IKE UDP 端口映射的 NAT 超时可能导致问题

NAT 中的 UDP 映射通常会很快被删除。 发起者的 IKE 流量在 NAT 中创建了一个 UDP 端口映射,它在初始主模式和快速模式 IKE 协商期间使用。 然而,如果响应者随后向发起者发送 IKE 消息却没有提供 UDP 端口映射,那么这些消息将被 NAT 丢弃。

Identification IKE 有效载荷包含嵌入的 IP 地址

对于主模式和快速模式协商,每个 IPSec 对话方发送一个 Identification IKE 有效载荷,其中包括发送对话方的嵌入 IP 地址。 由于发送节点的源地址已经被 NAT 改变,该嵌入地址和 IKE 包中的 IP 地址不匹配。 验证 Identification IKE 有效载荷的 IP 地址的 IPSec 对话方将丢弃该包,并放弃 IKE 协商。

对 IPSec 的 NAT-T 修改概述

NAT-T 对 IPSec 的修改如下:

ESP 的 UDP 封装

UDP 报头置于外层 IP 报头和 ESP 报头之间,用于封装 ESP PDU。 用于 UDP 封装的 ESP 流量的端口和用于 IKE 的端口相同。

修改过的 IKE 报头格式

IPSec NAT-T IKE 报头包含一个新的 Non-ESP Marker 字段,它允许接收方区分 UDP 封装的 ESP PDU 和 IKE 消息。 在确定存在一个中间 NAT 之后,支持 IPSec NAT-T 的对话方开始使用新的 IKE 报头。

新的 NAT-Keepalive 包

这是一个和 IKE 流量使用相同端口的 UDP 消息,它包含单个字节(0xFF),用于为发送到某个专用网主机的 IKE 和 UDP 封装的 ESP 流量刷新 NAT 中的 UDP 端口映射。

新的 Vendor ID IKE 有效载荷

这个新的有效载荷包含一个众所周知的散列值,它表明这个对话方能够执行 IPSec NAT-T。

新的 NAT-Discovery (NAT-D) IKE 有效载荷

这个新的有效载荷包含一个散列值,它整合了一个地址和端口号。 在主模式协商期间,IPSec 对话方包括两个 NAT-Discovery 有效载荷——一个用于目标地址和端口,另一个用于源地址和端口。 接收方使用 NAT-Discovery 有效载荷来发现 NAT 之后是否存在一个经 NAT 转换过的地址或端口号,并基于被改变的地址和端口号来确定是否有对话方位于NAT之后。

用于UDP封装的ESP传输模式和隧道模式的新的封装模式

这两种新的封装模式是在快速模式协商期间指定的,用于通知 IPSec 对话方应该对 ESP PDU 使用 UDP 封装。

新的NAT-Original Address (NAT-OA) IKE 有效载荷

这个新的有效载荷包含 IPSec 对话方的原始(未转换的)地址。 对于 UDP 封装的 ESP 传输模式,每个对话方在快速模式协商期间发送 NAT-OA IKE 有效载荷。 接收方将这个地址存储在用于 SA 的参数中。

通过 NAT 使用 IPSec 的问题的 IPSec NAT-T 解决办法

IPSec NAT-T 通过以下方式解决了通过 NAT 使用 IPSec 的问题:

问题: NAT 无法更新上层校验和。

解决办法: 通过在 NAT-OA IKE 有效载荷中发送原始地址,接收方拥有检验解密之后的上层校验和(源和目标 IP 地址和端口)所需的所有信息。

问题: NAT 无法多路传输 IPSec 数据流。

解决办法: 通过使用 UDP 报头封装 ESP PDU,NAT 能够使用 UDP 端口来多路传输 IPSec 数据流。 跟踪 ESP 报头中的 SPI 就不再必要了。

问题: 无法改变 IKE UDP 端口号。

解决办法: IPSec NAT-T对话方能够接受来自 500 之外的端口的 IKE 消息。 此外,为了防止 IKE 敏感(IKE-aware)的 NAT 修改 IKE 包,IPSec NAT-T 对话方在主模式协商期间把 IKE UDP 端口 500 改为 UDP 端口 4500。 为了允许IKE流量使用这个新的 UDP 端口,您可能必须配置防火墙以允许 UDP 端口 4500。

问题: Identification IKE有效载荷包含嵌入的 IP 地址。

解决办法: 通过在 NAT-OA IKE 有效载荷中发送原始地址,接收方拥有了可用来在快速模式协商期间检验 Identification IKE 有效载荷内容的原始地址。 由于NAT-OA IKE 有效载荷在快速模式协商发生之前没有发送,对于验证主模式期间发送的 Identification IKE 有效载荷中的 IP 地址的 IPSec 实现,它要么一定不会执行这个验证,要么通过使用另一种机制(比如名称检验)来验证对话方。

问题: IKE UDP 端口映射的 NAT 超时可能导致问题。

解决办法: 通过定期发送 NAT Keepalive 包,用于后续 IKE 协商和 UDP 封装的 ESP PDU 的 UDP 端口映射同时在 NAT 中得到刷新。

使用 IPSec NAT-T 的主模式和快速模式 SA 的 IKE 协商例子

增添新的 NAT-D 和 NAT-OA 有效载荷和 UDP 通道类型将修改主模式和快速模式 IKE 协商。 例如,下表显示了快速模式协商期间,一个使用 Kerberos 身份验证的基于 Windows 的 IPSec 对话方使用 Vendor-ID 和 NAT-D IKE 有效载荷的情况。 其中用于 IPSec NAT-T 的附加 IKE 有效载荷和消息变更以粗体显示。

用于 Kerberos 身份验证方法的主模式消息

主模式消息 发送者 有效载荷

1

发起者

Security Association(包含提议)、Vendor ID、Vendor ID(NAT-T功能)

2

响应者

Security Association(包含一个选定的提议)、Vendor ID、Vendor ID(NAT-T 功能)

3

发起者

Key Exchange(包含 Diffie-Hellman 公开密钥)、Nonce、Kerberos Token(发起者)、NAT-D(目标地址和端口), NAT-D(源地址和端口)

4

响应者

Key Exchange (包含 Diffie-Hellman 公开密钥)、Nonce、Kerberos Token(响应者)、NAT-D(目标地址和端口), NAT-D(源地址和端口)

5(已加密)

发起者

Identification、Hash(发起者)

6(已加密)

响应者

Identification、Hash(响应者)

如果两个节点都支持 IPSec NAT-T,并且它们之间至少存在一个 NAT,那么它们将在快速模式协商期间使用 IPSec NAT-T 选项。 假设这两个对话方之间至少存在一个NAT,结果快速模式协商将如下表所示。

快速模式消息

快速模式消息 发送者 有效载荷

1 (已加密)

发起者

Security Association (包含建议,包括对“UDP 封装的隧道”或“UDP 封装的传输隧道”模式的选择)、Identification(包含安全流量描述)、Nonce、NAT-OA

2 (已加密)

响应者

Security Association(包含一个选定的建议)、Identification(包含安全流量描述)、Nonce、NAT-OA

3 (已加密)

发起者

Hash

4 (已加密)

响应者

Notification(通知)

在快速模式协商结束时,两个 IPSec 对话方都拥有彼此的原始地址,并根据需要定期发送 NAT-Keepalive 包,同时对 ESP PDU 使用 UDP 封装。

更多信息

欲了解关于 IPSec 和 NAT 的更多信息,请参考以下资源:

用于 IPSec 安全关联的 IKE 协商(Cable Guy 2002年6月的专栏)

Windows 2000 网络地址转换(NAT)(Cable Guy 2001年3月的专栏)

postfix邮件系统完整版 六月 7, 2005

Posted by wansion in 技术.
add a comment

 redhat9+postfix+cyrus-sasl+mysql+postfixadmin+courier-imap+courier-maildrop+squirrelmail(courier-sqwebmail openwebmail)+clamav+spamassassin+amavisd-new

2005年5月5日加入Cyrus SASL with MySQL Encrypted Passwords
2005年5月3日更新防病毒及防垃圾
2005年4月12日加入mysql日志管理
2005年4月10日至13日加入openwebmail
2005年4月8日加入apache自启动脚本
2004年10左右成稿

1.mysql

2.apache

3.php

4.cyrus-sasl

5.postfix

6.postfixadmin

7.courier-authlib

8.courier-imap

9.courier-maildrop

10.webmail
   10.1.sqwebmai
   10.2.squirrelmail
   10.3.openwebmail

11.clamav

12.spamassassin

13.amavisd-new

14.后记加一点说明

15.附:启动脚本

本文用到的软件

MySQL 4.1.11
网站:http://www.mysql.com
下载
APACHE 2.0.54
网站:http://www.apache.org
下载
PHP 4.3.11
网站:http://www.php.net
下载
Cyrus-SASL 2.1.20
网站:http://asg.web.cmu.edu/sasl
下载
Postfix 2.2.3
网站:http://www.postfix.org
下载
PostfixAdmin 2.1.0
网站:http://www.postfixadmin.com
下载
Courier-authlib 0.55
网站:http://www.courier-mta.org/authlib
下载
Courier-IMAP 4.0.2
网站:http://www.courier-mta.org/imap
下载
Courier-maildrop 1.8.0
网站:http://www.courier-mta.org/maildrop
下载
Courier-sqwebmail 5.0.1
网站:http://www.courier-mta.org/sqwebmail
下载
SquirrelMail 1.4.4
网站:http://www.squirrelmail.org
下载
Openwebmail 2.51
网站:http://openwebmail.org
下载
clamav 0.84
网站:http://www.clamav.net
下载
Spamassassin 3.0.3
网站:http://spamassassin.apache.org
下载
amavisd-new 2.3.0
网站:http://www.ijs.si/software/amavisd
下载
1.安装mysql 4.1.11
# groupadd mysql
# useradd -g mysql mysql
# wget http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-4.1.11.tar.gz/from/http://mysql.new21.com/
# tar -zxvf mysql-4.1.11.tar.gz
# cd mysql-4.1.11
# ./configure –prefix=/usr/local/mysql –with-charset=gbk
# make
# make install
# cp support-files/my-medium.cnf /etc/my.cnf

设置自启动
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 700 /etc/rc.d/init.d/mysqld
# chkconfig –add mysqld

安装完以后要初始化数据库,要是升级安装的请跳过
# cd /usr/local/mysql
# /usr/local/mysql/bin/mysql_install_db –user=mysql
# chown -R root .
# chown -R mysql var
# chgrp -R mysql .
# /usr/local/mysql/bin/mysqld_safe –user=mysql &

好了,至此mysql安装完毕,你可以这样起动你的mysql服务
# /etc/rc.d/init.d/mysqld start

# ln -s /usr/local/mysql/bin/mysql /sbin/mysql
# ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin

为了能让系统找到mysql,请运行如下命令
# PATH=$PATH:/usr/local/mysql/bin
# export PATH
# echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
# ldconfig

日志管理
开启错误日志 (在[safe_mysqld]项下添加)
# vi /etc/my.cnf
[safe_mysqld]
err-log=/var/log/mysqld/err.log

开启常规日志和更新日志 (在[mysqld]项下添加)
# vi /etc/my.cnf
[mysqld]
log=/var/log/mysqld/log.log
log-update=/var/log/mysqld/update.log

创建日志文件并设置权限
# mkdir /var/log/mysqld
# touch /var/log/mysqld/err.log /var/log/mysqld/log.log /var/log/mysqld/update.log
# chown -R mysql.mysql /var/log/mysqld

# service mysqld restart

说明:
错误日志包含了服务器写入标准错误输出设备的所有消息,同时还包括了mysql服务的启动和关闭事件
常规日志用来记录有关mysql服务器运行的常规信息,包括用户的连接、查询及其他各种时间
更新日志用来记录修改数据库的查询信息,包括所有涉及数据库修改的SQl语句的查询记录
建议调试结束后关闭日志

Go to top.

2.安装apache 2.0.54
# wget http://apache.freelamp.com/httpd/httpd-2.0.54.tar.bz2
# tar jxvf httpd-2.0.54.tar.bz2
# cd httpd-2.0.54
# ./configure –prefix=/usr/local/apache
# make
# make install

设置自启动
# cp support/apachectl /etc/init.d/httpd

修改/etc/init.d/httpd
# vi /etc/init.d/httpd(在第两行之后添加如下内容)
#!/bin/sh
#
# Startup script for the Apache Web Server
# chkconfig: – 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache/log/httpd.pid
# config: /usr/local/apache/conf/httpd.conf

# chkconfig –add httpd
# chmod 755 /etc/init.d/httpd
# chkconfig httpd on

创建网页根目录
# mkdir /var/www

# vi /usr/local/apache/conf/httpd.conf
//存放网页的目录,原来为DocumentRoot "",改成:
DocumentRoot "/var/www"
//这句应该和DocumentRoot 的目录保持一致,原来为<Directory "">,改成:
<Directory "/var/www">
//Indexes:当在目录中找不到DirectoryIndex列表中指定的文件就生成当前目录的文件列表
//FollowSymlinks:允许符号链接跟随,访问不在本目录下的文件
Options Indexes FollowSymLinks
//禁止读取.htaccess配置文件的内容
AllowOverride None
//指定先执行Allow(允许)访问规则,再执行Deny(拒绝)访问规则
Order allow,deny
//设置Allow(允许)访问规则,允许所有连接
Allow from all
</Directory>

启动服务:
# /usr/local/apache/bin/apachectl start

# service httpd start

Go to top.

3.安装php 4.3.11
# wget http://cn2.php.net/get/php-4.3.11.tar.bz2/from/cn.php.net/mirror
# tar -jxvf php-4.3.11.tar.bz2
# cd php-4.3.11
# ./configure \
–prefix=/usr/local/php \
–with-mysql=/usr/local/mysql \
–with-apxs2=/usr/local/apache/bin/apxs
# make
# make install
# cp php.ini-dist /usr/local/php/lib/php.ini

# vi /usr/local/php/lib/php.ini
;default_charset = "iso-8859-1"
在这行下面加一行
default_charset = "gbk"

# vi /usr/local/apache/conf/httpd.conf
找到#AddType application/x-tar .tgz 这行,在下面加两行。
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
找到下面一行在后面加上index.php,这表示网站的默认页也能够为index.php
DirectoryIndex index.html index.html.var index.php
注意:改变了http.conf后,要重启apache服务器,否则不会生效!

php常用配置
max_execution_time = 30 ; // 改为600 (增加处理脚本的时间限制)
max_input_time = 600 ; //最大输出时间600秒
memory_limit = 8M ; //改为40M (这样才能发10M的附件)
register_global =On
post_max_size = 2M ; //php可接受的 post 方法大小 2M
file_uploads = On ; //允许上载文件
upload_max_filesize = 2M ; //最大上载文件2M
session.auto_start = 1 ; //session自动启动

Go to top.

4.安装cyrus-sasl 2.1.20
如果系统安装已经,先卸载它,或使用下面方法关闭它
# mv /usr/lib/sasl /usr/lib/sasl.OFF
# mv /usr/lib/sasl2 /usr/lib/sasl2.OFF

编译安装cyrus-sasl2.1.20
# wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.20.tar.gz
# tar zxvf cyrus-sasl-2.1.20.tar.gz
# cd cyrus-sasl-2.1.20
# ./configure \
–disable-anon -enable-plain –enable-login \
–enable-sql –with-mysql=/usr/local/mysql \
–with-mysql-includes=/usr/local/mysql/include/mysql \
–with-mysql-libs=/usr/local/mysql/lib/mysql
# make
# make install

为了让postfix能找到sasl,请运行如下命令:
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

cyrus-sasl的密码是不加密的,可以下载加密认证补丁
# http://www.viperstrike.com/~lopaka/sysadmin/cyrus-sasl-mysql-encrypt/software-sources/patch-linux
# patch lib/checkpw.c patch-linux
重新编译安装
# LDFLAGS="-lcrypt" ./configure –disable-anon -enable-plain –enable-login –enable-sql –with-mysql=/usr/local/mysql –with-mysql-includes=/usr/local/mysql/include/mysql –with-mysql-libs=/usr/local/mysql/lib/mysql
# make
# make install

Go to top.

5.安装postfix 2.2.3
如果你的系统上原来有sendmail,先将其停止并将其文件改名:
# /etc/init.d/sendmail stop
# chkconfig –level 0123456 sendmail off
# mv /usr/bin/newaliases /usr/bin/newaliases.orig
# mv /usr/bin/mailq /usr/bin/mailq.orig
# mv /usr/sbin/sendmail /usr/sbin/sendmail.orig

开始安装
# groupadd -g 12345 postfix
# useradd -u 12345 -g 12345 -c postfix -d/dev/null -s/bin/false postfix
# groupadd -g 54321 postdrop
# wget ftp://postfix.cn99.com/postfix/official/postfix-2.2.3.tar.gz
# tar -zxvf postfix-2.2.3.tar.gz
# cd postfix-2.2.3
(Building Postfix with SASL authentication and mysql support)
# make -f Makefile.init makefiles \
‘CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -I/usr/local/include/sasl’ \
‘AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2’
# make install
如果/etc/aliases文件不存在,请用如下命令创建:
# echo postfix: root >> /etc/aliases
# /usr/bin/newaliases

注意:
   本例中Mysql安装在/usr/lcoal/mysql,sasl2安装在/usr/lib/sasl2。如果安装路径不同,请自行修改编译时CCARGS和AUXLIBS选项。
   在执行make install的时候可能会得到如下的提示(如果没有就不用管了):
/usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.12" not found
   这是因为mysql不是安装在默认目录中的,所以需要告诉postfix应该到哪里去找libmysqlclient.so.12,使用ldconfig就可以达到这个目的:
# echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf
# ldconfig

Go to top.

6.安装postfixadmin 2.1.0
建立apache和maildrop的用户和组
# groupadd vmail -g 1001
# useradd vmail -u 1001 -g 1001 -s/bin/false -d/dev/null

# vi /usr/local/apache/conf/httpd.conf

User nobody
Group #-1
改为
User vmail
Group vmail

# wget http://high5.net/postfixadmin/download.php?file=postfixadmin-2.1.0.tgz
# tar -zxvf postfixadmin-2.1.0.tgz
# mv postfixadmin-2.1.0 /var/www/postfixadmin
更改权限,假定运行apache的用户和组为vmail
# chown -R vmail:vmail /var/www/postfixadmin
# cd /var/www/postfixadmin
# chmod 640 *.php *.css
# cd /var/www/postfixadmin/admin/
# chmod 640 *.php .ht*
# cd /var/www/postfixadmin/images/
# chmod 640 *.gif *.png
# cd /var/www/postfixadmin/languages/
# chmod 640 *.lang
# cd /var/www/postfixadmin/templates/
# chmod 640 *.tpl
# cd /var/www/postfixadmin/users/
# chmod 640 *.php

建立mysql表
# cd /var/www/postfixadmin
# mysql -u root [-p] < DATABASE_MYSQL.TXT
# cp config.inc.php.sample config.inc.php
# vi config.inc.php
本例中的配置如下:
// Language config
// Language files are located in ‘./languages’.
$CONF[‘default_language’] = ‘cn’;
// Database Config
// ‘database_type’ is for future reference.
$CONF[‘database_type’] = ‘mysql’;
$CONF[‘database_host’] = ‘localhost’;
$CONF[‘database_user’] = ‘postfixadmin’;
$CONF[‘database_password’] = ‘postfixadmin’;
$CONF[‘database_name’] = ‘postfix’;
//$CONF[‘encrypt’] = ‘md5crypt’;
$CONF[‘encrypt’] = ‘cleartext’;
// Mailboxes
// If you want to store the mailboxes per domain set this to ‘YES’.
// Example: /usr/local/virtual/domain.tld/username@domain.tld
$CONF[‘domain_path’] = ‘YES’;
// If you don’t want to have the domain in your mailbox set this to ‘NO’.
// Example: /usr/local/virtual/domain.tld/username
$CONF[‘domain_in_mailbox’] = ‘NO’;
// Quota
// When you want to enforce quota for your mailbox users set this to ‘YES’.
$CONF[‘quota’] = ‘YES’;
// You can either use ‘1024000’ or ‘1048576’
$CONF[‘quota_multiplier’] = ‘1024000’;

我们在这里使用明文口令方式,如果想使用密文,请把$CONF[‘encrypt’]=’cleartext’;改成$CONF[‘encrypt’]=’md5crypt’;
邮箱的存储格式使用domain.ltd/username的形式,所以设置:
$CONF[‘domain_path’] = ‘YES’;
$CONF[‘domain_in_mailbox’] = ‘NO’;

然后打开浏览器,进入postfixadmin的欢迎界面,点击网页上的setup,看看检查是否通过,记得要删除setup.php文件。然后进入http://www.yourdomain.com/postfixadmin/admin/index.php,就可以新建域名、管理员以及邮箱了。

Go to top.

# vi /etc/postfix/main.cf
#=====================BASE=========================
#主机名称(用 FQDN 的方式来写)
myhostname = www.test.com
#domain 名称
mydomain = test.com
#邮件标头上面的 mail from 的那个地址
myorigin = $mydomain
#可用来收件的主机名称(这里没有使用$mydomain是因为我们将使用virtualhost)
mydestination = $myhostname localhost localhost.$mydomain
#允许不使用smtp发信认证的网段
mynetworks = 127.0.0.0/8
inet_interfaces = all
#使用的邮箱格式
#home_mailbox = Maildir/
#mailbox_transport = maildrop

#=====================Vritual Mailbox settings=========================
# 指定用户邮箱所在的根目录
virtual_mailbox_base = /var/mailbox/
#指定postfix如何去检索邮件用户,这里是采用mysql (用户邮箱的目录)
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
#邮件账号的uid, 使用apache的运行用户
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
#virtual_uid_maps = mysql:/etc/postfix/mysql/mysql-virtual_uid_maps.cf
#virtual_gid_maps = mysql:/etc/postfix/mysql/mysql-virtual_gid_maps.cf
# use this for virtual delivery(如果没有安装maildrop,则此处为virtual)
#virtual_transport = virtual
#use this for maildrop-delivery (如果有maildrop,则此处为maildrop)
virtual_transport = maildrop
#Maildrop-Options for usage with maildrop
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1

#/var/mailbox/最后的"/"字符不能省略
#所有的MySQL查询配置文件统一存放在/etc/postfix/mysql中

#====================QUOTA========================
#每封信的最大大小(10M),postfix的默认值是10M, 但这指的是邮件正文和编码后附件的总和, 经过#base64编码,附件的大小会增加35%左右, 因此这里设定可接受邮件的大小为14M
message_size_limit = 14336000
#邮箱的默认大小(10M)
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
#指定postfix如何获得用户的quota信息(每个用户的邮箱大小)
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
# 是否允许覆盖默认邮箱的大小
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user’s maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

#====================SASL========================
broken_sasl_auth_clients = yes
#In order to allow mail relaying by authenticated clients
smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_invalid_hostname,
 reject_non_fqdn_hostname,
 reject_unknown_sender_domain,
 reject_non_fqdn_sender,
 reject_non_fqdn_recipient,
 reject_unknown_recipient_domain,
 reject_unauth_pipelining,
 reject_unauth_destination,
 permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner=$myhostname ESMTP "Version not Available"

Go to top.

建立/var/mailbox并设置权限
# mkdir /var/mailbox
# chown -R vmail:vmail /var/mailbox
# chmod -R ug+rwx,o-rwx /var/mailbox

建立/etc/postfix/mysql文件夹和MySQL查询配置文件
# mkdir /etc/postfix/mysql
1、vi /etc/postfix/mysql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

2、vi /etc/postfix/mysql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx = ‘0’ and active = ‘1’

3、vi /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = ‘1’

4、vi /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = ‘1’

Go to top.

配置 /usr/local/lib/sasl2/smtpd.conf
# vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username=’%u@%r’ and domain=’%r’ and active=’1′

启动postfix
# postfix start

测试smtp
# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 www.test.com ESMTP "Version not Available"
ehlo www.test.com
250-www.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME

Go to top.

7.安装Courier-authlib 0.55
新版本的imap不再包含authentication library,必须先安装 Courier authentication library
# wget http://www.courier-mta.org/beta/courier-authlib/courier-authlib-0.55.20050407.tar.bz2
# tar -jxvf courier-authlib-0.55.20050407.tar.bz2
# cd courier-authlib-0.55.20050407
# ./configure \
–with-redhat \
–with-authmysql=yes \
–with-mailuser=vmail –with-mailgroup=vmail \
–with-mysql-libs=/usr/local/mysql/lib/mysql –with-mysql-includes=/usr/local/mysql/include/mysql/
# make
# make install
# make install-configure

# vi /usr/local/etc/authlib/authdaemonrc (确保只使用mysql认证模块)
authmodulelist="authmysql"
authmodulelistorig="authmysql"

# vi /usr/local/etc/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_DATABASE postfix
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_USER_TABLE mailbox
MYSQL_LOGIN_FIELD username
#MYSQL_CRYPT_PWFIELD password
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD ‘1001’
MYSQL_GID_FIELD ‘1001’
MYSQL_HOME_FIELD ‘/var/mailbox/’
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active=’1′
DEFAULT_DOMAIN test.com
注意:确认在这个文件中不能用空格键,只能用tab键。
确认只使用单引号,比如:’/var/mailbox/’,’UID’,’GID’(本文为’1001’)
localhost不能用单引号
确认你的/etc/hosts文件中有localhost
编译时如果支持Ipv6可能导致错误
MYSQL_GID_FIELD 和MYSQL_UID_FIELD是maildrop的UID和GID,而不是MySQL的。
如果想使用md5密码,把MYSQL_CLEAR_PWFIELD password改成MYSQL_CRYPT_PWFIELD password

启动服务
要是想让imap开机就启动服务:
# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
# chmod 755 /etc/rc.d/init.d/courier-authlib
# chkconfig –level 0123456 courier-authlib on
手动启动服务:
# authdaemond start

测试courier-authlib
检查进程:
# pstree |grep authdaemond
|-authdaemond.mys—5*[authdaemond.mys]

Go to top.

8.安装Courier-imap 4.0.2
# wget http://www.courier-mta.org/beta/imap/courier-imap-4.0.2.20050403.tar.bz2
# tar -jxvf courier-imap-4.0.2.20050403.tar.bz2
# cd courier-imap-4.0.2.20050403
# ./configure \
–prefix=/usr/local/imap \
–with-redhat \
–disable-root-check \
–enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 \
–with-trashquota \
–with-dirsync
# make
# make install-strip (先install-strip,如果失败,再make install)
# make install-configure

# vi /usr/local/imap/etc/pop3d
将POP3DSTART=NO改为POP3DSTART=YES

# vi /usr/local/imap/etc/imapd
将IMAPDSTART=NO改为IMAPDSTART=YES

让imap自启动:
# cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imap
# chmod 755 /etc/rc.d/init.d/courier-imap
# chkconfig –level 0123456 courier-imap on
手动启动服务:
# /usr/local/imap/libexec/pop3d.rc start
# /usr/local/imap/libexec/imapd.rc start

测试courier-imap
检查进程:
# pstree |grep courier
|-2*[courierlogger]
|-2*[couriertcpd]

检查端口,应该有如下端口打开:
# netstat -an |grep LISTEN
tcp  0  0 0.0.0.0:110  0.0.0.0:*  LISTEN
tcp  0  0 0.0.0.0:143  0.0.0.0:*  LISTEN

检测POP3和IMAP服务:
# telnet localhost 110
+OK Hello there
USER test@test.com
+OK Password required.
PASS test
+OK Logged in.
QUIT
+OK bye-bye

Go to top.

9.安装Courier-maildrop 1.8.0
# groupadd vmail -g 1001
# useradd vmail -u 1001 -g 1001 -s/bin/false -d/dev/null
# wget http://jaist.dl.sourceforge.net/sourceforge/courier/maildrop-1.8.0.tar.bz2
# tar jxvf maildrop-1.8.0.tar.bz2
# cd maildrop-1.8.0
# ./configure \
–prefix=/usr/local/maildrop \
–enable-sendmail=/usr/sbin/sendmail \
–enable-trusted-users=’root vmail’ \
–enable-syslog=1 \
–enable-maildirquota \
–enable-maildrop-uid=1001 \
–enable-maildrop-gid=1001 \
–with-trashquota \
–with-dirsync
# make
# make install
# cp /usr/local/maildrop/bin/maildrop /usr/bin
# chmod a+rx /usr/bin/maildrop

运行maildrop -v应该有如下提示信息:
maildrop 1.8.0 Copyright 1998-2004 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.

新建/etc/maildroprc文件
# vi /etc/maildroprc
logfile "/var/mailbox/maildrop.log"
to "$HOME$DEFAULT"

# chmod a+r /etc/maildroprc

配置Postfix
# vi /etc/postfix/main.cf
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1

# vi /etc/postfix/master.cf
maildrop unix – n n – – pipe
flags=DRhu user=vmail:vmail argv=/usr/local/maildrop/bin/maildrop -w 90 -d ${recipient}

由于maildrop没有建立maildir的功能,因此由一小断脚本实现
# vi /etc/sudoers
vmail ALL = NOPASSWD: /usr/sbin/maildirmake.sh

新建/usr/sbin/maildirmake.sh文件
# vi /usr/sbin/maildirmake.sh
#!/bin/bash
set -e
if [ ! -f /var/mailbox/$1 ]
then
mkdir /var/mailbox/$1
fi
chown -R vmail:vmail /var/mailbox/$1
cd "/var/mailbox/$1"
/usr/local/imap/bin/maildirmake $2
chown -R 1001:12345 /var/mailbox/$1/$2
chmod -R g=s /var/mailbox/$1/$2

# chmod 755 /usr/sbin/maildirmake.sh

更改postfixadmin/admin目录下的create-mailbox.php文件
在此文件的200行后加一行:
# vi /var/www/postfixadmin/admin/create-mailbox.php
system("sudo /usr/sbin/maildirmake.sh $fDomain ".$_POST[‘fUsername’]);

说明:
建立的邮箱格式:/var/vmail/domain.tld/username
uid 1001 是vmail的用户id,也是目录/var/vmail的owner
gid 12345 是postfix的组id

在postfixadmin中建立一测试帐户test@test.com
测试maildrop
# maildrop -V 9 -d test@test.com
maildrop: authlib: groupid=1001
maildrop: authlib: userid=1001
maildrop: authlib: logname=test@test.com, home=/var/mailbox/, mail=test.com/test/
maildrop: Changing to /var/mailbox/
ctrl+c退出

下一步,查看日志(/var/log/maillog)看看postfix是不是和maildrop一起工作:
# cat /var/log/maillog | grep maildrop -A 2
Feb 28 11:50:41 malochia postfix/qmgr[7345]: 2875B7823E62: from=<remote@user.nl>, size=3308, nrcpt=1 (queue active)
Feb 28 17:18:05 malochia postfix/pipe[11615]: 04DD57822697: to=<user@domain.tld>, relay=maildrop, delay=0, status=sent (domain.tld)

如果没有,看看是不是由于配置不正确,而使邮件在队列中
# Mailq

配置quotas
新建文件/usr/local/maildrop/etc/quotawarnmsg
# vi /usr/local/maildrop/etc/quotawarnmsg
From: 管理员 test.com <postmaster@test.com>
Reply-To: postmaster@test.com
To: Valued Customer:;
Subject: 警告!您的邮箱空间即将用完!
Mime-Version: 1.0
Content-Type: text/plain; charset=gb2312
Content-Transfer-Encoding: 8bit

亲爱的用户,您的邮箱空间已用了90%。如果还想继续收到邮件的话,请删除一些邮件。

设置quotas
Postfixadmin的数据库的maildrop表的quota字段是int类型的,在maildrop下不能工作,不过我们可以修改 /usr/local/etc/authlib/authmysqlrc文件,把其中的MYSQL_QUOTA_FIELD quota一行改为MYSQL_QUOTA_FIELD concat(quota,’S’) ,如果你想限制邮件的数量,也可以改成MYSQL_QUOTA_FIELD concat(quota,’C’)。
如果我们把一个用户的邮箱设为10M,我们可以把quota的值改为“10000000S”。也可以用“C”,“1000C”的意思是只能存放1000条邮件。

给test@test.com发一封信,但是不用包含附件。然后:
# cd /var/mailbox/test.com/test
# cat maildirsize
1000000S
1622 1

maildirsize这个文件存储了邮箱配额的信息,而且courier-imap也用这个文件。
举个例子说明一下该文件,我的一个maildirsize文件的内容如下:
# cat maildirsize
5000000S
42898 9
3403 1
1622 1
2371 1

说明这个邮箱的容量是5M(如果你把quota字段的值删除,maildrop会自动给它一个值,但是不要把它的值设置成null),现在邮箱里有四封信。
假设该用户用掉了5M中的3M,只剩2M了,如果来了一封大于2M的邮件,将会被退回,如果是1.7M的邮件,maildrop会收下该邮件,更新maildirsize文件,重新计算quota,得知该用户使用了90%(/etc/postfix/master.cf中的-w 90)以上的配额,maildrop会拷贝/usr/local/maildrop/etc/quotawarnmsg文件到该用户的邮箱中警告该用户。

Go to top.

10.webmail

10.1.安装sqwebmail 5.0.1
# wget http://optusnet.dl.sourceforge.net/sourceforge/courier/sqwebmail-5.0.1.tar.bz2
# tar jxvf sqwebmail-5.0.1.tar.bz2
# cd sqwebmail-5.0.1
# ./configure \
–prefix=/usr/local/sqwebmail \
–enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 \
–with-trashquota
# make configure-check
# make
# make install-strip
# make install-configure

启动服务
# /usr/local/sqwebmail/libexec/sqwebmaild.rc start

测试sqwebmail
http://192.168.0.5/cgi-bin/sqwebmail
使用用户test@test.com,密码test,登陆进出以后就可以测试收发邮件了。但是图片不能显示,只要
# mv /usr/local/apache/htdocs/webmail /var/www

修改Apache
# cd /var/www
# vi index.html //输入一下内容:
<html>
<head>
<title>MAIL SYSTEM</title>
<meta http-equiv="Content-Type" content="test/html;charset=gb2312">
<meta http-equiv="refresh" content="0;url=http://mail.test.com/cgi-bin/sqwebmail">
</head>
<body bgcolor="#FFFFFF" test="#000000">
</html>

经过以上修改以后,你就可以通过:http://mail.test.com 直接来访问sqwebmail了,这样就方便多了。可惜是英文的,不知道哪位达人能汉化一下,并把界面改的漂亮一点就好了。

Go to top.

10.2.安装squirrelmail 1.4.4
下载squirrelmail及中文包
# wget http://jaist.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.4.tar.bz2
# wget http://jaist.dl.sourceforge.net/sourceforge/squirrelmail/zh_CN-1.4.4-20050122.tar.bz2
把squirreelmail解压到/var/www目录下。
# tar -jxvf squirrelmail-1.4.4.tar.bz2 -C /var/www/
# mv /var/www/squirrelmail-1.4.4 /var/www/squirrelmail
解压中文包
# tar -jxvf zh_CN-1.4.4-20050122.tar.bz2 -C /var/www/squirrelmail/

在配置squirrelmail之前先下载三个插件:
Quota Usage Version 1.3
# wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fquota_usage-1.3-1.2.7.tar.gz
Compatibility Version 1.3
# wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-1.3.tar.gz
Change MySQL Password Version 3.2
# wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_mysqlpass-3.2-1.2.8.tar.gz

把这三个插件解压到squirrelmail的plugin目录下并设置权限。
# tar -zxvf quota_usage-1.3-1.2.7.tar.gz -C /var/www/squirrelmail/plugins/
# tar -zxvf compatibility-1.3.tar.gz -C /var/www/squirrelmail/plugins/
# tar -zxvf change_mysqlpass-3.2-1.2.8.tar.gz -C /var/www/squirrelmail/plugins/
第一个插件是用来显示邮箱的使用情况的;第二个和第三个插件是用来修改密码的。
如果不想装这些插件,请跳过。

配置Quota Usage
# cd /var/www/squirrelmail/plugins/quota_usage
# cp config.php.sample config.php

配置Change MySQL Password
# cd /var/www/squirrelmail/plugins/change_mysqlpass
# cp config.php.sample config.php
# vi config.php
更改如下几个变量:
$mysql_database = ‘postfix’;
$mysql_table = ‘mailbox’;
$mysql_userid_field = ‘username’;
$mysql_password_field =’password’;
$mysql_manager_id = ‘postfix’;
$mysql_manager_pw = ‘postfix’;
$mysql_unixcrypt = 0;
//$mysql_MD5crypt = 1;
$mysql_MD5crypt = 0;
$use_ssl_for_password_change = 0;

如果你的密码是MD5加密的,就把$mysql_MD5crypt = 0;改成$mysql_MD5crypt = 1;

配置squirrelmail
# cd /var/www/squirrelmail
# ./configure
进入10. Languages
把1. Default Language : 的en_US改成zh_CN。
进入8. Plugins,添加这三个插件

打开浏览器输入http://192.168.0.5/squirrelmail/,用test@test.com登陆,你将会在屏幕的左上角看到邮箱的使用情况,你还会看到一条警告信息:
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /var/www/squirrelmail/plugins/change_mysqlpass/functions.php on line 129
这是由于数据库结构不一致造成的,你只要把functions.php中的129行注释调即可(在行首加//)。
现在你还可以用选项中的change passwd修改你的密码了,不过这个模块是英文的,如果你想改成中文的,可以自己修改,squirrelmail网站上有介绍。或者请参考:
http://datastrategy.org/number5/archives/000241.html
1、把change_mysqlpass.po与locale/zh_CN/LC_MESSAGES/squirrelmail.po合并
最简单的方法就是:
# cat change_mysqlpass.po >> /var/www/squirrelmail/locale/zh_CN/LC_MESSAGES/squirrelmail.po
2、执行:
# cd /var/www/squirrelmail/locale/zh_CN/LC_MESSAGES/
# msgfmt -o squirrelmail.mo squirrelmail.po

由于安全原因,建议把data目录移出web tree,比如移到/usr目录下,设置权限
# cp -R /var/www/squirrelmail/data/ /var/data
# chown -R vmail.vmail /var/data
# chmod 730 -R /var/data

Go to top.

10.3.openwebmail 2.51
安装DBI.pm
# wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz
# tar zxvf DBI-1.48.tar.gz
# cd DBI-1.48
# perl Makefile.PL
# make
# make test
# make install

安装DBD-mysql
# wget http://search.cpan.org/CPAN/authors/id/R/RU/RUDY/DBD-mysql-2.9006.tar.gz
# tar zxvf DBD-mysql-2.9006.tar.gz
# cd DBD-mysql-2.9006
# export LANG=’C’
# ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config
# perl Makefile.PL \
–libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -lz" \
–cflags=-I/usr/local/mysql/include/mysql \
–testhost=127.0.0.1
# make
# make test # Some minor error messages can be ignored here
# make install

安装CGI.pm
# wget http://search.cpan.org/CPAN/authors/id/L/LD/LDS/CGI.pm-3.07.tar.gz
# tar zxvf CGI.pm-3.07.tar.gz
# cd CGI.pm-3.07
# perl Makefile.PL
# make
# make test
# make install

安装Text-Iconv
# wget http://search.cpan.org/CPAN/authors/id/M/MP/MPIOTR/Text-Iconv-1.4.tar.gz
# wget http://openwebmail.org/openwebmail/download/packages/Text-Iconv-1.2.tar.gz
# tar zxvf Text-Iconv-1.2.tar.gz
# cd Text-Iconv-1.2
# perl Makefile.PL
# make
# make test
# make install

安装MIME-Base64
# wget http://openwebmail.org/openwebmail/download/packages/MIME-Base64-3.01.tar.gz
# tar zxvf MIME-Base64-3.01.tar.gz
# cd MIME-Base64-3.01
# perl Makefile.PL
# make
# make test
# make install

安装suidperl(9.0安装盘的第二张盘中有)
# wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh9/perl-suidperl-5.8.0-88.i386.rpm
# rpm -ivh perl-suidperl-5.8.0-88.i386.rpm

如果采用 rpm 安装,安装系统会自动对应到正确路径。若使用手动安装,将openwebmail目录及data目录移至如下/var/www/cgi-bin/openwebmail及/var/www/data,我是用tarball安装的
# wget http://openwebmail.org/openwebmail/download/release/openwebmail-2.51.tar.gz
# tar zxvf openwebmail-2.51.tar.gz -C /var/www

加入openwebmail的权限,编辑httpd.con,加入如下内容,假设/var/www/cgi-bin是apache的cgi-bin目录
# vi /usr/local/apache/conf/httpd.conf
ScriptAlias /openwebmail "/var/www/cgi-bin/openwebmail/openwebmail.pl"

存盘后重新启动apache
# service httpd restart

编辑mysql认证文件
# vi /var/www/cgi-bin/openwebmail/auth/auth_mysql.pl
my $SQLHost = ‘localhost’;
my $sqlusr = ‘postfix’;
my $sqlpwd = ‘postfix’;
my $auth_db = ‘postfix’;
my $auth_table = ‘mailbox’;
my $field_username = ‘username’;
my $field_password = ‘password’;
my $field_realname = ‘name’;
my $field_uid = ‘1001’;
my $field_gid = ‘1001’;
my $field_home = ‘maildir’;
my $pass_type = ‘cleartxt’;

编辑openwebmail主配置文件
# vi /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
domainnames auto
auth_module auth_mysql.pl
auth_withdomain yes
mailspooldir /var/mailbox
create_syshomedir new
use_syshomedir new
ow_cgidir /var/www/cgi-bin/openwebmail
ow_usersdir /var/mailbox
ow_cgiurl /cgi-bin/openwebmail
ow_htmldir /var/www/data/openwebmail
ow_htmlurl /data/openwebmail
logfile /var/log/openwebmail.log

quota_module quota_du.pl #磁盘限额模块
quota_limit 30000 #用户主目录磁盘上限30M
spool_limit 10000 #收件箱上限10M /var/mail

enable_webdisk no
enable_sshterm no

接下来执行初始化
# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl –init

将dbm.conf中的设定改为执行初始化后系统所要求的
# cp /var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf /var/www/cgi-bin/openwebmail/etc/
# vi /var/www/cgi-bin/openwebmail/etc/dbm.conf
dbm_ext .db
dbmopen_ext .db
dbmopen_haslock no

再执行一次初始化
# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl –init

这时便会出现一些讯息,最后出现一行
Send the site report?(Y/n)
按 Enter 即可,这样便完成 openwebmail 的设定

创建日志文件并设置logrotate
# touch /var/log/openwebmail.log
# vi /etc/logrotate.d/syslog (加入下面几行)
/var/log/openwebmail.log {
postrotate
/usr/bin/killall -HUP syslogd
endscript
}

测试
http://192.168.1.5/openwebmail

openwebmail不支持Maildir,所以照这篇文章的设置,将不能收邮件,可以打个补丁(非官方提供),也可以把postfix改成Mailbox格式的,但是我更期待支持Maildir的官方版,应该快了吧!

Go to top.

11.安装clamav 0.84
# wget http://jaist.dl.sourceforge.net/sourceforge/clamav/clamav-0.84.tar.gz
# tar zxvf clamav-0.84.tar.gz
# cd clamav-0.84
# groupadd clamav
# useradd -g clamav -s/bin/false -d/dev/null clamav
# ./configure –prefix=/usr/local/clamav –with-dbdir=/usr/local/share/clamav
# make
# make check
# make install

编辑/usr/local/clamav/etc/clamd.conf
# vi /usr/local/clamav/etc/clamd.conf
#Verbose logging with syslog
LogSyslog
LogVerbose
LogFacility LOG_MAIL
LogFile /var/log/clamav/clamd.log
#Change pid file location
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /usr/local/share/clamav
#Set the clamav socket
LocalSocket /var/run/clamav/clamd
#Close the connection when this limit is exceeded
StreamMaxLength 10M
#Don’t run clamd as root
User amavis
#Newer versions require you to uncomment this
ScanMail
ScanArchive

编辑/usr/local/clamav/etc/freshclam.conf
# vi /usr/local/clamav/etc/freshclam.conf
DatabaseDirectory /usr/local/share/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogSyslog
LogVerbose
DatabaseOwner amavis
#Check for updates every two hours. That is the official recommendation
Checks 12
DatabaseMirror db.CN.clamav.net
DatabaseMirror database.clamav.net
NotifyClamd

注意:一定要注释掉上面两个文件中Example那行

添加amavis用户和组
# groupadd amavis
# useradd -g amavis -s /bin/false -c "Amavis User" -d /dev/null amavis

创建日志文件夹并设置权限
# mkdir /var/log/clamav
# chmod -R 744 /var/log/clamav
# chown -R amavis:amavis /var/log/clamav

# chown -R amavis.amavis /usr/local/share/clamav
# mkdir /var/run/clamav
# chmod 700 /var/run/clamav
# chown amavis.amavis /var/run/clamav

手动更新病毒库
# /usr/local/clamav/bin/freshclam

设置自动更新病毒库
# vi /etc/crontab
0 4 * * * root /usr/local/clamav/bin/freshclam –quiet -l /var/log/clamd.log

启动
# /usr/local/clamav/sbin/clamd

Go to top.

13.安装amavisd-new 2.3.0

# wget http://www.ijs.si/software/amavisd/amavisd-new-2.3.0.tar.gz
# tar zxvf amavisd-new-2.3.0.tar.gz
# cd amavisd-new-2.3.0
# groupadd amavis
# useradd -g amavis -s /bin/false -c "Amavis User" -d /dev/null amavis

# mkdir -p /var/amavis /var/amavis/tmp /var/amavis/var /var/amavis/db
# chown -R amavis:amavis /var/amavis
# chmod -R 750 /var/amavis

# cp amavisd /usr/local/sbin/
# chown root /usr/local/sbin/amavisd
# chmod 755 /usr/local/sbin/amavisd

# cp amavisd.conf /etc/
# chown root /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf

病毒邮件存放目录
# mkdir /var/virusmails
# chown amavis:amavis /var/virusmails
# chmod 750 /var/virusmails

Go to top.

编辑/etc/amavisd.conf,修改下面这几行
# vi /etc/amavisd.conf
$max_servers=8;
$daemon_user = ‘amavis’;
$daemon_group = ‘amavis’;
$mydomain = ‘test.com’;
$db_home = "$MYHOME/db";
$inet_socket_port = 10024;
$sa_tag_level_deflt = -100;
$sa_tag2_level_deflt = 6.3;
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$virus_admin = "virusalert\@$mydomain";
$sa_spam_subject_tag = ‘***SPAM*** ‘;
$notify_method = $forward_method;
$forward_method = ‘smtp:127.0.0.1:10025’;
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_DISCARD;
$final_spam_destiny = D_DISCARD;
[‘ClamAV-clamd’,
 \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
 qr/\bOK$/, qr/\bFOUND$/,
 qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

测试amavis
# /usr/local/sbin/amavisd debug
ERROR: MISSING REQUIRED BASIC MODULES:
Time::HiRes
IO::Wrap
Unix::Syslog
Mail::Field
MIME::Words
Net::Server
BEGIN failed–compilation aborted at /usr/local/sbin/amavisd line 141.
根据出错提示,缺什么装什么
# perl -MCPAN -e shell
cpan> install Time::HiRes
cpan> install IO::Wrap
cpan> install Unix::Syslog
cpan> install Mail::Field
cpan> install MIME::Words
cpan> install Net::Server
cpan> install BerkeleyDB
cpan> install Convert::TNEF
cpan> install Convert::UUlib
cpan> install Archive::Tar
cpan> install Archive::Zip (# export LANG=C)
cpan> install HTML::Parser
cpan> install DB_File
cpan> install Net::DNS (when prompted to enable tests, choose no)
cpan> install Digest::SHA1
cpan> install Mail::SpamAssassin (# export LANG=en_US)

启动
# /usr/local/sbin/amavisd start

Go to top.

设置postfix
修改/etc/postfix/main.cf
# vi /etc/postfix/main.cf (加入一行)
content_filter = amavis:127.0.0.1:10024
修改/etc/postfix/master.cf
# vi /etc/postfix/master.cf (在最后加上)
# amavisd-new
amavis unix – – n – 2 smtp
 -o smtp_data_done_timeout=1200
 -o smtp_send_xforward_command=yes
 -o disable_dns_lookups=yes

localhost:10025 inet n – n – – smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o mynetworks=127.0.0.0/8
 -o smtpd_helo_restrictions=
 -o smtpd_client_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o strict_rfc821_envelopes=yes
 -o smtpd_error_sleep_time=0
 -o smtpd_soft_error_limit=1001
 -o smtpd_hard_error_limit=1000

重新启动postfix
# postfix stop
# postfix start
# postfix check

# netstat -an | grep LISTEN (应该可以看到这两个端口在监听)
127.0.0.1.10024 *.* 0 0 49152 0 LISTEN
127.0.0.1.10025 *.* 0 0 49152 0 LISTEN

Go to top.

12.安装Spamassassin 3.0.3
前面装amavis的时候已经装好了,如果没装,请按如下方式安装
# perl -MCPAN -e shell
cpan> install HTML::Parser
cpan> install DB_File
cpan> install Net::DNS (when prompted to enable tests, choose no)
cpan> install Digest::SHA1
cpan> install Mail::SpamAssassin

# vi /etc/mail/spamassassin/local.cf (修改后不用重新启动 SpamAssassin,立即生效)
report_safe 0
use_bayes 1
bayes_path /var/amavisd/.spamassassin/bayes
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# 是否能够进行 DNS 查询。直接设定为 yes 将有效加快 amavis 的启动速度
dns_available yes
# 检查是否为由内部网络所寄出的信件。
# 若是,则永远不判断为垃圾邮件。(评分减 50 分)
# 其中的 example.net 请替换成您的 Domain Name..
header LOCAL_RCVD Received =~ /.*\(\S+\.domain\.com\s+\[.*\]\)/
describe LOCAL_RCVD Received from local machine
score LOCAL_RCVD -50
# 垃圾邮件计分规则
score DCC_CHECK 4.000
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score RAZOR2_CHECK 2.500
score BAYES_99 4.300
score BAYES_90 3.500
score BAYES_80 3.000

新建文件/var/amavisd/.spamassassin/user_prefs
# touch /var/amavis/.spamassassin/user_prefs

检查local.cf语法
# spamassassin –lint

bayes(计划中)

启动spamd
# /usr/bin/spamd –daemonize –pidfile /var/run/spamd.pid

下载中文垃圾垃圾邮件过滤规则Chinese_rules.cf
# wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf

每次更新Chinese_rules.cf需要重启spamd方法如下
# kill -HUP `cat /var/run/spamd.pid`

自动更新中文垃圾垃圾邮件过滤规则
# vi /etc/crontab (加一行)
0 0 1 * * root wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf;kill -HUP `cat /var/run/spamd.pid`

测试病毒扫描
使用其他邮件系统用户给该系统的用户发送邮件,包含以下内容:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
如果这个用户能够收到有病度提示的邮件说明病毒过滤已经成功!
邮件病毒扫描日志将被记录在/var/log/clamav/clamav.log中!

测试垃圾邮件扫描
使用其他邮件系统用户给该系统的用户发送邮件,包含以下内容:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
然后查看邮件日志看看,发出的邮件是否被BOUNCE或DISCARD了

建立maildrop过滤脚本(如果你使用amavisd-new来对spamassassin进行操作的话,跳过该项)
# vi /etc/maildroprc
if ( $SIZE < 26144 )
{
exception {
xfilter "/usr/bin/spamassassin"
}
}

if (/^X-Spam-Flag: *YES/)
{
exception {
to "$HOME$DEFAULT/.Spam/"
}
}
else
{
exception {
to "$HOME$DEFAULT"
}
}

Go to top.

14.后记
大功告成,终于结束了。这篇文章花了本人无数心血,参考了无数篇文章,多少个日日夜夜啊,好几次烦得差点吐血,但是我坚持下来了。希望各位能够成功。

Go to top.

15.启动脚本
postfix的启动脚本:
# cat /etc/rc.d/init.d/postfix
#!/bin/bash
#
# mailsys This shell script takes care of starting and stopping Postfix
# author : xingyu.wang <wxy@cngnu.org> 2004/1/28
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program
# that moves mail from one machine to another.
#
# processname: mailsys
# pidfile: /var/run/postfix.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/postfix ] || exit 0
RETVAL=0
prog="Postfix"

start() {
# Start daemons.
echo -n $"Starting $prog: "
/usr/sbin/postfix start > /dev/null 2>&1 &

RETVAL=$?

if [ $RETVAL -eq 0 ]; then
touch /var/lock/subsys/postfix
success $"$prog start"
else
failure $"$prog start failure"
fi

echo
return $RETVAL
}

stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
/usr/sbin/postfix stop > /dev/null 2>&1 &
RETVAL=$?

if [ $RETVAL -eq 0 ]; then
rm -f /var/lock/subsys/postfix
success $"$prog stop"
else
failure $"$prog stop failure"
fi

echo
return $RETVAL
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $RETVA

# chmod 755 /etc/rc.d/init.d/postfix
# chkconfig –level 0123456 postfix on

clamav的启动脚本(有问题)
# cat /etc/rc.d/init.d/clamd
#!/bin/bash
#
# clamav: This script controls the clamd
#

# chkconfig: 2345 79 31
# description: clamav
# processname: clamav
# pidfile: /var/run/clam.pid

# Source function library.
. /etc/rc.d/init.d/functions

prog="/usr/local/sbin/clamd"
prog_base="ClamD"
prog_config_file="/etc/clamav.conf"

## Check that networking is up.

RETVAL=0

# See how we were called.
case "$1" in
start)
echo -n "Starting $prog_base:"
$prog -c $prog_config_file >> /var/log/clamd.log &
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/${prog_base}
success
echo
;;
stop)
echo -n "Shutting down $prog_base:"
#Force the kill…
kill `ps -A | grep clamd | cut -c1-6` &> /dev/null
RETVAL=$?
#Sleep for a second or two.
/bin/sleep 3s
#Kill the stale socket.
rm -f /tmp/clamd > /dev/null
if [ $RETVAL -eq 0 ] ; then
success
#echo "${prog_base} stopped"
rm -f /var/lock/subsys/${prog_base}
echo
else
echo
fi
;;
status)
status ${prog_base}
RETVAL=$?
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
reload)
#action $"Reloading ${prog_base}:" ${prog} -c ${prog_config_file} reload
$0 restart
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload}"
exit 1
esac

exit $RETVAL

# chmod 755 /etc/rc.d/init.d/clamd
# chkconfig –level 0123456 postfix on

网络管理与网络安全 三月 1, 2005

Posted by wansion in 技术.
add a comment

网络是开放的系统,是复杂的系统,是脆弱、不完善的系统。 一. 网络管理是指为保证网络系统能够持续、稳定、安全、可靠和高效的运行,对网络系统实施的一系列方法和措施。 网络管理的任务: 二.网络管理的基本内容: 1. 数据通信网中的流量控制。限制网络访问。 2. 网络路由选择策略管理。 要有一套管理和提供路由的机制。 3. 网络管理员的管理与培训。 4. 网络的安全防护 5. 网络的故障诊断 6. 网络的费用计算 三.网络管理系统的基本模型 网络管理系统是用于对网络进行有效管理、实现网络管理目标的系统,是网络管理员对网络管理的途径。 网络管理系统从逻辑上分为: 管理对象,管理进程,管理信息库,管理协议四个部分。

1. 管理对象:网络中具体可以操作的数据。如:工作参数,状态参数。 2. 管理进程:用于对网络中的设备和设施进行管理和控制的软件。 3. 管理信息库:用于记录管理对象的信息。如:各种参数的值。代码值。 4. 管理协议:用于在管理系统与管理对象之间传递操作命令,负责解释管理操作命令。 四 OSI网络管理的标准:五个功能域 1. 故障管理 2. 配置管理 3. 性能管理 4. 安全管理 5. 记账管理 五.简单网络管理协议SNMP SNMP是现代网络管理应用最广泛的网络管理协议。它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。Win NT 中配置有SNMP。编写网络程序要用到SNMP的函数。 SNMP是TCP/IP协议簇的一个应用层协议,是在TCP/IP上开发的,但它独立于于TCP/IP之外。它适合许多种通信协议。如PING命令 由三个部分组成:管理进程,管理代理,管理信息数据库。 六.计算机网络安全概述。 1.计算机网络安全:网络系统中用户共享的软件、硬件等各咱资源的安全,防止各种资源不受到有意和无意的各种破坏,不被非法侵用等。 2. 风险:遭受损失的程度。威胁:对资产构成的人、物、事、想法等因素。 网络系统中资产主要是数据。资产是风险分析的核心。 3. 敏感信息:那些容易丢失、滥用、被非法授权人访问或修改的信息,是泄露、破、不可使用或修改后对你的组织造成损失的信息。 5. 脆弱性:系统中安全防护的弱点。 6. 控制:降低受破坏的可能性所做的努力。 7. 网络不安全因素: (1) 环境:自然环境和社会环境。 (2) 资源共享:网络共享资源的功能,同时也带来了不安全因素。 (3) 数据通信:通信中的数据极易受损坏。 (4) 计算机病毒:资源浪费、网络瘫痪。 (5) 网络管理:人为管理的漏洞和缺点。 七.保护网络系统的基本要素 (1) 安全策略 (2) 防火墙(Firewall)。是网络系统中一种用来隔离网络用户的某些工作的技术。一类防范措施的总称,它使得内部网络与Internet之间或者与其他外部网络互相隔离、限制网络互访用来保护内部网络。防火墙简单的可以只用路由器实现,复杂的可以用主机甚至一个子网来实现。设置防火墙目的都是为了在内部网与外部网之间设立唯一的通道,简化网络的安全管理。 防火墙的功能有: 1、过滤掉不安全服务和非法用户(包过滤) 2、控制对特殊站点的访问 3、提供监视Internet安全和预警的方便端点 (3) 记录 (4) 识别和鉴别,如口令 (5) 脆弱性评价:进行脆弱性检查 (6) 物理保护 八.网络安全策略 1. 预防为主,对症下药,消除隐患。 2. 对广域网:数据通信保密和通信链路安全保护。搭线窃听。 九.风险名称: 十.保密技术:数据加密分为通信加密,文件加密,访问保护三类。 通信加密有:节点加密,链路加密,端对端加密。

简单网络管理协议(SNMP) 1.网络管理的发展   简单网络管理协议(SNMP,Simple Network Management Protocol)是TCP/IP协议簇的一个应用层协议,它是随着TCP/IP的发展而发展起来的。   在TCP/IP发展的前期,由于规模和范围有限,网络管理的问题并未得重视。直到70年代,仍然没有正式的网络管理协议,当时常用的一个管理工具就是现在仍在广泛使用的Internet控制报文协议(ICMP,Internet Control Message Protocol)。ICMP通过在网络实体间交换echo和echo-reply的报文对,测试网络设备的可达性和通信线路的性能。一个大家熟知的ICMP工具就是ping。   然而随着Internet的爆炸性发展,连接到Internet上的组织和实体数目也越来越多。这些各自独立的实体主观和客观上都要求能够独立地履行各自的子网管理职责,因此要求一种更加强大的标准化的网络管理协议来对实现Internet的网络管理。   80年代末,Internet体系结构委员会采纳SNMP作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。 2.SNMP的网络管理模型   SNMP作为一种网络管理协议,它使网络设备彼此之间可以交换管理信息,使网络管理员能够管理网络的性能,定位和解决网络故障,进行网络规划。   SNMP的网络管理模型由三个关键元素组成(图1):   · 被管理的设备(网元);   · 代理(agent);   · 网络管理系统(NMS,network-management system-NMS)。   网元是管理网中包括一个SNMP代理的网络节点,它可以是路由器、接入服务器、交换机、网桥、hub、主机、打印机等网络设备。 网元负责收集和存储管理信息,使其为NMS可用。 代理是位于网元中的一个网络管理软件模块,它掌握本地的网络管理信息,并将此信息转换为SNMP兼容的形式,在NMS发出请求时做出响应。 NMS监控和管理网元,提供网络管理所需的处理和存储资源。广义的网络管理系统应该包括一个管理网中的所有软硬件设备以及管理信息库和网络管理协议,而这里的NMS实际上是指网络管理员与网络管理系统的接口。一个管理网中可以存在多个NMS。

图1.SNMP管理网的结构示意 3.SNMP的管理信息库   管理信息库(MIB,Management Information Base)是一个存放管理元素信息的数据库。它管理信息的有层次的集合,由管理对象组成,并由对象标识符进行标识。管理网中每一个被管网元都应该包括一个MIB,NMS通过代理读取或设置MIB中的变量值,从而实现对网络资源的监视和控制。   MIB中的管理对象是被管理网元的一个特定性征,它由一个或多个对象实例组成,对象实例实际上就是变量。   在MIB中,存在着两类管理对象:标量对象和表式对象。标量对象仅定义了一个对象实例;而表式对象定义了多个相关的对象实例集。每个对象实例唯一地对应一个实例标识。标量对象和表式对象的每个实例都是MIB树的叶子节点,可以被SNMP访问,而表对象和行对象不是叶子节点,所以它们的状态是"not-accessible"。   之所以我们把MIB这种层次化的结构称为MIB树,是因为在MIB结构中,每个对象类型被分配一个整数序列形式对象标识符,对象标识符和对象实例标识符都是按照字典式排序的,所有的对象集合呈现出树状结构。   如图2,MIB树的根是符合ASN.1标准的对象。第一级有三个节点:ccitt、iso、iso-ccitt。低级的对象ID分别由相关组织分配。一个特定对象的标识符可通过由根到该对象的路径获得。在Internet节点下,定义了一个private子树,这是为厂商提供的私有MIB分支,其中包含企业私有的管理对象。尚未标准化的MIB对象位于实验分支中。

让我们举一个例子。如cisco公司的一个私有MIB对象atInput,它是个标量对象,仅包含一个对象实例。它是个整型变量,表示在一个路由器接口输入的AppleTalk的包的个数。我们可以采用两种方式来唯一标识一个管理对象:   · 采用对象名:iso.identified-organization.dod.internet.private.enterprise.cisco.temporary variables.AppleTalk.atInput   · 采用对象描述符: 1.3.6.1.4.1.9.3.3.1. 4.SNMPv1   SNMP必须负责调整不同网元之间的不兼容性。不同的计算机系统可能使用不同的数据表示格式,这可能影响SNMP交换网元信息的能力。因此SNMP使用抽象语法符号集1 (ASN.1),以保证不同系统间的正常通信。   管理信息结构(SMI,Structure of Management Information)在RFC1155中定义,给出了定义和构造MIB结构的总体框架。   SNMPv1是SNMP实现的最初版本,由RFC 1157定义,并按SMI构造和实现。SNMPv1可以应用于UDP、IP、CLNS、AppleTalk、DDP、IPX等协议之上,广泛应用于因特网,并成为实际上的网络管理协议。SNMPv1 SMI由RFC 1155定义,着重定义了ASN.1数据类型、SMI特定的数据类型以及SNMP MIB表。 4.1 SNMPv1的数据类型 1.ASN.1数据类型   SNMPv1 SMI规定所有管理对象都有一组相关的ASN.1数据类型。三种ASN.1数据类型是必须的: 名字(name)、语法(syntax)和编码(encoding)。 Name即对象标识符 (object ID);语法定义了对象的数据类型(如整型、串型);编码描述了一个管理对象的相关信息如何被格式化为适合网络传送的数据段。 2.SMI特定的数据类型   SMI特定的数据类型分为两种:简单的数据类型和基于应用(application-wide)的数据类型。 简单的数据类型包括: integer、octet string、object Id。 它们都是单值数据类型。   · Integer:整型是-2,147,483,648~2,147,483,647的有符号整数;   · octet string:字符串是0~65535个字节的有序序列;   · Object ID:来自按照ASN.1规则分配的对象标识符集。   SNMPv1 SMI定义的application-wide的数据类型有7种: network address、counter、Gauge、time ticks、opaque、integer、unsigned integer。   · network address:网络地址,表示从一个特定协议族中选定的网络地址, SNMPv1仅支持32位IP地址;   · counter:计数器是一个非负的整数,它递增至最大值,而后回零。SNMPv1中定义的计数器是32位的,即最大值为232-1;   · Gauge :也是一个非负整数,它可以递增或递减,但达到最大值时保持在最大值,最大值为232-1;   · time ticks:是一个时间单位,表示以0.01秒为单位计算的时间;   · opaque:表示用于传递任意信息串的任意编码格式,它与SMI使用的严格数据输入格式不同;   · integer:表示有符号的整数值,这个数据类型重定义了integer数据类型,integer在ASN.1中精度是任意的,但在SMI中精度受限;   · unsigned integer:表示一个无符号的整数,用于表示非负的数值。这个数据类型重定义了integer数据类型,integer在ASN.1中精度是任意的,但在SMI中精度受限. 4.2 SNMPv1的协议操作   SNMP对网元的监控是通过4个基本的SNMP命令实现的:读(read)、写(Write)、trap和遍历(Traversal)。   · read命令用于NMS监视网元设备,检查网元保存的各不同变量值;   · Write命令用于NMS控制网元,改变网元存储的变量值;   · Trap命令用于网元异步地向NMS报告发生事件;   · Traversal用于NMS确定网元支持哪个变量,以及从变量表中顺序收集信息。   SNMPv1 SMI定义了高度结构化的表,一个表式对象综合了多个对象实例(变量)。一个表可以有0行或多行,并以某种方式进行索引。   SNMP是一个简单的请求-响应协议。NMS发出请求,网元返回应答。SNMP使用Get、GetNext、Set、Trap四个协议操作。Get操作用于NMS从一个代理检索一个或多个MIB变量。如果代理不能提供一个表中所有变量的值,它就不返回任何值。GetNext操作用于NMS在一个代理中检索表中下一个变量的值。Set操作用于NMS在一个代理中设置MIB变量的值。代理通过Trap操作向NMS异步地通知发生的重要事件。 4.3 SNMPv1的消息格式   SNMPv1的消息格式包括两部分:消息头部和协议数据单元(PDU)。   SNMPv1消息头部包括两个字段:版本号与社区名。   · Version Number:定义使用的SNMP版本   · Community Name:定义一组NMS的访问环境。一个社区内的NMS采用同样的管理策略。社区名可以用来进行简单的认证,不知道正确社区名的网络设备将被排除在SNMP操作之外。   SNMPv1 的GetRequest、GetNextRequest、SetRequest 和Response的PDU格式相同,如图3。管理代理在收到一个GetRequest/GetNextRequest/SetRequest/Trap PDU后,向NMS发送一个相应的Response PDU。 图3. SNMPv1 GetRequest、GetNextRequest、SetRequest、Response PDU的格式   · PDU Type:指明PDU类型(GetRequest、GetNextRequest、SetRequest、Trap);   · Request ID:SNMP请求标识;   · Error Status:表示错误和错误类型,只有响应操作才设置该字段,其他操作将该字段设为0;   · Error Index:错误索引号,与特定对象实例的错误相关,只有响应操作才设置该字段,其他操作将该字段设为0;   · Variable Bindings:SNMPv1 PDU的数据字段,携带特定对象实例的当前值(Get and GetNext请求的该字段被忽略,因为无须携带值)。   Trap PDU的格式如图4,它包括8个字段。 图4. Trap PDU的格式   · Enterprise:指出发出trap的管理对象类型;   · Agent Address:表示发出trap的管理对象的地址;   · Generic Trap Type:普通trap类型;   · Specific Trap Code:特定的厂商可扩展的 trap代码;   · Time Stamp:表示最后一次网络启动到发出trap的时间;   · Variable Bindings— SNMPv1 Trap 的PDU字段,携带特定对象实例的当前值。 5.SNMPv2   SNMPv2是SNMPv1的改进版本,现在是一个草案标准。理论上SNMPv2提供了许多增强功能,包括新增了操作类型。 5.1 SNMPv2的数据类型   SNMPv2的SMI在RFC 1902中定义,在SNMPv1 SMI基础上,它包括了一些新增的和扩展的特定SMI数据类型,如:bit string、network address、counter。   · Bit string是一个SNMPV2新增的数据类型,由0或多个位组成,表示一个值;   · network address:网络地址表示一个特定协议族中对应的网络地址, SNMPv1仅支持32位IP地址,而SNMPv2可以支持其它的地址类型;   · counter:计数器是一个非负的整数,它递增至最大值,而后回零。SNMPv1中计数器是32位的,而SNMPv2支持32和64位的计数器。 5.2 SNMPv2的信息模块   SNMPv2 SMI定义了三种信息模块: MIB模块、一致性描述、能力描述。MIB模块包括相关管理对象的定义;一致性描述提供了一个系统的方法来描述一组管理对象必须达到的与标准的一致性;能力描述用于指明一个代理对于相关的MIB变量集的精确支持程度。NMS可以根据每个代理的能力描述调整它与代理之间的操作。 5.3 SNMPv2的协议操作   SNMPv2中的Get、GetNext、和Set操作与SNMPv1完全一样,但是增加和扩展了一些协议操作。如SNMPv2 的Trap操作虽然实现与SNMPv1中相同的功能,但是使用不同的消息格式。 SNMPv2还定义了两种新的协议操作:GetBulk 和Inform。GetBulk操作用于NMS高 效检索大的数据块,如一个表中的多行。GetBulk在适合的情况下尽可能多地将请求数据填充到返回消息中。Inform 操作允许一个NMS向另一个发送trap,并检索它的响应。在SNMPv2中,响应GetBulk的请求时,如果代理不能提供列表中所有变量的值,它将返回所能找到的部分变量的值(注意:这是与Get操作的不同之处)。 5.4 SNMPv2的消息格式   SNMPv2消息也包括头部和PDU.   SNMPv1消息头部包括两个字段:版本号与社区名。   · Version Number:定义使用的SNMP版本   · Community Name:定义一组NMS的访问环境。一个社区内的NMS采用同样的管理策略。社区名可以用来进行简单的认证,不知道正确社区名的网络设备将被排除在SNMP操作之外。   SNMPv2视乎SNMP协议的操作,定义了两种PDU格式。SNMPv2 PDU的字段长度是可变的。   SNMPv2 的GetRequest、GetNextRequest、SetRequest 、Inform、Trap和Response的PDU格式相同。如图5。 图5. SNMPv2 的Ge、GetNext、Set、Inform、Trap、Response的PDU格式   · PDU Type:指明PDU类型;   · Request ID:SNMP请求标识;   · Error Status:表示错误和错误类型,只有响应操作才设置该字段,其他操作将该字段设为0;   · Error Index:错误索引号,与特定对象实例的错误相关,只有响应操作才设置该字段,其他操作将该字段设为0;   · Variable Bindings:SNMPv2 PDU的数据字段,携带特定对象实例的当前值(Get and GetNext请求的该字段被忽略,因为无须携带值)。   SNMPv2 的GetBulk PDU的格式如图6。 图6.SNMPv2 的GetBulk PDU的格式   · PDU Type:指明该PDU属于GetBulk操作类型;   · Request ID:SNMP请求标识;   · Non-repeaters:指明变量绑定字段中被索引不超过一次的变量数量。该字段用于当某些表式对象只有一个变量的情况;   · Max-repetitions:定义除了non-repeaters字段之外的其他变量被索引的最大次数;   · Variable Bindings:SNMPv2 PDU的数据字段,携带特定对象实例的当前值(Get and GetNext请求的该字段被忽略,因为无须携带值) 6.SNMP的安全性   SNMPv1只能通过消息头部的社区名进行简单的认证,容易遭受安全性攻击。安全性威胁包括 :伪装、信息篡改、消息失序和定时的修改、泄露等。   · 伪装是未经授权的组织伪装成获得授权的管理组织,试图进行管理操作的行为;   · 信息篡改是未经授权的组织试图篡改一个由合法组织发出的消息,导致非法管理操作;   · 当未经授权的组织把消息重排序、拦截或复制时将导致消息的失序和定时被修改;   · 当未经授权的组织窃取了存在管理对象中的值,或从管理站和代理的信息交换中获知了某事件的发生,称为信息泄露。   由于SNMPv1安全性受限,许多厂商只好不支持或仅部分支持Set操作,从而降低了SNMP的功能,使其只能起到一个监视网络的作用。   SNMPv2在安全性上较SNMPv1有了很大的改善。它采用MD5报文摘要算法防止信息被篡改和改序;并对报文的指定部分采用对称加密算法(DES标准加密算法)进行加密。

用linux做nat服务,用tc限制流量 二月 28, 2005

Posted by wansion in 技术.
add a comment

最近有同事用bt和电驴疯狂下载,我们上网打cs受到极大影响,所以对nat上网做了流量控制,将一点经验介绍给网友,希望对cs fans 有所帮助.
我们上网环境如下:
eth0 外网ip :a.b.c.d
eth1 内网ip1:192.168.0.0/24 给老板和bt
eth2 内网ip2:192.168.1.0/24 给我和csfans
用linux 做nat 命令如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F —-清除旧规则
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT –to a.b.c.d —为内网ip1 做nat
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT — to a.b.c.d —为内网ip2 做nat
————为流量控制做基于fw过滤器的标记
iptables -I PREROUTING -t mangle -p tcp -s 192.168.0.0/24 -j MARK –set-mark 1
iptables -I PREROUTING -t mangle -p tcp -s 192.168.1.0/24 -j MARK –set-mark 2
————为上传速率做流量控制
tc 要求内核2.4.18以上,所以不够的要升级
tc 只能控制网卡发送包的速率,所以上传速率的限制要在eth0上做
—-删除旧有队列
tc qdisc del dev eth0 root
—-加一个根队列,速率用网卡的速率10Mbit,也可用上传的速率
tc qdisc add dev eth0 root handle 100: cbq bandwidth 10Mbit avpkt 1000
—-加一个根类
tc class add dev eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded
—-加一个子类用于内网1速率限制为300Kbit
tc class add dev eth0 parent 100:1 classid 100:2 cbq bandwidth 10Mbit rate 300Kbit allot 1513 weight 30Kbit prio 5 maxburst 8 avpkt 1000 bounded
—-加一个子类用于内网2速率限制为320Kbit
tc class add dev eth0 parent 100:1 classid 100:3 cbq bandwidth 10Mbit rate 320Kbit allot 1513 weight 32Kbit prio 6 maxburst 8 avpkt 1000 bounded
—-设置队列规则
tc qdisc add dev eth0 parent 100:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 100:3 sfq quantum 1514b perturb 15
——将队列和fw过滤器映射起来 其中hand 1 的1是开始用iptables 做的标记,hand 2 的2也是开始用iptables 做的标记
tc filter add dev eth0 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2
tc filter add dev eth0 parent 100:0 protocol ip prio 2 handle 2 fw classid 100:3
———————–再做下载限制我只限制了老板和bt的下载速率,过滤器是用u32
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 200: cbq bandwidth 10Mbit avpkt 1000
tc class add dev eth1 parent 200:0 classid 200:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 2Kbit prio 8 maxburst 8 avpkt 1000 bounded
tc class add dev eth1 parent 200:1 classid 200:2 cbq bandwidth 10Mbit rate 1000Kbit allot 1513 weight 1Mbit prio 5 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth1 parent 200:2 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 200:0 protocol ip prio 25 u32 match ip dst 192.168.0.0/24 flowid 200:2

Unix/ELF文件格式及病毒分析 二月 21, 2005

Posted by wansion in 技术.
add a comment

转帖–Unix/ELF文件格式及病毒分析 http://www.chinaunix.net 作者:mzd73  发表于:2002-11-05 00:01:25
[这个贴子最后由mzd73在 2002/11/15 11:08pm 编辑]

★ 介绍

本文介绍了Unix病毒机制、具体实现以及ELF文件格式。简述了Unix病毒检测和反检
测技术,提供了Linux/i386架构下的一些例子。需要一些初步的Unix编程经验,能够
理解Linux/i386下汇编语言,如果理解ELF本身更好。

本文没有任何实际意义上的病毒编程技术,仅仅是把病毒原理应用到Unix环境下。这
里也不打算从头介绍ELF规范,感兴趣的读者请自行阅读ELF规范。

★ 感染 ELF 格式文件

进程映象包含"文本段"和"数据段",文本段的内存保护属性是r-x,因此一般自修改
代码不能用于文本段。数据段的内存保护属性是rw-。

段并不要求是页尺寸的整数倍,这里用到了填充。

关键字:

[…]   一个完整的页
M       已经使用了的内存
P       填充

页号
#1    [PPPPMMMMMMMMMMMM]  \
#2    [MMMMMMMMMMMMMMMM]   |– 一个段
#3    [MMMMMMMMMMMMPPPP]  /

段并没有限制一定使用多个页,因此单页的段是允许的。

页号
#1    [PPPPMMMMMMMMPPPP]  <– 一个段

典型的,数据段不需要从页边界开始,而文本段要求起始页边界对齐,一个进程映象
的内存布局可能如下:

关键字:

[…]   一个完整的页
T       文本段内容
D       数据段内容
P       填充

页号
#1    [TTTTTTTTTTTTTTTT]    <– 文本段内容
#2    [TTTTTTTTTTTTTTTT]    <– 文本段内容
#3    [TTTTTTTTTTTTPPPP]    <– 文本段内容(部分)
#4    [PPPPDDDDDDDDDDDD]    <– 数据段内容(部分)
#5    [DDDDDDDDDDDDDDDD]    <– 数据段内容
#6    [DDDDDDDDDDDDPPPP]    <– 数据段内容(部分)

页1、2、3组成了文本段
页4、5、6组成了数据段

从现在开始,为简便起见,段描述图表用单页,如下:

页号
#1    [TTTTTTTTTTTTPPPP]    <– 文本段
#2    [PPPPDDDDDDDDPPPP]    <– 数据段

在i386下,堆栈段总是在数据段被给予足够空间之后才定位的,一般堆栈位于内存高
端,它是向低端增长的。

在ELF文件中,可装载段都是物理映象:

    ELF Header
    .
    .
    Segment 1    <– 文本段
    Segment 2    <– 数据段
    .
    .

每个段都有一个定位自身起始位置的虚拟地址。可以在代码中使用这个地址。

为了插入寄生代码,必须保证原来的代码不被破坏,因此需要扩展相应段所需内存。

文本段事实上不仅仅包含代码,还有 ELF 头,其中包含动态链接信息等等。如果直
接扩展文本段插入寄生代码,带来的问题很多,比如引用绝对地址等问题。可以考虑
保持文本段不变,额外增加一个段存放寄生代码。然而引入一个额外的段的确容易引
起怀疑,很容易被发现。

向高端扩展文本段或者向低端扩展数据段都有可能引起段重叠,在内存中重定位一个
段又会使那些引用了绝对地址的代码产生问题。可以考虑向高端扩展数据段,这不是
个好主意,有些Unix完整地实现了内存保护机制,数据段是不可执行的。

段边界上的页填充提供了插入寄生代码的地方,只要空间允许。在这里插入寄生代码
不破坏原有段内容,不要求重定位。文本段结尾处的页填充是个很好的地方,最后看
上去象下面这个样子:

关键字:

[…]   一个完整的页
V       寄生代码
T       文本段内容
D       数据段内容
P       填充

页号
#1    [TTTTTTTTTTTTVVPP]    <– 文本段
#2    [PPPPDDDDDDDDPPPP]    <– 数据段

一个更完整的ELF可执行布局如下:

    ELF Header
    Program header table
    Segment 1
    Segment 2
    Section header table
    Section 1
    .
    .
    Section n

典型的,额外的节(那些没有相应段的节)用于存放调试信息、符号表等等。

下面是一些来自 ELF 规范的内容:

ELF 头位于最开始,保存一张"road map",描述了文件的组织结构。节保存大量链接
信息、符号表、重定位信息等等。

如果存在一个"program header table",将告诉操作系统如何建立进程映象(执行一
个程序)。可执行文件必须有一个"program header table",可重定位的文件不需要
该表。"section header table"描述了文件的节组织。每个节在该表中都有一个表项,
表项包含了诸如节名、节尺寸等信息。链接过程中被用到的文件自身必须有一个
"section header table",其他目标文件可有可无该表。

插入寄生代码之后,ELF 文件布局如下:

    ELF Header
    Program header table
    Segment 1   – 文本段(主体代码)
                – 寄生代码
    Segment 2
    Section header table
    Section 1
    .
    .
    Section n

寄生代码必须物理插入到ELF文件中,文本段必须扩展以包含新代码。

下面的信息来自/usr/include/elf.h

/* The ELF file header.  This appears at the start of every ELF file.  */

#define EI_NIDENT (16)

typedef struct
{
    unsigned char e_ident[EI_NIDENT];  /* Magic number and other info */
    Elf32_Half    e_type;              /* Object file type */
    Elf32_Half    e_machine;           /* Architecture */
    Elf32_Word    e_version;           /* Object file version */
    Elf32_Addr    e_entry;             /* Entry point virtual address */
    Elf32_Off     e_phoff;             /* Program header table file offset */
    Elf32_Off     e_shoff;             /* Section header table file offset */
    Elf32_Word    e_flags;             /* Processor-specific flags */
    Elf32_Half    e_ehsize;            /* ELF header size in bytes */
    Elf32_Half    e_phentsize;         /* Program header table entry size */
    Elf32_Half    e_phnum;             /* Program header table entry count */
    Elf32_Half    e_shentsize;         /* Section header table entry size */
    Elf32_Half    e_shnum;             /* Section header table entry count */
    Elf32_Half    e_shstrndx;          /* Section header string table index */
} Elf32_Ehdr;

e_entry 保存了程序入口点的虚拟地址。

e_phoff 是"program header table"在文件中的偏移。因此为了读取
"program header table",需要调用lseek()定位该表。

e_shoff 是"section header table"在文件中的偏移。该表位于文件尾部,在文本段
尾部插入寄生代码之后,必须更新e_shoff指向新的偏移。

/* Program segment header.  */

typedef struct
{
    Elf32_Word p_type;    /* Segment type */
    Elf32_Off  p_offset;  /* Segment file offset */
    Elf32_Addr p_vaddr;   /* Segment virtual address */
    Elf32_Addr p_paddr;   /* Segment physical address */
    Elf32_Word p_filesz;  /* Segment size in file */
    Elf32_Word p_memsz;   /* Segment size in memory */
    Elf32_Word p_flags;   /* Segment flags */
    Elf32_Word p_align;   /* Segment alignment */
} Elf32_Phdr;

可装载段(文本段/数据段)在"program header"中由成员变量p_type标识出是可装载
的,其值为PT_LOAD (1)。与"ELF header"中的e_shoff一样,这里的p_offset成员
必须在插入寄生代码后更新以指向新偏移。

p_vaddr 指定了段的起始虚拟地址。以p_vaddr为基地址,重新计算e_entry,就可以
指定程序流从何处开始。

可以利用p_vaddr指定程序流从何处开始。

p_filesz 和 p_memsz 分别对应该段占用的文件尺寸和内存尺寸。

.bss 节对应数据段里未初始化的数据部分。我们不想让未初始化的数据占用文件空
间,但是进程映象必须保证能够分配足够的内存空间。.bss 节位于数据段尾部,任
何超过文件尺寸的定位都假设位于该节中。

/* Section header.  */

typedef struct
{
    Elf32_Word sh_name;       /* Section name (string tbl index) */
    Elf32_Word sh_type;       /* Section type */
    Elf32_Word sh_flags;      /* Section flags */
    Elf32_Addr sh_addr;       /* Section virtual addr at execution */
    Elf32_Off  sh_offset;     /* Section file offset */
    Elf32_Word sh_size;       /* Section size in bytes */
    Elf32_Word sh_link;       /* Link to another section */
    Elf32_Word sh_info;       /* Additional section information */
    Elf32_Word sh_addralign;  /* Section alignment */
    Elf32_Word sh_entsize;    /* Entry size if section holds table */
} Elf32_Shdr;

sh_offset 指定了节在文件中的偏移。

为了在文本段末尾插入寄生代码,我们必须做下列事情:

    * 修正"ELF header"中的 p_shoff 
    * 定位"text segment program header"
        * 修正 p_filesz 
        * 修正 p_memsz 
    * 对于文本段phdr之后的其他phdr
        * 修正 p_offset 
    * 对于那些因插入寄生代码影响偏移的每节的shdr
        * 修正 sh_offset 
    * 在文件中物理地插入寄生代码到这个位置
      text segment p_offset + p_filesz (original)

这里存在一个大问题,ELF 规范中指出,

    p_vaddr mod PAGE_SIZE ==  p_offset mod PAGE_SIZE

为了满足这个要求:

    * 修正"ELF header"中的 p_shoff ,增加 PAGE_SIZE 大小
    * 定位"text segment program header"
        * 修正 p_filesz 
        * 修正 p_memsz 
    * 对于文本段phdr之后的其他phdr
        * 修正 p_offset ,增加 PAGE_SIZE 大小
    * 对于那些因插入寄生代码影响偏移的每节的shdr
        * 修正 sh_offset ,增加 PAGE_SIZE 大小
    * 在文件中物理地插入寄生代码以及填充(确保构成一个完整页)到这个位置
      text segment p_offset + p_filesz (original)

我们还需要修正程序入口点的虚拟地址,使得寄生代码先于宿主代码执行。同时需要
在寄生代码尾部能够跳转回宿主代码原入口点继续正常流程。

    * 修正"ELF header"中的 p_shoff ,增加 PAGE_SIZE 大小
    * 修正寄生代码的尾部,使之能够跳转回宿主代码原入口点
    * 定位"text segment program header"
        * 修正 "ELF header"中的 e_entry ,指向 p_vaddr + p_filesz
        * 修正 p_filesz 
        * 修正 p_memsz 
    * 对于文本段phdr之后的其他phdr
        * 修正 p_offset ,增加 PAGE_SIZE 大小
    * 对于文本段的最后一个shdr
        * 修正sh_len(应该是sh_size吧,不确定),增加寄生代码大小
    * 对于那些因插入寄生代码影响偏移的每节的shdr
        * 修正 sh_offset ,增加 PAGE_SIZE 大小
    * 在文件中物理地插入寄生代码以及填充(确保构成一个完整页)到这个位置
      text segment p_offset + p_filesz (original)

病毒可以随机遍历一个目录树,寻找那些e_type等于 ET_EXEC 或者 ET_DYN 的文件,
加以感染,这分别是可执行文件和动态链接库文件。

★ 分析Linux病毒

病毒要求不使用库,避开libc,转而使用系统调用机制。
为了动态申请堆内存用于phdr table和shdr table,应该使用brk系统调用。
利用与缓冲区溢出相同的技术取得常量字符串的地址。

使用gcc -S编译c代码,观察调整asm代码。
注意在进入/离开寄生代码的时候保存/恢复寄存器。

利用objdump -D观察调整一些需要确定的偏移量。

★ 检测病毒

这里描述的病毒很容易检测。最显眼的是程序入口点不在常规节中,甚至干脆不在任
何节中。清理病毒的过程和感染病毒的过程类似。

用objdump –all-headers很容易定位程序入口点,用objdump –disassemble-all
跟踪下去就可以得到程序原入口点。

缺省程序入口点是_start,但是可以在链接的时候更改它。

★ 结论

Unix病毒尽管不流行,但的确可行。