一个经得起时间考验的人
日志
Discuz NT论坛日志引起的无法访问
八 11th
由Discuz NT构建的论坛,出现无法访问的情况,页面提示“与SQL Server 2000 的连接超时”
重启IIS,SQL Server都不起作用,检查数据库后发现论坛所使用的数据库 Discuz_NT 的日志文件的体积居然达到 23.5GB
将SQL Server的日志清理后,论坛恢复正常。
随后简单分析了一下SQL Server产生如此大日志的原因:
1.因为数据库Discuz_NT的故障还原模型为“完全”,从而在用户访问论坛、访问版块、访问帖子时都会有日志生成(在dnt_online中记录访问者的位置)
2.用户每访问一个帖子都会更改数据库中dnt_posts1中记录的帖子被访问的次数
综合以上的原因,从而使数据库的日志迅速增大。因此对于 Discuz NT 构建的论坛有必要经常清理日志、备份数据。
当然将数据库的故障还原模型(如何记录日志)设置为简单能够防止产生如此大量的日志,但是无法保证数据的安全。
如果在数据库中限制了日志的大小,那么出来的提示如下:
数据库 ‘Discuz_NT ‘ 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: 数据库 ‘Discuz_NT ‘ 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
三个网络流量监控工具
五 23rd
1.Bandwidth Meter Pro
Bandwidth Meter Pro主页: www.bandwidth-meter.net
Bandwidth Meter Pro 可以监视你的带宽使用情况并且可以为一个或者更多你所选择的网络连接显示实时的统计图表。该软件还可以生成每天,每周和每月的报告,详细列记带有累计带宽消费量的上传和下载使用情况。该软件还包括一个当在最后若干秒之内下载的字节少于若干字节的情况下向你发出通知的选项,以及一个简单的连接职守和用于导出报表为 .txt, .csv 和 HTML 等格式的选项。

2.Net Meter
Net Meter主页: http://www.hootech.com/netmeter/
Net Meter是一个强大和容易的网络流量监控器。它同时监视一个或者多个LAN和WAN网络流量。它能实时图形化和数字化网络流量细节。它记录所有网络流量并带有额外日志功能和流量事件。Net Meter在各种网络连接下可工作,包括DSL、modem、LAN等。
3.DU Meter
DU Meter主页:http://www.dumeter.com/
DU Meter 是显示直观的网络流量监视器,既有数字显示又有图形显示。让你清楚的看到浏览时以及上传下载时的数据传输情况,实时监测你的上传和下载的网速。新版增加了观测日流量、周流量、月流量等累计统计数据,并可导出为多种文件格式。
DU Meter的更多信息:

清除DU Meter中日志记录的方法
五 23rd
对于DU Meter 3.5只能通过手工的办法清除日志记录:
DU Meter 是显示直观的网络流量监视器,既有数字显示又有图形显示。让你清楚的看到浏览时以及上传下载时的数据传输情况,实时监测你的上传和下载的网速。新版增加了观测日流量、周流量、月流量等累计统计数据,并可导出为多种文件格式。
DU Meter 4.0使用了C/S结构,并且可以保存记录流量数据。新版本里还提供的警告提醒和Email通知功能。并且有了数据的备份与恢复功能。
Sql Server 2000附加数据库出现1813错误的解决方法
五 14th
今天进行了一错误操作。
数据库xxzx_discuz,因生成大量日志使日志文件’xxzx_discuz_Log.LDF’ 占满了磁盘所有空间,使网站无法正常使用数据库。
自己图省事分离数据库xxzx_discuz后,直接删除’xxzx_discuz_Log.LDF’ (因为文件太大,无法存放到回收站),重新附件到SQL Server时出现两个提示:
——————————————————————————————————————————
SQL Server 企业管理器
—————————
为日志文件指定的文件名不正确。
将创建新的日志文件。
要继续吗?
—————————
是(Y) 否(N)
——————————————————————————————————————————
Microsoft SQL-DMO (ODBC SQLState: 42000)
—————————
错误 1813: 未能打开新数据库 ‘xxzx_discuz’。CREATE DATABASE 将终止。
设备激活错误。物理文件名 ‘S:\Program Files\Microsoft SQL Server\MSSQL\data\xxzx_discuz_Log.LDF’ 可能有误。
—————————
确定
——————————————————————————————————————————
从而无法将数据库正常附加到SQL Server 2000,正常情况下这样操作是没有问题的,SQL Server会重新生成日志文件,但是因为之前出现了磁盘空间不足,日志文件不完整,从而造成了无法正常附加。
解决办法如下(从网上找来的):
0.备份数据文件‘xxzx_discuz_Log.MDF’
1.新建一个同名的数据库‘xxzx_discuz’
2.再停掉sqlserver服务(注意不要分离数据库)
3.用原数据库的数据文件‘xxzx_discuz_Log.MDF’ 覆盖掉新建的数据库
5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
- use master
- go
- sp_configure ‘allow updates’,1 reconfigure with override
- go
- update sysdatabases set status =32768 where name=‘置疑的数据库名’
- go
- sp_dboption ‘置疑的数据库名’, ‘single user’, ‘true’
- go
- dbcc checkdb(‘置疑的数据库名’)
- go
- update sysdatabases set status =28 where name=‘置疑的数据库名’
- go
- sp_configure ‘allow updates’, 0 reconfigure with override
- go
- sp_dboption ‘置疑的数据库名’, ‘single user’, ‘false’
- go
用MRTG在IIS 6.0上实现入侵检测功能
一 25th
MRTG(Multi Router Traffic Grapher)是一个跨平台的监控网络链路流量负载的工具软件,目前它可以运行在大多数Unix系统和Windows NT之上。它通过snmp协议从设备得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML 文档方式显示给用户,以非常直观的形式显示流量负载。
或许你还不知道,MRTG还是一个有效的入侵检测工具。大家都知道,入侵者扫描与破坏后都能生成一些异常的网络流量,而人们在一般情况下是意识不到的。但是MRTG却能通过图形化的形式给管理员提供入侵的信息。并可以查出数周之前的入侵信息,以备管理员参考。
一,攻击行为对服务器造成的信息
1,攻击者使用CGI漏洞扫描器对潜在的CGI漏洞脚本进行扫描时,HTTP 404 Not Found errors的记录会增长。
2,攻击者尝试暴力破解服务器上的帐户,HTTP 401 Authorization Required errors 的记录会增长。
3,一种新的蠕虫出现,某一个特定的协议的流量会增长。
4,蠕虫通过傀儡主机,攻击其他的服务器,出外的流量增加,并增大CPU的负荷。
5,入侵者尝试SQL injection攻击,HTTP 500 Server Errors记录会增长。
6,垃圾邮件发送者在网络上寻找中继SMTP服务器来发送垃圾邮件,会造成SMTP的和DNS lookups流量大增,同时造成CPU负荷增大。
7,攻击者进行DDOS攻击,会造成ICMP流量,TCP连接,虚假的IP,多播广播流量大增。造成浪费大量的带宽。
看完上面的,我们可以总结出,攻击者要入侵必须会影响到服务器的这些资源:: CPU, RAM,磁盘空间,网络连接和带宽。入侵者还有可能对服务器建立进程后门,开放端口,他们还对他们的入侵行为进行伪装掩盖,避免遭到入侵检测系统的监视。
二,攻击者使用以下的方法避免被检测到:
1,探测扫描很长时间后,才进行真正的入侵进攻。
2,从多个主机进行攻击,避免单一的主机记录。
3,尽量避免入侵造成的CPU, RAM和驱动器的负荷。
4,利用管理员无人职守时入侵,在周末或者节假日发起攻击。
三,对于IIS 6,我们需要监视的是
1,网络流量,包括带宽,数据包,连接的数量等。
2,网络协议的异常错误。
3,网站的内外流量,包括用户的权限设置,外部请求的错误流量等。
4,线程和进程。
四,在Windows 2003下安装MRTG
在使用MRTG之前,你需要在你的服务器里安装SNMP 服务。具体步骤如下:从控制面板中选择添加/删除程序,点击添加和删除windows组件。管理和监视工具中的详细资料里就可以找到简单网络管理协议,即可安装。
安装成功后,你需要立刻安全配置一下,我们大家都知道,SNMP在网络上决不是一个安全的协议,你可以通过http://support.microsoft.com/?kbid=324261这 个连接来具体了解。但是我们只是在本地使用SNMP,但是还是建议你通过防火墙屏蔽SNMP的161与162端口和使用IPSec。并且要配置为 obscure community string。在管理工具中,在服务中选择安全,设为只读访问。尽管community string安全问题不多,但是你还是要避免使用community string为只读访问。
MRTG是一个用Perl编译的C程序。你还要安装ActivePerl来解决支持脚本的问题。下载最新的MRTG。可以到http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/下载,
注意要选择.zip的文件下载。这篇文章所使用的版本请到http://securityfocus.com/microsoft/images/burnett_MRTG_files.zip下载。
把MRTG解压到C:Program FilesMRTG目录下。
安装Perl的过程其实很简单。首先打开PERL的安装文件 ,点下一步,然后同意软件使用权的协议,下一个画面会让您确认是否使用[PPM3发送个人信息至ASPN],还是省着点儿,不要选它,直接按下一步。然后就是下一步直通车,直至Perl安装成功。
由于MRTG是一个Perl写的程序,不需要安装,稍后有些安装过程需要在DOS里面完成,所以建议解压的路径为C:MRTG。
下面给出详细的安装步骤:
1. 运行cmd,进入DOS窗口;
c:>cdMRTGbin 进入刚才解压的MRTG目录,准备执行命令;
使用perl MRTG 命令测试MRTG是否正确;
执行命令行perl cfgmaker caacnetwork@10.3.0.20 –global "WorkDir: C:InetpubwwwrootMRTG" –output caacnetwork.cfg
caacnetwork.cfg是输出配置文件,位置在MRTGbin。 workdir内是MRTG生成的网页文件。本例指定在IIS默认目录。
caacnetwokr@10.3.0.20 注释: caacnetwork是团体名, 10.3.0.20是IP地址。
当有多个设备要监控时,用下面的命令:
perl cfgmaker caacnetwork@ip1 caacnetwork@IP2 community@ip3 –global "WorkDir: C:InetpubwwwrootMRTG" –output caacnetwork.cfg
2.为了让MRTG每个五分钟监视一次,在DOS下MRTGbin目录用下面的命令:
(1)echo RunAsDaemon:yes>>caacnetwork.cfg
(2)echo Interval:5>>caacnetwork.cfg
3.使用indexmaker生成报表首页:
perl indexmaker caacnetwork.cfg>c:InetpubwwwrootMRTGindex.htm
4.运行MRTG:
perl MRTG –logging=caacnetwork.log caacnetwork.cfg
访问c:InetpubwwwrootMRTGindex.htm检查MRTG是否可以正常工作,生成统计图形。
5.将MRTG 配置为系统服务
使用windows 2003 resource kit中的Instsrv.exe和srvany.exe。首先安装win2003 rerouse kit
将srvany.exe拷贝到c:MRTGbin 目录
1.添加srvany.exe为服务
instsrv MRTG "c:MRTGbinsrvany.exe"
2. 配置srvany:
在注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMRTG中,添加一个parameters子键。在该子键中添加以下项目:
Application的字串值,内容为c:perlbinperl.exe —该值为perl程序目录。
AppDirectory的字串值,内容为c:MRTGBIN —-该值为MRTG程序目录。
AppParameters的字串值,内容为MRTG –logging=caacnetwork.log caacnetwork.cfg。
3.管理工具—服务中,找到MRTG服务,启用服务。
MRTG就可以全天监视制定主机的网络信息了。
五,具体配置SNMP计数器
尽管微软提供了SNMP的计数器,但是我发现它对一些应用程序支持有些问题,然而,MRTG却能从很多的应用程序中得到消息。但是我们通过 Windows Management Instrumentation (WMI) 也能得到包括所有的计数器的性能信息。同SNMP不同的是,微软在WMI下了很大的时间和金钱。比如:我想得到关于线程和进程的信息,我可以使用以下的脚 本轻易实现:
Set oWService=GetObject("winmgmts:localhostrootcimv2")
Set colItems=oWService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_System",,48)
For Each Item in colItems
Param1=Param1 + Item.Processes
Param2=Param2 + Item.Threads
Uptime=Item.SystemUptime
Next
WScript.Echo Param1
WScript.Echo Param2
WScript.Echo Uptime &" seconds"
WScript.Echo "LocalHost"
Another problem I had was getting detailed or custom web statistics through either SNMP or WMI. To solve that, I used Microsoft’s LogParser tool to run custom queries from a simple batch file:
@for /f "tokens=1,2,3,4* delims=/ " %%i in (‘date /t’) do @set year=%%l&& @set month=%%j&& @set day=%%k
@set logfile=c:windowssystem32LogFiles%1ex%YEAR:~2,2%%month%%day%.log
@If Exist %logfile% (
@logparser "SELECT COUNT(*) FROM %logfile% WHERE (sc-status>= 400AND sc-status<500)
AND TO_TIMESTAMP(date, time) >SUB(SYSTEM_TIMESTAMP(), TO_TIMESTAMP(’5′,’m'))" -q
@logparser "SELECT COUNT(*) FROM %logfile% WHERE (sc-status>= 500AND sc-status<600)
AND TO_TIMESTAMP(date, time) >SUB(SYSTEM_TIMESTAMP(), TO_TIMESTAMP(’5′,’m'))" -q
) ELSE (
@Echo %logfile%
@Echo 0
)
@Echo Unknown
@Echo %1
因为微软的日志记录工具也非常强大,和MRTG的计数器配合使用,在加上免费的入侵检测系统Snort,效果会更好。
六,最后
在你自定义的完你的计数器完成之后,通过图行化的状况就可以轻易的找出入侵者。可以在网站http://snmpboy.msft.net看到在Windows 2003 server中的snmp更多的信息。
彻底掌握IIS 6.0功能:日志
一 25th
IIS 6.0在日志功能方面有许多重大的改进,但遗憾的是,W3SVC日志事件仍不能以本地时间记录。
在IIS 6.0中,记录日志的功能已经改为由http.sys实现,http.sys在内核模式下运行。这一改进加快了日志写入速度,同时避免了多个工作进程争用 同一日志文件。某些特殊的情况下,http.sys会遇到错误,这时它应该但却不能将日志信息写入Web网站的日志,例如,工作进程正在被回收,禁止 http.sys处理用户请求,或者用户试图连接到服务器,但请求中只提供了IIS所需信息的一部分。如果出现这类情况,http.sys将把事件写入一 个新的日志文件httperr.log。
在排解故障、优化IIS 6.0的过程中,httperr.log日志文件是十分重要的。默认情况下,httperr.log文件保存在\system32\logfiles目 录,但可以修改,修改方法是找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP \Parameters注册子键,在它下面添加一个名为ErrorLoggingDir的字符串值,在ErrorLoggingDir中设置保存日志文件 的完整路径。在httperr.log日志文件中可以找到的信息包括:所有的503(服务不可用)错误,空闲连接超时,解析URL时出现的各种错误,最后 10个提交给失败的应用程序池的请求。
IIS 6.0还拥有一种称为二进制日志的功能,启用这个功能后,IIS 6.0将把Web网站的所有日志信息写入一个二进制格式的日志文件,日志文件的扩展名是.ibl。要启用二进制日志功能,只要把配置文件的 W3SVCC/CentralBinaryLoggingEnabled条目设置成ture(1)即可。对于ISP来说,这个功能应该非常有用。ISP的 每台机器上可能有1000甚至更多的Web网站,如果每个Web网站每天生成一个日志文件,日志文件的总数很快会达到一个天文数字。微软最近发布的Log Parser 2.0工具能够读取二进制日志文件并生成报告,这个工具可以从http://download.microsoft.com/download /iis50/utility/2.0/nt5xp/en-us/setup.exe下载。Log Parser 2.0还能够读取前面介绍的httperr.log文件并生成报告。
从很久以前开始,IIS就允许指定本地服务器上保存日志文件的目录了。不过,虽然IIS 5.0和IIS 4.0的IIS管理器允许在指定日志文件路径的时候输入一个远程服务器的通用命名规范(UNC)的路径,但Web服务器实际上不会把日志保存到远程服务 器。只有IIS 6.0才真正支持日志文件路径的UNC路径名。