免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 18849 | 回复: 35
打印 上一主题 下一主题

[Mail] [原创]Qmail install on Debian5 [2010-02-01增加Dovecot 部分和反垃圾邮件] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-09 10:46 |只看该作者 |倒序浏览
本帖最后由 zlj2208 于 2010-06-30 20:48 编辑

Qmail install on Debian5

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


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


本文档主要针对Debian系统编写,大部分Redhat/Fedora/CentOS系统也基本适用。

最近看到论坛中有很几个朋友在搞qmail,遇到了很多问题,将以前的文档整理一下。由于不做SA了,没有可以随便折腾的服务器了,昨天在晚上在家里的虚拟机上安装了,将文档完善了一下,希望对初学这有帮助。

这是Qmail的最基本安装,POP3服务使用qmail自带的,如果不满足需求可以使用dovecot做为POP3和IMAP服务器,dovecot很优秀,维护也比较及时;这里也没有反垃圾邮件模块的加入,由于篇幅原因这里就不写了。

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/


一. 安装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补丁
cd /usr/local/src/patches
wget http://shupp.org/patches/netqmai ... auth-20070417.patch


6).为netqmail-1.06打补丁
cd /usr/local/src/netqmail-1.06
patch < /usr/local/src/patchs/netqmail-1.05-tls-smtpauth-20070417.patch


7).修改CA的过期时间,给他设置成10年,够多了吧
sed -i 's/-days 366/-days 3650/' Makefile-cert.mk


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


设置证书文件权限
chown vpopmail.vchkpw /var/qmail/control/servercert.pem


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


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 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.source ... pmail-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
    ;;
  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 /usr/local/bin/rblsmtpd \
        -r bl.spamcop.net /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


注意: concurrencyincoming并不是标准的qmail控制文件. 它是上面脚本的一个要素. 并且, 第一个LOCAL 行上面的是"破折号 + 数字1", 下面的tcpserver行上的参数是"破折号 + 小写字母l" . (由于英文小写字母l和数字1容易混淆, 原作者特意补充的注意事项. 由译者将被提到两行修改成为红色. 这也是为什么作者希望读者直接拷贝脚本而不是自行输入避免脚本出错的主要原因之一. 另外注意这个脚本中很多字体很小的引号和反引号. 译者注)
注意: 根据你的操作系统和硬件平台的不同, 可能需要调整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).启动qmail服务器方法
可以使用qmailctl命令来控制qmail的启动、运行、查看状态等。

启动qmail
qmailctl start

停止qmail
qmailctl stop

重启动qmail
qmailctl restart

查看qmail状态
qmailctl stat

查看qmail队列
qmailctl queue


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


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


[ 本帖最后由 zlj2208 于 2010-1-23 14:28 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2010-01-09 10:47 |只看该作者

[原创]Qmail install on Debian5 [续]

本帖最后由 zlj2208 于 2010-06-29 14:47 编辑

三. 测试

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: test@mydomain.com
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:test@mydomain.com
250 ok
rcpt to:test@mydomain.com
250 ok
data
354 go ahead
subject:test mail
from:test@mydomain.com
to:test@mydomain.com
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 <16534.1262995383@127.0.0.1>
user test@mydomain.com
+OK
pass 123456
+OK
list
+OK
1 349
.
retr 1
+OK
Return-Path: <test@mydomain.com>
Delivered-To: test@mydomain.com
Received: (qmail 16522 invoked by uid 89); 8 Jan 2010 23:55:13 -0000
Received: from unknown (HELO localhost) (test@mydomain.com@127.0.0.1)
  by debian5.mydomain.com with ESMTPA; 8 Jan 2010 23:55:13 -0000
subject:test mail
from:test@mydomain.com
to:test@mydomain.com
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 <test@mydomain.com> qp 16522 uid 89
2010-01-08 18:55:54.014909500 starting delivery 1: msg 76048 to local mydomain.com-test@mydomain.com
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

tail /var/log/mail.log
Jan  8 18:35:42 debian5 vpopmail[16417]: vchkpw-webmail: (PLAIN) login success test@mydomain.com:127.0.0.1
Jan  8 18:36:41 debian5 vpopmail[16425]: vchkpw-webmail: vpopmail user not found test@mydmain.com:127.0.0.1
Jan  8 18:37:16 debian5 vpopmail[16428]: vchkpw-webmail: (PLAIN) login success test@mydomain.com:127.0.0.1
Jan  8 18:44:47 debian5 vpopmail[16445]: vchkpw-webmail: (PLAIN) login success test@mydomain.com:127.0.0.1
Jan  8 18:53:10 debian5 vpopmail[16516]: vchkpw-smtp: (PLAIN) login success test@mydomain.com:127.0.0.1
Jan  8 18:54:36 debian5 vpopmail[16520]: vchkpw-smtp: (PLAIN) login success test@mydomain.com:127.0.0.1
Jan  8 19:03:28 debian5 vpopmail[16535]: vchkpw-pop3: (PLAIN) login success test@mydomain.com:192.168.1.100



终于发完了,好累啊!

--------------------------------------------------------------------------------------------
2010-02-01 更新
四. 安装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: <test@mydomain.com>
Delivered-To: test@mydomain.com
Received: (qmail 14977 invoked by uid 89); 24 Jan 2010 11:36:47 -0500
Received: from localhost (test@mydomain.com@127.0.0.1)
  by debian5.mydomain.com with SMTP; 24 Jan 2010 11:36:47 -0500
subject:test mail
from:test@mydomain.com
to:test@mydomain.com
lafskjlas
jalfjal
)
a OK Fetch completed.
a logout
* BYE Logging out
a OK Logout completed.
Connection closed by foreign host.


--------------------------------------------------------------------------------------------
2010-02-02 更新
五.  安装反垃圾邮件和反病毒模块

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

定义垃圾邮件标题

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.source ... imscan-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等。找个适合自己的吧,先不写了,等有时间在写。

论坛徽章:
0
3 [报告]
发表于 2010-01-09 11:16 |只看该作者
lz辛苦了,支持一下

论坛徽章:
0
4 [报告]
发表于 2010-01-09 13:48 |只看该作者

Qmail install on Debian5 PDF文档

本帖最后由 zlj2208 于 2010-06-29 14:54 编辑

增加了PDF格式文件下载。
2010-06-29重新上传。
Qmail install on Debian5

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
5 [报告]
发表于 2010-01-10 20:26 |只看该作者
顶你!

论坛徽章:
0
6 [报告]
发表于 2010-01-11 10:01 |只看该作者

回复 #4 zlj2208 的帖子

不错 支持一下 楼主威武~~~~~
随便问一下楼主
我是在本机测试的
没有配置DNS  那么我./config-fast的时候 后面应该写什么呢?

以及后面我的pop3 的run文件中的域名又是如何定义的呢?

论坛徽章:
0
7 [报告]
发表于 2010-01-11 11:38 |只看该作者
./config-fast 后面加入你的标准主机名就行了。
实际上就是/etc/hosts里面的内容,可以使用 hostname -f 命令得到 fqdn 主机名,而这个主机名取决于你在安装的时候是怎么填写的。

pop3 的run文件中写127.0.0.1就可了。


原帖由 ppiqq 于 2010-1-11 10:01 发表
不错 支持一下 楼主威武~~~~~
随便问一下楼主
我是在本机测试的
没有配置DNS  那么我./config-fast的时候 后面应该写什么呢?

以及后面我的pop3 的run文件中的域名又是如何定义的呢?

[ 本帖最后由 zlj2208 于 2010-1-11 11:43 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2010-01-12 14:31 |只看该作者
多谢楼主 已经起来了
要是楼主不辞辛苦 再把邮件过滤啥的写写的话 那就更好了

论坛徽章:
0
9 [报告]
发表于 2010-01-13 16:58 |只看该作者
LZ,我刚才按照你的步骤做了,可是发送的测试邮件一直在队列中,发送不出去

qmailctl stat的结果是这样

root@debian:/var/qmail/bin# ./qmailctl stat
/service/qmail-send: up (pid 21668) 0 seconds
/service/qmail-send/log: up (pid 18481) 1302 seconds
/service/qmail-smtpd: up (pid 18484) 1302 seconds
/service/qmail-smtpd/log: up (pid 18486) 1302 seconds
/service/qmail-pop3d: up (pid 18491) 1302 seconds
/service/qmail-pop3d/log: up (pid 18492) 1302 seconds
messages in queue: 1
messages in queue but not yet preprocessed: 1


/var/log/qmail/send/current  send日志为空

[ 本帖最后由 lasama 于 2010-1-13 17:00 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2010-01-13 17:47 |只看该作者
qmail-send: up (pid 21668) 0 seconds

这个问题搞定了,是/var/qmail/rc 没可执行权限

不过邮件还是在队列中,无法发送出去
/var/log/qmail/send/current 日志里面有这么一段

@400000004b4d957a1a5b7984 delivery 8: deferral: Uh-oh:_first_line_of_.qmail_file_is_blank._(#4.2.1)/
@400000004b4d957a1a5b7984 status: local 0/10 remote 0/20
@400000004b4d95b61a50c73c starting delivery 9: msg 449541 to local victor@mydomain.com
@400000004b4d95b61a50cf0c status: local 1/10 remote 0/20
@400000004b4d95b61a528c5c delivery 9: deferral: Uh-oh:_first_line_of_.qmail_file_is_blank._(#4.2.1)/
@400000004b4d95b61a529044 status: local 0/10 remote 0/20
@400000004b4d95df1a4f503c starting delivery 10: msg 449545 to local victor@mydomain.com
@400000004b4d95df1a4f580c status: local 1/10 remote 0/20
@400000004b4d95df1a5128e4 delivery 10: deferral: Uh-oh:_first_line_of_.qmail_file_is_blank._(#4.2.1)/
@400000004b4d95df1a5128e4 status: local 0/10 remote 0/20

还没查到原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP