邮件服务器一. 邮件服务基础知识,今天小编就来聊一聊关于linux教程第10章技术?接下来我们就一起去研究一下吧!

linux教程第10章技术(linux基础20课19邮件服务器)

linux教程第10章技术

邮件服务器

一. 邮件服务基础知识

1. 常用邮件客户端:

大概分两类:

(1)webmail,也就是类似www.126.com这种形式的web页面,客户只需要注册,然后登录使用,所有过程都是图形化,傻瓜化。

(2)邮件客户端软件,如outlook,foxmail,thunderbird等,它们需要在客户端进行一定的配置。

2. 开源邮件服务器

sendmail --单体式结构

postfix --模块化(centos自带)

qmail --模块化

3. 相关概念

MUA = mail user agent --邮件用户代理 客户端软件,发送邮件和阅读邮件

MTA = mail tranfer agent --邮件传输代理 服务端软件,相当于是一个邮局,接收MUA发送过来的邮件,如果不是本地邮件,则发送给下一个MTA。

MDA = mail delivery agent --邮件投递代理 将MTA所接收到的邮件,依照邮件的目的地将此邮件放到本机账号

邮件协议:

发信:

SMTP = simple mail transfer protocol 简单邮件传输协议 端口号 TCP 25

smtps = smtp ssl/tls 端口465

收信:

POP3 = post office protocol 邮局协议,连接到MTA,读取或者下载邮件. 端口号 110

pop3s = pop3 ssl/tls 端口995

IMAP internet message access protocal 网络报文访问协议 能在下载邮件前先下载邮件头信息,以供用户选择性的下载 端口号 143

imap3s=imap3 ssl/tls 端口993

南宁隆安 --> 南宁邮局 --> 北京朝阳区邮局 -->朝阳区

MUA MTA MTA MDA

zhangsan@126.com 网易服务器 新浪服务器 lisi@sina.com

SMTP 允许中继

MTA 网易----------> MTA 新浪

| |

| |

SMTP POP3

| |

zhangsan@126.com lisi@sina.com

MUA

发信人:zhangsan@126.com

收信人: lisi@sina.com

4. postfix软件架构

参考网址:http://wiki.ubuntu.org.cn/Postfix_基本设置指南

5. 参考文档

postfix权威指南.pdf

用centos6.5默认的PDF查看器看的有可能是乱码,用rhel5的话不是乱码,就安装/share/soft/AdobeReader_chs-8.1.7-1.i486.rpm这个包,但是安装他需要很多依赖

解决方法一:把这个包加到软件仓库里createrepo,使用yum install来安装

解决方法二:不用把它加到软件仓库,只配置你系统ISO的yum就可以

yum install /share/soft/AdobeReader_chs-8.1.7-1.i486.rpm --直接去yum install 这个rpm包的全名,全自动帮你从yum里去寻找依赖性

--yum install ld-linux.so 还可以直接yum install一个库文件,也会自动帮你去查找属于哪个包和解决相关依赖性

6. 配置yum源

# rm -rf /etc/yum.repos.d/*

# touch /etc/yum.repos.d/local.repo

# vim /etc/yum.repos.d/local.repo

[centos6.5]

name=centos6.5

baseurl=http://192.168.1.59/yum/

enabled=1

gpgcheck=0

# yum clean all

二. postfix使用

postfix在本机的发信原理 参考postfix权威指南30页的图3-2和35页的图3-4

1. 安装postfix服务

# yum install postfix dovecot -y

--centos6.5里默认的MTA就是postfix了, rhel5里拥有的system-switch-mail包可以切换postfix和sendmail这两个MTA,但在centos6.5里已经没有了

# /etc/init.d/postfix restart --启动postfix (注意不要把/etc/hosts文件的127.0.0.1的那两句给删掉,否则启不来)

# netstat -ntlup |grep :25

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 13999/master

tcp 0 0 ::1:25 :::* LISTEN 13999/master

--从上面看到的是只监听127.0.0.1的25端口,那么现在只能在本机上给本地的用户发

# /etc/init.d/dovecot restart

# netstat -ntlup | grep :110

tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 6346/dovecot

tcp 0 0 :::110

2. 配置文件

/etc/postfix/main.cf --主配置文件

/etc/postfix/master.cf --运行参数配置文件,该文件主要规定了Postfix每个子程序的运行参数,该文件默认已经配置好了,通常不需要更改

/etc/postfix/access --访问控制文件,用来设置服务器为哪些主机进行转发邮件,即用于实现中继代理。

/etc/aliases --别名文件,用来定义邮箱别名,设置完毕后,需要在main.cf中启用,并使用postalias或newaliases生成相关数据库

/etc/postfix/virtual --虚拟别名域库文件,用来设置虚拟账户和域的数据库文件

3. 发送测试邮件

发送邮件方法一

# mail -s 'hello' root --s参数是定义主题

1111111111111111 --邮件正文

. --点号表示结束

# ls /var/spool/mail/ --存放邮件的目录,以用户名的来存的

cat /var/spool/mail/root

cat /var/mail/root

# mail -s 'hello2' root < /etc/fstab

--把/etc/fstab的内容做为邮件的正文来发

发送邮件方法二:

# cat /etc/rc.local | sendmail root

--邮件报警脚本,就可以按下面的方式来发送(nagios就是用类似下面的命令)

# printf "***** test ******\n\n姓名:张 三\n性别:男\n年龄:25\n职业:IT\n" |mail -s "haha" root

发邮件方法三: 参考权威指南24页

# yum install telnet --远程连接工具

# telnet 127.0.0.1 25 --对25端口也就是smtp协议进行验证

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 qianyun.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 3 Sep 2010 10:31:00 0800

helo qianyun.com --介绍自己,用help命令查看支持的命令集,help helo查看helo的用法

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

mail from:abc@qq.com --定义发送者,在这里随便定义

250 2.1.0 abc@qq.com... Sender ok

rcpt to:root@qianyun.com --定义接收者,在这里是本机的root用户

250 2.1.5 root@qianyun.com... Recipient ok

data --表示后面写的是邮件内容

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

test mail from qq.com --邮件正文

. --点号表示内容结束

250 2.0.0 o832V0tl004576 Message accepted for delivery

quit --quit退出

221 2.0.0 qianyun.com closing connection

发邮件方法四:

mutt 一个linux下的文本的MUA工具 客户端程序

yum install mutt -y

# mutt root@qianyun.com

发送邮件方法五:

安装别的软件或者webmail,进行软件收发

问题:我用一个linux,如果发邮件到一个外网邮箱

答案:首先需要能上外网。直接用mail命令就可以做,mail -s "xxxx" xxxx@126.com

4. postfix dovecot dns收发邮件

邮件发送也需要DNS的支持,并且DNS要配置邮件交换记录

mail.cluster.com 公网域名

@cluster.com 邮件域

mail.qianyun.com 主机名

postfix dovecot

----- DNS ----

linux客户端 windows客户端

张三(zhangsan) 李四(lisi)

zhangsan@cluster.com lisi@cluster.com

linux客户端 DNS postfix dovecot windows xp客户端

192.168.1.45------------------------192.168.1.59-----------------------192.168.1.73

前期准备:

1,主机名和IP

2,时间同步

3,关闭iptables,selinux

4, 配置好yum

第一大步:配置DNS服务器和邮件交换记录

先在192.168.1.59上把主机名和域定义好

#hostname mail.qianyun.com

#vim /etc/sysconfig/network

HOSTNAME=mail.qianyun.com

#vim /etc/hosts

192.168.1.59 mail.qianyun.com

下面在192.168.1.59上做DNS

# yum install bind*

# vim /etc/named.conf

options {

listen-on port 53 { any; }; --改为any

listen-on-v6 port 53 { ::1; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

statistics-file "/var/named/data/named_stats.txt";

memstatistics-file "/var/named/data/named_mem_stats.txt";

allow-query { any; }; --改为any

recursion yes;

dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto;

/* Path to ISC DLV key */

bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

};

logging {

channel default_debug {

file "data/named.run";

severity dynamic;

};

};

zone "." IN {

type hint;

file "named.ca";

};

include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";

# vim /etc/named.rfc1912.zones

zone "cluster.com" IN { --加上这一段,我的邮件域为cluster.com,跟主机名mail.qianyun.com不一样,方便理解和区分

type master;

file "data/master.cluster.com.zone";

};

# vim /var/named/data/master.cluster.com.zone

$TTL 3600

@ IN SOA SDFSADFA. fsdfa. (

1234567890

30

30

30

3600 )

IN NS 192.168.1.59.

IN MX 0 192.168.1.59. --加上这一句,MX是邮件交换记录,0代表优先级别,0-20,0代表优先级最高

mail IN A 192.168.1.59 --这个是邮件服务器的域名,因为我这里和DNS模拟做成同一台,所以IP相同

cluster.com. IN A 192.168.1.59

/etc/init.d/named restart

在客户端上把DNS指向DNS服务器,然后进行验证

--下面的验证是linux上做的,但是在XP的cmd命令行模式也是一样的命令来验证

# nslookup mail.cluster.com

Server: 192.168.1.59

Address: 192.168.1.59#53

Name: mail.cluster.com

Address: 192.168.1.59

第二大步:在linux客户端192.168.1.45安装邮件客户端软件claws-mail

windows客户端自带outlook,不用安装

安装图形邮件客户端,这里使用claws-mail

# ls /share/soft/soft/soft/mail_client/

claws-mail-3.5.0.tar.gz libetpan-0.57.tar.gz

tar xvf libetpan-0.57.tar.gz -C /usr/src/ --IMAP4和NNTP支持,要先装这个包才能编译claws-mail

tar xvf claws-mail-3.5.0.tar.gz -C /usr/src/

cd /usr/src/libetpan-0.57/

./configure

make

make install

cd /usr/src/claws-mail-3.5.0/

./configure

make

make install

# claws-mail & --安装好之后,直接用此命令启动

--如果报libetpan版本比较老,你也可以不支持IMAP4和NNTP,使用下面的命令来编译./configure --disable-libetpan

--安装完成后,使用claws-mail &命令来打开,如果报找不到libetpan.so.13这个库文件,则使用下面的命令做一个软链接

# ln -s /usr/local/lib/libetpan.so.13 /lib/libetpan.so.13

--注意:如果用的是centos6.5的64位的话,则ln -s /usr/local/lib/libetpan.so.13 /lib64/libetpan.so.13

检查是否安装成功,使用claws-mail & 能打开图形就表示成功了

第三大步:在mail服务器上安装postfix和dovecot

# yum install postfix dovecot

综合配置一个简单的postfix邮件服务器

vim /etc/postfix/main.cf --参考postfix权威指南的52页

myhostname = mail.qianyun.com --本机主机名,主机名也可以收邮件

mydomain = cluster.com --本机域名,postfix会自动扣除第一点号前的部分作为域名。如果不是FQDN形式的主机名,就一定要手动配置你的域名

myorigin = $mydomain --解释见权威指南53页

inet_interfaces = all --监听所有,注释inet_interfaces = localhost

mydestination = $myhostname, localhost.$mydomain, localhost ,$mydomain

--加上$mydomain,则表示可以直接以域名来收邮件

mynetworks = 192.168.1.0/24, 127.0.0.0/ --信任网络,在这里也可以不配,因为默认值为subnet,也就是本网段内的都是信任网络

/etc/init.d/postfix restart

# netstat -ntlup |grep :25 --验证端口

tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 3289/master

tcp 0 0 :::25 :::* LISTEN 3289/master

假设公司这个邮件服务器有两个员工的账号,做为管理员在邮件服务器上创建这两个用户,并给密码(高级的做法,可以把账号做到数据库里来管理)

# useradd zhangsan

# useradd lisi

# echo 123 | passwd --stdin zhangsan

# echo 123 | passwd --stdin lisi

=====================================================

第四大步:

配置两个客户端(配置过程省略)

发邮件测试

# vim /etc/dovecot/dovecot.conf

20 protocols = imap pop3 lmtp --打开这行的注释,在20行

38 login_trusted_networks = 192.168.1.0/24 --打开并配置这一行,表示能够成功登录的信任网络

# vim /etc/dovecot/conf.d/10-mail.conf

25 mail_location = mbox:~/mail:INBOX=/var/mail/%u --打开这行的注释

#/etc/init.d/dovecot restart

# netstat -ntlup |grep :110

tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4802/dovecot

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

如果在收信时,还是收不了,报类似下面的错误;或者在/var/log/maillog里也能找到下面的错误

Couldn't open INBOX: Internal error occurred. Refer to server log for more information

也就表示下面两个目录创建不出来,你可以对照我下面的权限,自己去创建,并修改权限等

# mkdir -p /home/zhangsan/mail/.imap/INBOX/

# chown -R zhangsan.zhangsan /home/zhangsan

# ll -d /home/zhangsan/mail/.imap/INBOX/

drwxrwx--- 2 zhangsan zhangsan 4096 Mar 17 15:23 /home/zhangsan/mail/.imap/INBOX/

# mkdir -p /home/lisi/mail/.imap/INBOX/

# chown -R lisi.lisi /home/lisi

# ll -d /home/lisi/mail/.imap/INBOX/

drwxrwx--- 2 lisi lisi 4096 Mar 17 15:23 /home/lisi/mail/.imap/INBOX/

第五大步:

2台客户端机器dns都要指向邮件的服务器:192.168.1.59

# /etc/resolv.conf

nameserver 192.168.1.59

windows主机:

192.168.1.59

测试

邮件的地址:

zhangsan@cluster.com

lisi@cluster.com

收邮件和发邮件的地址(smtp和pop3服务器):

mail.cluster.com

=============================================================

实现两个域的互发

把DNS互相转发,两个域的客户端都能nslookup查到对方的域得到其邮件服务器的IP

就可以两边互相转发了

=============================================================

总结:上面讲的只是邮件收发的基本原理,实际的邮件服务器在上面的基础上还有更多的功能,如:

1,邮件群发

2,虚拟邮件域(指一个邮件服务器可以做多个邮件域)

3, webmail (开发一个web界面程序由apache这种web服务器来提供web界面的管理,开源的有openwebmail,squirrelmail,extman等)

4, 邮件用户由数据库或者由ldap来管理(也就是邮件用户不是系统用户,而是放到类似mysql这样的数据库里,和数据连接)

5, 反垃圾邮件(现在反垃圾邮件可以使用DNS反向,域名黑名单,关键字评分等机制来实现,但不能从根本上解决垃圾邮件的问题)

6,邮件杀毒(装一个软件对邮件进行杀毒就可,开源的有clamAV等)

搭建一个完整的邮件服务器是很复杂的,就算搭建成功的话,维护起来出了问题也非常难排错;

所以除了大公司外,很多小公司也会选择花钱买一套邮件系统,这样会有完整的售后服务

如果公司很小,或刚起步,也可以选择一些大公司提供的企业邮件(如腾讯企业邮,网易企业邮这种,人数不多的话是免费的)

如果公司一定想要自己搭建一套的话,可以选择整合版本(如extmail或zimbra等)

====================================================================

三. 开源邮件系统的搭建

基于zimbra的邮件服务器搭建

第一步:搭建DNS服务器

(1)准备工作之修改主机名

# hostname qianyun.com

# vim /etc/sysconfig/network

HOSTNAME=qianyun.com

# vim /etc/hosts

192.168.1.45 mail.qianyun.com qianyun.com

(2) 关闭防火墙和selinux

# iptables -F

# setenforce 0

(3) 搭建DNS服务器

# yum install bind* -y

# vim /etc/named.conf

加入一段:

options {

forwarders { 114.114.114.114; 8.8.8.8; };

};

zone "qianyun.com" IN {

type master;

file "data/master.qianyun.com.zone";

};

zone "1.168.192.in-addr.arpa" IN {

type master;

file "data/master.1.168.192.arpa";

};

# named-checkconf /etc/named.conf --检测是否有语法错误

创建正向解析文件

# vim /var/named/data/master.qianyun.com.zone

$TTL 86400

@ IN SOA qy.com. root.qy.com. (

20150922

3H ;refresh

15M ;retry

1W ;expiry

1D ) ;minimum

IN NS 192.168.1.45.

IN MX 0 mail.qianyun.com.

mail IN A 192.168.1.45

创建反向解析文件

# cp /var/named/data/master.qianyun.com.zone /var/named/data/master.1.168.192.arpa

# vim /var/named/data/master.1.168.192.arpa

$TTL 86400

@ IN SOA qy.com. root.qy.com. (

20150922

3H ;refresh

15M ;retry

1W ;expiry

1D ) ;minimum

IN NS 192.168.1.45.

IN MX 0 mail.qianyun.com.

45 IN PTR mail.qianyun.com

解析文件正确性检查,出现OK 提示就表示正确

# named-checkzone qianyun.com /var/named/data/master.10.1.1.arpa

/var/named/data/master.192.168.1.arpa:8: NS record '192.168.1.45.' appears to be an address

zone qianyun.com/IN: qianyun.com/MX 'mail.qianyun.com' has no address records (A or AAAA)

zone qianyun.com/IN: loaded serial 20150922

OK

# named-checkzone qianyun.com /var/named/data/master.qianyun.com.zone

/var/named/data/master.qianyun.com.zone:8: NS record '192.168.1.45.' appears to be an address

zone qianyun.com/IN: loaded serial 20150922

OK

# /etc/init.d/named restart --重启服务

# chkconfig named on --开机启动

# vim /etc/resolv.conf

nameserver 192.168.1.45

解析测试:

# nslookup

> set type=mx

> qianyun.com

Server: 192.168.1.45

Address: 192.168.1.45#53

qianyun.com mail exchanger = 0 mail.qianyun.com.

> set type=ptr

> 192.168.1.45

Server: 192.168.1.45

Address: 192.168.1.45#53

108.1.168.192.in-addr.arpa name = mail.qianyun.com.1.168.192.in-addr.arpa.

第二步,安装和配置zimbra

准备工作:

# /etc/init.d/postfix stop

# chkconfig postfix off

# yum install sysstat compat-libstdc * nc file -y --依赖文件

# tar xvf zcs-8.6.0_GA_1153.RHEL6_64.20141215151155.tgz -C /usr/src/

# cd /usr/src/

# mv zcs-8.6.0_GA_1153.RHEL6_64.20141215151155/ zcs

# cd zcs

# ./install.sh --platform-override

安装过程:

Do you agree with the terms of the software license agreement? [N] y

Install zimbra-ldap [Y] --存放用户名密码

Install zimbra-logger [Y] --日志

Install zimbra-mta [Y] --邮件服务器

Install zimbra-dnscache [Y] n --dns,自己来配

Install zimbra-snmp [Y] --snmp

Install zimbra-store [Y]

Install zimbra-apache [Y] --web网页界面

Install zimbra-spell [Y] --检测

Install zimbra-memcached [Y] --缓存

Install zimbra-proxy [Y] --代理

The system will be modified. Continue? [N] y

Change domain name? [Yes] y

Create domain: [mail.qianyun.com] qianyun.com

---------------------------------------------------------

Main menu

1) Common Configuration:

2) zimbra-ldap: Enabled

3) zimbra-logger: Enabled

4) zimbra-mta: Enabled

5) zimbra-snmp: Enabled

6) zimbra-store: Enabled

Create Admin User: yes

Admin user to create: admin@qianyun.com

******* Admin Password UNSET

Anti-virus quarantine user: virus-quarantine.rmy8cpwf@qianyun.com

Enable automated spam training: yes

Spam training user: spam.c7bccov_@qianyun.com

Non-spam(Ham) training user: ham.liyxy9ois@qianyun.com

SMTP host: mail.qianyun.com

Web server HTTP port: 8080

Web server HTTPS port: 8443

Web server mode: https

IMAP server port: 7143

IMAP server SSL port: 7993

POP server port: 7110

POP server SSL port: 7995

Use spell check server: yes

Spell server URL: http://mail.qianyun.com:7780/aspell.php

Enable version update checks: TRUE

Enable version update notifications: TRUE

Version update notification email: admin@qianyun.com

Version update source email: admin@qianyun.com

Install mailstore (service webapp): yes

Install UI (zimbra,zimbraAdmin webapps): yes

7) zimbra-spell: Enabled

8) zimbra-proxy: Enabled

9) Default Class of Service Configuration:

s) Save config to file

x) Expand menu

q) Quit

---------------------------------------------------------

Address unconfigured (**) items (? - help) 6

Select, or 'r' for previous menu [r] 4

Password for admin@qianyun.com (min 6 characters): [7D1ZrZOG] 123456 --管理员admin的密码

Select, or 'r' for previous menu [r] r

Select from menu, or press 'a' to apply config (? - help) a

Save configuration data to a file? [Yes]

Save config in file: [/opt/zimbra/config.62794]

Saving config in /opt/zimbra/config.62794...done.

The system will be modified - conti/etc/init.d/postfix stopnue? [No] yes

Notify Zimbra of your installation? [Yes] no

安装完成,按任意键退出

# su - zimbra --这个用户是安装zimbra 的时候自动创建的,切换到这个用户

$ zmcontrol status --查看zcs工作状态

$ zmcontrol restart --启动zcs

$ exit --退出zimbra帐号

验证zimbra服务器是否可以正常工作

管理员登陆页面:https://mail.qianyun.com:7071 --注意是https

https://192.168.1.45:7071

登录名:admin 密码:123456

网络客户端:https://mail.qianyun.com:8443

,