菜鸟学Linux 第062篇笔记 再次postfix+dovecot+sasl(成功)
postfix
myhostname
mydomain
mynetworks
mydestination
myorigin
inet_interfaces
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_recipient_restrictions
smtpd_data_restrictions
check_{client|helo|sender..}_access hash:
RHEL 6.3
Development Tools
Server Platform Development
Desktop Platform Development
MySQL:
rpm:
mysql-server
mysql-devel
使用rpm安装软件如果该软件会被其它要编译的软件所依赖,建议安装其name-devel包
RHEL 自身提供的rpm包:
头文件:/usr/include/
库文件:/lib, /usr/lib
第三方的rpm包
安装路径:/usr/local, /opt
头文件: /usr/include, /usr/local/include
库文件:/usr/local/lib (不会被操作系统自向去查找)
/etc/ld.so.conf/software-name.conf
ldconfig -v
再一次安装postfix
0、安装dns
并且使DNS可以反射解析mail服务器
验证方式
# dig -x 192.168.11.122
# dig -t MX mysky.com
1、这次采用rpm包安装mysql
# yum install mysql-server mysql-devel
2、编译安装postfix 上次安装的是3.1 这次源码是2.9.15
关闭sendmail程序
# service sendmail stop
# chkconfig sendmail off
为postfix创建用户
# groupadd -g 2525 postfix
# useradd -g 2525 -u 2525 -M -s /sbin/nologin postfix
# groupadd -g 2526 postdrop
# useradd -g 2526 -u 2526 -M -s /sbin/nologin postdrop
编译安装postfix
# tar -xf postfix-2.9.15.tar.gz
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH
-DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS' 'AUXLIBS=-L/usr/lib/mysql
-lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
(注意上边是一行命令,而且和源码安装的mysql所指的头文件和库文件路径不中)
# make
# make install
配置postfix
# vim /etc/postfix/main.cf
myhostname = mail.mysky.com
mydomain = mysky.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.11.0/24, 127.0.0.0/8
为postfix添加脚本,这里不写脚本内容了,上一章节里有
# vim /etc/rc.d/init.d/postfix
将上一章节的脚本内容粘贴进该脚本中
# chmod +x /etc/rc.d/init.d/postfix
# newaliases
# service postfix start
# chkconfig --add postfix
# chkconfig postfix on
3、安装dovecot
# yum install dovecot
# vim /etc/dovecot.conf
将如下一行
#protocols = imap imaps pop3 pop3s
改为
protocols = pop3
# service dovecot start
# chkconfig dovecot on
收邮件软件mutt
mutt -f Protocol{imap,pop}://username@{mail.mysky.com|192.168.11.122}
4、启用认证 SASL(cyrus-sasl) 服务脚本:saslauthd
# vim /etc/sysconfig/saslauthd
将
MECH=pam
改为
HECH=shadow
# vim /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
# service saslauthd start
# chkconfig saslauthd on
# chkconfig --list saslauthd
# testsaslauthd -u username -p password
(此为测试sasl是否可正常运行,用户名和密码为/etc/shadow中的用户和密码)
如# testsaslauthd -u mysky -p mysky (此为我的linux用户和密码)
如提示为0: OK "Success." 则证明sasl服务器启动成功
配置postfix使其具有认证功能
# vim /etc/postfix/main.cf
将该行只保留本地回环地址
mynetworks = 127.0.0.0/8
在配置文件末尾添加如下信息
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,
reject_invalid_hostname,reject_non_fqdn_hostname,
reject_unknown_sender_domain,reject_non_fqdn_sender,
reject_non_fqdn_recipient,reject_unknown_recipient_domain,
reject_unauth_pipelining,reject_unauth_destination
(注意此为一行记录,不可回车,让它自动输入时换行可以,或者换行时加空格)
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_path = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
# service postfix restart
5、测试邮件服务器是否可以支持认证
(注意测试时不要在同域内的用户发送邮件,要给其它区域发送邮件)
用本域内的openstack用户给wind@winthcloud.com发送邮件
[root@mail ~]# telnet mail.mysky.com 25
Trying 192.168.11.122...
Connected to mail.mysky.com (192.168.11.122).
Escape character is '^]'.
220 Welcome to our mail.mysky.com ESMTP,Warning: Version not Available!
ehlo mail.mysky.com
250-mail.mysky.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:openstack@mysky.com
250 2.1.0 Ok
rcpt to:wind@winthcloud.com
450 4.1.2 <wind@winthcloud.com>: Recipient address rejected: Domain not found
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail ~]#
(可以看出收件人的地址被拒绝,就是说服务器不给中继)
再次用上边的用户给wind@withcloud.com邮箱发送邮件
注意在telenet认证用户时用户名是以base64编码输入的所以需要将用户的登录名和密码
转译成base64编码 我这里使用的是用户openstack 密码mypostuser
[root@mail ~]# echo -n "openstack" | openssl base64
b3BlbnN0YWNr
[root@mail ~]# echo -n "mypostuser" | openssl base64
bXlwb3N0dXNlcg==
[root@mail ~]#
登录用户进行测试从openstack用户给wind@withcloud.com发送邮件
[root@mail ~]# telnet mail.mysky.com 25
Trying 192.168.11.122...
Connected to mail.mysky.com (192.168.11.122).
Escape character is '^]'.
220 Welcome to our mail.mysky.com ESMTP,Warning: Version not Available!
ehlo mail.mysky.com
250-mail.mysky.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
b3BlbnN0YWNr (这里所输入的便是base64编码的openstack)
334 UGFzc3dvcmQ6
bXlwb3N0dXNlcg== (这里所输入的便是base64编码的openstack的密码)
235 2.7.0 Authentication successful
mail from:openstack@mysky.com
250 2.1.0 Ok
rcpt to:wind@winthcloud.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject:Hello
test
.
250 2.0.0 Ok: queued as 15519B0004B
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail ~]#
至此可以看出postfix可以进行用户认证后才可以发送邮件
(但是目前邮件服务器虽然可以工作,但是无法限制域内用户冒名其它用户发送邮件)
(这里只是为了理解邮件服务器是如何进行认证的)
总结: 上一次未编译安装成功的原因是因为版本问题,这次重新编译旧版本后可正常使用
本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1886682如需转载请自行联系原作者
Winthcloud