sendmail
电子邮件的发送及接收流程:
一、同一区域发送接收邮件
例:[email protected] 向 [email protected] 发送邮件
1. [email protected] 用户使用自己的MUA(邮件用户代理,也就是邮件客户端软件)编辑信件,编辑后使用简单邮件传输协议(smtp)将信件发送给自己客户端中定义的发送邮件服务器地址,DNS 服务器通过解析MX记录,将邮件发送服务器的ip 地址返回给客户端用户[email protected],客户端子再根据ip地址加上端口号25 将邮件发送给服务器mail.163.com的MTA
2.服务器mail.163.com 接收到邮件后,交给MDA(邮件分拣代理),邮件的目的地为[email protected],属于163.com区域,属于本地信件。
3.服务器mail.163.com 查看本地是否有user2账户,如果有该账户,则将该信件投递到该账户的邮箱。如果没有该账户,信件原路退回
[email protected] 通过pop3 或imap协议连接上邮件服务器,将信件取回。
一、不同区域发送接收邮件
例:[email protected] 用户向[email protected] 用户发送邮件
1. [email protected] 用户使用自己的MUA(邮件用户代理,也就是邮件客户端软件)编辑信件,编辑后使用简单邮件传输协议(smtp)将信件发送给自己客户端中定义的发送邮件服务器地址,DNS 服务器通过解析MX记录,将邮件发送服务器的ip 地址返回给客户端用户[email protected],客户端子再根据ip地址加上端口号25 将邮件发送给服务器mail.163.com的MTA
2. 服务器mail.163.com 接收到邮件后,交给MDA(邮件分拣代理),邮件的目的地为[email protected],属于sina.com区域,而自己属于163.com,这时该邮件服务器使用smtp协议将该邮件转发到sina.com区域的邮件服务器
3.mail.sina.com 服务器使用MDA分拣代理查看邮件域名,发现是属于该区域的邮件,系统查看是否有该帐号,如果有就将该邮件放到该用户的邮箱,如果没有该用户,则将邮件原路退回。
4. [email protected]用户 通过pop3 或imap协议连接上邮件服务器,将信件取回。
端口:
smtp :25 pop3:110 imap:143
smtps:465 pop3s:995 imaps:993
https:443 squid:3128
相关术语:
1.MTA:邮件传输代理。用来监控以及传授电子邮件。(mail transfer agent)
2.MUA:邮件用户代理,帮助用户发送接收邮件 (mail user agent)
3.MAA :邮件访问代理。(mail access agent)
4.MDA:邮件分拣服务。(Mail delivery agent)
5.smtp:简单邮件传输协议,为用户通过可靠地邮件传输,25号端口
6. pop3协议:邮局协议。用于邮件接收,tcp 110 端口。
7. imap4协议:通过互联网获取信息的协议,提供摘要浏览功能;143端口
电子邮件的发送流程
发送方通过邮件客户程序,将编辑好的电子邮件通过SMTP发送给服务器。服务器识别接收者的地址,若是本地的账户保存下来,消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收 者通过POP3接受邮件。若不是本地的邮件,则将邮件转发到对应的电子邮件服务器,服务器将消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收 者通过POP3接受邮件。
1.新建挂载点,挂载光盘
[root@mail ~]# mkdir /mnt/cdrom
[root@mail ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
2.配置yum工具
[root@mail ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-server] ##仓库名
name=Red Hat Enterprise Linux server ##仓库描述
baseurl=file:///mnt/cdrom/Server ##仓库位置
enabled=1 ##开启仓库
gpgcheck=1 ##进行gpg私钥检测
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release ## gpg私钥位置
3.查看邮件日志记录位置:“-”表示异步存储方式
[root@mail ~]# vim /etc/syslog.conf
mail.* -/var/log/maillog
4. 在邮件服务器内telnet 127.0.0.1 25 ,可以进入邮件服务器
5.通过其他主机telnet 192.168.101.250 会失败
6.这是由于sendmail的默认监听地址为127.0.0.1 ,外部主机无法获得服务,需要修改/etc/mail/sendmail.mc文件,将DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 修改为 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl ,
7.修改后,重启sendmail服务。继续通过其他主机telnet 192.168.101.250 访问,还会失败。这是因为系统读取sendmail.cf文件,虽然修改了sendmail.mc文件,但是却没有修改sendmail.cf文件。需要安装sendmail-cf-8.13.8-2.el5.i386.rpm软件,安装后将直接可以编辑sendmail.mc文件,m4-1.4.5-3.el5.1.i386.rpm软件系统默认安装,使sendmail.mc 自动转换为sendmail.cf文件
8.重启后,连接成功
9.修改access文件
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:192.168.101 RELAY
sina.com RELAY
163.com OK 到达163.com的邮件
10.修改local-host-names
11.更改主机名
编辑etc/sysconfig/network 文件
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mail.163.com
修改/etc/hosts文件,将其他的名称去掉
12安装DNS服务器软件
13.进入 /var/named/chroot/etc下
[root@mail etc]# cp -p named.caching-nameserver.conf named.conf
[root@mail etc]# vim named.conf
14.编辑区域声明文件,并设置转发
[root@mail etc]# vim named.rfc1912.zones
15.切换到 /var/named/chroot/var/named/,编辑区域文件
[root@mail named]# cp -p localdomain.zone 163.com.db
16.编辑文件/etc/resolv.conf
[root@mail named]# vim /etc/resolv.conf
nameserver 192.168.101.250
17 重启DNS服务器,解析记录
[root@mail named]# service named restart
停止 named: [确定]
启动 named: [确定]
[root@mail named]# nslookup mail.163.com
Server: 192.168.101.250
Address: 192.168.101.250#53
Name: mail.163.com
Address: 192.168.101.250
[root@mail named]# nslookup
> set q=mx
> 163.com
Server: 192.168.101.250
Address: 192.168.101.250#53
163.com mail exchanger = 10 mail.163.com.
> set q=ns
> 163.com
Server: 192.168.101.250
Address: 192.168.101.250#53
163.com nameserver = ns.163.com.
> pop3.163.com
Server: 192.168.101.250
Address: 192.168.101.250#53
pop3.163.com canonical name = mail.163.com.
> smtp.163.com
Server: 192.168.101.250
Address: 192.168.101.250#53
smtp.163.com canonical name = mail.163.com.
18. 安装接收服务器 dovecot
19启动dovecot 服务
20.创建账户user1,user2,互相发送邮件,看是否能够发送接收成功
21.root向user1发送邮件
查看日志
22.切换到用户user1 ,接收邮件
23.user1 向user2 发送邮件
24. user2 接收收件
25 配置到达192.168.100.0网段的路由
[root@mail ~]# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0
[root@mail ~]# route add default gw 192.168.100.250
163.com 配置完成
下面开始配置右半边sina.com区域
1.修改主机名
[root@mail ~]# vim /etc/sysconfig/network
2.新建挂载点,挂载光驱
[root@mail ~]# mkdir /mnt/cdrom
[root@mail ~]# mount /dev/cdrom /mnt/cdrom
3.配置yum工具
[root@mail ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-server]
name=Red Hat Enterprise Linux serverbaseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
4.安装DNS服务器软件
[root@mail ~]# yum install bind bind-chroot caching-nameserver -y
5.切换到/var/named/chroot/etc/ 修改DNS的配置文件
[root@mail ~]# cd /var/named/chroot/etc/
[root@mail etc]# cp -p named.caching-nameserver.conf named.conf
[root@mail etc]# vim named.conf
6.修改区域声明文件
[root@mail etc]# vim named.rfc1912.zones
7.切换到/var/named/chroot/var/named,创建区域文件
[root@mail named]# cp -p localdomain.zone sina.com.db
[root@mail named]# vim sina.com.db
1 $TTL 86400
2 @ IN SOA ns.sina.com. root (
3 42 ; serial (d. adams)
4 3H ; refresh
5 15M ; retry
6 1W ; expiry
7 1D ) ; minimum
8 @ IN NS ns.sina.com.
9 ns IN A 192.168.100.250
10 mail IN A 192.168.100.250
11 pop3 IN CNAME mail
12 smtp IN CNAME mail
13 @ IN MX 10 mail
8.重启DNS服务器,编辑/etc/resolv.conf,尝试解析
[root@mail mail]# vim /etc/resolv.conf
nameserver 192.168.100.250
[root@mail named]# nslookup mail.sina.com
Server: 192.168.100.250
Address: 192.168.100.250#53
Name: mail.sina.com
Address: 192.168.100.250
[root@mail named]# nslookup pop3.sina.com
Server: 192.168.100.250
Address: 192.168.100.250#53
pop3.sina.com canonical name = mail.sina.com.
Name: mail.sina.com
Address: 192.168.100.250
[root@mail named]# nslookup
> set q=mx
> sina.com
Server: 192.168.100.250
Address: 192.168.100.250#53
sina.com mail exchanger = 10 mail.sina.com.
9.安装sendmail-cf-8.13.8-2.el5.i386.rpm
[root@mail Server]# yum install sendmail-cf -y
10.切换到/etc/mail 下
[root@mail mail]# vim sendmail.mc
[root@mail mail]# vim access
[root@mail mail]# vim local-host-names
10.重启sendmail 服务器
[root@mail mail]# service sendmail restart
关闭 sm-client: [确定]
关闭 sendmail: [确定]
启动 sendmail: [确定]
启动 sm-client: [确定]
11.安装邮件接收软件dovecot,并启动
[root@mail mail]# yum install dovecot -y
[root@mail mail]# service dovecot start
启动 Dovecot Imap: [确定]
12.配置到达192.168.101.0网段的路由
[root@mail mail]# route add -net 192.168.101.0 netmask 255.255.255.0 dev eth0
[root@mail mail]# route add default gw 192.168.101.250
13.在sina.com端解析对方域名
13新建系统账户user3 user4
配置user1 @163.com 邮件客户端
配置[email protected]的客户端
[email protected] 用户向 [email protected]发送邮件
sina.com 邮件服务器日志记录:
163.com邮件服务器日志记录:
user3 接收到邮件
虽然发送成功,但是发送速度较慢,这是由于邮件服务器默认不进行不同区域的中继,所以当收到163.com区域的邮件时,得知其ip 地址为192.168.101.250 ,服务器会根据该ip地址进行反向解析
所以要在两台DNS服务器上配置DNS反向解析记录
配置163.com 区域的DNS反向记录
切换到/var/named/chroot/etc
[root@mail etc]# vim named.rfc1912.zones
切换到/var/named/chroot/var/named
[root@mail named]# cp -p named.local 192.168.101.db
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
250 IN PTR mail.163.com.
~
配置sina.com 区域的DNS反向记录
[root@mail ~]# cd /var/named/chroot/etc/
[root@mail etc]# vim named.rfc1912.zones
编辑区域声明文件
[root@mail etc]# cd ../var/named/
[root@mail named]# cp -p named.local 192.168.100.db
[root@mail named]# vim 192.168.100.db
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
250 IN PTR mail.sina.com.
重启DNS服务器
[root@mail named]# service named restart
停止 named: [确定]
启动 named: [确定]
解析192.168.100.250
[root@mail named]# nslookup 192.168.100.250
Server: 192.168.100.250
Address: 192.168.100.250#53
250.100.168.192.in-addr.arpa name = mail.sina.com.
[email protected] 向 [email protected] 发送邮件,很快就能发送到对方
在sina.com邮件服务器上安装wireshark 抓包
[root@mail ~]# yum install wireshark
启动wireshark
[root@mail ~]# tshark -ni eth0 -R "tcp.dstport eq 110"
[email protected] 向[email protected] 发送邮件,然后[email protected] 接收邮件
[email protected] 接收邮件
此时,sina.com上的转抓包工具可以抓到有价值信息
所以要想实现安全的通信,需要使用安全的加密邮件进行发送
下面就来实现smtps 和pop3s
##############################邮件安全###############################
由于配置163.com 区域 和 配置 sina.com区域 完全相同,所以实验中 仅在sina.com中设置邮件安全。
首先配置发送邮件协议的安全
邮件的发送协议为smtp ,要实现smtps ,需要使用starttls在25号端口上加密
1.查看编译sendmail时是否是否加入了starttls 功能
[root@mail ~]# sendmail -d0.1 -bv
2.查看sendmail 是否开启了starttls功能
需要搭建CA证书服务器
3. [root@mail ~]# vim /etc/pki/tls/openssl.cnf
4.切换到/etc/pki/CA/ 下,新建三个目录和两个文件,并给serial一个初始值01
[root@mail ~]# cd /etc/pki/CA/
drwx------ 2 root root 4096 2009-06-30 private
[root@mail CA]# mkdir certs newcerts crl
[root@mail CA]# touch index.txt serial
[root@mail CA]# echo "01">serial
5.ca产生自己的私钥
[root@mail CA]# openssl genrsa 1024 >private/cakey.pem
6.CA根据自己的私钥产生证书
[root@mail CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem
7.×××及私钥的权限为600
[root@mail CA]# chmod 600 cacert.pem
[root@mail CA]# chmod 600 private/cakey.pem
8.为sendmail创建存放证书及私钥文件的位置
[root@mail CA]# mkdir -pv /etc/mail/sendmail_certs
9.切换到/etc/mail/sendmail_certs/下,产生私钥文件。
[root@mail sendmail_certs]# openssl genrsa 1024 >sendmail.key
10.根据私钥文件产生请求文件
[root@mail sendmail_certs]# openssl req -new -key sendmail.key -out sendmail.csr
11.CA服务器颁发证书
[root@mail sendmail_certs]# openssl ca -in sendmail.csr -out sendmail.cert
12.修改sendmai服务器的证书、私钥的权限为600
[root@mail sendmail_certs]# chmod 600 *
13.编辑/etc/mail、sendmail.mc文件
define(`confCACERT_PATH', `/etc/pki/CA')dnl
define(`confCACERT', `/etc/pki/CA/cacert.pem')dnl
define(`confSERVER_CERT', `/etc/mail/sendmail_certs/sendmail.cert')dnl
define(`confSERVER_KEY', `/etc/mail/sendmail_certs/sendmail.key')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
14.重启sendmail服务,再次查看是否开启starttls 功能
下面来配置接收邮件的安全:pop3s
1.创建存放接收邮件服务器的证书、私钥的位置
[root@mail ~]# mkdir -pv /etc/dovecot/certs
2.产生私钥文件
[root@mail certs]# openssl genrsa 1024 >dovecot.key
3.产生请求文件
[root@mail certs]# openssl req -new -key dovecot.key -out dovecot.csr
4.ca颁发证书
[root@mail certs]# openssl ca -in dovecot.csr -out dovecot.cert
5.修改权限
[root@mail certs]# chmod 600 *
6.编辑/etc/dovecot.conf
ssl_cert_file = /etc/dovecot/certs/dovecot.cert
ssl_key_file = /etc/dovecot/certs/dovecot.key
7.重启dovecot 服务
[root@mail certs]# service dovecot restart
pop3s 配置完成
8.配置outlook 邮件客户端
9. [email protected] 向 [email protected]发送邮件
10.点击“是”,继续使用该服务器,邮件发送出去
[email protected] 连接上邮件服务器接收邮件
12.查看抓包内容,没有截获到有用信息。
身份验证设置:
在outlook上新建账户[email protected] ,而user5在Linux 邮件服务器上并不存在。
[email protected] 向 [email protected]发送邮件
[email protected] 能够收到邮件
由于user5用户在邮件服务器中根本不存在,但是却可以使用该邮件服务器发送邮件,那么该邮件服务器容易成为邮件垃圾中转站。
切换到/usr/lib/sasl2/ 打开文件Sendmail.conf
[root@mail sasl2]# cat Sendmail.conf
pwcheck_method:saslauthd
查看是否启用验证功能
[root@mail sasl2]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.sina.com ESMTP Sendmail 8.13.8/8.13.8; Tue, 11 Sep 2012 21:20:22 +0800
ehlo 127.0.0.1
250-mail.sina.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-STARTTLS
250-DELIVERBY
250 HELP
查看是否安装cyrus-sasl
编辑 /etc/mail/sendmail.mc
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN ')dnl
将define(`confAUTH_OPTIONS', `A')dnl 改为 define(`confAUTH_OPTIONS', `A y')dnl
将 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA ')dnl
改为
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA ,M=Ea')dnl
重启sendmail和saslauthd服务
[root@mail Server]# service sendmail restart
关闭 sm-client: [确定]
关闭 sendmail: [确定]
启动 sendmail: [确定]
启动 sm-client: [确定]
[root@mail Server]# service saslauthd restart
停止 saslauthd: [确定]
启动 saslauthd: [确定]
再次使用 [email protected] 发送邮件
发送失败
这样就可以杜绝垃圾邮件经过该服务器向外传递。