SpamAssassin的简单应用

[不指定 2006/12/26 23:18 | by ipaddr ]
这里我们只讲SpamAssassin的简单应用,就是利用SpamAssassin的规则集把垃圾邮件标注为垃圾邮件,然后在客户端outlook用策略把带有垃圾邮件字符的邮件自动转移到垃圾邮件目录。

参看文章
CCERT中文垃圾邮件过滤规则集
(http://www.ccert.edu.cn/spam/sa/Chinese_rules.htm)

试验环境:redhat9.0
前提条件:已经安装好qmail,本文已经搭建的环境是qmail+vpopmail+igeus

1:安装SpamAssassin
安装方法1:直接通过CPAN安装
perl -MCPAN -e shell
install Mail::SpamAssassin

2:自己编译安装
去http://spamassassin.apache.org下载最新版本的软件

解压后:# perl Makefile.PL
# make
# make install

# 进行一个spam和non-spam的测试
在spamassassin源文件目录:
spamassassin -t < sample-spam.txt > spamtest.txt
less spamtest.txt
spamassassin -t < sample-nonspam.txt > nospamtest.txt
less nospamtest.txt
spamtest.txt文件在主题一段中将包含"*****SPAM*****" 这一行, 而nospamtest.txt文件中则没有.
(默认读取/etc/mail/spamassassin/local.cf配置.)

如果make过程中报错,可以参看此文解决相关问题http://blog.5ilinux.com/archives/2005/07/spamassassin.html

3:配置local.cf文件
# vi /etc/mail/spamassassin/local.cf

# How many hits before a message is considered spam.
required_hits           9.5

# Text to prepend to subject if rewrite_subject is used
rewrite_header Subject  *****垃圾邮件*****

# Encapsulate spam in an attachment
report_safe             1

# Enable the Bayes system
use_bayes               1

# Enable Bayes auto-learning
bayes_auto_learn        1

# Enable or disable network checks
skip_rbl_checks         1
use_razor2              0
use_dcc                 0
use_pyzor               0

# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages            all

# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales              all

关于SpamAssassin的配置文件,可参考SpamAssassin 3.x 配置指南(中文版)
(http://anti-spam.org.cn/references/index.php?Action=Show&ID=9)

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

5:qmail和SpamAssassin的结合

在SpamAssassin 3.x 的spamc 目录下编译qmail-spamc
# cc -O -o qmail-spamc qmail-spamc.c
# install -m 755 qmail-spamc /var/qmail/bin

# ln -s /var/qmail/bin/qmail-queue /usr/bin/qmail-queue

编辑 /etc/tcp.smtp 如下
127.:allow,RELAYCLIENT=""
:allow,QMAILQUEUE="/var/qmail/bin/qmail-spamc"

然后:
tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp

在编译目录spamd目录下
mv  redhat-rc-script.sh /etc/rc.d/init.d/spamd

启动spamd
/etc/rc.d/init.d/spamd start

这样SpamAssassin会根据规则集自动判断垃圾邮件,把认为潜在可能的垃圾邮件打上****垃圾邮件****的标,一目了然,至于客户端outlook怎么设置策略自动转移垃圾邮件,就不用我说了吧。

Redhat Linux下Bind的快速安装

[不指定 2006/12/25 22:30 | by ipaddr ]
1.使用光盘自带的软件包,安装以下包:
bind
bind-utils
bind-libs
(rpm -i xxx.rpm)

2.
将named服务设置为自启动
(使用ntsysv,chkconfig等工具)

3.
假设你需要解析bcomcn.com,如下操作:

cd /var/named
cp localdomain.zone bcomcn.zone
vi bcomcn.zone
[code]
$TTL  86400
@       IN      SOA     ns.bcomcn.com. root.bcomcn.com.  (
                                     200612230  ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
                 IN      NS      ns.bcomcn.com.
                 IN      MX  10  mail.bcomcn.com.
ns.bcomcn.com.   IN      A       192.168.1.5
mail.bcomcn.com.   IN      A       192.168.1.5
www.bcomcn.com.    IN      A       192.168.1.5
[/code]
注意,主机名后面带"点"的,表示是一个完整主机,不带点的,表示还要加上当前域名,比如:mail.bcomcn.com. = mail

cp localdomain.zone 192.zone
vi 192.zone
[code]
$TTL  86400
@       IN      SOA     localhost. root.bcomcn.com.  (
                                     200612230  ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
      IN      NS       localhost.
   5        IN      PTR      www.bcomcn.com.
[/code]

4.修改/etc/named.conf,加入:
[code]
zone "bcomcn.com" IN {
 type master;
 file "bcomcn.zone";
 allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
 type master;
 file "192.zone";
 allow-update { none; };
};
[/code]

启动named,将本机的DNS服务器设置为本机,用nslookup,或其它工具检测:

nslookup
> set type=mx
> bcomcn.com

(可以查看/var/log/message检查named是否正确启动,是否加载某个Domain的解析.)

Qmail的Maildir++补丁的小错误

[不指定 2006/12/25 22:18 | by ipaddr ]
好久没有用过qmail了,近日安装一台qmail邮件服务器,在一阵Patch,make setup check后出错,编译不通过!提示如下:

[code]
overmaildirquota.c:32: warning: data definition has no type or storage class
overmaildirquota.c:33: error: parse error before '}' token
overmaildirquota.c:36: error: redefinition of `ret_value'
overmaildirquota.c:32: error: `ret_value' previously defined here
overmaildirquota.c:36: warning: data definition has no type or storage class
overmaildirquota.c:37: error: parse error before '}' token
make: *** [overmaildirquota.o] Error 1
[/code]

语法错误,这问题有点奇怪,之前用Redhat9安装,没出现过此类问题.

网上搜了一下,发现原来是某些gcc加强了语法的检测,以前允许定义字符串常量跨行,现在跨行的话,必须使用\,

而在Maildir++的补丁的overmaildirquota.c里面,有这么一行:

[code]

static const char rcsid[]="$Id: overquota.c,v 1.0 2002/06/09 16:21:05 mr
sam Exp $";

[/code]

在mr后面就换行了,CentOS4.4的gcc 编译不通过,

你需要改成:

[code]

static const char rcsid[]="$Id: overquota.c,v 1.0 2002/06/09 16:21:05 mrsam_patchByIpaddr Exp $";

[/code]

(删除后面的回车,将字符串常量改成一行即可.)

再次编译通过.

lsof的常用方法

[不指定 2006/12/25 15:48 | by ipaddr ]
1) lsof abc.txt 显示开启文件abc.txt的进程
2) lsof -i :22 知道22端口现在运行什么程序
3) lsof -c nsd 显示nsd进程现在打开的文件
4) lsof -g gid 显示归属gid的进程情况
5) lsof +d /usr/local/ 显示/usr/local目录下被进程开启的文件
6) lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
7) lsof -d 4 显示使用fd为4的进程
8) lsof -i [i] 用以显示符合条件的进程情况
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4位置
service --> /etc/service中的 service name (可以不只一个)
port --> 端口号 (可以不只一个)
例子: TCP:25 - TCP and port 25
@1.2.3.4 - Internet IPv4 host address 1.2.3.4
tcp@ohaha.ks.edu.tw:ftp - TCP protocol host:ohaha.ks.edu.tw service name:ftp
9) lsof -n 不将IP转换为hostname,缺省是不加上-n参数
例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n
10) lsof -p 12 看进程号为12的进程打开了哪些文件
11) lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
+r,lsof会一直执行,直到没有档案被显示
例子:不断查看目前ftp连接的情况:lsof -i tcp@ohaha.ks.edu.tw:ftp -r
12) lsof -s 列出打开文件的大小,如果没有大小,则留下空白
13) lsof -u username 以UID,列出打开的文件
--------------
补充
--------------
查看某进程ID所打开的所有文件
lsof -p pid
lsof -i :portnum

另外一个常用命令就是通过netstat查看所有监听的端口:
netstat -lnp

Apache的Rewrite心得

[不指定 2006/12/20 18:43 | by ipaddr ]
Apache的Rewrite心得

最近公司要转移服务器,服务器上有几十个站点正在运行,希望转移的期间,服务不受影响,所以用Apache的mod_rewrite做了些处理.
大致环境是这样的,服务器有site[1-50].TA.com域名和site[1-50].TB.com域名,在开始转移服务器之前,先将site[1-50].TB.com指向新的服务器IP,同时,在新的IP上,运行Apache,将siteX.TB.com的访问Rewrite回TA.com,经过一天后,再将TB.com解析到新IP,同时,转移数据库和WEB服务到新IP,并将原来的服务器上的Apache Rewrite到SiteX.TB.com,访止部分用户缓存了DNS,导致仍然访问原服务器。

Rewrite写法大致如下:

[code]#加载mod_rewrite
LoadModule rewrite_module modules/mod_rewrite.so

#打开mod_rewrite
RewriteEngine On
#开启Log(用于调试)
RewriteLog "logs/rewrite.log"
RewriteLogLevel 9
#只将siteX,demo,support开头的域名做Rewrite
RewriteCond %{SERVER_NAME} ^(site|demo|support) [NC]
#在URI前面加上主机名
RewriteRule ^(.+) %{SERVER_NAME}$1 [C]
#将这台服务器的所有xxx.TA.com/*转到xxx.TB.com/*
RewriteRule  ^([a-z0-9]+)\.([0-9a-z\.]+)/(.*)  http://$1\.TB\.com/$3 [NC,R,L][/code]

如果Apache配置了虚拟主机的话,这个配置应写入默认虚拟主机的配置。

mod_gzip on Windows

[不指定 2006/12/20 18:33 | by ipaddr ]
This one was a difficult one to Google through (kept finding old 1.3 Apache stuff), even though the process itself is pretty quick, so I thought I'd record what I did to get mod_gzip running on Apache 2.0.48 for Windows.

1) Downloaded the zip file with the built DLL from Index of /development/apache/httpd-2.0/win32/modules
2) copied mod_gzip.so into my Apache modules directory
3) copied the settings from my_cfg.txt (contained in the zip file) into my httpd.conf
4) Got a copy of zlib.dll. Placed this in my apache bin directory.
5) Restarted the server

Web Page Analyzer verified that gzip was working and also reports that I'm about 50K lighter on the HTML (20K versus 70K).

TaskKill&TaskList的使用

[不指定 2006/12/15 08:58 | by ipaddr ]
WindowsXP,Windows2003下面有两个命令行工具可以用来列出进程和杀死进程,他们是Taskkill,Tasklist,用法分别如下:

Linux压力测试与LTP体系结构

[不指定 2006/12/09 16:49 | by ipaddr ]
一、几个问题

开始正题之前,我们先看几个问题:什么是稳定性和可靠性?什么是压力测试?为什么要进行压力测试?

什么是稳定性和可靠性?
稳定性反映的是系统不会出现异常情况;可靠性反映的是系统能够保持正常运行而不受外界影响的能力。
系统的稳定性和可靠性通常以连续运转时间和系统的可靠运行时间来度量。

什么是压力测试?
压力测试是一种破坏性的测试,即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行,是系统在正常的情况下对某种负载强度的承受能力的考验 。

为什么要进行压力测试?
通常我们用压力测试来判断系统的稳定性和可靠性。


了解了上面的问题之后,我们来看看该如何进行压力测试的设计。

LoadRunner相关时间函数

[不指定 2006/11/30 16:02 | by ipaddr ]
将以下内容,写成ipaddrtime.h,放在LoadRunner目录,就可以在Scripts里面
#include "../ipaddrtime.h"
再调用这些函数.
[code]
typedef long time_t;
struct tm {
      int tm_sec; /* seconds after the minute - [0,59] */
      int tm_min; /* minutes after the hour - [0,59] */
      int tm_hour; /* hours since midnight - [0,23] */
      int tm_mday; /* day of the month - [1,31] */
      int tm_mon; /* months since January - [0,11] */
      int tm_year; /* years since 1900 */
      int tm_wday; /* days since Sunday - [0,6] */
      int tm_yday; /* days since January 1 - [0,365] */
      int tm_isdst; /* daylight savings time flag */
#ifdef LINUX
      int tm_gmtoff;
      const char *tm_zone;
#endif
};


struct tm *globalGmt;

//取得与当前日期相差tDays天数的日期,将日期以字符串的形式存入tDate
void getDate(char * tDate,int tDays)
{
  time_t tmpTime=0;
  //取得当前的时间截
  time(&tmpTime);
  //加上tDays天,tDays可以是负数
  tDays=tDays*24*60*60;
  tmpTime=tmpTime+tDays;
  //转成tm的格式
  globalGmt=(struct tm *)gmtime(&tmpTime);
  //输出
  sprintf(tDate,"%i-%02i-%02i",globalGmt->tm_year+1900,globalGmt->tm_mon+1,globalGmt->tm_mday);
}

//将时间截转换为字符串
genDate(char * tDate,time_t tTime)
{
  struct tm *tGmt;
  tGmt=(struct tm *)gmtime(&tTime);
  sprintf(tDate,"%i-%02i-%02i",tGmt->tm_year+1900,tGmt->tm_mon+1,tGmt->tm_mday);
}

//将时间inDate加上tDate,并将结果输出到outDate
copyDate(char * inDate,char * outDate,int tDate)
{
  char strTmp[50];
  int year=2006;
  int month=10;
  int day=1;

  struct tm date;
  time_t t;

  char * strSep="-";
  int tokenNum=0;
  char * token;

  //parse date
  strcpy(strTmp,inDate);
  token=(char *)strtok(strTmp,strSep);
  if(!token)
  {
    return 0;
  }
   while(token!= NULL)
  {
    if (tokenNum==0)
    {
      year=atoi(token);
    }
    if (tokenNum==1)
    {
      month=atoi(token);
    }
    if (tokenNum==2)
    {
      day=atoi(token);
    }

       token=(char *)strtok(NULL,strSep);
    tokenNum=tokenNum+1;
   }

  date.tm_year = year-1900;
  date.tm_mon = month-1;
  date.tm_mday = day;
  date.tm_hour = 10;
  date.tm_min = 0;
  date.tm_sec = 0;

  t = mktime(&date);
  t = t + 24*60*60*tDate;

  genDate(outDate,t);
}
//以上函数可改写成从字符串到t_time类型的转换函数.[/code]

Windows下的PHP开启DomXML

[不指定 2006/11/30 11:47 | by ipaddr ]
Windows下的PHP开启DomXML

DomXMl需要iconv的支持,所以,开启DomXML需要将PHP目录下的Dlls/iconv.dll拷到windows目录,再在php.ini里面打开
extension=php_domxml.dll

此外,开启PHP的iconv,也是同样道理,需要先将iconv.dll拷到windows目录.
分页: 36/57 第一页 上页 31 32 33 34 35 36 37 38 39 40 下页 最后页 [ 显示模式: 摘要 | 列表 ]