postfix的工作原理
postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真是一个让人吃惊的数字。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。
Postfix内部收信、发信流程图
整个处理流程分为三个阶段:接收邮件、将邮件排入队列、递送邮件。每个阶段由一组独立的Postfix组件负责。当一封邮件被收下并排入队列之后,队列管理器(Queue Manager)会启动适当的MDA,将邮件送到终点。
Postfix的队列管理器
邮件本身的处理工作主要是由队列管理器(Queue Manager)负责,每一个能收到邮件的Postfix组件,都有一个共同的目的地--队列管理器。邮件进入队列之前的关卡是Cleanup Daemon,因为只有经过清理的邮件,才有资格进入队列。Cleanup将邮件排入队列后,会通知Queue Manager去处理新邮件。每当Queue Manager察觉收信队列有新信到达时,就会使用Trivial-Rewrite来决定邮件路由信息,这些信息包括传输方法、下一站以及收件人地址。
Queue Manager总共维护四种队列:收件(Incoming)、活动(Active)、延迟(Deferred)、故障(Corrupt)。新邮件通过Cleanup之后的第一站是“收件队列”。假设系统资源空闲。Queue Manager会将邮件移入“活动队列”,然后调用适当的MDA来投递邮件,而投递失败的邮件则会被移入“耽搁队列”。
如果邮件被耽搁太久,或是被判定无法送达,则Queue Manager还要负责协调Bounce与Defer Daemons来产生一份递送状态报告,并传回给系统管理员或送信者(或两者)。在Postfix的队列目录下(默认位置是/var/spool/postfix/),除了上述四种邮件队列目录之外,还有bounce/与defer/目录。这些目录含有状态信息,解释特定邮件为何被耽搁或无法递送,Bounce与Defer Daemon就是利用这些目录下的状态信息来产生通知函。
实验环境
本地yum服务器
Dns服务器
一:查看系统的状态
1:我们需要把原有的sendmail服务停止掉或者删除安装的包
[root@mail ~]# yum remove sendmail
[root@mail ~]# service sendmail stop
2:修改主机的名字为mai.bj.com
[root@mail ~]# vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mail.bj.com
3:修改本机的dns指向
[root@mail ~]# vim /etc/resolv.conf
search xyh.com
nameserver 192.168.10.100
4:重启系统,使配置生效
[root@mail ~]# init 6
二:构建dns服务器
1:[root@mail ~]# yum install bind bind-chroot caching-nameserver
[root@mail ~]# cd /var/named/chroot/
[root@mail chroot]# cd etc/
[root@mail etc]# cp -p named.caching-nameserver.conf named.conf
[root@mail etc]# vim named.conf
options {
listen-on port 53 { any; };
allow-query { any; };
allow-query-cache { any; };
};
view localhost_resolver {
match-clients { any; };
match-destinations { any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
2:[root@mail etc]# vim named.rfc1912.zones
zone "bj.com" IN {
type master;
file "bj.com.db";
allow-update { none; };
}
3:创建dns的数据库的文件
[root@mail etc]# cd ../var/named/
[root@mail named]# cp -p localhost.zone bj.com.db
4:设置named为开机启动,并重新启动该服务
[root@mail named]# chkconfig named on
[root@mail named]# service named start
5:测试
[root@mail named]# dig -t mx bj.com
<<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t mx bj.com
global options: printcmd
Got answer:
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5543
flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
QUESTION SECTION:
bj.com. IN MX
ANSWER SECTION:
bj.com. 86400 IN MX 10 mail.bj.com.
AUTHORITY SECTION:
bj.com. 86400 IN NS ns.bj.com.
ADDITIONAL SECTION:
mail.bj.com. 86400 IN A 192.168.10.100
ns.bj.com. 86400 IN A 192.168.10.100
三:搭建postfix服务器
1:[root@mail ~]# yum install postfix
2:[root@mail ~]# vim /etc/postfix/main.cf
69 myhostname = mail.bj.com
77 mydomain = bj.com
93 myorigin = $mydomain
107 inet_interfaces = all 打开该行
108 #inet_interfaces = $myhostname
109 #inet_interfaces = $myhostname, localhost
110 #inet_interfaces = localhost 注释掉本行
155 mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
3:
发送邮件:
telnet 192.168.2.100 25
EHLO mail.bj.com
mail from:[email protected]
rcpt to:[email protected]
data
subject:ok
11111111111111111111111111
4:由于默认情况下允许进行中继到外边,我们现在只允许本机进行中继
[root@mail ~]# vim /etc/postfix/main.cf
255 mynetworks = 127.0.0.1
5:设置postfix自动启动
[root@mail ~]# chkconfig postfix on
[root@mail ~]# service postfix restart
四:安装邮件的接收服务器
1:[root@mail ~]# yum install dovecot
2:[root@mail ~]# chkconfig dovecot on
[root@mail ~]# service dovecot start
五:安装sasl实现对用户的身份的验证
1:[root@mail ~]# yum install cyrus*
2:修改配置文件
[root@mail ~]# vim /etc/sysconfig/saslauthd
MECH=pam
MECH=shadow 增加本地账号库的验证
3:创建用户并对用户进行验证的测试
[root@mail ~]# echo -n "[email protected]" |openssl base64
dXNlcjFAYmouY29t
[root@mail ~]# echo -n "123" |openssl base64
MTIz
4:
[root@mail ~]# testsaslauthd -u user1 -p 123
0: OK "Success."
5:非本地账户
[root@mail ~]# telnet 192.168.10.100 25
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 <[email protected]>: Relay access denied
本地账户
[root@mail ~]# telnet 192.168.10.100 25
250-AUTH CRAM-MD5 PLAIN NTLM GSSAPI DIGEST-MD5 LOGIN
250-AUTH=CRAM-MD5 PLAIN NTLM GSSAPI DIGEST-MD5 LOGIN
auth login dXNlcjFAYmouY29t
334 UGFzc3dvcmQ6
MTIz
235 2.0.0 Authentication successful
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
hello
123
.
250 2.0.0 Ok: queued as 4026D36BBB8
quit
221 2.0.0 Bye
6:查看日志文件
[root@mail ~]# tail -f /var/log/maillog
Mar 7 20:23:38 mail postfix/qmgr[3739]: 4026D36BBB8: from=<[email protected]>, size=331, nrcpt=1 (queue active)
Mar 7 20:23:38 mail postfix/local[3765]: 4026D36BBB8: to=<[email protected]>, relay=local, delay=31, delays=31/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
六:搭建squirrel的包,实现对postfix的web的访问和管理
1:[root@mail ~]# yum install squirrelmail �Cy
2:配置main menu主菜单
[root@mail ~]# /usr/share/squirrelmail/config/conf.pl
Server Settings
1. Domain : bj.com
2. Invert Time : false
3. Sendmail or SMTP : SMTP
七:设置虚拟的目录
1:[root@mail ~]# vim /etc/httpd/conf/httpd.conf
Alias /webmail "/usr/share/squirrelmail"
2:重新启动httpd服务
[root@mail ~]# service httpd restart
八:用ie浏览器进行测试
使用用户user1给user2发送一份邮件
用user2登录查看邮件是否已经收到