您的位置:首页 > 大数据 > 人工智能

Linux下架构安全邮件服务器之Sendmail

2012-09-11 19:34 405 查看
简介

一 、E-mail 概述

Internet最基本的服务,也是最重要的服务之一,就是电子邮件

服务。据统计Internet上百分之三十以上的业务量是电子邮件,仅

次于WWW服务。与传统的邮政信件服务类似,电子邮件可以用

来在Internet或Intranet上进行信息的传递和交流,但电子邮件服

务还具有快速、经济的特点。发一份电子邮件给远在他方的一位

用户,通常来说,对方几分钟之内就能收到。如果选用传统邮

件,发一封特快专递也需要至少一天的时间。而且电子邮件的费

用最多只需几毛钱。与实时信息交流,如电话相比,因为电子邮

件是采用存储转发的方式,发送邮件时,并不需要收件人处于在

线状态,收件人可以根据实际需要随时上网从邮件服务器上收取

邮件,方便了信息的交流。

1. E-mail系统的组成

一个完整的E-mail系统一般由三个部分组成,包括用户邮件代理、邮件服务器和邮件协议

用户邮件代理(Mail User Agent,简称MUA)是用户与电子邮件系统的接口,负责用户和邮件服务器之间的交互工作。大多数情况下,MUA就是运行在客户端上的应用程序,其作用是将邮件发送到邮件服务器上和从邮件服务器上接收邮件。

邮件服务器是电子邮件系统的核心,其主要功能是发送和接收邮件,并向发件人告知邮件的传送情况。邮件服务器根据其功能,分为邮件传输服务器(SMTP服务器)和邮件接收服务器(POP3或IMAP4服务器)。

2. E-mail工作原理

E-mail的传输过程如下。

① 用户在各自的POP服务器注册登记,由网络管理员设置为授权用户,并取得一个POP信箱,获得POP和SMTP服务器的地址信息。假设两个服务器的域名分别为example.com和163.com,注册用户分别为liu和chen,E-mail地址分别为liu@example.com和chen@163.com。

② 当example.com服务器上的用户liu向chen@163.com发送E-mail时,E-mail首先从客户端被发送至example.com的SMTP服务器。

③ example.com的SMTP服务器根据目的E-mail地址查询163.com的SMTP服务器,并转发该E-mail。

④ 163.com的SMTP服务器收到转发的E-mail,并保存。

⑤ 163.com的chen用户利用客户端登录至163.com的POP服务器,从其信箱中下载并浏览E-mail。





3. 电子邮件协议

MIME(Multipurpose Internet Mail Extensions)多功能Internet 邮件扩充服务。 早期E-mail只能使用简单的ASCII文本进行消息传递,而现在人们可以通过E-mail发送各种各样的信息,包括照片、音频、应用程序等,正是MIME的出现,提供了这样的可能。MIME描述了如何设置信息格式,使得信息能够在不同的邮件系统内进行交换,MIME的格式灵活,允许邮件中包含任何类型的文件。

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一种提供可靠、高效的电子邮件传输协议。SMTP规定了如何在网络上的两台主机间可靠、高效地传送电子邮件,SMTP能够控制邮件信息的中转方式。

二、Sendmail 简介

Sendmail是历史最悠久的SMTP服务器,目前,几乎所有的Linux发行版中都安装了Sendmail。实际上,Sendmail几乎已成为Linux操作系统中电子邮件服务器的代名词。

wRed Hat Enterprise Linux 5中,默认情况下安装程序已经将Sendmail安装到系统中了。可以在终端执行以下命令,查看系统是否已经安装Sendmail软件包:

三、主流电子邮件服务器软件

1. 在Linux平台中,有许多邮件服务器可供选择,但目前使用较多

的是Sendmail服务器、 Postfix服务器和Qmail服务器。

2. Sendmail是一个很优秀的邮件服务软件。几乎所有Linux的缺

省配置中都内置了这个软件,只需要设置好操作系统,它就能立

即运转起来。

3. Postfix是一个由IBM资助下由Wietse Venema 负责开发的一个

自由软件工程产物,它的目的就是为用户提供除Sendmail之外的

邮件服务器选择。

4. Qmail是有Dan Bernstein开发的可以自由下载邮件服务器软

件,其第一个beta版本0.70.7发布于1996年1月24日,当前版本是

2.3.3-2。

案例一:架构两台邮件服务器(互通)

拓扑图:





注意:假设每台电脑上一个账号!

一 、163.com 配置

1.修改主机名

[root@gjp99 ~]# vim /etc/sysconfig/network

[root@gjp99 ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=mail.163.com

2.把hosts 文件还原成默认值

[root@gjp99 ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost

::1 localhost6.localdomain6 localhost6

3.安装dns服务器









4.配置DNS服务器

[root@gjp99 etc]# ll

total 16

-rw-r--r-- 1 root root 405 Aug 2 21:30 localtime

-rw-r----- 1 root named 1230 Jul 30 2009 named.caching-nameserver.conf

-rw-r----- 1 root named 955 Jul 30 2009 named.rfc1912.zones

-rw-r----- 1 root named 113 Aug 3 14:03 rndc.key

[root@gjp99 etc]# pwd //注意当前路径

/var/named/chroot/etc

[root@gjp99 etc]# cp -p named.caching-nameserver.conf named.conf

注意:利用-p 或者 –a 把文件的属性也拷贝过来!

[root@gjp99 etc]# ll //注意这里的所属用户及所属组(不使用-p,就不同)

total 20

-rw-r--r-- 1 root root 405 Aug 2 21:30 localtime

-rw-r----- 1 root named 1230 Jul 30 2009 named.caching-nameserver.conf

-rw-r----- 1 root named 1230 Jul 30 2009 named.conf

-rw-r----- 1 root named 955 Jul 30 2009 named.rfc1912.zones

-rw-r----- 1 root named 113 Aug 3 14:03 rndc.key

[root@gjp99 etc]# vim named.conf







[root@gjp99 etc]# vim named.rfc1912.zones //编辑区域文件

增加以下内容:





生成163.com.zone 区域文件:









5.服务重启并配置dns指向,及永久ip









6.主机名修改成功,需重启,才能生效!

init 6 //重启

重启后主机名mail.163.com生效!





7.配置主要文件 (已高亮显示)

[root@mail Server]# cd /etc/mail/

[root@mail mail]# ls

access domaintable.db mailertable sendmail.cf submit.mc virtusertable.db

access.db helpfile mailertable.db sendmail.mc trusted-users

domaintable local-host-names Makefile submit.cf virtusertable

由于sendmail.cf文件的格式难于理解,所以修改sendmail.mc文件.但是修改此文件需要一个软件包,

安装sendmail-cf-8.13.8-2.el5.i386.rpm









[root@mail Server]# rpm -qa |grep m4 //查看该文件是否已安装

m4-1.4.5-3.el5.1 //该文件可以直接把mc格式的文件转换成cf格式

8.安装邮件接收服务器:(MAA)

[root@mail cdrom]# cd /mnt/cdrom/Server

[root@mail Server]# ll dove*

-r--r--r-- 264 root root 1736855 Dec 10 2008 dovecot-1.0.7-7.el5.i386.rpm

[root@mail Server]# rpm -ivh dovecot-1.0.7-7.el5.i386.rpm

warning: dovecot-1.0.7-7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

error: Failed dependencies:

libmysqlclient.so.15 is needed by dovecot-1.0.7-7.el5.i386

libmysqlclient.so.15(libmysqlclient_15) is needed by dovecot-1.0.7-7.el5.i386

[root@mail Server]# rpm -ivh mysql-5.0.77-3.el5.i386.rpm

warning: mysql-5.0.77-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

error: Failed dependencies:

perl(DBI) is needed by mysql-5.0.77-3.el5.i386





[root@mail Server]# rpm -ql dovecot |less

/etc/dovecot.conf //主配置文件

/etc/pam.d/dovecot //PAM

/etc/pki/dovecot //支持证书!

/etc/pki/dovecot/certs

[root@mail Server]# vim /etc/dovecot.conf





该行可有选择地使用!

























10.启动sendmail服务,查看其端口





[root@mail Server]# netstat -tupln |grep send

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3824/sendmail: acce

注意:127.0.0.0.1只能在本地进行进行中继~

11.创建本地账号:

[root@mail mail]# useradd user1

[root@mail mail]# passwd user1

Changing password for user user1.

New UNIX password:

BAD PASSWORD: it is WAY too short

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[root@mail mail]# useradd user2

[root@mail mail]# passwd user2

12.本地写封信测试:

普通测试:

[root@mail mail]# mail -s gjp user1

welcome!

.

Cc:

[root@mail mail]# su - user1

[user1@mail ~]$ mail

Mail version 8.1 6/6/93. Type ? for help.

"/var/spool/mail/user1": 2 messages 2 new

>N 1 root@mail.163.com Fri Aug 3 16:37 16/569 "gjp"

& 1

Message 1:

From root@mail.163.com Fri Aug 3 16:37:24 2012

Date: Fri, 3 Aug 2012 15:49:05 +0800

From: root <root@mail.163.com>

To: user1@mail.163.com

Subject: gjp

welcome!

& quit2

Saved 2 messages in mbox

[user1@mail ~]$ ll

total 4

-rw------- 1 user1 user1 1160 Aug 3 16:45 mbox

[user1@mail ~]$ cat mbox //存放已看过的信件

[user1@mail ~]$ pwd

/home/user1 //看过的信件在家目录下!

telnet 所监听的端口测试:

[root@mail Server]# telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.163.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 3 Aug 2012 16:52:39 +0800

helo 127.0.0.1 //问候

250 mail.163.com Hello localhost.localdomain [127.0.0.1], pleased to meet you

mail from :user1@163.com //发件人

250 2.1.0 user1@163.com... Sender ok

rcpt to :user2@163.com // 收件人

250 2.1.5 user2@163.com... Recipient ok

data 开始写信息

354 Enter mail, end with "." on a line by itself

subject nice to meet you ! // 标题

Welcome to here ! //内容

. // 点号结束

250 2.0.0 q738qdqg003907 Message accepted for delivery

quit //退出

221 2.0.0 mail.163.com closing connection

Connection closed by foreign host.

You have new mail in /var/spool/mail/root

13.疑难解答:

由于sendmail的监听的端口为127.0.0.1,只能在本地监听





问题一:





解决一:

[root@mail mail]# vim sendmail.mc



















问题二 :在本地都不能处理 (如果telnet 127.0.0.1 25 成功)

解决二:

[root@mail mail]# vim access





[root@mail mail]# vim local-host-names

[root@mail mail]# cat local-host-names

# local-host-names - include all aliases for your machine here.

163.com

mail.163.com

服务重启:







[root@mail mail]# su - user1

[user1@mail ~]$ mail

Mail version 8.1 6/6/93. Type ? for help.

"/var/spool/mail/user1": 1 message 1 new

>N 1 user2@163.com Fri Aug 3 18:07 12/359

& 1

Message 1:

From user2@163.com Fri Aug 3 18:07:09 2012

Date: Fri, 3 Aug 2012 18:06:05 +0800

From: user2@163.com

subject ok

kkele

问题三、任何人都可以向我发邮件(不安全,可能是垃圾邮件)











用windows下的outlook express 接收与发送邮件测试:







接收邮件成功!





发送邮件!





解析一下,看看dns是否存在问题:





解决三:需要认证: ip认证或账号认证!(下篇详细介绍)

二、sina.com配置:

把163.com主机配置,克隆一份,进行相应修改即可!





注意:克隆前必须把电源关掉

如果sendmail启动比较慢,可以在1级别进行修改!( 出现红色界面:按b e 末尾输入1)

1.手动配置ip

[root@mail ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

[root@mail ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

HWADDR=00:0c:29:5b:98:33

NETMASK=255.255.255.0

IPADDR=192.168.10.9

TYPE=Ethernet

2.修改dns 配置

[root@mail etc]# vim named.conf //5个any

[root@mail etc]# vim named.rfc1912.zones





[root@mail named]# pwd

/var/named/chroot/var/named

[root@mail named]# cp -p 163.com.zone sina.com.zone

[root@mail named]# vim sina.com.zone





dns指向

[root@mail ~]# vim /etc/resolv.conf

[root@mail ~]# cat /etc/resolv.conf

search domain.org

nameserver 192.168.10.9

3.修改主机名

[root@mail ~]# vim /etc/sysconfig/network

[root@mail ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=mail.sina.com

[root@mail ~]# hostname

mail.163.com //发现名字并没有改变过来

需要重启,如果不想重启,只需重命名后,重新登录即可!

[root@mail ~]# hostname mail.sina.com //重命名





4.修改sendmail配置

[root@mail mail]# vim sendmail.mc





116 行,任意地址都可以telnet上该主机的25端口

[root@mail mail]# vim access









sendmail服务重启

[root@mail ~]# service sendmail status

sendmail is stopped

[root@mail ~]# service sendmail restart

Shutting down sendmail: [FAILED]

Starting sendmail: [ OK ]

Starting sm-client: [ OK ]

5.查看接收服务器端口:

[root@mail ~]# netstat -tupln |grep dovecot

tcp 0 0 :::993 :::* LISTEN 3166/dovecot

tcp 0 0 :::995 :::* LISTEN 3166/dovecot

tcp 0 0 :::110 :::* LISTEN 3166/dovecot

tcp 0 0 :::143 :::* LISTEN 3166/dovecot

You have mail in /var/spool/mail/root

6.查看账号:

[root@mail ~]# tail /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

gdm:x:42:42::/var/gdm:/sbin/nologin

avahi-autoipd:x:100:103:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin

sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin

named:x:25:25:Named:/var/named:/sbin/nologin

user1:x:500:500::/home/user1:/bin/bash

user2:x:501:501::/home/user2:/bin/bash

dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin

彻底删除这两个帐号!

[root@mail ~]# userdel -r user1

[root@mail ~]# userdel -r user2

创建新账号:

[root@mail ~]# useradd user3

[root@mail ~]# passwd 设置密码

Changing password for user root.

New UNIX password:

BAD PASSWORD: it is WAY too short

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[root@mail ~]# useradd user4

[root@mail ~]# passwd

Changing password for user root.

New UNIX password:

BAD PASSWORD: it is WAY too short

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

7.所有服务重启





8.查看dns解析





9. 测试:

9.1 windows 下telnet 上写信







windows 下收信:





查看后退出时输入X 信件还保留在邮箱中,输入q时,信件保留在家目录下的mbox里!

9.2 windows 下使用客户端软件测试收发情况:





创建了两个账号:user3 、user4









点击“发送”





解析下mx:







三、163.com 与sina.com如何通信?

[root@mail ~]# hostname

mail.163.com

[root@mail ~]# dig -t mx sina.com

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t mx sina.com

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 57589

;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;sina.com. IN MX

;; Query time: 28 msec

;; SERVER: 192.168.10.99#53(192.168.10.99)

;; WHEN: Sat Aug 4 11:55:05 2012

;; MSG SIZE rcvd: 26

sina.com 找不到!

由于是内部邮件服务器,不是internet 网上的,所以,只能转发:

163.com 和 sina.com 都这样做

[root@mail ~]# vim /var/named/chroot/etc/named.conf





[root@mail ~]# vim /var/named/chroot/etc/named.conf



[root@mail ~]# rndc reload

server reload successful

在163.com 下解析sina.com

[root@mail ~]# hostname

mail.163.com

[root@mail ~]# dig -t mx sina.com

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t mx sina.com

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54345

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:

;sina.com. IN MX

;; ANSWER SECTION:

sina.com. 86388 IN MX 10 mail.sina.com.

;; AUTHORITY SECTION:

sina.com. 86388 IN NS ns.sina.com.

;; ADDITIONAL SECTION:

mail.sina.com. 86388 IN A 192.168.10.9

ns.sina.com. 86388 IN A 192.168.10.9

;; Query time: 10 msec

;; SERVER: 192.168.10.99#53(192.168.10.99)

;; WHEN: Sat Aug 4 12:11:58 2012

;; MSG SIZE rcvd: 96

发信件,测试:

163.com启动sendmail服务!

[root@mail ~]# service sendmail status

sendmail is stopped

[root@mail ~]# service sendmail start

Starting sendmail: [ OK ]

Starting sm-client: [ OK ]

[root@mail ~]# netstat -tupln |grep 25

tcp 0 0 0.0.0.0:25 0.0.0.0:*





[root@mail ~]# tail -f /var/log/maillog //监控日志

Aug 4 12:41:12 mail sendmail[3833]: q744fCNB003833: from=<user1@163.com>, size=1193, class=0, nrcpts=1, msgid=<598984A216F64770B9602B1F6073BCA7@PC201203120919>, proto=SMTP, daemon=MTA, relay=[192.168.10.1]

Aug 4 12:41:52 mail sendmail[3837]: q744fCNB003833: to=<user4@sina.com>, ctladdr=<user1@163.com> (500/500), delay=00:00:40, xdelay=00:00:40, mailer=esmtp, pri=121193, relay=mail.sina.com. [192.168.10.9], dsn=2.0.0, stat=Sent (q744fTsd006212 Message accepted for delivery)









双方已能够正常通信,只是速度太慢

四、163.com 与sina.com通信速度如何加快?

如果163.com 向 sina.com发送信件,sina要对163域名信息进行核实,所以,先正向解析,再反向解析,由于缺少反向解析,所以影响通信质量!

解决:配置反向DNS解析

修改163.com的区域文件:

[root@mail ~]# cd /var/named/chroot/etc/

[root@mail etc]# vim named.rfc1912.zones 增加下面代码





[root@mail named]# cp -p named.local 192.168.10.zone

[root@mail named]# vim 192.168.10.zone



[root@mail named]# rndc reload

server reload successful

[root@mail named]# dig -x 192.168.10.99

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -x 192.168.10.99

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23352

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:

;99.10.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:

99.10.168.192.in-addr.arpa. 86400 IN PTR mail.163.com.

;; AUTHORITY SECTION:

10.168.192.in-addr.arpa. 86400 IN NS localhost.

;; ADDITIONAL SECTION:

localhost. 86400 IN A 127.0.0.1

localhost. 86400 IN AAAA ::1

修改sina.com的区域文件:

[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.10.local

[root@mail named]# vim 192.168.10.local





rndc reload //不用启动,只需加载更新项

[root@mail named]# dig -t mx 163.com //正向解析

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t mx 163.com

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14211

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:

;163.com. IN MX

;; ANSWER SECTION:

163.com. 81604 IN MX 10 mail.163.com.

;; AUTHORITY SECTION:

163.com. 81523 IN NS ns.163.com.

;; ADDITIONAL SECTION:

mail.163.com. 81523 IN A 192.168.10.99

ns.163.com. 81523 IN A 192.168.10.99

;; Query time: 5 msec

;; SERVER: 192.168.10.9#53(192.168.10.9)

;; WHEN: Sat Aug 4 14:01:25 2012

;; MSG SIZE rcvd: 95

[root@mail named]# dig -x 192.168.10.9 // 反向解析

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -x 192.168.10.9

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62534

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:

;9.10.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:

9.10.168.192.in-addr.arpa. 86400 IN PTR mail.sina.com.

;; AUTHORITY SECTION:

10.168.192.in-addr.arpa. 86400 IN NS localhost.

;; ADDITIONAL SECTION:

localhost. 86400 IN A 127.0.0.1

localhost. 86400 IN AAAA ::1

;; Query time: 5 msec

;; SERVER: 192.168.10.9#53(192.168.10.9)

;; WHEN: Sat Aug 4 14:01:28 2012

;; MSG SIZE rcvd: 137

现在反向解析已存在,检测发送------接收信件之间是否加快!





点击发送,发件箱立即空!





接收端能够瞬间接收到信件,达到我们期望的效果啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息