构建基于系统用户的
Postfix
邮件系统
实验环境
公司需要在
RHEL5
服务器中搭建一套电子邮件系统,考虑到系统的安全性和稳定性,选择使用
Postfix
作为发送和传递邮件的服务器,
dovecot
提供邮件收取服务,另外结合
Apache
安装
squirrelmail
程序作为辅助用户使用邮件的
web
界面。
实验准备
u
构建
AMP
环境,为
web
邮件界面提供运行支持
u
做主机名,确保
/etc/hosts
文件有
IP
地址与主机名的对应关系记录,确保主机名中的域名作为邮件域
u
搭建
DNS
,向指定邮件服务器提供邮件路由
u
停止
sendmail
服务,避免与
Postfix
发生冲突,也可直接卸载
u
服务器基本配置
主机名
mail.lwb.com
IP
地址
172.16.100.141
子网掩码
255.255.0.0
默认网关
172.16.100.141
DNS
服务器
172.16.100.141
实验思路
1.
检查
AMP
环境、主机名和
DNS
2.
配置
Postfix
3.
配置
dovecot
4.
配置
squirrlmail
5.
为
Postfix
配置
SMTP
发信认证功能
6.
测试收发邮件
实现步骤
一.
AMP
环境、主机名和
DNS
Ø
AMP
环境(测试可以使用第
4
章(
web
服务)中的方法)
Ø
检查主机名(
/etc/hosts
文件和
/etc/sysconfig/network
文件)
[root@mail ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 mail.lwb.com mail localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
[root@mail ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=mail.lwb.com
|
Ø
检查
DNS
,确保
lwb.com
域内所有主机的名称解析,确保
lwb.com
域的
MX
记录指向邮件服务器
[root@mail ~]# chkconfig named on
|
二
.
配置
Postfix
准备软件包
postfix-2.4.6.tar.gz
postfix-2.4.6-vda-ng.patch.gz
(是一个
vda
补丁包,用于支持对虚拟用户设置邮箱空间配额)
1.
编译安装
Postfix
一般
RHEL5
系统默认安装了
sendmail
程序,用于提供基本的发信服务,在安装
Postfix
前先将其停止,以避免域
Postfix
冲突。
[root@mail ~]# service sendmail stop
[root@mail ~]# chkconfig --level 35 sendmail off
|
1.1
创建运行
Postfix
服务的用户(
postfix
)、组(
postfix
、
postdrop
)
[root@mail ~]# groupadd postdrop
[root@mail ~]# groupadd postfix
[root@mail ~]#useradd -M -g postfix -G postdrop -s /sbin/nologin postfix
|
Ø
-M:
不创建用户宿主目录
Ø
-g:
指定用户所属组
Ø
-G:
指定用户额外的组
1.2
释放源码包,打上
vda
补丁包
[root@mail l6]# ls
postfix-2.4.6.tar.gz
postfix-2.4.6-vda-ng.patch.gz
[root@mail l6]# tar zxf postfix-2.4.6.tar.gz
[root@mail l6]# gunzip postfix-2.4.6-vda-ng.patch.gz
[root@mail l6]# cd postfix-2.4.6
[root@mail postfix-2.4.6]# patch -p1 < ../postfix-2.4.6-vda-ng.patch
|
1.3
预配置编译参数
在编译前需要使用“
make makefiles
”命令调整编译参数,以便
Postfix
支持
SASL
认证和查询
MYSQL
数据库。具体的编译参数可以参考
Postfix
源码目录中
README_FILES
子目录下的说明文件,如
SASL_README
和
MYSQL_README
文件。
本例采用源码编译安装的
AMP
平台,并使用
REHL5
系统自带的
cyrus-sasl
认证软件,因此根据
mysql
、
cyrus-sasl
的库文件和头文件安装位置对编译参数
CCARGS
和
AUXLIBS
进行适当调整。
配置命令如下:
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
|
其中,编译参数作用分析:
u
CCARGS
参数:为编译器提供额外的参数。“
-I
”选项指出标准的额外头文件的存放目录。如,
mysql
和
cyrus-sasl
的头文件分别位于目录
/usr/local/mysql/lib/mysql
、
/usr/include/sasl
。
u
AUXLIBS
参数:指出位于标准位置之外的额外函数库。如果需要链接
SASL
、
MySQL
或任何附加的数据库,而且它们不是存放在标准位置(
/usr/lib
目录),则必须在
AUXLIBS
参数中指出这些函数库的路径。如,
cyrus-sasl
和
mysql
的库文件分别位于目录:
/usr/lib/sasl2
、
/usr/local/mysql/lib/mysql
。
1.4
编译
[root@mail postfix-2.4.6]# make
|
1.5
安装
[root@mail postfix-2.4.6]# make install
|
执行“
make install
”命令后,期间会需要设置如下一些安装参数,一般都使用默认设置(按回车),如果有特殊需要,直接在后面输入自己的设置,回车即可。
install_root: [/] //
指定系统的根目录
tempdir: [/root/l6/postfix-2.4.6]
//
指定
postfix-install
脚本使用的临时文件目录
config_directory: [/etc/postfix] //
设置
Postfix
的配置文件目录
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin] //
设置
Postfix
命令的存放目录
queue_directory: [/var/spool/postfix] //
设置邮件队列目录
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [no]
manpage_directory: [/usr/local/man]
readme_directory: [no]
|
2.
修改
Postfix
的配置文件
/etc/postfix/main.cf
[root@mail ~]# vi /etc/postfix/main.cf
inet_interfaces = all
//
设置监听
25
端口在哪些
IP
地址可以使用
myhostname = mail.lwb.com
//
设置
Postfix
服务器使用的主机名
mydomain = lwb.com
//
设置
Postfix
服务器使用的邮件域
myorigin = $mydomain
//
设置发件人邮件地址中的邮件域名
mydestination = $mydomain,$myhostname
//
设置可接收的邮件地址中的域名
home_mailbox = Maildir/
//
设置邮件存储位置和格式
|
在上述配置中,参数分析:
u
Mydestination
参数:值设置为“
$mydomain,$myhostname
”后,则发送到
xxx@lwb.com
和
xxx@mail.lwb.com
的邮件都可以被
Postfix
服务器接收。如果设置为“
$mydomain
”,那么只能发送到
xxx@lwb.com
的邮件才能被
Postfix
服务器接收。
u
home_mailbox
参数:在
Postfix
服务器中,支持如下两种最常见的邮箱存储方式(当指定的存储位置左后一个字符为“
/
”时,自动使用
Maildir
存储方式)。
Ø
Mailbox
:这种方式将同一用户的所有邮件内容存储在同一个文件中,通常对应为目录“
/var/spool/mail
”中以用户名命名的文件。
Mailbox
方式相对比较古老,在邮件数量较多时查询和管理的效率较低。
Ø
Maildir
:这种方式每一个用户在自己的宿主目录下都对应有一个目录
Maildir
,每一封邮件作为一个独立的文件保存。与
Mailbox
存储方式比较,
Maildir
方式的存取速度和效率更好。
3.
重启
postfix
服务,并验证其监听的
TCP
端口(
25
)
Postfix
系统的启动控制主要是通过“
/usr/sbin/postfix”
命令进行,只需要添加相应的参数(
start
、
stop
、
check
、
reload
)即可分别启动、停止、检查、重载
Postfix
服务。该命令实际上会调用“
/etc/postfix/postfix-script
”脚本来对
Postfix
服务进行控制。
[root@mail ~]# postfix start
查看其
25
端口是否是如下信息(看是否有
4
个
0
)
root@mail ~]# netstat -antp |grep :25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4626/master
|
4.
添加邮件用户账号
[root@mail ~]# adduser -s /sbin/nologin zs;passwd zs
[root@mail ~]# adduser -s /sbin/nologin ls;passwd ls
|
三.配置
dovecot
1.
编译安装
dovecot
准备软件包
dovecot-1.1.4.tar.gz
[root@mail ~]# useradd -M -s /sbin/nologin dovecot
[root@mail l6]# ls
dovecot-1.1.4.tar.gz
[root@mail l6]# tar zxf dovecot-1.1.4.tar.gz
[root@mail l6]# cd dovecot-1.1.4
[root@mail dovecot-1.1.4]#./configure –sysconfdir=/etc –with-mysql
[root@mail dovecot-1.1.4]#make && make install
|
2.
建立
dovecot.conf
配置文件,并进行设置
从
dovecot
源码目录中,拷贝模板配置文件到
/etc/,
进行修改,或者从
/etc
目录拷贝
[root@mail dovecot-1.1.4]# cp dovecot-example.conf /etc/dovecot.conf
或
[root@mail dovecot-1.1.4]# cp /etc/dovecot-example.conf /etc/dovecot.conf
[root@mail dovecot-1.1.4]#vi /etc/dovecot.conf
ssl_disable = yes //
禁用
SSL
机制
protocols = pop3 imap //
指定支持的邮局协议
disable_plaintext_auth = no //
允许明文密码认证
mail_location = maildir:~/Maildir //
设置邮件存储格式及位置
|
3.
创建
PAM
认证文件
[root@mail ~]# vi /etc/pam.d/dovecot
#%PAM-1.0
auth required pam_nologin.so
auth include system-auth
account include system-auth
session include system-auth
|
如果没有创建
PAM
认证文件,最后以系统邮箱用户登陆会出现:
4.
重启
dovecot
,并验证其监听的
TCP
端口(
110
、
143
)
Dovecot
服务的启动程序位于“
/usr/local/sbin
”目录中,使用“
-c
”选项可以指定所使用的配置文件的位置。如果使用默认配置文件,则直接执行“
doveoct
”命令即可。如果修改了配置文件需要重新启动服务,可以先找到
dovecot
进程,杀死进程,再启动服务。
[root@mail ~]# /usr/local/sbin/dovecot -c /etc/dovecot.conf
[root@mail ~]# echo "/usr/local/sbin/dovecot -c /etc/dovecot.conf"
[root@mail ~]# netstat -anpt |grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 30040/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 30040/dovecot
|
四.实现
webmail
邮件页面
准备软件包
Ø
Squirrelmail
软件包:
squirrelmail-1.4.13.tar.bz2
Ø
中文语言包:
zh_CN-1.4.13-20071220.tar.bz2
1.
安装
squirrelmail
程序包、中文语言包
[root@mail l6]# ls
squirrelmail-1.4.13.tar.bz2
zh_CN-1.4.13-20071220.tar.bz2
[root@mail l6]# tar jxf squirrelmail-1.4.13.tar.bz2 -C /usr/local/apache2/htdocs/
[root@mail l6]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# mv squirrelmail-1.4.13 webmail
[root@mail htdocs]#cd webmail
[root@mail webmail]#tar jxf ~/l6/zh_CN-1.4.13-20071220.tar.bz2
|
2.
创建及调整数据目录、附加目录
[root@mail webmail]# mkdir -p attach data
[root@mail webmail]# chown -R daemon:daemon attach data
[root@mail webmail]# chmod 730 attach
|
3.
建立
config.php
配置文件,并进行修改
[root@mail webmail]# cp config/config_default.php config/config.php
[root@mail webmail]# vi config/config.php
$squirrelmail_default_language = 'zh_CN';
$default_charset = 'zh_CN.UTF-8';
$domain = 'lwb.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
服务,在浏览器中登陆
squirrelmail
系统
[root@web ~]# /usr/local/apache2/bin/apachectl start
[root@mail ~]# echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.local
|
注意
:如果出现如下页面,需要修改
Apache
配置文件
httpd.conf
,在
DirectoryIndex
项后添加
index.php
五.为
Postfix
提供发信认证功能
1.
设置
Cyrus SASL
函数库,并启动
saslauthd
服务
建立
SMTP
认证用的配置文件“
/usr/lib/sasl2/smtpd.conf
”
,
指定验证方式为
saslauthd
。
[root@web ~]# cd /usr/lib/sasl2/
[root@web sasl2]# cp Sendmail.conf smtpd.conf
[root@web sasl2]# vi /usr/lib/sasl2/smtpd.conf
pwcheck_method:saslauthd
[root@web sasl2]# service saslauthd start
[root@web sasl2]# chkconfig --level 35 saslauthd on
|
2.
修改
main.cf
配置文件,添加
SMTP
认证相关的配置参数,并重新加载配置
[root@web ~]# vi /etc/postfix/main.cf
smtpd_sas1_auth_enable = yes //
启用
SMTP
认证
smtpd_sas1_security_options = noannonymous //
禁止匿名登录
mynetworks = 127.0.0.1
smtpd_recipient_restrictions=permit_mynetworks,permit_sas1_authenticated,reject_unauth_destination
[root@web ~]# postfix reload
|
u
在上述配置参数中,作用如下;
mynetworks :用于控制可以通过本服务器外发邮件的网络地址或 IP 地址,设置为 127.0.0.1 是为了确保 Webmail 系统可以正常发送邮件。
mynetworks :用于控制可以通过本服务器外发邮件的网络地址或 IP 地址,设置为 127.0.0.1 是为了确保 Webmail 系统可以正常发送邮件。
u
smtpd_recipient_restrictions
:设置收件人地址过滤规则,其匹配策略是:“从上至下逐条检查,有匹配即停止”。
Ø
permit_mynetworks
:允许
IP
为
mynetworks
的用户使用本邮件系统寄出邮件。
Ø
permit_sas1_authenticated
:允许通过
SMTP
认证的用户向外发送邮件。
Ø
reject_unauth_destination
:当收件人地址不包括在
Postfix
的授权网络内时,将拒绝发送该邮件。
Postfix
的授权网络包括由以下配置参数指定的域及其子域:
mydestination
、
inet_interfaces
、
virtual_alias_maps
、
virtual_mailbox_maps
、
relay_domain
。
3.
使用
OE
邮件客户端进行发信测试
修改邮件用户
haha
的账户属性,在“服务器”选项卡中选中“我的服务器要求身份验证”,即可在客户端启用
SMTP
认证支持。若不选中此项,将无法成功向外域发送邮件。
六.测试收发邮件
附加说明:
1.Postfix
的相关目录(成功编译安装好
Postfix
后,需要对相关的配置文件进行了解)
Ø
/etc/postfix:
该目录包括
postfix
服务的主配置文件、各类脚本、查询表等。
Ø
/usr/libexec/postfix/:
该目录中包括
postfix
服务的各个服务器程序的文件。
Ø
/var/spool/postfix/:
该目录中包括
postfix
服务的邮件队列相关的子目录。其中,每个队列子目录用于保存不同的邮件
,
如:
u
Incoming
(传入):刚接收到的邮件。
u
Active
(活动):正在投递的邮件。
u
Deferred
(推迟):以前投递失败的邮件。
u
Hold
(约束):被阻止发送的邮件。
u
Corrupt
(错误):不可读或不可分析的邮件
Ø
/usr/sbin/:
该目录中包括
Postfix
服务的管理工具程序,这些程序文件名以
post
开头。
u
Postalias:
用于构造、修改和查询别名表。
u
postconf:
用于显示和编辑
main.cf
配置文件。
u
postfix:
用于启动、停止
Postfix
,要求有
root
用户权限。
u
postmap:
用于构造、修改或者查询查询表。
u
postqueue:
用于管理邮件队列,一般用户使用。
u
postsuper:
用于管理邮件队列,要求有
root
用户权限。
2.Postfix
的配置文件
①
Postfix
系统最主要的配置文件包括:
Ø
/etc/postfix/main.cf: postfix
服务的配置文件
在主配置文件
main.cf
中,可以设置的配置参数有
300
多个。大部分配置参数都被自动设置了默认值,如果在
main.cf
文件中没有对应的设置,那么
Postfix
服务器将使用默认值来启动及运行。大多数时候,只需要设置少数的几个配置参数,就可以满足一般邮件服务器的要求。
Ø
/etc/postfix/master.cf: master
程序的配置文件
②
postfix
系统提供的
postconf
工具可以用来辅助配置,不带任何选项的
Postfix
命令将打印出当前的
Postfix
服务所使用的配置参数,而添加“
-n
”选项时将只列出不同于默认值的配置参数。
3.postfix
的日志文件
Postfix
系统的日志文件位于“
/var/log/maillog
”
,
该文件中记录了
Postfix
服务器的运行状态信息(启动、出错及与其他
SMTP
服务器的会话信息等)。在安装调试
Postfix
邮件系统及日常的维护过程中,经常会使用带“
-f
”选项的
tail
命令来观察日志内容的实时更新。
Ø
用“
tail -f
”跟踪“
/var/log/maillog
”日志文件的内容实时变化
[root@mail ~]# tail -f /var/log/maillog
|
Ø
如果内容较多,可以使用
egrep
命令进行过滤,只关注包含“
warning
”、“
fatal
”等较重要的事件记录。可以使用如下命令:
[root@mail ~]#egrep ‘(regect|warning|error|fatal|panic):’ /var/log/maillog
|
4.
设置用户别名与邮件群发
用户别名是邮件系统的一个重要功能,主要用来实现邮件群发功能。邮件用户别名的实现依赖于
aliases
机制,而
aliases
机制需要用到查询表。
4.1Postfix
查询表
Postfix
服务器在操作过程中经常需要做各式各样的转换与查询,如:改写邮件地址、判断客户端是否来自授权网络、设定别名等,很多运行参数都可以通过查询表(
lookup tab
)来决定。
例如有 3 个用户 zs,ls,ww ,需要给这 3 个用户发送相同内容的邮件,为了使操作简单,我们使用名称 student 对应这 3 个用户,然后只要给 student 发送邮件, Postfix 就会将邮件内容自动转发给这 3 个用户。由于 main.cf 文件本身的配置格式限制,无法逐一描述这样的关键字与值的对应映射关系。在实际应用中,经常把这些对应关系都写入到另一个文件 ——也就是查询表中,查询表保存了关键字( key )和一组值( value )间的简单对应关系。然后在 main.cf 配置文件中添加配置参数“ alias_maps ”,指向该文件即可。
例如有 3 个用户 zs,ls,ww ,需要给这 3 个用户发送相同内容的邮件,为了使操作简单,我们使用名称 student 对应这 3 个用户,然后只要给 student 发送邮件, Postfix 就会将邮件内容自动转发给这 3 个用户。由于 main.cf 文件本身的配置格式限制,无法逐一描述这样的关键字与值的对应映射关系。在实际应用中,经常把这些对应关系都写入到另一个文件 ——也就是查询表中,查询表保存了关键字( key )和一组值( value )间的简单对应关系。然后在 main.cf 配置文件中添加配置参数“ alias_maps ”,指向该文件即可。
[root@mail ~]#vi /etc/postfix/main.cf
alias_maps = hash:/etc/aliases
|
4.2
设置邮件别名实现群发功能
[root@mail ~]#vi /etc/aliases
zu:lili,xixi,hihi //
在文件末尾添加该行
[root@mail ~]#newaliases
|
5.
为了避免对
Postfix
邮件系统的干扰,可以先暂时关闭防火墙和
selinux
服务。如果还是不能出现预期结果,就从前往后逐步检查配置是否正确。
[root@mail ~]#chkconfig –level 35 iptables off
[root@mail ~]#vi /etc/selinux/config
SELINUX=disabled
[root@mail ~]#reboot
|
转载于:https://blog.51cto.com/liuwenbing/380745