当前位置:操作系统 > Unix/Linux >>

用qmail建部门邮件服务器

今天用qmail配了一个部门用的邮件服务器,只实现简单的smtp/pop3收发信。

  实现WebMail、虚拟域可参见其它的贴子。

  一、安装环境

  安装平台:RedHat Linux 7.3

  安装的机器: mail.mydomain.com

  软件包:

  qmail-1.03 qmail基本系统

  ucspi-tcp-0.88 tcpsever等服务程序

  daemontools-0.76 监视工具

  checkpassword-0.90 pop3验证用户的程序

  软件来源:

  http://www.qmail.org

  http://cr.yp.to/

  http://inter7.com/main.html

  注意:每个包安装前务必先仔细阅读INSTALL和FAQ,很多问题在FAQ都有解决方法。

  二、安装步骤

  1、准备工作

  删除sendmail

  # rpm -e --nodeps sendmail

  2、安装qmail

  1)创建qmail安装目录

  #mkdir /var/qmail

  2)添加qmail必需的用户和组

  #groupadd nofiles

  #useradd -g nofiles -d /var/qmail/alias alias

  #useradd -g nofiles -d /var/qmail qmaild

  #useradd -g nofiles -d /var/qmail qmaill

  #useradd -g nofiles -d /var/qmail qmailp

  #groupadd qmail

  #useradd -g qmail -d /var/qmail qmailq

  #useradd -g qmail -d /var/qmail qmailr

  #useradd -g qmail -d /var/qmail qmails

  3)解压、解包和编译

  (假设这些包都下载到/tmp目录下)

  #cd /tmp

  #tar xzvf qmail-1.03.tar.gz

  #cd qmail-1.03

  进入qmail目录后,仔细阅读一下README和INSTALL文件.然后开始编译qmail

  打DNS补丁

  #vi dns.c

  跳到24行将PACKETSZ改为65536

  #make setup check

  4)配置

  #./config

  或

  #./config-fast mail.mydomain.com

  5)建立系统别名

  #(cd /var/qmail/alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)

  #chmod 644 ~alias/.qmail*

  可以在这些别名文件中指定管理用户来接受这些系统邮件,如

  #echo admin > ~alias/.qmail*

  6)建立启动文件和用户的Maildir

  说明:个人比较喜欢将Maildir改为.Maildir,以便列目录时隐藏掉

  #cp -p /var/qmail/boot/home /var/qmail/rc

  #chmod 755 /var/qmail/rc

  编辑 /var/qmail/rc

  修改其中./Mailbox成为./.Maildir以支持maildir的pop收信方式,如下:

  # !/bin/sh

  # Using splogger to send the log through syslog.

  # Using qmail-local to deliver messages to ~/Maildir by default.

  exec env - PATH="/var/qmail/bin:$PATH"\

  qmail-start ./.Maildir

  其中splogger qmail指令删除,以后改用multilog

  已存在用户建立maildir:

  $ /var/qmail/bin/maildirmake ~/.Maildir

  $ echo ./.Maildir/ > ~/.qmail

  建立maildir的方法(对于后面要建立的用户):

  # /var/qmail/bin/maildirmake /etc/skel/.Maildir

  # echo ./.Maildir/ > /etc/skel/.qmail

  7)删除临时目录

  # rm -rf /tmp/qmail-1.03

  3、安装ucspi-tcp-0.88

  #tar zxvf ucspi-tcp-0.88.tar.gz

  #cd ucspi-tcp-0.88

  #make

  #make setup check

  执行文件将被安装在/usr/local/bin中。

  4、安装checkpassword

  #tar zxvf checkpassword-0.90.tar.gz

  #cd checkpassword-0.90

  #make

  #make setup check

  #chmod og-rx /bin/checkpassword

  执行文件checkpassword将被安装在/bin中。

  如果不对/etc/passwd中的用户开放mail,则不需要装checkpassword,而只要装vpopmail就行了。

  5、安裝daemontools

  # mkdir -p /package

  # chmod 1755 /package

  # cd /package

  # tar -xvzf daemontools-0.76.tar.gz

  # cd admin/daemontools-0.76

  # package/install

  将/etc/inittab中最后一行的svscanboot注释掉

  重启:# kill -HUP 1

  说明:改inittab是个人喜好

  6、建立 SMTP 转信规则

  1) 建立 /etc/tcp.smtp

  內容为":allow"

  # echo ":allow" > /etc/tcp.smtp

  此为接受任何Client端所发出子转送信件

  若要拒绝某些IP所发出的Relay则修改 /etc/tcp.smtp如下

  192.10.10.:allow,RELAYCLIENT=""

  127.:allow, RELAYCLIENT=""

  如此,除192.10.10.*及127.*之外的所有地址,都将被拒绝转送信件。

  2)转换tcp.smtp成为cdb格式

  #/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

  注意:若对tcp.smtp有任何变更,都必須经过tcprules转换成为cdb文件才会生效。

  另外,tcp.smtp若为空白,则表示拒绝所有的转送,因为预设的规则为deny。

  至此,转送规则已建立,稍后将依此规则启动qmail-smtpd。

  7、建立启动系统服务脚本

  1)建立LOG目录

  # mkdir /var/log/qmail

  # chown qmaill.nofiles /var/log/qmail

  # mkdir /var/log/qmail/smtpd

  # chown qmaill.nofiles /var/log/qmail/smtpd

  # mkdir /var/log/qmail/pop3d

  # chown qmaill.nofiles /var/log/qmail/pop3d

  2)设定services

  移除inetd.conf中有关smtp及pop3的设定(加上#号)

  注:redhat7.3用xinetd代替inetd了,就不用改了

  编辑/etc/services,确认以下设定(实际并不按下面的顺序):

  smtp 25/tcp mail

  # pop-3 110/tcp #pop version 3

  # pop-3 110/udp

  pop3 110/tcp

  pop3 110/udp

  3)写send/smtpd/pop3d的supervise脚本run

  # cd /var/qmail

  # mkdir -p supervise/qmail-send/log

  # mkdir -p supervise/qmail-smtpd/log

  # mkdir -p supervise/qmail-pop3d/log

  # cd supervise/qmail-send

  # ln -s /var/qmail/rc run

  其它run内容如下:

  qmail-send/log/run:

  #!/bin/sh

  exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

  qmail-smtpd/run:

  #!/bin/sh

  QMAILUID=`id -u qmaild`

  QMAILGID=`id -g qmaild`

  exec /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -u $QMAILUID -g $QMAILGID 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

  qmail-smtpd/log/run:

  #!/bin/sh

  exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

  qmail-pop3d/run:

  #!/bin/sh

  exec /usr/local/bin/tcpserver -v -R 0 pop3 /var/qmail/bin/qmail-popup mail.mydomain.com /bin/checkpassword /var/qmail/bin/qmail-pop3d .Maildir 2>&1

  qmail-pop3d/log/run:

  #!/bin/sh

  exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/pop3d

  4)建自启动脚本/etc/init.d/qmail

  内容如下:

  #!/bin/bash

  # chkconfig: 2345 96 6

  #

  ######################################################################

  # Description: Script to control qmail process #

  # File: /etc/rc.d/init.d/qmail #

  ######################################################################

  # Setup environment for script execution

  . /etc/rc.d/init.d/functions

  PATH=$PATH:/var/qmail/bin:/usr/local/bin

  export PATH

  SVSCANPID="/var/run/svscan.pid"

  stopQmail() {

  if [ -f $SVSCANPID ]; then

  kill `cat $SVSCANPID`

  rm -f $SVSCANPID

  fi

  svc -dx /var/qmail/supervise/qmail-pop3d/log
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,