一、邮件服务器基本的工作原理

Linux 邮件服务器原理介绍,编译安装Postfix实现本地的邮件服务。_第1张图片


用户(MUA)通过SMTP协议将邮件发送到服务器(MTA),服务器分解发现如果是本地的邮件传输则通过lmtp来传送,如果是远程邮件将调用本地的客户端使用SMTP协议向对方服务器传送。 


当对方的服务器接收到邮件之后,发现如果不是本机所负责的域,则将邮件交给本机的邮件客户端,根据邮件目标域请求DNS解析,将邮件发送到目标服务器,或者丢至下一跳此过程称为邮件中继,如果发现是本机负责区域内的用户,则SMTPD将邮件转交给MDA,由MDA把邮件传递到用户的邮筒。


用户通过MUA查看邮件的时候,会将邮件从邮筒拉到用户家目录,保存为mbox的文件。


邮件中继:

SMTPD要支持邮件路由功能,需要打开Open Relay—开放式中继。

SMTPD是根据收件人判断邮件是否需要中继,而且只给指定的客户端中继。

二、邮件服务器与DNS之间的关系

Linux 邮件服务器原理介绍,编译安装Postfix实现本地的邮件服务。_第2张图片

①当发件方需要发送邮件给对方邮件服务器,需要向DNS请求查询对方邮件服务器的MX记录。
②DNS通过查询MX表信息。
③将查询到的MX信息返回给发送方。
④发送方根据优先级,将邮件投递给对方优先级高的邮件服务器(mail1)。
⑤如果主邮件服务器过于繁忙,或者不在线的时候,会将邮件投递给辅的邮件交换器(mail2)上。
⑥待主邮件服交换器空闲下来后,mail2会将代替接收下来的邮件再转给主邮件交换器(mail1)。

注:当DNS上存在多个MX记录的主机这时就是根据DNS的邮件级判断了。DNS上定义的值越小,其优先级越高。 辅助交换器接受到邮件并不能保存邮件。而是这个辅助交换器会等到主邮件交换器空闲的时候把代替它接受下来的邮件在转给主邮件交换器。所以任何邮件处理都是主邮件交换器处理的。所以我们实际情况下,如果有2台服务器做邮件交换器,性能比较高的应该为主的。


三、邮件服务器的各程序组件

MTA(Mail Transfer Agent)接收邮件的服务器端,负责邮件的传输;

sendmail

qmail

postfix

exim

Exchange(windows)

MUA(Mail User Agent) 邮件客户端,提供用户编写查看邮件,向外发送邮件;

Outlook Express , Outlook

Foxmail

Thunderbird

Evolution

mutt

MDA(Mail Delivery Agent) 将收下来的邮件投递到对应用户邮筒中的程序

procmail

maildrop

MRA (Mail Retrieval Agent)通过POP3协议从邮筒中帮用户检索对应邮件

pop3,imap4

 cyrus-imap

dovecot

Web Mail  实现网页的形式收发邮件,需要有web服务器的支持;

openwebmail

squirrelmail

Extmail


四、Postfix简介

        Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。

        postfix由十几个具有不同功能的半驻留进程组成,并且在这些进程中并无特定的进程间父子关系。某一个特定的进程可以为其他进程提供特定的服务。

        大多数的postfix进程由一个进程统一进行管理,该进程负责在需要的时候调用其他进程,这个管理进程就是master进程。该进程也是一个后台程序。

        这些postfix进程是可以配置的,我们可以配置每个进程运行的数目,可重用的次数,生存的时间等等。通过灵活的配置特性可以使整个系统的运行成本大大降低。


特点:

1、postfix是免费的;

2、性能好,大约比sendmail×××倍,一台运行postfix的台式pc每天可收发上百万邮件;

3、兼容sendmail

4、健壮稳定,postfix被设计成在重负荷之下仍然可以正常工作。当系统运行超出了可用的内存或磁盘空间时,postfix会自动减少运行进程的数目。当处理的邮件数目增长时,postfix运行的进程不会跟着增加;

5、灵活性好,postfix是由超过一打的小程序组成的,每个程序完成特定的功能。你可以通过配置文件设置每个程序的运行参数。

6、安全性,postfix具有多层防御结构,可以有效地抵御恶意***者,可以运行在较低的权限之下;


五、编译安装PostFix

1、关闭服务器已有的邮件服务器,将其卸载。

2、安装MySQL数据库,并给root用户设置好密码。

3、编译安装postfix

安装依赖包

yum install cyrus-sasl-devel -y

yum install cyrus-sasl-plain -y

创建用户和组,postfix用于启动postfix服务器,postdrop(用于邮件投递服务);

groupadd -g 2525 postfix

useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

groupadd -g 2526 postdrop 

useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop 


解压源码包

tar xf postfix-2.11.6.tar.gz

cd postfix-2.11.6

编译参数

make makefiles 'CCARGS=-DHAS_MYSQL -I /alidata/server/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I /usr/include/sasl -DUSE_TLS' 'AUXLIBS=-L /alidata/server/mysql/lib -lmysqlclient -lz -lm -L/usr/lib64/sasl2 -lsasl2 -lssl -lcrypto'

make

make install

参数说明:

CCARGS                   指定C编译参数,指定链接的头文件路径。

-DHAS_MYSQL        启用mysql连接功能,指定头文件路径

-DUSE_SASL_AUTH 启用SASL认证

-DUSE_CYRUS_SASL -I  指定SASL头文件路径

-DUSE_TLS                     启用加密协议

AUXLIBS                         辅助的库文件路径

-lz                    表示压缩库文件

-lm                   模块文件

-lsasl2 -lssl -lcrypto 表示使用这些库文件


启动postfix服务器

postfix start

会监听在tcp的25号端口,进程名为master。


postfix配置文件:

        master:/etc/postfix/master.cf

        mail:/etc/postfix/main.cf

        参数必须写在行的行首,以空白开头的行被认为是上一行的延续。


postconf 配置工具:

    -d:显示默认配置

    -n:显示修改过的配置

    -m:显示支持的查找表类型

    -A:显示支持的SASL客户端插件类型

    -e:Parameter=Value 更改参数配置信息,并保存至main.cf文件中;


smtp状态码:

1xx:纯信息

2xx:正确

3xx:上一步操作尚未完成,需要继续补充。

4xx:暂时性错误

5xx:永久性错误


当出现postfix无法读取邮件别名的时候使用命令/usr/bin/newaliases,将别名文件aliases进行hash散列;

可生成aliases.db文件;

演示telnet连接postfix  smtp指令发邮件:

Linux 邮件服务器原理介绍,编译安装Postfix实现本地的邮件服务。_第3张图片

查看日志 /var/log/maillog

Linux 邮件服务器原理介绍,编译安装Postfix实现本地的邮件服务。_第4张图片

切换到本机tuchao用户查看邮件

Linux 邮件服务器原理介绍,编译安装Postfix实现本地的邮件服务。_第5张图片