当前位置: 首页 > 工具软件 > qmail > 使用案例 >

Linux配置Qmail

从劲
2023-12-01

1、条件
  我们拥有:
  * 一个顶级的域名:ta139.com
  * 一台运行RedHat Linux 6.2的服务器,主机名www.ta139.com
  * 域名解析将mail exchanger设置为mail.ta139.com,与www.ta139.com为同一台主机

2、目标
  * 将mail.ta139.com作为邮件服务器;
  * 实现类似user@ta139.com的邮件地址;
  * 将邮件账号和系统账号分离开,以便于管理。

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

4、实现
4、1 DNS的配置
  由于我们属于服务器托管用户,DNS解析由电信局完成的,因此只需要将我们的需求提交给电信部门来完成就可以了。使用nslookup命令检验DNS解析是否正确:
  [pangty@webserver ~]$ nslookup
  Default Server: ns1.sdqdptt.net.cn
  Address: 202.102.134.68
  
  > set querytype=MX
  > ta139.com
  Server: ns1.sdqdptt.net.cn
  Address: 202.102.134.68
  
  Non-authoritative answer:
  ta139.com preference = 10, mail exchanger = mail.ta139.com
  
  Authoritative answers can be found from:
  ta139.com nameserver = dns-jn.sd.cninfo.net
  mail.ta139.com internet address = 61.156.35.114
  dns-jn.sd.cninfo.net internet address = 202.102.152.3
  >
  能看到上面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.ta139.com
  (实际使用时,用你的机器名来替换mail.ta139.com)

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

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 -R -H -lta139.com -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 <<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 -- 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=ta139.com
  $ make
  $ su
  # make install-strip
  这里因为我需要实现user@ta139.com的邮件地址,所以我设置了默认的域,具体你使用的时候只要改成你自己的域就可以了。

4、4、4 建立虚拟域
  # cd /home/vpopmail/bin
  # ./vadddomain ta139.com <---增加ta139.com域
  系统会提醒你输入这个域的管理员的密码。然后程序会修改下面一些必要的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 webmaster@ta139.com
   系统会提示输入密码
  * 删除用户
   # cd /home/vpopmail/bin
   # ./deluser webmaster@ta139.com
  * 改变用户密码
   # cd /home/vpopmail/bin
   # ./vpasswd webmaster@ta139.com

4、4、6 设置POP3服务
  设置pop3服务需要用到qmail中的qmail-popup,qmail-pop3d和vpopmail的vchkpw程序。我们使用下面的脚本来启动pop3服务:
  #! /bin/bash
  
  # Start qmail-pop3d daemon
  /usr/local/bin/tcpserver -R -H -lta139.com 0 110 /var/qmail/bin/qmail-popup mail.ta139.com \
  /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服务器。

 类似资料: