一. 电子邮件系统概述
1. 邮件系统角色
MUA (邮件用户代理)、 MTA (邮件传输代理)、 MDA (邮件分发代理 )
2. 邮件应用协议
SMTP ,简单邮件传输协议, TCP 25 端口
POP3 ,第 3 版邮局协议, TCP 110 端口
IMAP4 ,第 4 版因特网消息访问协议, TCP 143 端口
二. 常用的邮件服务器软件
1. 商业邮件系统
Exchange :微软公司的重量级产品,与 Windows 系列软件产品相集成,协作性较好
Notes/Domino : IBM 公司的商业电子邮件和办公协作软件产品,功能丰富、强大,提供跨平台支持
2. 开源邮件系统
Sendmail :资格最古老,运行稳定,但安全性欠佳
Qmail :有更好的执行效率,配置、管理也很方便
Postfix :兼容 Sendmail ,采用模块化设计,在投递效率、稳定性、服务性能及安全性方面表现优秀
三. 编译安装 Postfix
1. 停用 sendmail 服务,以避免冲突
[root@mail ~]# service sendmail stop
chkconfig --level 35 sendmail off
2. 获得源码文件包
Ø 源程序包: postfix-2.4.6.tar.gz
Ø VDA 补丁包: postfix-2.4.6-vda-ng.patch.gz
3. 添加运行邮件系统的帐号
用户帐号 postfix ,组帐号 postfix 、 postdrop
groupadd -g 1200 postdrop
groupadd -g 1000 postfix
useradd -M -u 1000 -g postfix -G postdrop -s /sbin/nologin postfix
4. 解压释放源码包、合并 VGA 补丁
tar zxvf postfix-2.4.6.tar.gz
gunzip postfix-2.4.6-vda-ng.patch.gz
cd postfix-2.4.6
patch -p1 < ../postfix-2.4.6-vda-ng.patch
注意: p 后面的数字取决于你补丁包里的设置,跟微软的补丁类似
5. 预配置编译参数
注意参考 README_FILES 子目录中的说明文档
添加 MySQL 数据库查询、 SASL 认证支持
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 '
6. 编译并完成安装
make && make install
四. Postfix 的主要目录
1. 配置文件目录: /etc/postfix/
2. 服务程序目录: /usr/libexec/postfix/
3. 邮件队列目录: /var/spool/postfix/*
a) incoming 、 active 、 deferred
b) hold 、 corrupt
4. 邮件管理程序目录: /usr/sbin/*
a) postalias 、 postmap 、
b) postconf 、 postfix
c) postqueue 、 postsuper
注意:
l 邮件队列子目录:
1)incoming传入:刚接收到的邮件 2)active活动:正在投递的邮件 3)deferred推迟:以前投递失败的邮件
4)hold约束:被阻止发送的邮件 5)corrupt错误:不可读或不可分析的邮件
l 主要的邮件管理程序(/usr/sbin/post*)
1)postalias:用于构造、修改和查询别名表 2)postmap:用于构造、修改或者查询查询表
3)postconf:用于显示和编辑main.cf配置文件 4)postfix:用于启动、停止postix,要求root用户权限
5)postqueue:用于管理邮件队列,一般用户使用 6)postsuper:用于管理邮件队列,要求有root用户权限
五. Postfix 的配置文件
1. /etc/postfix/master.cf
master 主程序的配置文件
2. /etc/postfix/main.cf
a) postfix 服务的配置文件
3. 辅助配置工具 postconf
a) 执行 postconf ,查看当前的有效配置
b) 执行 postconf -n ,查看非默认配置
c) 执行 postconf -d ,查看默认配置
4. Postfix 的日志文件
1) /var/log/maillog
记录了 postfix 服务的邮件传递等过程信息
2) 常用分析方法
动态跟踪日志变化
tail -f /var/log/maillog
关键词搜索
egrep '(reject|warning|error|fatal|panic):' /var/log/maillog
5. Postfix 的控制启动
1) Postfix 服务控制
使用 /usr/sbin/postfix 程序
常见控制参数: start 、 stop 、 reload 、 check
如:postfix start/reload/check
构建简单电子邮件系统
一. 案例环境:
IP 地址: 173.17.17.11/24
主机名 : mail.benet.com
邮件域: @benet.com
邮件帐号:使用本地系统用户
使用 dovecot 提供收信服务
二. 域名设置
需要在 benet.com 域的 DNS 服务器中注册,设置相应的 A 记录和 MX 记录
@ IN MX 5 mail.benet.com.
mail IN A 173.17.17.11
三. 构建 postfix 服务器
1. 修改 main.cf 配置文件,调整运行参数
编辑 /etc/postfix/main.cf
inet_interfaces = 173.17.17.11, 127.0.0.1
myhostname = mail.benet.com
mydomain = benet.com
myorigin = $mydomain 外发邮件时发件人地址中的邮件域名
mydestination = $mydomain, $myhostname 允许投递到本地的邮件域名
home_mailbox = Maildir/ (Mailbox 已淘汰 ) 邮件存储位置和格式
2. 重新加载配置: postfix reload
3. 建立邮件帐号: xiaoqi 、 lisi
4. SMTP 发信测试: telnet localhost 25
telnet localhost 25
HELO localhost
250 mail.benet.com
MAIL FROM: xiaoqi@benet.com
250 2.1.0 Ok
RCPT TO: lisi@benet.com
250 2.1.5 Ok
……
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: A Test Mail
HELLO!
This is a test mail!
.
250 2.0.0 Ok: queued as 6F24D148440
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
四. 构建 dovecot 服务器
1. 编译安装 dovecot 软件
下载源码包 dovecot-1.1.4.tar.gz
p 官方站点:
添加 dovecot 运行用户
解包、配置、编译及安装
#useradd -M -s /sbin/nologin dovecot
#tar zxvf dovecot-1.1.4.tar.gz
#cd dovecot-1.1.4
#./configure --sysconfdir=/etc --with-mysql
#make && make install
2. 建立 dovecot.conf 配置文件
cp /etc/dovecot-example.conf /etc/dovecot.conf
[root@mail ~]# vi /etc/dovecot.conf
……
ssl_disable = yes 禁用 SSL 机制
……
protocols = pop3 imap 支持的邮局协议
……
disable_plaintext_auth = no 允许明文密码认证
……
mail_location = maildir:~/Maildir 邮件存储格式及位置
3. 创建 PAM 认证文件
vi /etc/pam.d/dovecot
auth required pam_nologin.so
auth include system-auth
account include system-auth
session include system-auth
4. 启动 dovecot 服务
# /usr/local/sbin/dovecot -c /etc/dovecot.conf
5. POP3 收信测试: telnet localhost 110
[root@mail ~]# telnet localhost 110
Trying 127.0.0.1...
Connected to mail.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
USER lisi
+OK
PASS 123456
+OK Logged in.
……
LIST
+OK 1 messages:
1 451
.
RETR 1
+OK 451 octets
Return-Path: <xiaoqi@benet.com>
X-Original-To: lisi@benet.com
Delivered-To: lisi@benet.com
Received: from mail.benet.com (mail.benet.com [127.0.0.1])
by mail.benet.com (Postfix) with SMTP id 6F24D148440
五. 使用 Outlook Express 邮件客户端
设置电子邮件帐号,并进行收发信测试
设置邮件帐号为 xiaoqi (不带 @benet.com 后缀)
SMTP 、 POP3 服务器: mail.benet.com
六. 扩展 Postfix 邮件系统的功能
1. 添加 Webmail 邮件界面 : 编译安装 squirrelmail 程序套件
tar jxvf squirrelmail-1.4.13.tar.bz2 -C /usr/local/apache2/htdocs/
cd /usr/local/apache2/htdocs/
mv squirrelmail-1.4.13 webmail
解压 all_locales-1.5.1-20060219.tar ,然后拷贝 locale 目录里面的所有内容到 /usr/local/apache2/htdocs/webmail/locale/ 里面。
2. 创建及调整数据目录、附件目录
cd /usr/local/apache2/htdocs/webmail
mkdir -p attach data
chown -R daemon:daemon attach/ data/
[root@mail webmail]# chmod 730 attach/
3. 建立并调整 config.php 配置文件
cp config/config_default.php config/config.php
vi config/config.php
$squirrelmail_default_language = 'zh_CN';
$default_charset = 'zh_CN.UTF-8';
$domain = 'benet.com';
$smtpServerAddress = 'localhost';
$smtpPort = 25;
$imap_server_type = 'dovecot';
$imapPort = 143;
$data_dir = '/usr/local/apache2/htdocs/webmail/data/';
$p_w_upload_dir = '/usr/local/apache2/htdocs/webmail/attach/';
4. 确认启动 httpd 服务程序
5. 在浏览器中访问 Webmail 界面
七. 添加 SMTP 用户认证
1. 配置并启动 saslauthd 服务
建立配置文件: /usr/lib/sasl2/smtpd.conf
启动 saslauthd 服务
cd /usr/lib/sasl2/
[root@mail sasl2]# cp Sendmail.conf smtpd.conf
[root@mail sasl2]# vi /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
[root@mail sasl2]# service saslauthd start
2. 调整 main.cf 文件,以便支持认证
修改后要重载 postfix 服务: postfix reload
vi /etc/postfix/main.cf
……
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
mynetworks = 127.0.0.1
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination 若收件人地址未在授权网络内,则拒绝发送
八. 用户别名与邮件群组
aliases 别名机制
一般使用 /etc/aliases 文件
aliases 文件的记录格式
p 别名: 地址1, 地址2, 地址3, ……
执行 newaliases 命令,以更新别名设置
九. 设置邮件大小、邮箱空间限制
1. 邮件大小限制
message_size_limit
2. 邮箱空间大小限制
mailbox_size_limit
针对Mailbox邮箱、系统用户,缺省值为50MB
virtual_mailbox_limit
针对使用虚拟用户的情况,缺省值为50MB
quota 磁盘配额功能
针对使用Linux系统用户作为邮件账号的情况