|
|
| 拨接用户的 Mail Relay 问题 |
| 出自:http://www.fanqiang.com 2002年04月05日 17:57 |
作者 kenduest (小州) 看板 Linux
标题 [分享] 来谈一下拨接用户的 Mail Relay 问题
时间 Sun Apr 2 22:03:02 2000
───────────────────────────────────────
相信大家都知道,在 SendMail 8.8.x 版本之後,已经把 Mail Server
可以任意被 Relay 的功能关掉了;也就是说,预设的 SendMail
目前只允许让本机的连线端可以透过这台 Mail Server 来发信到
Internet 上,其他的连线端一律都会被拒绝....
OK.. 若是希望某个网域可以使用这台邮件主机来寄信,那在主机的
/etc/mail 目录内可以看到 access 、relay-domains 这两个档案可以
用来开放与限制那些连线端可以使用这台主机来发信。
关於 access 与 relay-domains 档案的解说部份,这里弟就先略过了,
也就是这里先假设大家已经知道了access 与 relay-domains 档案的
用途,也知道要使用 makemap 程式来产生实际给 sendmail 程式所
使用的 .db 资料档案。
话说目前 SendMail 预设把可以任意被 Relay 的功能关掉了,那的确是
可以大大减少主机会被拿来乱发信的问题,那 spam 的问题的确是可以
少了很多... 不过 SendMail 这个目前的限制作法,也造成了一些实际上
的困扰。
怎麽说呢?比方有个公司是在台北,这台主机限制了只有属於该公司
网域 IP 的连线端才可以使用这台 Mail Server 来寄信到任何 internet
上。而某个公司的员工他该好出差到南部,现在他使用 notebook 打好
了 e-mail 准备要寄给公司的客户,那他现在就使用了 hinet 的拨接上网
要寄信出去。不过就按下寄信扭後,萤幕出现了 Relaying Denied 的
错误讯息被告知寄信失败。检察一下 smtp 发信主机的设定,原来 smtp
主机是指向台北公司的 Mail Server ,而只因为目前是使用 hinet ISP
拨接上网,所属网域并不是在公司的网域内,所以当然会寄信失败.........
OK... 那没有办法,只得去改 SMTP 的设定,所以就把 smtp 的连线
主机改成任意一台 hinet 的 e-mail 主机,比方是 ms24.hinet.net
就不会有问题了。
当他处理完事情,回到台北公司了。现在他人在公司内,正在写 e-mail
准备把出差所处理的事情回报给上司。信写好後要寄出去的时候,萤幕
诱出现了 Relaying Denied 的错误讯息。仔细一看,原来他目前是在公司
网域内,已经不是用 ISP 网域内,所以 ISP 的 Mail Server 拒绝让你寄信。
遇到这样子的错误,他需要再去改 smtp 的主机指向公司的 Mail Server
就不会有问题了。
关於上面的情况,弟目前工作的地方,有人的确遇过这个问题,也向的弟
反应过了,结论他是希望可不可以说就算是他不是在公司内也可以使用公司的
主机发信呢?而不用说在公司外还需要去改寄信软体的设定徒增了一些
不便的地方。
弟想一想他这麽说的确是没有错,而有一些业务人员可能只懂得怎麽操作
outlook 这类软体来写个 e-mail 发信,smtp 的设定细节他可能不是相当清楚;
而遇到了 Relaying Denied 的错误讯息更是不知道要如何处理....
那弟就在想办法,看看有没有一个解决的方式可以允许使用拨接上网的公司
员工可以使用公司的 Mail 主机寄信,而不会因为上线 IP 并没有在
/etc/mail/access 或者是 /etc/mail/relay-domains 内设定开放的区域而
拒绝这个连线端的寄信。
首先弟去把整个 sendmail 8.9.x 的文件资料翻过一遍,发现并没有这方面的
资讯。 後来 sendmail 8.10.x 有 beta 版出来了 (目前已经正式 release ),
有注意到在这个版本内提供了所谓的 AUTH SMTP 的功能。AUTH SMTP 的功能,
简单的说就是通过 sendmail 的认之後,就可以使用主机任意寄信了,也不会
遇到因为连线端并未在 sendmail 所允许开放的网域而被拒绝。
而为了要使用 sendmail 8.10.x 的 auth smtp 功能,耗了一两个礼拜还是
搞不定。整个要让 sendmail 8.10.x 可以支援 auth smtp 还真是不简单,
因为还需要另外抓其他的 library 套件回来编译安装,还要改 sendmail 的一些
设定才能够支援....
OK... 弄到最後,使用 telnet xxx.xxx.xxx.xxx 25 然後使用 EHLO localhost
打招呼时的确是已经有看到 AUTH 的回应字串,那也就是说这台 mail server
是支援 auth smtp 的认功能。不过这里到目前还搞不定的是,这个部份 auth
smtp 的密码设定部份迟迟无法成功,也就是虽然使用一些 mail client 测试
的确有丢出了 auth xxxxxx 的字串向 mail server 认,但是这个部份总是
认失败 >_< 於是的另外想办法另求其他方式来解决。
有一天上台大电机与 stevel 说到 sendmail 8.10.x 的认问题,他是说到目前
反倒是有个解决的方式叫做 "pop before smtp" 。pop before smtp 的意思
就是说,先让某个使用者到主机做 pop3 收信的动作,那完成後在往後几分钟内
mail server 就暂时开放允许这个连线端可以使用这台主机来寄信。等几分钟後,
这个这个连线端可以任意使用主机发信的功能就会被关闭了....
好,说到重点了,那 pop before smtp 怎麽做呢?
在 http://www.jdimedia.nl/igmar/relayd/ 网站上可以找到
Sendmail Relay Daemon 的程式。这个 daemon 程式能够修改
/etc/mail/access.db 档案动态加入某个 ip ,如此 sendmail 程式就接受某个
连线端来使用主机来寄信了。
那这个 relay domains 程式怎麽知道有人使用 pop3 收信之後,要去修改
access.db 档案暂时让 sendmail 可以接受这个连线端可以 relay 的动作呢?
那这个部份还需要修改 imap 套件里面的原始码,让重新编译出来的 pop3d 程式
可以配合这个 pop before smtp 的功能。
大致上整个意思就是这样子了... 要使用这个功能,那整个操作方式是这样子的:
1. 到 http://www.jdimedia.nl/igmar/relayd/ 抓 relayd 的原始码套件。
弟目前是使用 RedHat Linux 6.1 的环境下来说的,那的抓取
relayd-1.3-6.src.rpm 回来使用 rpm --rebuild relayd-1.3-6.src.rpm
把套件编译为 .i386.rpm 的 binary 档案,完成後可以在
/usr/src/redhat/RPMS/i386 找到 relayd-1.3-6.i386.rpm
2. 提供收信的 pop3d 程式也需要修正,在网站上可以找到 imap 的 patch 档案
为 http://www.jdimedia.nl/igmar/relayd/relayd-ipop3d-4.5.tar.gz
另外我们还需要 imap 的原始 .src.rpm 套件档案,请到 CLE ftp
ftp://cle.linux.org.tw/pub/CLE/SRPMS/SRPMS 里面就可以找到
3. 抓回 imap 的 .src.rpm 档案後,请使用 rpm -ihv imap-xxxxxx.src.rpm
的方式安装,该套件的的 imap .tar.gz 档案会解开到 /usr/src/redhat/SOURCES
目录内, .sepc 规格档案会放置在 /usr/src/redhat/SPECS 目录内。
然後也把 relayd-ipop3d-4.5.tar.gz 档案解开,把里面解开的所有档案
都到 /usr/src/redhat/SOURCES 目录内。
4. 切换目录到 /usr/src/redhat/SPECS 目录内使用 rpm -ba imap.spec 重新把
imap 套件打包编译成为 .i386.rpm 的套件档案。
5. 接着分别使用 rpm -ihv relayd-1.3-6.i386.rpm 安装上该套件,还有就是
使用 rpm -Uhv imap-4.7.i386.rpm 安装上该套件。若是安装新的 imap rpm
档案有问题,请先把原先的 imap 移除,然後再安装这个套件即可。
6. 执行 chown relayd.relayd /etc/mail/access.db ,好让 relayd 有权限
可以修改这个档案以便於达到动态 relay 的功能。对了,这样做会让每次启动
sendmail 程式时会出现 access.db 建立失败的问题,不过这是正常的,
所以不需要担心。
7. 现在就使用 /etc/rc.d/init.d/relayd start 就可以启动了 relayd 的程式。
另外可以使用 ntsysv 设定每次开机都启动这个服务。
整个步骤就是这样子了。往後在外面要使用这台主机寄信,先作 "pop"
收信检查的动作,那接下来的几分钟时间内你就可以使用这台主机来寄信到
其他非公司的网域也不会出现 Relaying Denied 的错误讯息了 ^_^
|
| 【】【http://www.trainlinux.com】【Close】 |
|
|
『相关资料』
|
|
|
|
|