| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
龙腾教程网  
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
 
  您当前位置:您现在的位置: 龙腾软件教程网 >> 文章中心 >> 服务器类 >> 邮件服务器 >> 文章正文>>>>>> 
SENDMAIL邮件服务器的安装与设置

 Sendmail对一般的系统管理者而言,往往是个不敢手的「禁区」 ,因为绝大多数系统的使用者对E-Mail的需求与依赖的程度之高,可说是稍有分毫差错,系统管理者就要准备接受如雪片般飞来的抗议与 抱怨!而Sendmail这个东东的「内函」,似乎又有点不太容易理解: 与设定有关的sendmail.cf 档,如果不是下过一番死功夫,则读起来如同读天书一样,只知道里面有英文字与数字!所以一般人总是能不 动则不动,只要能用就好。不过,很不幸的,一般跟著机器而来的sendmail总是有著令人心惊胆跳的「附加功能」,就是常常都有一些可以让无聊人士作为侵入路径的BUG 或後门,某些BUG 还可以让侵入 者经由Sendmail而取得最高权限的root!一旦root权限被人拿走了, 那麽这机器就可被人任意屠宰,最恶劣的,还可能破坏系统!

  Sun 在国内的使用人口相当的多,笔者对Sun 也稍微比较熟悉一点。不过,Sun 的Sendmail却是令人颇不敢恭维的,几乎可以说:只要还在使用Sun 的Sendmail而没有「常常」patch 的话,那甚麽系统安全都不必谈了,谈了也是白谈;如果还在使用Sun 的Sendmail,那就如果系统抱著一颗不定时炸弹,随时一个不注意,都可能引爆:(。这一点,大家可以翻一翻CERT或8lgm看一看,几乎是只要有sendmail 的问题,Sun 大多跑了....。其他系统的Sendmail也不要偷笑,虽然大家的出场率没有Sun 高,可是也常会问题的。 另一方面,Sendmail 8.6.9与之前的版本最近刚发现有个ident方面的Bug 。如果方便的话,请大家务必换成最新版。如果不方便的
  话,在v8.6.5之後的版本有个克难式的补救法,即在sendmail.cf 加入这麽一行:

  Orident=0

  表示不作ident 的检查。
  v8.6.5之前的版本就一定要换成最新版。

  本软体在系统安全方面,是目前评价最高的,目前已知的BUG都已经改好了,最主要的原因,当然是要感谢作者Eric Allman ,他(或他们)能作到一发现重大的Bug (如系统安装)就立刻出新版。本软体是一public domain ,可以在网路上各ftp server上找到其source code。由於该软体的发展者把一些必要的设定步骤自动化了,所以,其实安装这个软体并不是想像中那麽样的困难。如果连compile 的时间也算下去,顺利的话,不用半个小时就可以安装完毕!

  3.1 下载Sendmail最新版本

   最新版本的Sendmail可以从 ftp://ftp.sendmail.org/pub/sendmail/ 得到!
  如 sendmail.8.9.3.tar.gz 这是截止到文章发布的最新版本,size:1068290byte

  有关最新版本的发布,请浏览Sendmail的主页 http://www.sendmail.org

  3.2 安装Sendmail

   用root登陆或su成root后,先把tar.gz的包解开tar fvxz sendmail.8.9.3.tar.gz,用make -f 开始编译

  编译完成后系统会产生系统设定文件,也就是sendmail.cf (一般这个文件都存放在/etc下)

  接下来,这按几步继续安装: (注:~/sendmail为解开后的sendmail目录)

  1.请切换至设定档目录~/sendmail/cf/cf 之下。找一个合适自己系统的XXXX.mc档。笔者一般上是使用tcpproto.mc

  这一个不用uucp的档。如果是用tcpproto.mc 这个档,笔者在solaris 2.3 试了,得记得在档中要加上一行:

  OSTYPE(solaris2)

  Sun 4.1.3 不必,其他系统就不晓得了。在目录 ~/sendmail/cf/ostype下有几个OSTYPE()可以的 档,

  只有这个目录有资料的才可能能够OSTYPE()。还有, 如果是 system V的/bin/mail,似乎就得要加OSTYPE()。

  一句老话,详情请看DOCUMENT:~/sendmail/cf/README。这希望有经验的朋友能够补充:)

  如果不小心忘了加上OSTYPE()会怎样?也不会怎样,只会有"unknow mailer error" 的错误,然後信收不到。

  有一点要提醒大家的,就是:在~/sendmail/cf/cf 所看到的各种系统的.mc 档,都是Sendmail 8.6.x的作者

  Eric Allman 「演示」给大家看的,所以,可以看到档名都有个"cs",要是没有修改就用这些档的话,那一定会发生错误的。而要修改,有相当多地方要改,所以,如笔者一般懒的人,用tcpproto.mc 还是比较简单又不会出错:)
 2.好,选定了某一个合意的.mc 档,那接下来可执行m4产生.cf 档。请下指令:

  # m4 XXX.mc > YYY.cf 如果是sun 4.1.3 ,可能系统会抱怨m4的版本太旧了。那请试一试用:

  # /usr/5bin/m4 XXX.mc >YYY.cf

  要是还是不行,那就请去抓新版的m4回来compile (可以在 http://www.gnu.org 找到gnu 的m4)。

  这个步骤是要把compile好的files, install 到系统上去了。

  罗嗦的我还是得再一次提醒您看看:把旧档案备份好了吗?

  好,假设compile 的结果非常没挑战性的没有任何错误,产生.cf 档过程也没有甚麽值得注意的讯息。所产生的.cf 档 也改好了。而且最重要的:作好旧档的备份(不是我要吓人,这是以防万一)。

  1.挑个老板没有在用mail的时间,快手快脚的切换至目录~/sendmail/src ,下指令:

  # make -f Makefile.XXX install

  系统会把compile出来的~/sendmail/src/sendmail与man document拷贝到它们该有的目录(所以你还如果没有备份/usr/lib/sendmail ,那赶快祈祷待回不要出问题,要不然就赶快准备泪水哭吧!

  因为旧的会被compile 出来的sendmail覆盖)

  2.切换至目录~/sendmail/cf/cf ,把产生出来的YYY.cf档拷贝到本系统sendmail.cf 应该在的地方,
  如:/etc或 /etc/mail 。

  3.把旧sendmail daemon 的process 杀掉。(这应该不用我罗嗦吧!用ps -ax  grep sendmail  grep -v grep 找出旧daemon的process(或head -1 /etc/sendmail.pid 或 head -1 /etc/mail/sendmail.pid),然后用 kill -9 processID干掉它(或直接用 kill -9 `head -1 /etc/sendmail.pid`)。

  4.启动新daemon。例如下指令:
  /usr/lib/sendmail -bd -q30m
  当然,保守一点,看旧的daemon怎麽跑,照旧的来下参数应该是没有问题。

  这时,初步安装就已经完成了,接下来请看设置sendmail

  3.3安装Sendmail注意事项

  如果安装不成功,请参考下面的问题:

  用vi或任一种编辑器,编辑的makefile档,作一点点 必要的修改。所要修改的地方不多,下面是可能要修改的地方:

  1."CC ="如果原档所用的compiler并不是我们系统的,这才要改。

  2.本系统是否有安装Berkerlay 的New database?如果有,跳过本点,到第3点。 如果没有
  (如:一般SunOS 都没有装),那麽请修改这几 行(下面以Makefile.SunOS为例,但其他系统也类似):

  A.在 DBMDEF= -DNDBM -DNEWDB -DNIS 一行,请改成: DBMDEF= -DNDBM -DNIS (即去掉-DNEWDB)

  B.把这两行REMARK起来: INCDIRS=-I/usr/sww/include/db --> # INCDIRS=-I/usr/sww/include/db
   LIBDIRS=-L/usr/sww/lib --> # LIBDIRS=-L/usr/sww/lib

  C.修改LIBS= -ldb -ldbm -lresolv 这一行成: LIBS= -ldbm -lresolv (即去掉-db )

  3.把nroff 的"-mandoc "参数改成一般系统可以接受的 "-man"(当然,这得依你的系统而定,
  如果你是用groff,那就可以很愉快的直接使用,不必改这个参数:)。如果不改也并不会影响
  sendmail的安装,只是不能看到格式化後的sendmail相关文件罢了。


  关于DIRECTORY PERMISSIONS的问题你需要执行2条命令:

  chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
  chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

   许多系统的spool目录使用/usr/spool来代替/var/spool,设置别名的etc/mail取而代之的是/etc,
  如果你要在sendmail.cf设置RunAsUser许选项,/var/spool/mqueue这个目录需要RunAsUser 用户的权利,
  ok,这时开始编译Sendmail,执行这条命令

  sendmail -v -bi

  这时,开始初始化alias database. 如果它显示:

  WARNING: writable directory /etc

  WARNING: writable directory /usr/spool/mqueue

  那么这个目录列出了不适当的写特权,应该避免多方面的的安全攻击。

 4.1 设置Sendmail.cf
  产生出来的YYY.cf一般得要改个地方才能正常的收信。请寻找"Cw",原来产生的.cf 档,Cw应是:Cwlocalhost
  请在localhost 之後加上你那一台机器所有可能用来当收信地址的host name 。
  例如我有一台机器叫:ftp.games.net.cn,而且也叫:gopher.games.net.cn,
  而我希望这一台机器这两个名字都能收信,那我要这么作:
  Cwlocalhost ftp.games.net.cn gopher.games.net.cn

  顺便说一下,Cw之後只能写入本机器的名字,千万不能写入其他机器的名字,否则,甚麽地方都能寄,那被写的就
  一定不能寄。

  上面其实是简略的说法,如果你对DNS 也熟悉的话,可参考这节来作判断,判断是否须要在Cw之後写入东东。否则
  请直接跳过这一小节,闭上眼睛把本机器所用的所有名字都写上就是了:)

  1.在一台机器上,如果有多个名字(hostname),而是用CNAME 建立的,如:
  $ORIGIN games.net.cn
  ftp IN A 140.119.1.2
  gopher IN CNAME ftp

  那麽可以不必在Cw上标明。系统会透过DNS 找到其 Canonical name。

  2.如果一台机器有多个名字,可是,每个名字是用A record 建立的。如:
  $ORIGIN games.net.cn.
  ftp IN A 192.168.25.2
  gopher IN A 192.168.25.2
  这种情况【一定】要记得在Cw後写上你所要收信的名字。如果这个忘了写,会有怎样的问题呢?
  忘了将会有从外面机器寄信来,没有写上的机器名将却收不到信,机器会抱怨:
  "Local configuration error" 。

  如:我的sendmail.cf中的Cw这行是如下: Cw games.net.cn
  那我将无法使用这个地址:
  username@games.net.cn
  而只能用
  username@ftp.games.net.cn 否则将出现上述错误。

  如果发现了错误,那再加上去也就可以了。

  3.如果一台机器有多interface ,各interface有其本身的名字,且要收信。
  这个情况也要在Cw之後写明所有要收信的hostname。


  ok!一个标准的sendmail.cf文件就设置完了!

  4.2 设置access

  打开/etc/mail/access,你会看到 (注意一些系统的access文件不再/etc/mail下,如找不到请用whereis查找或检查是否安装正常)

  # Check the /usr/doc/sendmail-8.9.3/README.cf file for a description
  # of the format of this file. (search for access_db in that file)
  # The /usr/doc/sendmail-8.9.3/README.cf is part of the sendmail-doc
  # package.
  #
  # by default we allow relaying from localhost...
  localhost.localdomain RELAY
  localhost RELAY

  如果您的IP地址是192.168.25.11的话,这样请在最后一行加上192.168.25.11 RELAY
  其文件的最后三行应是:

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25.11 RELAY

  加上这句话您就可以用sendmail发送接收mail了!但是如果您想让别人也可以使用sendmail的话,
  他的IP是202.168.25.22,这样就在在最后一行加入202.168.25.22 RELAY
  其文件的最后四行应是:

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25.11 RELAY
  192.168.25.22 RELAY

  我想,您现在一定有个疑问是,如果我想设置50个人用sendmail是不是需要加50个IP啊!?
  嘿嘿,不用啦,是这样,sendmail考虑到多用户的时候,它准许你添入整个C类地址,(B类好像也可以,我没try过!)
  其格式如下:

  localhost.localdomain RELAY
  localhost RELAY
  192.168.25 RELAY

  这样,您就是把192.168.52这整个C都加入的sendmail中,这个C类地址的用户,如果在你的系统里有账号的话,
  就可以使用sendmail收发信件了!

4.3 设置pop3

  如果您需要pop3来接收信件,您需要打开pop3端口,

  vi /etc/inetd.conf 查找到

  # pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d

  把#号删掉。

  vi /etc/services 查找到

  #pop-3 110/tcp # POP version 3


  把#号删掉。

  这样,在restart inetd后,pop3 110端口就可以接信了!如果还是不行,请检查是否安装pop3端口!

  4.4 如何restart sendmail;inetd以及注意事项

  有一点要提醒大家的,要用"kill -9 [pid-of-sendmail]" ,从新启动sendmail
  如果用 kill -HUP 是不会发生作用的! (这是颇多人常遇到的问题,切记!)

  在redhat6中用/etc/rc.d/init.d/sendmail restart即可!

  inetd是
  /etc/rc.d/init.d/inetd restart

  5.1 sendmail的别名和forward


   (1) 关于直接用IP地址发信

  mail user@[166.111.IP.Address]
  只要用[]将IP地址括起来就行了

  (2) 关于alias

  sendmail在/etc下有两个文件 aliases和aliases.db, 后者是前者用newaliases
  生成的别名数据库. 你可以手工编辑/etc/aliases, 然后运行newaliases更新数据
  库(其实newaliases是个到sendmail的 symlink)

  eg: nickname : user@hotmail.com
  alias-name: real-user-account

  则以后mail nickname就可以将信寄到user@hotmail.com处
  而别人寄给alias-name@your.domain.name的信就会转给真正的用户real-user-account

  (3) 关于forward

  在你的$HOME目录下面编辑一个.forward文件, 里面写上你要forward的目的e-mail
  地址或本机的用户名, 就可以自动将信 forward到相应地址

  eg: .forward: user@hotmail.com
  或 other-user-account
  则给此人的e-mail会forward到hotmail或other-user-account处

  (4) 关于vacation

  去找一个vacation包(如RedHat的contrib中有vacation的rpm), 装上后就一个
  /usr/bin/vacation程序和一个man.

  先运行vacation, 它会让你编辑$HOME/.vacation.msg文件, 就是要发回给对方
  告诉他你现在不看信的东西啦. 然后编辑$HOME/.forward文件, 写这样一句
  \username, " /usr/bin/vacation username", username 要换回你自己的了
  然后运行vacation -I建立$HOME/.vacation.db就好了 (看看man更详细)

  (5) 关于sendmail的一些文件

  /var/log/maillog sendmail的log, 分析错误有用
  /var/spool/mail/$USER 进来的信, 每个用户一个文件
  /var/spool/mqueue mail queue, 可以用mailq看队列中待发的信
  (mailq也是 sendmail的symlink了)
  dfxxxxxx 这是信的内容
  qfxxxxxx 这是信的subject和别的信息 (反正每信一个号了, 配对的)

  /etc/sendmail.cf sendmail的配置文件, 改动它可要小心
  /etc/sendmail.cw 假如你的机器有好多alias的话就把名字写在
  这个文件中, 这样写哪个都能收到信

  5.2 限制邮件的大小

  Modify /etc/sendmail.cf:

  Mlocal, P=/bin/mail, F=lsDFMrmn, S=10, R=20/40,
  Maxsize=1000000,
  A=mail -d $u
  Mprog, P=/usr/local/sendmail/smrsh, F=lsDFMeu, S=10, R=20/40, D=$z:/,
  Maxsize=1000000,
  A=sh -c $u

  This limits incoming mail processed by by smrsh and /bin/mail to 1 million
  bytes.

  You can do the same with the Mstmp, Mesmtp, and Mrelay statements to limit
  the size of outgoing mail as well.


上一篇:
  • 上一篇文章:
  • 下一篇
  • 下一篇文章: 没有了
  • 收藏此文到百度搜藏 百度搜藏| 新浪VIvi| 365key| Younote| 博采中心| 你好BLOG| 亿友网摘| 和讯网摘|
    相关文章    
    Qmail系统安装、简单配置及使用
    架设企业级Internet邮件服务器
    Linux下Mail服务器架设攻略
    Win2003下Mail服务器架设
    用CMailServer打造邮件服务器
    Windows 2003邮件服务器配置指南
    企业邮局服务器架设一点通
    中小企业如何有效架设邮件服务系统
    设置大容量Web界面的Email系统
    用mail服务器构建多域名邮件系统
     
     
     
    最新文章
    普通文章 SENDMAIL邮件服务器的安装与设置最新文章
    普通文章 彻底改装Windows XP的外观最新文章
    普通文章 实战激活64位Windows Vista系统全最新文章
    普通文章 PPStream网络电视播放提速的五招最新文章
    普通文章 Coreldraw绘制可爱的机器猫最新文章
    普通文章 Excel公式的错误值的解决方法最新文章
    普通文章 Vista系统恢复后数据丢失解决方法最新文章
    普通文章 MySQL语法和常用函数入门手册最新文章
    普通文章 MySQL5常用数据库操作SQL语句最新文章
    普通文章 无法远程登入MySQL数据库的原因和最新文章
     
    热门文章
  • 没有推荐文章
  •  
     
     
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 

    版权所有2006-2008 龙腾教程网