服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 8283|回复: 2

CentOS5 配置sendmail imap,pop3,smtp认证

[复制链接]
dirtysea 发表于 2010-5-5 15:17:57 | 显示全部楼层 |阅读模式
查看安装
rpm -qa | grep sendmail
rpm -qa | grep dovecot
rpm -qa | grep cyrus
安装邮件服务器
yum install sendmail sendmail-cf
安装pop3/imap服务
yum install dovecot

安装用户认证
yum install cyrus-sasl
yum install cyrus-sasl-md5
yum install cyrus-sasl-plain
yum install cyrus-sasl-lib

修改sendmail配置
vi /etc/mail/sendmail.mc

第42行和43行,把最前面的dnl删除,变成:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl  
define(`confAUTH_MECHANISMS',`EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

修改SMTP的监听IP为 0.0.0.0  
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

生成配置
m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
***************************
如果出现:sendmail.mc:10: m4: cannot open `/usr/share/sendmail-cf/m4/cf.m4': No such file or directory
说明需要安装sendmail-cf
yum install sendmail-cf
***************************


修改dovecot配置
vi /etc/dovecot.conf
去掉下面一行前面的#
#protocols =imap imaps pop3 pop3s


添加域名
vi /etc/mail/local-host-names
添加域名如:dirtysea.com //每个域名一行

修改认证方式
vi /usr/lib/sasl2/Sendmail.conf 里面指明了:pwcheck_method=saslauthd,不做修改
vi /etc/sysconfig/saslauthd  找到第7行的:MECH=  改成:MECH=shadow
保存
如下示列:

[root@mail]# cat /usr/lib/sasl2/Sendmail.conf
pwcheck_method:saslauthd
[root@mail]# cat /usr/lib/sasl2/smtpd.conf.rpmsave
log_level: 3  
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
[root@mail]# cat   /etc/sysconfig/saslauthd
# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/var/run/saslauthd
# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=shadow
# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=
[root@mail]#testsaslauthd -u test -p 123456   (验证smtp)
0: OK "Success."






添加邮件用户
[root@localhost named]# groupadd mailuser
[root@localhost named]# adduser -g mailuser -s /sbin/nologin test
这样添加的用户名就没有了shell,只能收发信而不能登录到服务器运行其他程序


设置开机启动
chkconfig sendmail on
chkconfig dovecot on
chkconfig saslauthd on

重启
service sendmail restart
service dovecot restart
service saslauthd restart

验证Sendmail服务
telnet localhost 25 //输入helo localhost 此时应该有LOGIN PLAIN的字样,即表示SMTP认证设置成功。

[root@centos5 mail]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 centos5 ESMTP Sendmail 8.13.8/8.13.8; Thu, 6 May 2010 06:21:29 +0800
helo localhost
250 centos5 Hello localhost.localdomain [127.0.0.1], pleased to meet you
mail from:<test@dirtysea.com>
250 2.1.0 <test@dirtysea.com>... Sender ok
rcpt to:<ziliaodaren@163.com>       (要测试向外发送邮件就填写网络上存在的邮件地址)
250 2.1.5 <ziliaodaren@163.com>... Recipient ok
data
354 Enter mail, end with "." on a line by itself
From: alin
To: alin

Subject: Hello

test
.

250 2.0.0 o45MLTcH005157 Message accepted for delivery
quit
221 2.0.0 centos5 closing connection
Connection closed by foreign host.




ok,可以使用outlook或foxmail进行测试收发了。

注意:为什么没有设定foxmail中的smtp服务器需要验证,也可以发送E-mail?
要用OUTLOOK来测试,Foxmail似乎可以自动地进行smtp认证。OUTLOOK在smtp服务器验证失败后,有拒绝提示

工具->;帐户->;邮件->;属性->;服务器->;我的服务器要求身份验证(选上)->;设置->;(选择)登录方式->;帐户名:(用saslpasswd2建立的),密码(用saslpasswd2建立的)->;确定.
另外:接收邮件服务器的帐户名与密码应该是系统里的用户名与密码.


saslauthd -v 看结果支不支持 pam或shadow
smtp验证测试: testsaslauthd -u test -p 123456
sasldblistusers2 检查已经增加的smtp验证用户
saslpasswd2增加smtp验证用户:saslpasswd2 -u cencn.com -c test


查看sendmail队列:mailq
立即发送队列里的邮件:  sendmail –oQ/var/spool/mqueue.stop -q
察看邮件系统的状态:mailstats
查看暂时存储邮件:ls -l /var/spool/mail |more
 楼主| dirtysea 发表于 2010-12-28 14:24:50 | 显示全部楼层
此系统基本上为默认服务器安装模式,25、110端口均已经打开,可以接收外面发来的邮件,但是自己发不出去,从客户端用foxmail发信,提示:
The server reply:

550 5.7.1 <mrlsg@21cn.com>...Relaying denied.IP name lookup failed [192.168.70.253 ]

解决办法:
修改access文件,如下:
[root@mail mail]# vi /etc/mail/access

# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost...
localhost.localdomain           RELAY
localhost                             RELAY
127.0.0.1                            RELAY
yourdomain.com.cn           RELAY
192.168                              RELAY         (添加你被拒绝的IP)

运行:
[root@mail mail]# makemap hash /etc/mail/access.db < /etc/mail/access
[root@mail mail]# db_dump -p /etc/mail/access.db
[root@mail mail]# /etc/init.d/sendmail restart
发信正常了。
 楼主| dirtysea 发表于 2012-1-16 09:56:16 | 显示全部楼层

邮件服务器DNS设置-----MXSPFDKIM记录详解


DNS
记录,需要你到你的域名托管商那里进行设置或者你自己管理DNS服务器。不少域名托管商不支持txt记录或者不支持DKIM记录,所以你就无法使用SPFDKIM的功能。
DNS
的修改,需要48小时以上才能生效。
国内的万网是不支持DKIM,目前新网是支持SPFDKIM

1.MX记录
邮件的MX记录最好是指向机器A记录,尽量不要直接指向IP地址(不符合规范)。
1.1
添加A记录
mail.example.com 192.168.1.100
1.2
添加MX记录
example.com mail.example.com
1.3
测试MX记录
# host exmple.com
example.com mail is handled by 10 mail.example.com.
#nslookup mail.example.com
Name:mail.example.com
Address:192.168.1.100

2.SPF记录
SPF
是指Sender Policy Framework,是为了防范垃圾邮件而提出来的一种DNS记录类型,SPF是一种TXT类型的记录。SPF记录的本质,就是向收件人宣告:本域名的邮件从清单上所列IP发出的都是合法邮件,并非冒充的垃圾邮件。设置好SPF是正确设置邮件发送的域名记录和STMP的非常重要的一步。
例如:
SPF
记录指向A主机记录
example.com.           3600    IN      TXT     "v=spf1 mx mx:mail.example.com ~all"
SPF
记录指向IP地址
example.com.          3600    IN      TXT     "v=spf1 ip4:192.168.1.100 ~all"
。(以上内容参考自:http://baike.baidu.com/view/1372988.htm
2.1
如何查看SPF
Windows
**DOS模式后用以下命令:
nslookup -type=txt
域名

Unix
操作系统下用:
# dig -t txt
域名

2.2 SPF
的简单说明如下:
v=spf1
表示 spf1 的版本
IP4
代表IPv4进行验证(IP6代表用IPv6进行验证), 注意 “ip4:” “IP”之间是没有空格的
~all
代表结束

2.3 SPF
记录例释
我们看这条SPF:
yourdomain.com "v=spf1 a mx mx:mail.jefflei.com ip4:202.96.88.88 ~all"
这条SPF记录具体的说明了允许发送 @yourdomain.com IP地址是:a (这个a是指 yourdomain.com 解析出来的IP地址,若没有配置应取消)

mx
yourdomain.com 对应的mx,即 mail.yourdomain.comA记录所对应的ip
mx:mail.jefflei.com
(如果没有配置过mail.jefflei.com这条MX记录也应取消)
ip4:202.96.88.88
(直接就是 202.152.186.85 这个IP地址)
其他还有些语法如下:
- Fail,
表示没有其他任何匹配发生
~
代表软失败,通常用于测试中
?
代表忽略

如果外发的ip不止一个,那么必须要包含多个
v=spf1 ip4:202.96.88.88 ip4:202.96.88.87 ~all

2.4
测试SPF设置结果
设置好 DNS中的SPF记录后,发送邮件给自己的gmail,然后查看邮件的源文件,应该能看到类似的邮件头,其中有pass表示设置成功。
Received-SPF: pass (google.com: domain of test@jefflei.com designates
    202.96.88.87 as permitted sender) client-ip=202.96.88.87;
需要注意的是,服务器的IP若有更改,需要同时修改SPF!!!

2.5
利用SPF记录防止垃圾邮件
Unix下可以安装配置SpamAssassin之类的插件来防止垃圾邮件和钓鱼邮件(Phishing)


3.DKIM记录(通过DomainkeysDKIM给自己的邮件添加一个数字验证

DKIM
技术通过在每封电子邮件上增加加密的数字标志,然后与合法的互联网地址数据库中的记录进行比较。当收到电子邮件后,只有加密信息与数据库中记录匹配的电子邮件,才能够**用户的收件箱。它还能检查邮件的完整性,避免黑客等未授权者的修改。 DKIM 的基本工作原理同样是基于传统的密钥认证方式,他会产生两组钥匙,公钥(public key)和私钥(private key),公钥将会存放在 DNS 中,而私钥会存放在寄信服务器中。私钥会自动产生,并依附在邮件头中,发送到寄信者的服务器里。公钥则放在DNS服务器上,供自动获得。收信的服务器,将会收到夹带在邮件头中的私钥和在DNS上自己获取公钥,然后进行比对,比较寄信者的域名是否合法,如果不合法,则判定为垃圾邮件。由于数字签名是无法仿造的,因此这项技术对于垃圾邮件制造者将是一次致命的打击,他们很难再像过去一样,通过盗用发件人姓名、改变附件属性等小伎俩达到目的。在此之前,垃圾邮件制造者通过把文本转换为图像等方式逃避邮件过滤,并且使得一度逐渐下降的垃圾邮件数目再度抬头。
注意:Amavisd-new 只有 2.6.0 及以上版本集成了 DKIM 功能。

下面简单说下安装方法(如果没安装的话)

(可参考http://eric.lubow.org/2009/mail/setting-up-dkim-and-postfix/

1)下载DKIMsource包,编译安装。由于DKIM需要libmilter模块,如果你用的SMTP软件是sendmail的话,会在sendmail中自带此模块。但如果你用的是其他软件(如postfix)的话,那么就要先下载最新的sendmail source包,解压后可找到子目录“libmilter”。在里面用./Build./Build install安装libmilter模块。

2)通过dkim-genkey生成证书。dkim可以给多个服务器发布不同的证书验证。方法是通过Selector来区分。在使用dkim-genkey生成证书时,可通过参数-s来设置selector。如果不指定selector的话,系统默认使用default作为selector。参数-d是域名。

如: dkim-genkey -s mail1 -d jackyhe.com 可生成一个selectormail1jackyhe.com下的证书。

名称成功执行后,会在当前目录生成两个名字叫mail1.txtmail1.private的文件。mail1.txt是公钥部分,需要添加到DNStxt记录中。

内容如:

mail1._domainkey IN TXT “v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2ubSRHUKzL4ucfzuMKEHyy6rx/WlrZB5SKYKrCsSJWUpQstNqjcaLntaQtmKEnDgDr5rMvklaByf8vE5guqZerZ8UWeBx5joIwuohjkapgM/R6lFmI9VUj8N/c5O9AxQAOQLgnDNPl5OQamUuOp9c5W0jLbYd/hrymPYBSKEi0wIDAQAB” ; —– DKIM mail1 for jackyhe.com

我们需要在DNS的管理界面中添加一个新的txt记录。名字写“mail1._domainkey”txt文件中红色部分,不同的selector就不同了)。值为txt文件中双引号的内容(如蓝色部分)。

然后,把mail1.private(这是密钥)保存在服务器上的安全的目录。如/etc/mail/dkim/keys

3)配置DKIMDKIM的配置文件是dkim-filter.conf。里面有很多默认的设置。我们只要改下面的内容就可以了:

Domain                  jackyhe.com   ## 设置域名
ExternalIgnoreList      /etc/mail/dkim/trusted-hosts ##
设置可信任机器,如127.0.0.1

InternalHosts           /etc/mail/dkim/trusted-hosts

KeyFile                         /etc/mail/dkim/keys/mail1.private ##就是密钥的保存位置

Selector                mail1 ##本机使用的selector的名字,比如mail1

LocalADSP               /etc/mail/dkim/local-adsp-rules ## 可在此文件中添加自己的ADSP规则(ADSP规则在下面说明)

Socket                  local:/var/run/dkim-milter/dkim.sock

4)启动DKIM,如 /usr/sbin/dkim-filter -x /etc/dkim-filter.conf

5)在原来的SMTP服务端(如sendmail,postfix)上修改设置。如postfix中可添加如下设置:

smtpd_milters = unix:/var/run/dkim-milter/dkim.sock
non_smtpd_milters = unix:/var/run/dkim-milter/dkim.sock
milter_protocol = 2

重启SMTP服务后看是否可以发邮件。如果在maillog中看到”DKIM-Signature” header added,就应该大功告成了。

试试发邮件给gmail.com的邮箱,然后在gmail中看看这邮件的邮件头,看看有没有找到dkim=pass。如果有就恭喜你了。

6)最后说说什么是ADSP。在DKIM说明(http://www.dkim.org/specs/draft-ietf-dkim-ssp-04.html)中提到。我们可以有如下设置来限制没有通过DKIM签名而又用我们的域发出的邮件。

我们可以在DNS中添加一个新的TXT记录,名称是_adsp._domainkey,值是“dkim=all”

“dkim=”后可有三个可选值:

unknow: 意思是从这个域发出的邮件可带DKIM证书,也可不带。

all: 意思是从这个域名发出的证书都应该带DKIM证书的。

discardable: 意思是强烈建议接收邮件的对端把没有DKIM证书或DKIM验证失败的邮件丢弃掉。

而之前提到的“LocalADSP”中的设置,就是在自己服务器上设置规定,在接收对方的邮件时不查询DNSADSP记录,而是按照自己的要求设置。



3.1
这里可以通过iredmail.tips 获得域名的DKIM,也可以在命令行下输入
# amavisd-new showkeys
; key#1, domain example.com, /var/lib/dkim/example.com.pem
dkim._domainkey.example.com.    3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGNVMuQRKqYeySIzqTGTm3xRzF"
  "/ZzhmMnpZkEcVVjFAk+t7E388oFGu/knyh6KBKwpZxHUN5HoOYVjMudqaR2FcSvK"
  "z+joFj8Vh3rXoTLa1zHDyfD7hICzxdEgmQZ8MJM5rjPPrRGZXnPowNYDsd6nDJ86"
  "N38iFYU+jALBYDLBwQIDAQAB")

3.2
把上面记录添加到ISPDNS记录
dkim._domainkey.example.com.   v=DKIM1; p=MIGfMA0....
(省略)DLBwQIDAQAB

3.3
添加完DNS记录后,如果记录生效,可以通过运行命令检测
# amavisd-new testkeys
TESTING: dkim._domainkey.example.com      => pass

检查DNS设置
下面有几种方法,可以帮助你检测DNS是否设置生效和正常工作:
1.nslookup
#nslookup
Default Server:  unknown
Address:  192.168.1.1
> server 4.2.2.1
Default Server:  vnsc-pri.sys.gtei.net
Address:  4.2.2.1
> set type=mx
> example.com
Server:  vnsc-pri.sys.gtei.net
Address:  4.2.2.1
Non-authoritative answer:
example.com      MX preference = 20, mail exchanger = mail.example.com
> set type=txt
> example.com
Server:  vnsc-pri.sys.gtei.net
Address:  4.2.2.1
Non-authoritative answer:
example.com      text =
        "v=spf1 ip4:192.168.1.100 -all"
> dkim._domainkey.example.com
Server:  vnsc-pri.sys.gtei.net
Address:  4.2.2.1
Non-authoritative answer:
dkim._domainkey.example.com      text =
        "v=DKIM1; p= MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsgZaIvYHAos2jbp3CHW0
AwrTnAEwV1p4EaZP/JuF8t1BETBVg6WJr3YWN5ijCpi9vnw96nmf/u5MgtbLwZ+AzDBkbOY7Jbb/hIO+
mpmmfdJAY3w8KoXLCuQKDysXOys45YtfJEj66s51EHH3W+iXPYw3I/NWHjY3a5/mXnk4XJQIDAQAB"

2.linux dig
MX
记录
# host exmple.com
example.com mail is handled by 10 mail.example.com.

SPF
记录
# dig txt hotmail.com
; <<>> DiG 9.4.2-P2 <<>> txt hotmail.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43130
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;hotmail.com.                   IN      TXT

;; ANSWER SECTION:
hotmail.com.            3600    IN      TXT     "v=spf1 include:spf-a.hotmail.com include:spf-b.hotmail.com include:spf-c.hotmail.com include:spf-d.hotmail.com ~all"

;; Query time: 176 msec
;; SERVER: 64.71.161.8#53(64.71.161.8)
;; WHEN: Sat Dec  5 08:43:51 2009
;; MSG SIZE  rcvd: 157

DKIM
记录

#dig txt  dkim._domainkey.example.com

 

 

参考:

http://www.ichiayi.com/wiki/tech/install_spf_dkim

http://blog.csdn.net/mal327/article/details/6700493

http://hi.baidu.com/dongfangmn/blog/item/a214ec013b554d037aec2c12.html

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2022-1-25 13:54 , Processed in 0.044483 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表