荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: acumen@bbs.pku.edu.cn (平平淡淡每一天), 信区: Linux
标  题: 用脚本实现sendmail的动态relay-domains
发信站: 北大未名站 (Mon Mar 10 00:02:40 2003)
转信站: SZU!news.tiaozhan.com!news.zixia.net!news.happynet.org!PKU

sendmail是靠relay-domains里的ip列表来允许用户使用smtp服务relay邮件的,
学校里的邮件服务器一般只对本校的ip开放smtp服务,这样在平时比较方便,
但是对于一些出差在外,或者假期回家的人来说,就无法使用smtp服务,很是
不便。

我们可以用/var/log/maillog里的记录来实现relay-domains的动态变化,在
用户pop3收信后,maillog里会出现3行包含用户ip地址的记录:
Mar  9 23:54:45 ime ipop3d[31289]: pop3 service init from 162.105.xxx.xx
Mar  9 23:54:46 ime ipop3d[31289]: Login user=abc host=[162.105.xxx.xx]
nmsgs=0/0
Mar  9 23:54:46 ime ipop3d[31289]: Logout user=abc host=[162.105.xxx.xx]
 nmsgs=0 ndele=0

第一行记录无论用户是否正确登陆,都会出现,所以不太可靠,另外两行比较可
靠,所以可以利用其中的ip。写一个cron,每5分钟提取pop3产生的ip,再跟以前
的相比,是否有新增的ip,如果有,替换/etc/mail/relay-domains,并重起
sendmail服务。脚本为:
grep "Logout" /var/log/maillog | awk '{print $8}' | sort -u | sed 's/host=/
/ ' | sed 's/\[//' | sed 's/\]//' > /etc/mail/relay-domains_temp
cmp -s /etc/mail/relay-domains_temp /etc/mail/relay-domains
if [ "$?" -gt "0" ] ; then
cp -f /etc/mail/relay-domains_temp /etc/mail/relay-domains
/etc/init.d/sendmail restart
fi

grep提取包含需要ip的行,awk提取ip的字段,几个sed命令去掉了host=以及[],
relay-domains_temp是当前包含的ip列表,跟使用中的relay-domains比较,如果
不同就替换,并重起sendmail。

5分钟搜寻一次,用户来到一个新的地方,能够在5分钟内自由relay邮件应该是可以
接受的。而且,maillog每周更新一次,也是可以接受的。

如果没有配置用户smtp身份认证的邮件服务器,也许可以采用这种方法。


--
※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.77.61]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店