Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92600
  • 博文数量: 12
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-24 10:56
文章存档

2011年(1)

2007年(1)

2006年(10)

我的朋友

分类: LINUX

2006-07-05 15:18:32

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的话就把名字写在 这个文件中, 这样写哪个都能收到信 .

 


  sendmail转发邮件(Relay)的设置

先简单提一下转发的概念.

所谓转发,就是指通过这台Mail server 发送目的地是别的Mail server的油件.打个比方,有两台服务器 a.mail.org和b.mail.org,一封To: some@b.mail.org,可以先 发给A.mail.org,然后由A.mail.org发给B.mail.org.这个过程就是转发(relay). 使用一般的Mail Client实际上就是有一个转发过程,他不是 直接将信发往目的服务器,而是本地的Mail server,再通过 本地的Mail Server将信发送出去.随着网络安全等等问题 渐渐得到重视,转发功能也由缺省允许变成缺省禁止.

放开禁止的办法很多,首选是正确配制/etc/mail目录下的 几个文件.sendmail是通过类(Class)配合重写规则(rewrite rule) 来进行地址检查控制的,所以配制文件必须按照要求的格式来写. 一般的方法是将本地地址加入/etc/mail/ip_allow中, 格式如下:
  A.
  A.B.
  A.B.C.
  A.B.C.D
  其他的子网表达方式都是非法的.

一个例子就是:
  202.119.65.
  202.119.66.
  这样所有202.119.65.0-202.119.66.255的Mail client 都能通过我的Mail Server转发油件.

另一种方法是添加目的域名到relay_allow 中,比如将 :
  mere.ml.org
  test.org
  加如relay_allow中, 所有法往someone@mere.ml.org或something@test.org都将 被允许转发.

如果你所希望的是一种开放式的服务,不进行任何检查, 那重新生成sendmail.cf将是很不错的选择.

就以redhat为例,先安装sendmail-cf这个rpm包, 到/usr/lib/sendmail-cf目录下仔细阅读一下 README和README.check, 然后到cf目录中,编辑redhat.mc,将所有关于地址检查 的选项都删除掉,然后用命令 m4 ../m4/cf.m4 redhat.mc > redhat.cf 如果一切正常,redhat.cf就是生成的sendmail.cf 复制到/etc/sendmail.cf后,重启动一次sendmail 就可以了.

最后说上两句:Sendmail的检查功能十分强大,如果有 必要甚至可以做地址检察数据库. 不过个人还是比较喜欢qmail,简单易用,配置方便,没有 头疼的rewrite rule,可惜家里最后还是选择了sendmail 就是因为sendmail的rewrite rule实在太cool了,想干 什么就干什么,比较合适个人定制使用.

 

 

 

安装配置SendmailV8

我们下面的操作是在Solaris2.6上, 用的编译器是GCC2.8.1。

一、获取Sendmail

最新的Sendmail V8 可以从 Sendmail Consortium 主页获取。北京大学匿名FTP上也有。目前最新版本是Sendmail8.9.3

二、解开Sendmail

安装Sendmail必须有超级用户(root)权限。取来的Sendmail通常是 .tar.gz 格式的包,你需用下面命令进行解包:
  # gzip -cd sendmail.8.9.3.tar.gz | tar xvf - 解开的包放在sendmail-8.9.3下。

三、 编译并生成sendmail

你的系统上必须有C编译器或GNU的gcc编译器。你可以从北大FTP上获取Solaris2.5/2.6上的编译好的GCC包 在编译Sendmail之前, 我们还需要新的Berkeley DB包, Sendmail通过利用该数据库的功能, 才能有效的抵挡邮件攻击。最新的Berkeley DB可从获取。在北大FTP上你可获得目前最新的2.7.3版本。安装Berkeley DB的步骤如下:
  a.解包:
  # gzip -cd db.2.7.3.tar.gz| tar xvf -
  # cd db-2.7.3
  b.编译并安装
  # cd dist
  如果你是用gcc, 做下一步:
  # vi configure
  在 configure中加入一行:
  CC=gcc
  # ./configure
  # make
  # make install (需要超级用户权限)

缺省情况下, Berkeley DB被安装在 /usr/local/BerkeleyDB/ 目录下,你可以通过修改Makefile中的profix参数来重新定义这个目录。该目录要记住, 下面编译Sendmail时要用到。现在我们回到Sendmail所在的目录:
  # cd sendmail-8.9.3
  再进到BuildTools/Site目录下,创建 site.config.m4
  # cd BuildTools/Site
  # vi site.config.m4
  在site.config.m4 输入下面两行:
  define(`confINCDIRS,`-I/usr/local/BerkeleyDB/include\')
  define(`confLIBDIRS,`-L/usr/local/BerkeleyDB/lib\')
  这是为了告诉Build到哪去找DB的头文件和库。再回到sendmail-8.9.3目录下,执行下面命令:
  #cd ../../sendmail-8.9.3
  #make
  编译完后,你需要创建 /usr/share/man/cat1,cat5,cat8三个目录,再执行安装程序;否则会出错退出。
  #make install (需要超级用户权限)
  当你执行完以上命令后,系统将sendmail,mailq安装在目录/usr/lib/下, makemap 安装在 /usr/sbin/ 下,这是生成数据库映像的工具;smrsh安装在 /usr/lib下,这是sendmail专用的Shell。
  下面我们要来生成Sendmail的配置文件 sendmail.cf。

 

四、生成sendmail.cf

Sendmail的配置文件是通过m4命令生成的。首先进入~/sendmail-8.9.3/cf/目录:
  1.#cd ~/sendmail-8.9.3/cf
  2.#cd cf
  3.#cp generic-solaris2.mc sendmail.mc
  4.编辑 sendmail.mc 如下:
  diver(0)dnl
  VERSIONID(`@(#)sendmail.mc 8.30\')
  OSTYPE(solaris2)dnl
  DOMAIN(generic)dnl
  define(`confCOPY_ERRORS_TO\',`Postmaster’)dnl
  define(`confPRIVACY_FLAGS’,``authwarnings,noexpn,novrfy\'\')dnl
  FEATURE(relay_entire_domain)
  FEATURE(virtusertable)dnl
  FEATURE(access_db)dnl
  FEATURE(blacklist_recipients)
  FEATURE(rbl)
  FEATURE(smrsh)
  MAILER(local)dnl
  MAILER(smtp)dnl

五. 生成 sendmail.cf:

# m4 ../m4/cf.m4 sendmail.mc > sendmail.cf
  将 sendmail.cf拷贝到 /etc目录下。
  Sendmail的配置文件就生成好了。
  六、生成其他相关文件

在 /etc/mail下主要生成下面几个文件:sendmail.cw,aliases, access, relay-domains, 和 /etc/virtusertable(你可通过改sendmail.cf文件将virtusertalbe放到/etc/mail下。

1. Sendmail.cw中放置所有你希望该服务器接收的主机名。如果你希望域名做主机名,也可加入其中。比如,你在该文件中放 pku.edu.cn, 那么,该服务器接收地址为 user@pku.edu.cn邮件。

2.Aliases 别名文件是系统安装sendmail时生成的。第一次运行sendmail之前,必须先运行 /usr/lib/newaliases 命令来生成 aliases数据库文件。以后每次修改aliases文件后,都要运行该命令修改才有效。

3.Relay-domains中放置允许邮件中继的域名,如 pku.edu.cn。 4.Access文件是用来控制邮件中继和邮件轰炸(Spamming)的。具体如何设置,参看文章《如何防止邮件攻击》。

5.Virtusertable 是用来支持所谓的虚拟用户别名的。它和aliases文件主要不同是:aliases中别名指向的用户必须是本地用户,virtusertable中的别名指向的用户可以是其他服务器上的用户或别名,这样大大增加了别名设置的灵活性,特别是你希望这台SMTP服务器做mail hub 或 smart host,专们处理非本地的邮件中转时。 /etc/mail/virtusertable 文件的内容格式和/etc/mail/aliases基本一样,举例如下:
  Kai.Wang@pku.edu.cn
  kaiw@mailserver
  Jianw@pku.edu.cn
  jianw@csmailsvr
  ……
  Virtusertable 也需要用makemap来生成它的数据库文件。命令如下:
  # makemap hash virtusertable.db < virtusertable

八、测试sendmail

首先,启动sendmail后台进程:
  # /usr/lib/sendmail -bd -q1h
  # ps -ef|grep sendmail /* 查看进程是否运行。
  然后,分别从本地和远地给服务器上的某一用户发邮件,看是否能收到。在 /var/log/syslog 文件中你可以看到Sendmail的日志信息。 你也可以通过下面命令对sendmail发送邮件进行跟踪:
  #/usr/lib/sendmail -d -v user@host.domain
  总之, Sendmail是一个较复杂的软件,这篇文章只是一些最基本的介绍。你可以从sendmail正式站点找到更多的信息。另外,我们将上面编译好的sendmail和相应的配置文件放在北大FTP上,需要的话可从这里下载。
阅读(2644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~