LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 11661|回复: 18

用qmail建部门邮件服务器

[复制链接]
发表于 2002-6-28 11:33:00 | 显示全部楼层 |阅读模式
今天用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/binPATH"\
           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
           svc -dx /var/qmail/supervise/qmail-pop3d
           
           svc -dx /var/qmail/supervise/qmail-smtpd/log
           svc -dx /var/qmail/supervise/qmail-smtpd
           
           svc -dx /var/qmail/supervise/qmail-send/log
            svc -dx /var/qmail/supervise/qmail-send
        }
      
       case "$1" in
         start)
           echo "Starting qmail/smtp/pop3 ..."
            cd /var/qmail/supervise
            env - PATH="$PATH" svscan &
            echo $! > $SVSCANPID
           ;;
     
         stop)
            echo "Stoping qmail/smtp/pop3 ..."
         stopQmail
          ;;
         
         restart)
         $0 stop
            $0 start
           ;;
         
         status)
          ;;
     
         *)
           echo "Usage: $0 {start|stop|status}"
           exit 1
     esac
      
       exit 0
     
     加入chkconfig管理
        # chmod 755 qmail
        # chkconfig -add qmail
        运行ntsysv关闭或启动服务
三、tips
  1、使用userName@mydomain.com形式的命名
          # cd /var/qmail/alias
          # echo mydomain.com >> locals
  2、改密码
          对于仅开放mail的用户可将shell改成passwd
          # useradd -s /usr/bin/passwd userName
          然后用telnet改密码
  3、qmail1.03有不少补丁,根据你的需要打吧。

说明:附件为我的/etc/init.d/qmail和supervise脚本run
 楼主| 发表于 2002-6-28 11:35:19 | 显示全部楼层
faint,我用文本写的,用空格缩进,贴上来就面目全非了:(
发表于 2002-6-28 11:36:07 | 显示全部楼层
精品!
辛苦了兄弟!

北南 呈上
发表于 2002-6-28 16:00:45 | 显示全部楼层
这位同志真是天才,谢谢

但请问几个问题,:
1.(7)0fNo.2    rm /root/qmail-1.03//rm: '/root/qmail-1.03' is a directory

2. daemontools-0.76哪找?

3.搞这个是不是一定要7.3,7.2行吗?一定要在装linux时选了SMTP服务才行吗?
4.mail.mydomain.com在现实中用什么代替?
 楼主| 发表于 2002-6-28 17:16:09 | 显示全部楼层
to lnx
1、不好意思,笔误,应为:rm -rf /tmp/qmail-1.03
2、http://cr.yp.to/daemontools.html  首页无连接,我用google找的
3、redhat7.2也可以,"一定要在装linux时选了SMTP服务才行吗",其它UNIX应该也可以,后半句"选smtp"我不懂你什么意思
4、随便,但注意如果本机连在Internet上,会把非本域的邮件转发出去,21cn、sina我都试过,可以。因此要防止被别人利用发垃圾邮件!

"天才",惭愧!我也参照了不少贴子。在此多谢!
发表于 2002-6-28 19:02:35 | 显示全部楼层
再请教:

7(2)请再说清楚些,我很蠢.比如,inetd.conf在哪儿?改services时里面没有您的那几句,是加那几句上去吗?加在哪(哪两句间)?


还有就是在装linux时它不是让你选支持的netserver类型吗?比如ftp,http,smtp,tcpip等,一定要选了smtp的支持才能敢这活吗?
 楼主| 发表于 2002-6-28 22:31:07 | 显示全部楼层
to lnx:
1、inetd.conf在/etc/目录下,如果不存在,说明用得是xinetd,跳过
2、/etc/services只要有上面列出的那几行就行了,没有就加上
3、netserver,你说得是fireware设置吧,建议你先取消,调通后视需要再加上
发表于 2002-6-29 00:04:32 | 显示全部楼层
I do it step by step under your ariche,and i can't sure if it's make it at last.
and How to use this technique?if there something different to the E-company(sina,163...)'s Mailbox?it's just lager than those.
and i really don't know how to use it actually,and what does Mail.Mydomain.com mean?
please explain it to me,i'm very sorry of my foolish.But please say it more and more cleary
my chinput has broken,so used my poor english
 楼主| 发表于 2002-6-30 08:45:37 | 显示全部楼层
你可用来作企业内部的邮件服务器,因为没有实现虚拟域和WebMail等功能,所以我用的标题是"部门服务器",如果你需要可以接着再配上vpopmail+qmailadmin+sqwebmail来实现。
用法和sina等商业邮件系统一样用OE收发信。
mydomain域名问题,如果你"play for fun",任你设置,或者就用lnx(mail.lnx.com),那么你的邮件地址就是user@mail.lnx.com或user@lnx.com
发表于 2002-7-1 07:04:41 | 显示全部楼层
他不该随便改RH的版本,RH 7.3的文件变化很大。以前的文章不能够套在RH7.0以上的版本。我个人认为他的Qmail没有安装在7.3下,因为现在在RH7.3根本没有inetd.conf。初学者在网上看到的文章都是关于RH 6.2的居多,但它和现在的RH7.3的差别还是比较大的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表