当前位置:Linux教程 - Linux - Qmail 安装

Qmail 安装



        

    Written by [email protected]
    version 0.01

    1、条件
    我们拥有:
    * 一个顶级的域名:czlib.net;
    * 一台运行RedHat Linux 6.1的服务器,主机名mail.czlib.net。

    2、目标
    我们的要求:
    * 将mail.czlib.net作为邮件服务器;
    * 实现类似[email protected]的邮件地址;
    * 将邮件账号和系统账号分离开,以便于管理。

    3、构想
    * 使用qmail来架设邮件服务器;
    * 用vpopmail来实现邮件账号和系统账号的分离。

    4、实现
    4.1 DNS的配置
    这不是本文所着重的部分,所以不会深入去讲。首先在DNS服务器上,将
    mail.czlib.net指向正确的IP地址;然后在czlib.net域添加一条MX纪录,
    将czlib.net域的邮件服务器设置为mail.czlib.net。然后重启DNS,运行
    nslookup命令:
    [root@mail /root]# nslookup
    Default Server: dns.czlib.net
    Address: 61.132.98.126

    > set querytype=MX
    > czlib.net
    Server: dns.czlib.net
    Address: 61.132.98.126

    czlib.net preference = 20, mail exchanger = mail.czlib.net
    mail.czlib.net internet address = 61.132.98.122

    能看到类似mail exchanger的信息,就说明DNS配置完毕了。

    4.2 工具的安装
    在安装qmail之前,我们需要安装一些运行qmail所必须的工具程序。这些程序包括:
    * rblsmtpd-0.70.tar.gz
    * ucspi-tcp-0.84.tar.gz
    * daemontools-0.53.tar.gz

    安装这些工具并不麻烦,只需将他们解开后,make一下就可以了。下面了安装纪录:
    # tar zxvf rblsmtpd-0.70.tar.gz
    # cd rblsmtpd-0.70
    # make
    # make setup check
    (这将把rblsmtpd-0.70安装到/usr/local/bin下)
    # tar zxvf ucspi-tcp-0.84.tar.gz
    # cd ucspi-tcp-0.84
    # make
    # make setup check
    (这将把ucspi-tcp-0.84安装到/usr/local/bin下)
    # tar zxvf daemontools-0.53.tar.gz
    # cd daemontools-0.53
    # make
    # make setup check
    (这将把daemontools-0.53安装到/usr/local/bin下)
    注意,尽管这些工具都有了新版本,但可能

    4.3 qmail的安装
    4.3.1 建立qmail的目录
    首先保证/var下有足够的空间,
    #mkdir /var/qmail

    4.3.2 添加必要的用户
    # groupadd nofiles
    # useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
    # useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
    # useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
    # useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
    # groupadd qmail
    # useradd qmailq -g qmail -d /var/qmail -s /nonexistent
    # useradd qmailr -g qmail -d /var/qmail -s /nonexistent
    # useradd qmails -g qmail -d /var/qmail -s /nonexistent

    4.3.3 编译qmail
    # tar zxvf qmail-1.03.tar.gz
    # cd qmail-1.03
    # make setup check

    4.3.4 初步配置qmail
    # cd qmail-1.03
    # ./config
    如果你的DNS没有问题,这一步不会有什么问题,如果通不过,而且您认为你的
    DNS没有问题的话,可以试试下面的命令:
    # ./config-fast mail.czlib.net
    (实际使用时,用你的机器名来替换mail.czlib.net)

    4.3.5 安装qmail的别名
    qmail至少需要3个别名,一个是系统管理员也就是root,另两个是postmaster
    和mailer-daemon,后两个是qmail的管理员。我们需要把这三个别名转向到具体的
    人那儿。
    # cd ~alias
    # echo hefish > .qmail-root
    # echo hefish > .qmail-postmaster
    # echo hefish > .qmail-mailer-daemon
    这里我把这三个别名都指向我本人。你可以根据实际情况设置。

    4.3.6 设置qmail的启动文件
    # echo ./Maildir/ > /var/qmail/control/defaultdelivery
    然后在/var/qmail/下建立一个rc文件,内容如下:

    #!/bin/sh

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

    exec env - PATH=\"/var/qmail/bin:$PATH\" \\
    qmail-start \"`cat /var/qmail/control/defaultdelivery`\" accustamp

    然后修改/var/qmail/rc的属性,使之变为可执行。
    # chmod +x /var/qmail/rc

    4.3.7 停止Sendmail服务器
    很可能你安装RedHat Linux的时候安装并启动了Sendmail,这时候我们需要把
    它终止。当然如果你没有运行Sendmail,就可以跳过这一步。
    # killall -TERM 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/sendmail
    # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

    4.3.8 建立qmail的控制脚本
    #!/bin/sh

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

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

    case \"$1\" in
    start)
    echo -n \"Starting qmail: qmail-send\"
    supervise /var/supervise/qmail/send /var/qmail/rc |
    setuser qmaill cyclog /var/log/qmail &

    echo -n \" qmail-smtpd\"
    supervise /var/supervise/qmail/smtpd tcpserver -v -x/etc/tcp.smtp.cdb \\
    -u$QMAILDUID -g$NOFILESGID 0 smtp \\
    /var/qmail/bin/qmail-smtpd 2>&1 | setuser qmaill accustamp | \\
    setuser qmaill cyclog /var/log/qmail/smtpd &

    echo \".\"
    ;;
    stop)
    echo -n \"Stopping qmail: qmail-smtpd\"
    svc -dx /var/supervise/qmail/smtpd
    echo -n \" qmail-send\"
    svc -dx /var/supervise/qmail/send
    echo \".\"
    ;;
    stat)
    echo \"Checking qmail-send\"
    svstat /var/supervise/qmail/send
    echo \"Checking qmail-smtpd\"
    svstat /var/supervise/qmail/smtpd
    echo \"Checking queue\"
    qmail-qstat
    ;;
    doqueue|alrm)
    echo \"Sending ALRM signal to qmail-send.\"
    svc -a /var/supervise/qmail/send
    ;;
    queue)
    qmail-qstat
    qmail-qread
    ;;
    reload|hup)
    echo \"Sending HUP signal to qmail-send.\"
    svc -h /var/supervise/qmail/send
    ;;
    pause)
    echo \"Pausing qmail-send\"
    svc -p /var/supervise/qmail/send
    echo \"Pausing qmail-smtpd\"
    svc -p /var/supervise/qmail/smtpd
    ;;
    cont)
    echo \"Continuing qmail-send\"
    svc -c /var/supervise/qmail/send
    echo \"Continuing qmail-smtpd\"
    svc -c /var/supervise/qmail/smtpd
    ;;
    restart)
    echo \"Restarting qmail:\"
    echo \"* Stopping qmail-smtpd.\"
    svc -d /var/supervise/qmail/smtpd
    echo \"* Sending qmail-send SIGTERM and restarting.\"
    svc -t /var/supervise/qmail/send
    echo \"* Restarting qmail-smtpd.\"
    svc -u /var/supervise/qmail/smtpd
    ;;
    cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp*
    echo \"Reloaded /etc/tcp.smtp.\"
    ;;
    help)
    cat < 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 -- sends qmail-send ALRM, scheduling queued messages for delivery
    reload -- sends qmail-send HUP, rereading locals and virtualdomains
    queue -- shows status of queue
    alrm -- same as doqueue
    hup -- same as reload
    HELP
    ;;
    *)
    echo \"Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}\"
    exit 1
    ;;
    esac

    exit 0

    4.3.9 建立日志目录
    # mkdir -p /var/log/qmail/smtpd
    # chown qmaill /var/log/qmail /var/log/qmail/smtpd

    4.3.10 建立supervise目录
    # mkdir -p /var/supervise/qmail/send
    # mkdir /var/supervise/qmail/smtpd

    4.3.11 使控制脚本能运行
    # chmod 755 /etc/rc.d/init.d/qmail
    # ln -s /etc/rc.d/init.d/qmail /usr/local/sbin

    4.3.12 修改/etc/tcp.smtp
    在我们启动qmail的smtp服务之前,我们需要做一些访问控制,最简单的方法是
    使用/etc/目录下的一些文件,我使用/etc/tcp.smtp。最简单的例子是只包含一行
    内容:
    :allow
    它的意思是不允许允许任何机器通过它来发送邮件。为了让内部用户可以使用它
    来发送邮件。我们必须把/etc/tcp.smtp编辑成这样:
    127.0.0.1:allow,RELAYCLIENT=\"\"
    192.168.0.:allow,RELAYCLIENT=\"\"
    :allow
    我们内部的网络是192.168.0.0,如果你的内部网络不是192.168.0.0,请改成
    相应的。
    要想知道更多的访问控制,你可以使用man tcprules,来阅读它的使用手册。
    然后我们需要让这个访问控制的规则生效,
    # /usr/local/sbin/qmail cdb

    4.3.13 启动qmail
    启动qmail 已经是很容易的事情了,只要简单的使用/usr/local/sbin/qmail命
    令,就可以实现。
    # /usr/local/sbin/qmail start

    4.4 安装vpopmail
    vpopmail可以实现系统账号和邮件账号的分离。

    4.4.1 建立必须的用户和组
    vpopmail必须使用自己的用户和组来安装。
    首先保证/home目录有足够的空间。
    # groupadd vchkpw
    # useradd -g vchkpw vpopmail -d /home/vpopmail

    4.4.2 设置tcp.smtp文件
    # echo \"127.0.0.:allow,RELAYCLIENT=\\\"\\\"\" > ~vpopmail/etc/tcp.smtp

    4.4.3 编译,安装
    首先,确保自己不是root,然后将vpopmail-4.9解压缩,编译。
    $ tar zxvf vpopmail-4.9.tar.gz
    $ cd vpopmail-4.9
    $ ./configure --enable-default-domain=czlib.net
    $ make
    $ su
    # make install-strip
    这里因为我需要实现[email protected]的邮件地址,所以我设置了默认的域,
    具体你使用的时候只要改成你自己的域就可以了。

    4.4.4 建立虚拟域
    # cd /home/vpopmail/bin
    # ./vadddomain czlib.net <---增加czlib.net域
    系统会提醒你输入这个域的管理员的密码。然后程序会修改下面一些必要的qmail配置文件
    来使得qmail能支持这个新的域:
    * /var/qmail/control/locals
    * /var/qmail/control/rcpthosts
    * /var/qmail/control/morercpthosts (如果rcpthosts文件超过了50行)
    * /var/qmail/control/virtualdomains
    * /var/qmail/users/assign
    * /var/qmail/users/cdb

    4.4.5 增加/删除用户/改变用户密码
    * 增加用户
    # cd /home/vpopmail/bin
    # ./vadduser [email protected]
    系统会提示输入密码
    * 删除用户
    # cd /home/vpopmail/bin
    # ./deluser [email protected]
    * 改变用户密码
    # cd /home/vpopmail/bin
    # ./vpasswd [email protected]

    4.4.6 设置POP3服务
    设置pop3服务需要用到qmail中的qmail-popup,qmail-pop3d和vpopmail的vchkpw程序。
    我们使用下面的脚本来启动pop3服务:
    #! /bin/bash

    # Start qmail-pop3d daemon
    /usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup mail.czlib.net \\
    /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &

    我们把这个脚本存为文件/etc/rc.d/rc.pop3,并且使用chmod命令使之可以执行。

    4.5 最后的配置
    把启动qmail和pop3服务的代码放到启动文件中,让机器每次启动的时候自动运行。把下面几行命
    令写到/etc/rc.d/rc.local文件的末尾:
    # Start qmail smtpd
    /usr/local/sbin/qmail start

    # Start POP3 Service
    /etc/rc.d/rc.pop3

    现在确保你的inetd.conf里面有关pop3的一行已经被注释掉。然后就使用/etc/rc.d/rc.pop3
    命令来启动POP3服务器。
    至此整个过程结束,从别的地方发一封信到[email protected],看看能不能收到?GOOD LUCK!

    5 参考文献
    * Life with qmail
    * vpopmail INSTALL

    发布人:netbull 来自:Linux中坚站