Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2124482
  • 博文数量: 288
  • 博客积分: 10594
  • 博客等级: 上将
  • 技术积分: 3469
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-27 19:27
文章分类

全部博文(288)

文章存档

2012年(4)

2011年(30)

2010年(40)

2009年(32)

2008年(71)

2007年(79)

2006年(32)

分类: LINUX

2007-01-06 17:34:58

那些想要为他们的EMAIL使用以上组合的用户,我归纳了一些安装经验来为他们提供某些帮助。我刚得到了一些新的关于LINUX管理信息,所以决定更新这期MINI-HOWTO。
1.介绍
    什么是QMAIL?我们该怎样正确使用它?以下将给出一些解释说明。
    QMAIL是一个安全、可靠、高效、简洁的信息传送的代理。它现在完全替代了典型互联网上以unix作为平台的主机上发送-接收的系统。
    安全:安全不仅仅是一个目标,而且无疑是一个需要。用户对发送邮件的要求很高;它不能出一点差错,所以必须绝对安全可靠。(这就是我为什么开始使用QMAIL:我对其他的邮件发送系统的诸多安全漏洞感到非常不安。)
    可靠:QMAIL采用“straight-paper-path”的设计“哲理”, 保证了一个信息一旦被系统接收,就永不丢失。QMAIL也支持MAILDIR功能,一个全新的、超稳定的用户邮箱格式。MAILDIRS,不像MBOX文件和MH文件夹在接收邮件时,如果系统出错会导致接收中断。更好的是,用户不仅可以安全的在NFS(网络文件系统)上读取他的邮件,而且与此同时,任何其他NFS的客户端也可以向他发送邮件。
    高效:在一个BSD/OS的PENTIUM机上,QMIAL每天可以轻易地支持200000的本地信息----分开处理邮箱中信息的发送与接收!虽然DNS(域名服务器)和SMTP的远程发送原本就有速度慢的局限性,qmail可以在默认状态下同时发送20封邮件,所以相比下它能风驰电掣地快速通过邮件列表。(这就是我为什么使用QMAIL,我必须建立庞大的邮件列表。)
    简洁:QMAIL比其他任何互联网的MTA占用的空间都要小得多。这是因为:(1) 其他的MTA系统采用单独解析、匿名和邮件列表的机制。而QMAIL采用一个简化了的解析机制,它允许用户处理他们自己的邮件列表。(2) 其他的MTA是这样的发送模式:或者快速+不安全,或者缓慢+队列。而QMAIL,在队列中一旦有新消息的出现,就立即发送,所以QMAIL的发送模式只能是:快速+队列。(3) 其他MTA系统实际上包含了一个特别的inetd的版本,它能减少机器的负荷。而QMAIL的设计根本上减少了机器的负荷,因此QMAIL发送系统能在您的机器上安全运行。
    替代SENDMAIL的发送邮件:QMAIL支持主机和用户的匿名、完全隐藏主机、虚拟域名、无效客户、拥有者列表的重写、终继控制、可恢复的双重记录、严格的RFC 822地址列表、交叉主机邮件列表的循环侦测、每个接受端的检查点、出故障主机的备份恢复、独立进行信息的重试调度、等等等等。简而言之,它在现代MTA中以快速的特点一枝独秀。QMAIL也包括可以透明地面对众多用户的发件箱。


2.我的系统情况
    SuSE Linux Distribution 5.1 with 2.0.33 kernal.用端对端协议(ppp)连接到互联网服务提供商(ISP)。


3.QMAIL的安装
    正确依照安装说明的步骤。
    注意:请花时间完整地阅读安装说明文件。在以上安装文件中有表示安装步骤的数字。
    2.-我必须手动设置组和用户作为每个INSTALL.ids
    7.-./qmail-makectl不能在我的系统上运行。我在/var/qmail/control/me中手动地加入了我的域名(mickey.n.eunet.de)
    23.-确定qmail-smtpd在inetd-conf文件中的正确拼写。(我把qmail-smtpd拼写成qmail-smptd,导致了花了我两天时间去找:
    ( ) smtp stream tcp nowait qmaild/var/qmail/bin/tcp-env tcp-env/var/qmail/bin/qmail-smtpd

    3.1 Maildir2smtp
    Dan Bernstein已经提供了通过拨号向ISP发送一系列邮件的程序包。这个程序包用来作为从它的站点发送的系列邮件。
    这个程序包安装在此人(感谢Rupert Mazzucco(maz@pap.univie.ac.at))网页详细阐述,maildir2smtp - 通过SMTP发送一个maildir。maildir2smtp是设计用来在一个SLIP或者PPP链路上传递报文的。为了在无连接的终端建立maildir2smtp,用匿名创建一个新的maildir:
          # maildirmake ~alias/pppdir
          # chown -R alias ~alias/pppdir
    把
          :alias-ppp
    加入
          control/virtualdomains
    把
          ./pppdir/
    加入
          ~alias/.qmail-ppp-default
    不要忘了在pppdir/中附加的删减。然后,在PPP开始文本中,作如下操作:
          maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`
    把$IP替换为远端IP地址。
    注意:请完整地阅读正确操作的说明书。
    Maildir2smtp需要你邮件服务器的IP地址。如果你没有这个IP地址,你可以检测YourMail.host.country来返回你邮件服务器的IP地址。
    这个命令包含在你的登陆文本中,在你登陆到你的互联网服务提供商ISP后,刷新所有队列邮件。


4.MH的安装
    除了这种设置外,我也把/mh-6.8.4/mts/sendmail/smail.c替换为Dan Bernsteins mh-qmail-smail.c。
    以下是我的mh-6.8.4/conf/MH设置。
______________________________________________________________________

  bin /usr/bin/mh
  etc /usr/lib/mh
  #mail
  #mandir /usr/man
  #manuals standard
  chown /bin/chown
  #cp cp
  #ln ln
  #remove mv -f
  cc gcc
  ccoptions -traditional -O2 -m486 -D_NFILE='getdtablesize()'
            -DSIGEMT=SIGUSR1
  curses -lncurses
  #ldoptions -s
  #ldoptlibs
  lex flex
  #oldload off
  #ranlib on
  mts sendmail
  #mf off
  #bboards off
  #bbdelivery off
  #bbhome /usr/spool/bboards
  pop on
  popdir /usr/lib/mh
  sharedlib sys5
  slflags -fPIC
  slibdir /usr/lib
  mailgroup mail
  signal void
  sprintf int
  #editor prompter
  #debug off
  #regtest off
  options ATHENA
  options BIND
  options DPOP
  options DUMB
  options FCNTL
  options MHE
  options MHRC
  options MIME
  options MORE='"/usr/bin/less"'
  options OVERHEAD
  options POP2
  options POPSERVICE='"pop3"'
  options RENAME
  options RPATHS
  options RPOP
  options SOCKETS
  options SVR4
  options SYS5
  options SYS5DIR
  options TERMINFO
  options UNISTD
  options VSPRINTF
______________________________________________________________________

注意:
    我只编译了在comp.mail.mh中的``mts sendmail'',其中/smtp 会引起一些问题。Dominic Mitchell(hdm@demon.net)在comp.mail.mh (13 June 1997)中写道:“用这个选择,MH仍然可以通过一个管道,而不是网络用SMTP通话。你确实需要在你的/.mh_profile加入一行:
      postproc: /usr/local/nmh/lib/spost
    或者无论以什么方式存在于你的系统上,它都将以传统方式把报文直接传送到sendmail,你确实在使用QMAIL,因此sendmail将成为QMAIL的包文本,这就可以了。”

    4.1 mtstailor
    因为QMAIL发送又见到默认目录(~/Mailbox)。我把下列设置加入到我的mtstailor。
       localname: mickey
       localdomain: n.eunet.de
       mmdfldir:
       mmdflfil: Mailbox
       uucpldir:
       uucplfil:
       mmdelim1: 01010101

       mmdelim2: 01010101

       mmailid: 0
       umincproc:
       lockldir:
       sendmail: /usr/lib/sendmail
    注意:sendmail: /usr/lib/sendmail是连接到在/var/qmail/bin中的QMAIL SENDMAIL包的路径。
    MH不像音标符号(~/),而是使用/home或者根据文本默认的$HOME置空格。
    我最近在办公室里的一台连接到以太网电脑上安装了MH和QMAIL。我在mtstailor里加入了以下一行:
      servers: mailserver.company.country

    4.2 mh_profile
    以下是我的.mh_profile设置
       Path: Mail
       draft-folder: drafts
       unseen-sequence: unseen
       AliasFile: /home/rdn/.mh_aliases
       send: -msgid
       comp: -form /home/rdn/.mymh-components
       MailDrop: /home/rdn/Mailbox
    注意:我加入“收件箱”一行,为了保证邮件的接收.
5.Fetchmail
    由于用户很多(我的整个家庭),所以我决定使用fetchmail。Linux 和 fetchmail把mail发送到接收 qmail的smtp port。
    安装应该没什么问题,按以下步骤便行。
       fetchmailrc:
         poll PersonalMail.Germany.EU.net
         protocol pop3
       username myname
       password mypassword
       # the next two lines do the trick for multidrop
       localdomains mydomain.de
       is * here
       # T2 of the fetchmail FAQ states that qmail needs this
       forcecr

6.exmh
    这是我选择的mailer。我很喜欢它。
    只存在一个麻烦----大多数的高级汇编TCL/TK包裹编译了安全条款。而随着SuSE的出现,xserverrc在确保安全的前提下解决了这个麻烦。
____________________________________________________________________

  #!/bin/sh

  #
  # move this file to ~/.xserverrc, if you don't want to allow everybody to
  # get access to your X-Server
  #
  if [ -x /usr/bin/keygen ]; then
      if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname
           -a ! -x /usr/bsd/hostname ];
      then
          echo "startx: can't get my hostname - exiting"
          exit 1
      else
          host=`hostname`
      fi

      xauth add $host:0 . `/usr/bin/keygen`
      sleep 2
      xauth add $host/"unix":0 . `/usr/bin/keygen`
      exec X :0 -auth .Xauthority $*
  else
      exec X :0 $*
  fi
  ______________________________________________________________________


7.Procmail
    qmail FAQ 有以下要求:
    In /.qmail add the line
       | preline procmail
    3.11per7 的版本改变了默认邮箱的一些内容。它以前在config.h文件中,而现在在src/authenticate.c文件中:
    #define MAILSPOOLHOME "/Mailbox" /* watch the leading / */
                                     /* delivers to $HOME/Mailbox */
    我精简合并了一些comp.mail.mh 和 comp.mail.misc的内容放在procmailrc 文件中,感谢各位提出宝贵意见!

    #这是为新手准备的SAMPLE.PROCMAILRC 文件
    #由Catherine Hampton(ariel@best.com)编写
    #版本1.1
    #更新日期1/25/98
    #
    #向公众免费发放
    #
    #
    #SET VARIABLES
    #Internal Variables
    #以下经rdn 于19980303修改
    #有关人士称SHELL的工作环境是高效率的
    SHELL=/bin/sh (Shell用来运行procmail。确信你的系统已经备份。不要用其他的shell替换除非你对UNIX了如指掌。)
    LINEBRF=4096 (用来不让Procmail在长时间运行后或在处理特殊邮件时出现窒息现象。)
    PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh: (你程序的路径----这一项空缺可能最好)
    VERBOSE=off (如果你选“on”,那么Procmail 将对所执行的每一步都检测错误。注意,不要选择“on”,因为它会生成一个很庞大的检测文件。)
    #默认程序和文件定位
    MAILDIR=$HOME/Mail (你最好确信这个目录存在。)
    DEFAULT=$HOME/Mailbox (Best Internet上的默认情况是2-5个shell邮箱的使用者。个人可以按自身的不同为系统选择正确的设置。)
    LOGFILE=$MAILDIR/procmail.log (检测信息的处理,推荐照此设定----否则出错信息会mail给你。)
    FORMAIL=/usr/bin/formail (非常有用的自动回复技巧。如果你不在Best Internet上,更改formail系统拷贝上的此项信息自动回复邮件。)
    SENDMAIL=/usr/sbin/sendmail (非常有用的自动回复技巧。如果你不在Best Internet上,更改sendmail系统拷贝上的此项信息自动回复邮件。)
    Procmail 是一个非常优秀的文档程序。请无比仔细阅读以上内容作为参考来设置你的procmailrc文件。


8.ISDN
    尽管此项看似与与qmail或mh有关,我还是整理了。因为若你的ISP没有PPP线就根本无email可言。我在使用我的ISDN中遇到了相当大的麻烦。SusE包含一个专门为ISDN准备的部分,但我想更简单些。以下材料是由Bernhard Hailer更新的。
    以下的的rc.config文件装载了初始化的必要组元。

       #!/bin/bash
       # This is adapted Bernhard Hailer's old script

       LOCAL_NUMBER="91311234" # tel no. 091311234
       REMOTE_NUMBER="0911123456" # ISP tel no.
       LOCAL_IP="192.168.0.99" # I have dynamic IP so this will do
       REMOTE_IP="195.112.123.11" # your ISP's gateway
       DEVICE="ippp0"

       SYSPATH="/sbin"
       ISDNCTRL="$SYSPATH/isdnctrl"

       case "$1" in
       start)
               # turn on isdn
               insmod /lib/modules/2.0.33/net/slhc.o
               insmod /lib/modules/2.0.33/misc/isdn.o
               sleep 1
               # load the hisax module
               insmod /lib/modules/2.0.33/misc/hisax.o
                                          id=Tel0 type=5 protocol=2 irq=10 io=0x300
               echo "starting isdn4linux"
               # global
               $ISDNCTRL verbose 0

               $ISDNCTRL addif $DEVICE # create new interface
               $ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER
               $ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER
               $ISDNCTRL eaz $DEVICE $LOCAL_NUMBER
               $ISDNCTRL l2_prot $DEVICE hdlc
               $ISDNCTRL l3_prot $DEVICE trans
               $ISDNCTRL encap $DEVICE syncppp
               $ISDNCTRL huptimeout $DEVICE 300
               $ISDNCTRL chargehup $DEVICE off
               $ISDNCTRL secure $DEVICE on

               $SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1
               $SYSPATH/route add default $DEVICE
               $SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd &
               $SYSPATH/route del default

               ;;
       stop)
               #turn off isdn
               rmmod hisax.o
               sleep 1
               rmmod isdn.o
               rmmod slhc.o
               echo "Shutting down isdn4linux"
               $ISDNCTRL delif ippp0
               ;;
       *)
               echo "Usage: $0 (start|stop)"
               exit 1
               ;;
       esac

   我用以下技巧拨号,它被称为简洁的isdn on|off

       #!/bin/bash
       # This is based on an old script from Bernhard Hailer

       IP_ADDRESS="195.112.123.11"

       case "$1" in
       on)

               echo "Calling ippp0"
               /sbin/isdnctrl dial ippp0
       # the sleep is important as it gives the PPP time to settle down
               echo "Sleep for 8s for PPP handshake"
               sleep 8s
               /sbin/route add default ippp0
               echo "line open - checking...."

       # check whether PPP negotiation was successful:
               set `ping -qc3 -i1 $IP_ADDRESS 2>;/dev/null | grep transmitted`
               if [ $4 -gt 0 ];
               then
                       echo "succeeded."
                       echo "Starting fetchmail daemon"
                       /usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail
                       echo "Flushing mail queue...."
                       /usr/local/bin/serialmail/maildir2smtp
                                   ~alias/pppdir alias-ppp- mail.server.ip.no `hostname`
               else
                       echo "failed!"
                       /sbin/isdnctrl hangup ippp0
               fi

       ;;

       off)
                       echo -n "Shutting down fetchmail daemon"
                       /usr/bin/fetchmail --quit

                       /sbin/isdnctrl hangup ippp0
                       /sbin/route del default # and delete route
                       echo "You're off line"
       ;;

       *)
               echo -e "aUsage:"
               echo "isdn on"
               echo "isdn off"
       ;;

       esac


    接下来的是 ipppd选项文件/etc/ppp/options.ipppd
    #基于:
    #Klaus Franken,kfr@srse.de
    #版本:27。08。97 (5。1)
    #
    #该文件由YaST在/etc/ppp/ioptions.YaST 拷贝至optiongs.;

    user“myrserid”

    #我的系统名(只在CHAP上使用!)
    # name my_system_name
    #从peer处得到IP地址
      ipcp-accept-local
      ipcp-accept-remote
      noipdefault

    #试着从interface处得到IP地址
    #ipppd的特定选项(比如与pppd的冲突)
    #只能使用静态IP
    #useifip

    #把所有的header-compression都设为disable
      -vj
      -vjccomp
      -ac
      -pc
      -bsdcomp
    #有时你需要这个:
    #noccp

    #最大接受数
    mru 1524
    #最大传送数
    mtu 1500

    #如果你的机器是服务器,就要求签证以下未注释的条项。然而,如果你的机器是客户机,做了以上的事就不会成功连接!(信息将提示“peer refused to authenticate”即peer 拒绝签证)所以,只有在服务器上对于未注释的部分做以下步骤:
    # "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
    #+pap
    #+chap

    #如果你对handshaking有什么问题(比如第一次lcp-package没响应)可以试试减少重试次数,默认情况下是3 sec,试试2 sec:
    # lcp-restart 2


9.源文件
    请求包裹:
    互联网是如此高速发展,以至于提供源文件变得毫无意义。但在某些时候它是有价值的:
    Qmail的相关内容
    NH的相关内容 ~mh/
    glimpse的相关内容
    Fetchmail的相关内容 ~esr/fetchmail
    Exmh的相关内容
    Procmail的相关内容 ftp.informatik.rwth-aachen.de/pub/packages/promail
阅读(2306) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~