Chinaunix

标题: sendmail初探milter,很强大!强烈建议使用Sendmail [打印本页]

作者: 3645636    时间: 2010-07-30 16:51
标题: sendmail初探milter,很强大!强烈建议使用Sendmail
本帖最后由 3645636 于 2010-07-30 18:45 编辑

之前一直在使用postfix,也尝过qmail,一段时间内被postfix精密的配置参数所吸引,还有qmail的简略、实用,但大为恼火的是,Amavisd-new,MailScanner均不支持qmail,Qmail差不多已经名存实忙了!接着又试用了Sendmail,起初被网上妖魔化的议论所迷惑,什么漏洞百出,哪个着实吓退一批人的"配置文件",其实也没有哪么玄乎!openbsd、freebsd、RHEL、Centos缺省的MTA都是sendmail,如果真的哪么差劲,为什么这些著名的Unix/Linux都要缺省去安装sendmail包!milter的概念最早出现在sendmail,还有DKIM,postfix也随后加入了milter支持,但不是原生态的,很多milter插件需要sendmail libmilter函数库。也就是说,postfix要使用milter插件,必须要安装有sendmail,比喻milter-limit。
  postfix配置简单明了,第三方插件也很多,Anti-Spam、Anti-Virus……  sendmail都支持这些,遗憾的是sendmail暂不支持DovecotSASL
  
这些我使用的milter有milter-limit、milter-clamc、spamass-milter
  1. milter-clamc去搭配Clamav查杀病毒
复制代码
  1. spamass-milter去呼叫Spamassassin探测垃圾邮件!
复制代码
  1. milter-limit可以控制用户的发信频率,比喻每五分钟一封
复制代码
使用系统自带的rpm安装,包括sendmail-devel,sendmail-cf等一并安装上
  1. #yum install sendmail* cyrus-sasl* cyrus-imapd
复制代码
当然你也可以不让sendmail呼叫哪么多milter,使用Amavisd-new或MailScanner,配置都非常简单明了!但amavisd-new搭配sendmail的话,要使用amaivsd-new-milter!
缺省的Sendmail只监听本地的回环地址,无法发挥他的功效,需要修改一下sendmail.mc,配置文件集中在/etc/mail/目录,注意我们使用了lmtp来投递,注释掉procmail相关的配置行。procmail也可以去调用Spamassassin
  1. define(`confAUTH_OPTIONS', `A')dnl
  2. TRUST_AUTH_MECH(`LOGIN PLAIN')dnl
  3. define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
  4. define(`confLOCAL_MAILER', `cyrusv2')dnl
  5. define(`CYRUSV2_MAILER_ARGS', `FILE /var/lib/imap/socket/lmtp')dnl
  6. DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
  7. dnl MAILER(procmail)dnl
  8. MAILER(cyrusv2)dnl
复制代码
修改/usr/lib/sasl2/Sendmail.conf,内容如下:
  1. pwcheck_method:saslauthd
复制代码
修改/etc/sysconfig/saslauthd,验证方式为shadow
  1. MECH=shadow
复制代码
确保/etc/cyrus.conf文件存在以下内容,sendmail会使用lmtp来投递邮件,默认启用了pop3 imap pop3ssl imapssl,如果需要就打开,不需要注释掉即可.
  1. lmtpunix      cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1
复制代码
/etc/imapd.conf内容如下
  1. configdirectory: /var/lib/imap
  2. partition-default: /var/spool/imap
  3. admins: cyrus root
  4. sievedir: /var/lib/imap/sieve
  5. sendmail: /usr/sbin/sendmail
  6. hashimapspool: true
  7. sasl_pwcheck_method: saslauthd
  8. sasl_mech_list: PLAIN LOGIN
  9. #tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
  10. #tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
  11. #tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt
  12. allowanonymouslogin: no
复制代码
启动相应的服务
#service cyrud-imapd start
#service sendmail start
#service saslauthd start

观察sendmail是否启用了sasl验证.
  1. [root@mail mail]# telnet localhost 25
  2. Trying 127.0.0.1...
  3. Connected to localhost.localdomain (127.0.0.1).
  4. Escape character is '^]'.
  5. 220 mail.jazz.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 29 Jul 2010 15:13:40 +0800
  6. ehlo localhost
  7. 250-mail.jazz.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
  8. 250-ENHANCEDSTATUSCODES
  9. 250-PIPELINING
  10. 250-8BITMIME
  11. 250-SIZE
  12. 250-DSN
  13. 250-ETRN
  14. [color=RoyalBlue]250-AUTH LOGIN PLAIN[/color]
  15. 250-DELIVERBY
  16. 250 HELP
复制代码
使用任意的MUA进行发信和收信测试


现在安装spamassassin、clamav、milter-limit
可以使用rpm,或源码,我使用了源码
spamassassin安装,perl Makefile.pl make  make install,也可以使用yum install spamassassin,方便起见,编译clamav时注意有个milter模块,但我并没有使用clamav自带的milter,而是使用milter-clamc

我只简要的记录一下安装milter-limit,milter-clamc模块!
下载地址:http://www.milter.info/  需要要同时下载libsnert
libsnert-1.73.17     milter-clamc-0.6.20      milter-limit 0.14.86
  1. tar zxf libsnert-1.73.17.tar.gz
  2. tar zxf milter-limit-0.14.tar.gz
  3. tar zxf milter-clamc-0.6.tar.gz
  4. cd com/snert/src/lib/
  5. ./configure
  6. make build
  7. cd ../milter-limit      #编译milter-limit
  8. ./configure
  9. make build
  10. make install
  11. cd ../milter-clamc   #编译milter-clamc
  12. ./configure
  13. make build
  14. make install
复制代码
编译安装spamass-milter,拿来它来呼叫spamassassin
  1. tar zxf spamass-milter-0.3.1.tar.gz
  2. cd spamass-milter-0.3.1
  3. ./configure
  4. make
  5. make install
  6. cp contrib/spamass-milter-redhat.rc /etc/init.d/spamass-milter   
  7. chmod a+x /etc/init.d/spamass-milter
复制代码
#这个角本需要修改一下,只需要改一下/spamass-milter的实际路径即可

clamav用源码或rpm都可以,注意这里并没有使用clamav的milter,而是使用了第三方的milter来呼叫clamav,因为支持tag,你自己安装之后便知道哪个好用。
  1. ##启动spamassassin
  2. ##启动clamd
  3. ##启动spamass-milter
  4. ##启动milter-limit
  5. ##启动milter-clamc
  6. [root@mail spamass-milter-0.3.1]# /etc/init.d/spamd start
  7. 启动 spamd:                                         [确定]
  8. [root@mail spamass-milter-0.3.1]# /etc/init.d/clamd start
  9. Starting Clam AntiVirus Daemon:                               [确定]
  10. [root@mail spamass-milter-0.3.1]# /etc/init.d/spamass-milter start
  11. Starting spamass-milter:                                            [确定]
  12. [root@mail spamass-milter-0.3.1]# /etc/init.d/milter-limit start
  13. Starting milter-limit                                                    [  OK  ]
  14. 启动milter-clamc我们需要单独加入一些参数,稍后你就明白,当然,你使用源码自带的角本也没问题,但后果是如果发现病毒文件,整封信件就删除了,这里的policy=tag,也就是给染毒的信件打上标记,标记的名称是**Virus**,会加入发信主题,也就是**Vrius** Subject,而Clamav自带的milter却将邮件删除,没这么多选项!policy的其它参数请参考文档。
  15. [root@mail spamass-milter-0.3.1]# /usr/local/sbin/milter-clamc \
  16. policy=tag \         
  17. subject-tag=[**Virus**] \
  18. run-group=milter \
  19. run-user=milter
复制代码
查看所有相关的进程是否启动
[root@mail spamass-milter-0.3.1]# ps -A|grep milter
31865 ?        00:00:00 spamass-milter
31893 ?        00:00:00 milter-limit
31970 ?        00:00:00 milter-clamc
[root@mail spamass-milter-0.3.1]# ps -A|grep spamd
31806 ?        00:00:01 spamd
31807 ?        00:00:00 spamd
31808 ?        00:00:00 spamd
[root@mail spamass-milter-0.3.1]# ps -A|grep clamd
31841 ?        00:00:03 clamd
[root@mail spamass-milter-0.3.1]# ps -A|grep lmtp
31913 ?        00:00:00 lmtpd

[root@mail spamass-milter-0.3.1]# ps -A|grep sendmail
26629 ?        00:00:00 sendmail
26637 ?        00:00:00 sendmail

[root@mail spamass-milter-0.3.1]# ps -A|grep imapd
1560 ?        00:00:00 imapd
1567 ?        00:00:00 imapd
1613 ?        00:00:00 imapd
1614 ?        00:00:00 imapd
1615 ?        00:00:00 imapd
26997 ?        00:00:00 imapd
27012 ?        00:00:00 imapd
27013 ?        00:00:00 imapd
27014 ?        00:00:00 imapd
31974 ?        00:00:00 imapd
31975 ?        00:00:00 imapd
31976 ?        00:00:00 imapd

现在相应的milter 已经安装完毕,只需要找到socket的位置即可,

#调用spamassassin的milter
[root@mail ~]# ls /var/run/spamass.sock
/var/run/spamass.sock

#调用clamav的milter
[root@mail ~]# ls /var/run/milter/milter-clamc.socket
/var/run/milter/milter-clamc.socket

#控制发信频率的milter
[root@mail ~]# ls /var/run/milter/milter-limit.socket
/var/run/milter/milter-limit.socket

现在只需要将这些milter的相关信息写出sendmail.mc即可!
  1. vi /etc/mail/sendmail.mc
  2. INPUT_MAIL_FILTER(`milter-clamc',`S=unix:/var/run/milter/milter-clamc.socket, T=C:20s;S:20s;R:20s;E:5m')dnl
  3. INPUT_MAIL_FILTER(`milter-limit',`S=unix:/var/run/milter/milter-limit.socket, T=C:10s;S:10s;R:10s;E:10s')dnl
  4. INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
  5. define(`confINPUT_MAIL_FILTERS', `milter-limit,milter-clamc,spamassassin')dnl
复制代码
测试,首先用垃圾邮件代码进行测试!

接下来我们看一下邮件的源码:


使用病毒邮件进行测试

查看邮件源码


接下来,我们再测试milter-limit
控制用户地址是192.168.0.1 每一分钟只能发信一封信件
  1. vi /etc/mail/access
  2. #Add
  3. milter-limit-Connect:192.168.0.1        1/1m
  4. cd /etc/mail
  5. make restart
复制代码
一分钟之内发多封信件将拒绝,只能等于或小于1


作者: jmsliao    时间: 2010-08-01 13:30
推荐 使用 Extmail   一个全功能的邮件系统, 自己架设演示地址:http://xoop.3322.org:500
1、AMP ---apache(web服务) 、mysql(数据库)、php(非必需) 的简称
2、postfix --mta 邮件系统核心
3、courier-authlib--一个为courier-imap,maildrop,sasl2 提供用户信息的后台 进程序
4、courier-imap --提供pop3,pop3s,imap,imaps 服务的程序
5、amavisd-new --提供内容过滤
6、clamav -- 著名的杀毒软件
7、extmail --一个著名的webmail程序
8、extman --与extmail集成的后台管理程序
9、slockd --一个基于smtp阶段的反垃圾邮件程
作者: yahoon    时间: 2010-08-02 11:02
推荐 使用 Extmail   一个全功能的邮件系统, 自己架设演示地址:
1、AMP ---apache(web服务) 、mysq ...
jmsliao 发表于 2010-08-01 13:30


你这个网址打不开
作者: wwr    时间: 2010-08-02 12:54
LZ强人,正好在学习sendmail
作者: jmsliao    时间: 2010-08-02 14:07
因为使用动态域名绑定IP, 所以可能有时候不太稳定, 不知道为什么最近Adsl 频繁的更换IP 租约时间越来越短?  还有我是使用开放默认的http 80端口时 被Adsl 给屏蔽了,所以只能改了端口 500
作者: Puer_Tea    时间: 2010-08-04 15:31
因为使用动态域名绑定IP, 所以可能有时候不太稳定, 不知道为什么最近Adsl 频繁的更换IP 租约时间越来越短 ...
jmsliao 发表于 2010-08-02 14:07



    很多ip段的80都被绿掉了。
不仅仅是adsl,。。
作者: Puer_Tea    时间: 2010-08-04 15:32
lz属于传说中的顶级管理员了

挺前辈讲, 能看懂sendmail配置文件的人就是管理员做到头了
作者: 3645636    时间: 2010-08-05 12:04
回复 7# Puer_Tea


    过奖了,sendmail其实不难配置,就是文档少了点
作者: 3645636    时间: 2014-06-20 18:43
:wink::wink::wink::wink::wink:
作者: kalvin2012    时间: 2014-12-11 11:13
LZ 这是用哪个Linux,搭建的sendmail
用这个乳峰,把公司邮箱管倒了怎么办?
作者: 3645636    时间: 2014-12-11 20:13
回复 10# kalvin2012


    一个中学用的,50多个用户,一直在用,也出什么问题
作者: woxizishen    时间: 2014-12-12 09:57
支持一下,现在还有坚持使用sendmail的人越来越少了。Redhat和不少linux发行版现在都是预装postfix。包括现在很多商业SMTP服务器都是基于postfix进行二次开发的。
作者: mobman    时间: 2015-07-19 17:09
请教大侠,我这里很多WORD的垃圾邮件,有没有什么办法可以过滤掉,谢谢了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2