文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Qmail install on Debian5

Qmail install on Debian5

时间:2010-06-28  来源:zlj2208

Qmail install on Debian5

zlj2208
2010-01-08
转载请注明!

ChangLog:
2010-02-01:增加Dovecot 部分
2010-02-02:增加反病毒模块安装
2010-06-28:修正部分文字描述

本文档主要针对Debian系统编写,大部分CentOS系统也基本适用。
最近看到论坛中有很几个朋友在搞qmail,遇到了很多问题,将以前的文档整理一下。由于不做SA了,没有可以随便折腾的服务器了,昨天在晚上在家里的虚拟机上安装了,将文档完善了一下,希望对初学这有帮助。 这是Qmail的最基本安装,POP3服务使用qmail自带的,如果不满足需求可以使用dovecot做为POP3和IMAP服务器,dovecot很优秀,维护也比较及时;这里也没有反垃圾邮件模块的加入,由于篇幅原因这里就不写了。 对于初学者来讲,建议先看看mail相关的RFC文档,然后搞明白各个软件之间的关系。搞清关系后,出现问题解决起来能有更清晰的思路。 Qmail 是非常优秀的Mail服务器软件,但是现在已经很多年没有更新了,如果建立一个完整的一套邮件系统需要打很多的第三方补丁。如果想系统学习邮件系统级,我还是建议大家使用Postfix 。Postfix维护比较即时,功能也很多,我使用Postfix的体会是,只有你想不到的,没有Postfix做不到的。 有很多Qmail的Fans或组织提供了整合的Qmail解决方案,可以参以下内容: http://www.qmailtoaster.com   http://qmail.jms1.net   http://www.inter7.com/vpopmail   http://www.igenus.org   http://www.lifewithqmail.org  
  本文档编辑、生成PDF均使用OpenOffice3.2.0完成。

一. 安装Qmail相关软件


系统为Debian5

准备工作
卸载exim4
   
aptitude remove exim4 exim4-base

安装编译器
     
aptitude install gcc g++ make
aptitude install openssl libssl-dev mysql-server libmysqlclient15-dev

1. 安装Qmail

1).建立qmail需要的用户

2).建立Qmail目录
         
mkdir /var/qmail


3).建立qmail和vpopmail需要的用户

建立qmail需要的用户

groupadd qmail
groupadd nofiles
useradd alias -g qmail -d /var/qmail/alias -s /bin/false
useradd qmaild -g qmail -d /var/qmail -s /bin/false
useradd qmaill -g qmail -d /var/qmail -s /bin/false
useradd qmailp -g qmail -d /var/qmail -s /bin/false
useradd qmailq -g nofiles -d /var/qmail -s /bin/false
useradd qmailr -g nofiles -d /var/qmail -s /bin/false
useradd qmails -g nofiles -d /var/qmail -s /bin/false

建立vpopmail需要的用户和组
         
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 -d /home/vpopmail -s /bin/false -p'*' vpopmail
mkdir /home/vpopmail
chown -R vpopmail.vchkpw /home/vpopmail

4).下载qmail软件包
         
cd /usr/local/src
wget http://qmail.entropy.nervhq.com/netqmail-1.06.tar.gz
tar zxvf netqmail-1.06.tar.gz

5).下载qmail补丁
         
mkdir /usr/local/src/patches cd /usr/local/src/patches
wget http://shupp.org/patches/netqmail-1.05-tls-smtpauth-20070417.patch

6).为netqmail-1.06打补丁

cd /usr/local/src/netqmail-1.06
patch < /usr/local/src/patches/netqmail-1.05-tls-smtpauth-20070417.patch

7).修改CA的过期时间,给他设置成10年,够多了吧

sed -i 's/-days 366/-days 3650/' Makefile-cert.m

8 ).如果不想让qmail支持CRAM_MD5认证方式修改下面文件
/usr/local/src/netqmail-1.06/qmail- smtpd.c

将下面代码

#define CRAM_MD5

改成

/* #define CRAM_MD5 */

9).编译安装qmail

cd /usr/local/src/netqmail-1.06
make setup check
make cert
make tmprsadh

10).配置qmail
如果正确配置了dns

cd /usr/local/src/netqmail-1.06
./config-fast

如果没配置dns使用下面命令

cd /usr/local/src/netqmail-1.06
./config-fast your.domain.name

可以使用下面命令得到fqdn主机名

hostname -f
  Qmail安装完毕.

2. 安装 ucspi-tcp


ucspi-tcp 是代替inetd的一套程序。

cd /usr/local/src
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar zxvf ucspi-tcp-0.88.tar.gz
cd /usr/local/src/ucspi-tcp-0.88
patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
make
make setup check

程序安装的位置为: /usr/local/bin

ucspi-tcp安装完毕.

3. 安装daemontools


daemontools是一套管理UNIX服务的工具。
         
mkdir -p /package
cd /package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
chmod 1755 /package
tar zxvf daemontools-0.76.tar.gz
cd /package/admin/daemontools-0.76/src
patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch
cd /package/admin/daemontools-0.76
package/install

4. 安装autorespond

         
cd /usr/local/src/
wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz
tar zxvf qmailrocks/autorespond-2.0.5.tar.gz
cd autorespond-2.0.5
make && make install

5. 安装ezmlm

ezmlm是一套邮件列表管理软件。          
cd /usr/local/src
wget http://www.inter7.com/devel/ezmlm-0.53-idx-0.41.tar.gz
tar zxvf ezmlm-0.53-idx-0.41.tar.gz
cd ezmlm-0.53-idx-0.41
make && make setup
 

6. 安装vpopmail

1). 准备工作          
mkdir ~vpopmail/etc
chown vpopmail:vchkpw ~vpopmail/etc
echo "localhost|0|vpopmail|passwd@|vpopmail" > ~vpopmail/etc/vpopmail.mysql
chown vpopmail:vchkpw ~vpopmail/etc/vpopmail.mysql
chmod 640 ~vpopmail/etc/vpopmail.mysql
mysql -u root -p -e "CREATE DATABASE vpopmail;"
mysql -u root -p -e "GRANT all ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY 'passwd@'; "

测试vpopmail用户是否能够连接数据库
         
mysql -u vpopmail -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5.0.51a-24+lenny2 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database         |
+--------------------+
| information_schema |
| vpopmail           |
+--------------------+
2 rows in set (0.00 sec)

mysql> quit

2). 编译安装vpopmail
         
cd /usr/local/src
wget http://cdnetworks-kr-1.dl.sourceforge.net/project/vpopmail/vpopmail-stable/5.4.30/vpopmail-5.4.30.tar.gz
tar zxvf vpopmail-5.4.30.tar.gz
           
cd /usr/local/src/vpopmail-5.4.30
./configure --enable-logging=v \
--enable-auth-module=mysql \
--disable-passwd \
--enable-clear-passwd \
--disable-many-domains \
--enable-auth-logging \
--enable-sql-logging \
--enable-valias \
--enable-mysql-limits
           
make && make install-strip

3).建立虚拟域和虚拟用户
         
/home/vpopmail/bin/vadddomain mydomain.com
echo mydomain.com > ~vpopmail/etc/defaultdomain
/home/vpopmail/bin/vadduser test 123456

4).检查虚拟用户是否建立正确
         
/home/vpopmail/bin/vuserinfo test

下面为输出信息
         
name:   test
passwd: $1$5AFlHref$Ms7f.rjHAe34cIJ.3.xoF.
clear passwd: 123456
comment/gecos: test
uid:    0
gid:    0
flags:  0
gecos: test1
limits: No user limits set.
dir:       /home/vpopmail/domains/mydomain.com/test
quota:     NOQUOTA
usage:     NOQUOTA
account created: Fri Jan  8 18:12:33 2010
last auth: Never logged in

二. 启动qmail

1. 系统启动脚本


建立 /var/qmail/bin/qmailctl 启动脚本
         
#!/bin/sh

# For Red Hat chkconfig
# chkconfig: - 80 30
# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

case "$1" in
  start)
    echo "Starting qmail..."
    if svok /service/qmail-send ; then
      svc -u /service/qmail-send /service/qmail-send/log
      echo "  qmail-send"
    else
      echo "qmail-send supervise not running"
    fi
    if svok /service/qmail-smtpd ; then
      svc -u /service/qmail-smtpd /service/qmail-smtpd/log
      echo "  qmail-smtpd"
    else
      echo "qmail-smtpd supervise not running"
    fi
    if svok /service/qmail-pop3d ; then
      svc -u /service/qmail-pop3d /service/qmail-pop3d/log
      echo "  qmail-pop3d"
    else
      echo "qmail-pop3d supervise not running"
    fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "  qmail-send"
    svc -d /service/qmail-send /service/qmail-send/log
    echo "  qmail-pop3d"
    svc -d /service/qmail-pop3d /service/qmail-pop3d/log
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
    ;;
  stat)
    svstat /service/qmail-send
    svstat /service/qmail-send/log
    svstat /service/qmail-smtpd
    svstat /service/qmail-smtpd/log
    svstat /service/qmail-pop3d
    svstat /service/qmail-pop3d/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /service/qmail-send
    echo "Sending HUP signal to qmail-smtpd."
    svc -h /service/qmail-smtpd
    echo "Sending HUP signal to qmail-pop3d."
    svc -h /service/qmail-pop3d
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /service/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /service/qmail-smtpd
    echo "Pausing qmail-pop3d"
    svc -p /service/qmail-pop3d
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /service/qmail-smtpd
    echo "Continuing qmail-pop3d"
    svc -c /service/qmail-pop3d
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "* Restarting qmail-smtpd."
    svc -u /service/qmail-smtpd /service/qmail-smtpd/log
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /service/qmail-send /service/qmail-send/log
    echo "* Stopping qmail-pop3d."
    svc -d /service/qmail-pop3d /service/qmail-pop3d/log
    echo "* Restarting qmail-pop3d."
    svc -u /service/qmail-pop3d /service/qmail-pop3d/log
    ;;
  cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp.cdb
    echo "Reloaded /etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
  flush -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0
#end of qmailctl

赋予脚本执行权限,并建立相关连接
         
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
ln -s /var/qmail/bin/qmailctl /etc/init.d/qmaild

2. 建立 supervise 脚本

建立 supervise 目录          
mkdir -p /var/qmail/supervise/qmail-send/log \
/var/qmail/supervise/qmail-smtpd/log \
/var/qmail/supervise/qmail-pop3d/log

然后建立log文件目录
         
mkdir -p /var/log/qmail/smtpd \
/var/log/qmail/send \
/var/log/qmail/pop3d
chown -R qmaill /var/log/qmail

1). 建立 /var/qmail/rc 文件
         
#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="$PATH:/var/qmail/bin" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
#end of /var/qmail/rc

echo ./Maildir/ > /var/qmail/control/defaultdelivery


2). 建立 qmail-send 脚本
建立 /var/qmail/supervise/qmail-send/run 文件
         
#!/bin/sh
exec /var/qmail/rc


建立 /var/qmail/supervise/qmail-send/log/run 文件
         
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/send

3).建立 qmail-smtpd 脚本
建立 /var/qmail/supervise/qmail-smtpd/run 文件
           
#!/bin/sh

QMAILDUID=`id -u vpopmail` NOFILESGID=`id -g vpopmail`

MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
        echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
        echo /var/qmail/supervise/qmail-smtpd/run
        exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
        echo "No /var/qmail/control/rcpthosts!"
        echo "Refusing to start SMTP listener because it'll create an open relay"
        exit 1
fi

exec /usr/local/bin/softlimit -m 40000000 \
        /usr/local/bin/tcpserver -v -H -R -l "$LOCAL" \
        -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
        /var/qmail/bin/qmail-smtpd \
        /home/vpopmail/bin/vchkpw /bin/true 2>&1

建立 concurrencyincoming 控制文件
         
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming

注意: 根据你的操作系统和硬件平台的不同, 可能需要调整softlimit命令的的内存限制参数. 如果你的系统出现连接25端口失败和无法接收远程系统发送的邮件, 或者看到了类似下面这样的错误消息:
         
  /usr/local/bin/tcpserver: error while loading shared libraries:
  libc.so.6: failed to map segment from shared object: Cannot
  allocate memory

试一下把这个参数调整到4000000或者更大.

建立 /var/qmail/supervise/qmail-smtpd/log/run 文件
         
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

4). 配置pop3脚本
建立  /var/qmail/supervise/qmail-pop3d/run 文件

#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup 127.0.0.1 \
/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1

建立 /var/qmail/supervise/qmail-pop3d/log/run 文件
         
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/pop3d 2>&1

5).设置脚本的可执行权限
         
chmod 755 /var/qmail/rc   chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
chmod 751 /var/qmail/supervise/qmail-pop3d/run
chmod 751 /var/qmail/supervise/qmail-pop3d/log/run

6).建立 supervise 目录到 /service 目录的链接
         
ln -s /var/qmail/supervise/qmail-send \
/var/qmail/supervise/qmail-smtpd \
/var/qmail/supervise/qmail-pop3d \
/service

/service 目录是 daemontools 安装时建立的目录.
注意: 建立这个链接之后 qmail 系统会很快自动被启动起来。

7).SMTP访问控制
允许本地主机通过SMTP方式发送邮件,/etc/tcp.smtp 为tcprules的配置文件,如果配置可以设定哪些IP允许访问,哪些IP不允许访问。
         
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
qmailctl cdb

8).启动qmail服务器方法
可以使用qmailctl命令来控制qmail的启动、运行、查看状态等。

启动qmail
         
qmailctl start

停止qmail
         
qmailctl stop

重启动qmail
         
qmailctl restart

查看qmail状态
         
qmailctl stat

查看qmail队列
         
qmailctl queue


9).使用qmail的sendmail程序替换原有的sendmail程序
         
mv /usr/lib/sendmail /usr/lib/sendmail.old
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin

10).建立系统别名文件
建立这些系统别名, 取决于你想让这些邮件发送到哪里(一个本地用户或者一个远程地址)并且适当的创建一个.qmail 文件集合. 举个例子, 加入你想让本地用户 dave 接收发给系统管理员和邮件管理员的邮件, 就这么作:
         
echo YourUser > /var/qmail/alias/.qmail-root
echo YourUser > /var/qmail/alias/.qmail-postmaster
ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-abuse
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

11).重启动qmail
         
qmailctl restart

检查进行是否存在
         
ps uxawww
  大概存在的进程          
root 2103 0.2 0.4 2808 1252 ? Ss 19:21 0:00 /bin/sh /command/svscanboot
root 2112 0.3 0.1 1780 372 ? S 19:21 0:00 svscan /service
root 2113 0.1 0.1 1608 276 ? S 19:21 0:00 readproctitle service errors: .............................................................................
.............................................................................
...................................................
root 2115 0.1 0.1 1620 324 ? S 19:21 0:00 supervise qmail-smtpd
root 2116 0.1 0.1 1620 328 ? S 19:21 0:00 supervise log
root 2117 0.1 0.1 1620 328 ? S 19:21 0:00 supervise qmail-send
root 2118 0.1 0.1 1620 328 ? S 19:21 0:00 supervise log
vpopmail 2119 0.4 0.2 1824 568 ? S 19:21 0:00 /usr/local/bin/tcpserver -v -H -R -l debian5.mydomain.com -x /etc/tcp.smtp.cdb -c 20 -u 89 -g 89 0 smtp /usr/local/bin/rblsmtpd -r bl.spamcop.net /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true
root 2120 0.1 0.1 1620 324 ? S 19:21 0:00 supervise qmail-pop3d
qmaill 2121 0.3 0.1 1628 324 ? S 19:21 0:00 /usr/local/bin/multilog t /var/log/qmail/smtpd
root 2122 0.1 0.1 1620 328 ? S 19:21 0:00 supervise log
qmails 2123 0.7 0.1 1796 408 ? S 19:21 0:00 qmail-send
qmaill 2125 0.3 0.1 1628 320 ? S 19:21 0:00 /usr/local/bin/multilog t /var/log/qmail/send
root 2126 0.2 0.1 1644 332 ? S 19:21 0:00 tcpserver -H -R -v -c100 0 110 qmail-popup 127.0.0.1 /home/vpopmail/bin/vchkpw qmail-pop3d Maildir
qmaill 2127 0.4 0.1 1628 324 ? S 19:21 0:00 multilog t s100000 n20 /var/log/qmail/pop3d
root 2134 0.0 0.1 1760 348 ? S 19:21 0:00 qmail-lspawn ./Maildir/qmailr 2135 0.0 0.1 1756 344 ? S 19:21 0:00 qmail-rspawn
qmailq 2136 0.0 0.1 1748 360 ? S 19:21 0:00 qmail-clean

三. 测试收发邮件

1. 发信测试


建立base64编码脚本/usr/local/bin/base64.pl  
         
#!/usr/bin/perl -w
use strict;
use MIME::Base64;
print "Press Enter to exit. \n";
print "Input you string: ";
my $line;
while( $line = <STDIN> )
{
  if( $line ne "\n" ){
    chomp($line) ;
    print "Base64 encode is : " . encode_base64($line) ;
    print "Input you string: ";
  }
  else
  {
    exit;
  }
}

赋予脚本执行权限
         
chmod 755 /usr/local/bin/base64.pl
           
/usr/local/bin/base64.pl
Press Enter to exit.
Input you string: [email protected]
Base64 encode is : dGVzdEBteWRvbWFpbi5jb20=
Input you string: 123456
Base64 encode is : MTIzNDU2
Input you string:  

测试发邮件
         
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 debian5.mydomain.com ESMTP
ehlo localhost
250-debian5.mydomain.com
250-STARTTLS
250-PIPELINING
250-8BITMIME
250-SIZE 0
250 AUTH LOGIN PLAIN
auth login
334 VXNlcm5hbWU6
dGVzdEBteWRvbWFpbi5jb20=
334 UGFzc3dvcmQ6
MTIzNDU2
235 ok, go ahead (#2.0.0)
mail from:[email protected]
250 ok
rcpt to:[email protected]
250 ok
data
354 go ahead
subject:test mail
from:[email protected]
to:[email protected]
test mail
test mail
.
250 ok 1262994953 qp 16522
quit
221 debian5.mydomain.com
Connection closed by foreign host.

2. 收信测试


telnet 192.168.1.80 110
+OK <[email protected]>
user [email protected]
+OK
pass 123456
+OK
list
+OK
1 349
.
retr 1
+OK
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: (qmail 16522 invoked by uid 89); 8 Jan 2010 23:55:13 -0000
Received: from unknown (HELO localhost) ([email protected]@127.0.0.1)
  by debian5.mydomain.com with ESMTPA; 8 Jan 2010 23:55:13 -0000
subject:test mail
from:[email protected]
to:[email protected]
test mail
test mail

.
quit
+OK


3. 日志文件

无论做什么一定要养成看日志文件的好习惯。

通过以下日志可以使用下面命令,查看准确时间
         
tail /var/log/qmail/xxxx/current | tai64nlocal  

Smtpd日志文件 /var/log/qmail/smtpd/current
send日志文件 /var/log/qmail/send/current
pop3d日志文件 /var/log/qmail/pop3d/current
查看日志          
tail /var/log/qmail/smtpd/current -f | tai64nlocal  
  日志内容如下          
2010-01-08 18:52:16.810445500 tcpserver: status: 0/20
2010-01-08 18:52:46.334378500 tcpserver: status: 1/20
2010-01-08 18:52:46.340859500 tcpserver: pid 16515 from 127.0.0.1
2010-01-08 18:52:46.345675500 tcpserver: ok 16515 debian5.mydomain.com:127.0.0.1:25 :127.0.0.1::37304
2010-01-08 18:53:59.169586500 tcpserver: end 16515 status 0
2010-01-08 18:53:59.169597500 tcpserver: status: 0/20
2010-01-08 18:54:06.275185500 tcpserver: status: 1/20
2010-01-08 18:54:06.275196500 tcpserver: pid 16519 from 127.0.0.1
2010-01-08 18:54:06.275204500 tcpserver: ok 16519 debian5.mydomain.com:127.0.0.1:25 :127.0.0.1::37305
2010-01-08 18:55:56.105737500 tcpserver: end 16519 status 0
2010-01-08 18:55:56.105749500 tcpserver: status: 0/20

查看日志
         
tail /var/log/qmail/send/current -f | tai64nlocal

日志内容如下
         
2010-01-08 18:34:57.871522500 status: local 0/10 remote 0/20
2010-01-08 18:51:18.937726500 status: exiting
2010-01-08 18:52:16.729858500 status: local 0/10 remote 0/20
2010-01-08 18:55:53.945775500 new msg 76048
2010-01-08 18:55:53.945786500 info msg 76048: bytes 284 from <[email protected]> qp 16522 uid 89
2010-01-08 18:55:54.014909500 starting delivery 1: msg 76048 to local [email protected]
2010-01-08 18:55:54.014920500 status: local 1/10 remote 0/20
2010-01-08 18:55:54.172419500 delivery 1: success: did_0+0+1/
2010-01-08 18:55:54.172429500 status: local 0/10 remote 0/20
2010-01-08 18:55:54.175344500 end msg 76048
  查看日志          
tail /var/log/qmail/pop3d/current | tai64nlocal  

日志内容如下
         
2010-01-08 19:01:45.169535500 tcpserver: status: 1/100
2010-01-08 19:01:45.169551500 tcpserver: pid 16531 from 127.0.0.1
2010-01-08 19:01:45.197221500 tcpserver: ok 16531 localhost:127.0.0.1:110 :127.0.0.1::46660
2010-01-08 19:01:53.033122500 tcpserver: end 16531 status 256
2010-01-08 19:01:53.033133500 tcpserver: status: 0/100
2010-01-08 19:03:03.102296500 tcpserver: status: 1/100
2010-01-08 19:03:03.102307500 tcpserver: pid 16534 from 192.168.1.100
2010-01-08 19:03:03.122798500 tcpserver: ok 16534 :192.168.1.80:110 :192.168.1.100::50031
2010-01-08 19:04:43.578479500 tcpserver: end 16534 status 256
2010-01-08 19:04:43.578508500 tcpserver: status: 0/100

vpopmail日志文件 /var/log/mail.log
         
shell# tail /var/log/mail.log
Jan  8 18:35:42 debian5 vpopmail[16417]: vchkpw-webmail: (PLAIN) login success [email protected]:127.0.0.1
Jan  8 18:36:41 debian5 vpopmail[16425]: vchkpw-webmail: vpopmail user not found [email protected]:127.0.0.1
Jan  8 18:37:16 debian5 vpopmail[16428]: vchkpw-webmail: (PLAIN) login success [email protected]:127.0.0.1
Jan  8 18:44:47 debian5 vpopmail[16445]: vchkpw-webmail: (PLAIN) login success [email protected]:127.0.0.1
Jan  8 18:53:10 debian5 vpopmail[16516]: vchkpw-smtp: (PLAIN) login success [email protected]:127.0.0.1
Jan  8 18:54:36 debian5 vpopmail[16520]: vchkpw-smtp: (PLAIN) login success [email protected]:127.0.0.1
Jan  8 19:03:28 debian5 vpopmail[16535]: vchkpw-pop3: (PLAIN) login success [email protected]:192.168.1.100

四. 安装POP3/IMAP4软件

1. 安装doevcot  

1). 下载 doevcot 软件包 doevcot 的官方网站:http://www.dovecot.org/            
cd /usr/local/src/
wget http://www.dovecot.org/releases/1.2/dovecot-1.2.9.tar.gz
tar zxvf dovecot-1.2.9.tar.gz
  2). 编译安装doevcot          
./configure \
--with-vpopmail \
--with-ssl=openssl \
--without-passwd \
--without-passwd-file \
--without-shadow \
--without-pam \
--without-checkpassword \
--without-bsdauth \
--without-gssapi \
--without-sia \
--without-ldap \
--without-static-userdb \
--without-prefetch-userdb \
--without-sql \
--without-pgsql \
--without-mysql \
--without-sqlite
           
make
make install

3). 建立dovecot用户
         
useradd -d /dev/null -s /bin/false -c 'Dovecot user' dovecot

2. 配置doevcot


1). 建立dovecot配置文件

如果在编译时候没有指定配置文件的位置,那么会在 /usr/local/etc/ 路径下生成配置文件的样例,可以用来参考,文件名为dovecot.conf 。dovecot的配置相对比较简单,可以参照dovecot的官方wiki进行配置,上面内容很详细。
建立 /usr/local/etc/dovecot.conf 文件,内容如下:
         
## Basic config
base_dir = /usr/local/var/run/dovecot/
protocols = imap
disable_plaintext_auth = no
shutdown_clients = yes
## Logging
#auth_verbose=yes
#auth_debug=yes
#auth_debug_passwords=yes
#mail_debug=yes
#log_path = /dev/stderr
#info_log_path = /dev/stderr
#log_timestamp = ""
## SSL settings
ssl_cert_file = /var/qmail/control/servercert.pem
ssl_key_file = /var/qmail/control/servercert.pem
#verbose_ssl = yes
## Login processes
login_dir = /usr/local/var/run/dovecot/login
login_user = dovecot
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 128
## Mailbox locations and namespaces
mail_location = maildir:~/Maildir
namespace private {
        separator = .
        prefix = INBOX.
        inbox = yes
}
## Mail processes
verbose_proctitle = yes
first_valid_uid = 89
last_valid_uid = 89
## Maildir-specific settings
maildir_copy_with_hardlinks = yes
maildir_copy_preserve_filename = no
## IMAP specific settings
protocol imap {
        #listen = 127.0.0.1:143
        mail_plugins = quota imap_quota
}
## POP3 specific settings
protocol pop3 {
        #listen = 127.0.0.1:110
        pop3_no_flag_updates = no
        pop3_uidl_format = %v-%u
        mail_plugins = quota
}
## Authentication processes
auth default {
        mechanisms = plain
        passdb vpopmail {
                args =
        }
        userdb vpopmail {
        }
        user = vpopmail
        count = 1
}
## Plugin settings
plugin {
        quota = maildir
}

2). 建立dovecot运行是需要的目录
         
mkdir -m 0755 /usr/local/var \
/usr/local/var/run \
/usr/local/var/run/dovecot

3). 建立dovecot启动脚本

    dovecot的安装包中有一个Sys V风格的脚本,将其复制到 /etc/init.d/ 目录下,并赋予执行权限即可。
         
cp /usr/local/src/dovecot-1.2.9/doc/dovecot-initd.sh /etc/init.d/dovecot
chmod 755 /etc/init.d/dovecot

3. 启停止dovecot

1). 启动dovecot          
/etc/init.d/dovecot start

在启动 dovecot 的时候会有下面一些提示:
         
If you have trouble with authentication failures,
enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork
This message goes away after the first successful login.

如果不想在启动的时候出现这些信息,按照如下方法修改启动脚本

在 /etc/init.d/dovecot 脚本中找到 start 和 restart 部分进行修改。

将start 和restart中的 $DAEMON 做下面修改:
         
$DAEMON
改成          
$DAEMON >/dev/null

2). 停止dovecot
         
/etc/init.d/dovecot stop

3). 重启动dovecot
         
/etc/init.d/dovecot restart

4). 重新加载 dovecot 配置
         
/etc/init.d/dovecot reload

4. 测试IMAP4服务器

通过telnet命令测试IMAP服务器是否启动          
shell# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN] Dovecot ready.
a login test 123456
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH QUOTA] Logged in
a list "" *
* LIST (\HasChildren) "." "INBOX"
* LIST (\HasNoChildren) "." "INBOX.Trash"
* LIST (\HasNoChildren) "." "INBOX.Drafts"
* LIST (\HasNoChildren) "." "INBOX.Sent"
a OK List completed.
a select inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 16 EXISTS
* 0 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1264947842] UIDs valid
* OK [UIDNEXT 17] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
a OK [READ-WRITE] Select completed.
a search all
* SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
a OK Search completed (0.001 secs).
a fetch 1 rfc822
* 1 FETCH (FLAGS (\Seen) RFC822 {344}
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: (qmail 14977 invoked by uid 89); 24 Jan 2010 11:36:47 -0500
Received: from localhost ([email protected]@127.0.0.1)
  by debian5.mydomain.com with SMTP; 24 Jan 2010 11:36:47 -0500
subject:test mail
from:[email protected]
to:[email protected]
lafskjlas
jalfjal
)
a OK Fetch completed.
a logout
* BYE Logging out
a OK Logout completed.
Connection closed by foreign host.

五. 安装反垃圾邮件和反病毒模块

Qmail 在邮件病毒防护和反垃圾邮件的大体流程是这样的,Qmail收到邮件后,将queue中邮件交给 Qmail Scanner (或者 SimScan )处理,然后经由Qmail Scanner (或者 SimScan )交给 ClamAV 和 SpamAssassin 处理。
Qmail Scanner (或者 SimScan )的区别在于Qmail Scanner是用 perl 写的,SimScan 是用 C 写的,本例已 SimScan 为例。
由于邮件病毒防护和反垃圾邮件比较复杂,根据自己的需要,还需要调整相关参数。

1. 安装clamav

Clam AntiVirus 是一款 UNIX 下开源的 (GPL) 反病毒工具包,专为邮件网关上的电子邮件扫描而设计。该工具包提供了包含灵活且可伸缩的监控程序、命令行扫描程序以及用于自动更新数据库的高级工具在内的大量实用程序。该工具包的核心在于可用于各类场合的反病毒引擎共享库。
官方网站:http://www.clamav.net/
           
aptitude install clamav-base clamav-daemon clamav-data

2. 安装SpamAssassin

SpamAssassin是一套邮件内容过滤软件,是用perl编写的。现在由Apache基金会维护。想了解更多内容,请参阅官方网站:http://spamassassin.apache.org/  。Debian中自带了SpamAssassin套件,因此使用atp命令安装,省去了编译安装的步骤。          
aptitude install spamassassin


在Debian系统中,默认SpamAssassin 是不启动的,所以想启动SpamAssassin 需要修改SpamAssassin的配置文件: /etc/default/spamassassin  
         
ENABLED=0

改成

ENABLED=1


修改 SpamAssassin 配置文件 /etc/mail/spamassassin/local.cf

< /font>定义垃圾邮件标题
         
rewrite_header Subject *****SPAM*****

定一垃圾邮件分数
         
required_score 7.0

3. 安装 ripmime

Ripmime的主要功能是解码邮件附件中的内容,由PLDaniels编写的。
下载地址:http://pldaniels.com/ripmime/

cd /usr/local/src/
wget http://pldaniels.com/ripmime/ripmime-1.4.0.9.tar.gz
cd ripmime-1.4.0.9
make
make install

4. 安装SimScan

SimScan 是用来在SMTP会话阶段阻止病毒、垃圾邮件、特定附件的一个应用程序,因此会在处理邮件的过程中占用一些时间。这个项目是开源的,是基于C语言开发的,虽然很小,但非常有效。 下载地址:http://www.inter7.com/simscan/

cd /usr/local/src/
wget http://cdnetworks-kr-1.dl.sourceforge.net/project/simscan/simscan/simscan-1.4.0/simscan-1.4.0.tar.gz

tar zxvf simscan-1.4.0.tar.gz
cd /usr/local/src/simscan-1.4.0

./configure --enable-user=clamav \
--enable-clamav=y \
--enable-spam=y \
--enable-spam-passthru=y \
--enable-per-domain=y \
--enable-ripmime \
--enable-attach=y \
--enable-received=y \
--enable-clamavdb-path=/var/clamav

make
make install-strip

添加默认规则
建立 /var/qmail/control/simcontrol 文件,增加如下内容

:clam=yes,spam=yes,spam_passthru=yes,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif

在命名行执行下面两个命令

/var/qmail/bin/simscanmk

/var/qmail/bin/simscanmk -g

开启SicScan
修改 /etc/tcp.smtp 文件,增加如下内容

:allow,QMAILQUEUE="/var/qmail/bin/simscan"

重新生成cdb文件
         
qmailctl cdb

如需要打开 SimScaner 的日志,修改smtp run脚本 /var/qmail/supervise/qmail-smtpd/run ,SIMSCAN_DEBUG 日志调试级别 0-4 ,数值越大越详细;SIMSCAN_DEBUG_FILES是病毒扫描的调参数。       

export SIMSCAN_DEBUG=4
export SIMSCAN_DEBUG_FILES=2


5. 测试


使用ThunderBird 或者其他的邮件客户端发送邮件,看邮件日志是否有内容过滤的相关信息。同时查看邮件信头,如果配置正确信头中会有相关的记录。

以上是基本步骤,具体内容可以参考每个软件的帮助文档,里面有非常详细的介绍。

Webmail有很多种,如: Squirrelmail、OpenWebmail、Horde-webmail、Roundcubemail、Extmail等。找个适合自己的吧,先不写了,等有时间在写。  
排行榜 更多 +
泡龙大闯关安卓版

泡龙大闯关安卓版

冒险解谜 下载
割草派对安卓版

割草派对安卓版

飞行射击 下载
堡垒攻防战安卓版

堡垒攻防战安卓版

飞行射击 下载