且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

菜鸟学Linux 第062篇笔记 再次postfix+dovecot+sasl(成功)

更新时间:2022-10-04 11:07:18

菜鸟学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