马哥linux高薪中级-POSTFIX邮件服务(二)

简介:

四、POSTFIX+CYRUS-SASL 结合实现用户身份认证


1、cyrus-SASL简介

Cyrus SASL介绍(翻译)

2、配置内容简介:

postfix——》/var/lib/sasl2/smtpd.conf

pwcheck_method : saslauthd

math_list :PLAIN LOGIN


3、服务脚本:saslauthd



1、启动SASL 服务

/etc/init.d/saslauthd

[root@37-test ~]# chkconfig --add saslauthd

[root@37-test ~]# chkconfig --list saslauthd

saslauthd       0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

[root@37-test ~]# chkconfig saslauthd on

[root@37-test ~]# chkconfig --list saslauthd

saslauthd       0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

[root@37-test ~]# service saslauthd start

正在启动 saslauthd:                                       [确定]

2、SASL配置文件

/etc/sysconfig/saslauthd


# Directory in which to place saslauthd's listening socket, pid file, and so

# on.  This directory must already exist.

SOCKETDIR=/var/run/saslauthd


# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list

# of which mechanism your installation was compiled with the ablity to use.

MECH=pam

表示支持的认证方式,默认为pam,建议为shadow(linux密码)认证,其他认证包括getpwent、kerberos5、rimap、ldap。

# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.

# DAEMONOPTS=--user saslauth


# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)

# for the list of accepted flags.

FLAGS=


3、查看postfix服务器端是否支持sasl

[root@37-test ~]# postconf -a

cyrus 就是表示支持sasl方式认证

dovecot


4、查看sasl的认证功能是否成功?

[root@37-test ~]# testsaslauthd -u gongbing -p 123123

0: OK "Success."

You have new mail in /var/spool/mail/root


5、为postfix开启基于cyrus-sasl的认证功能,为/etc/postfix/main.cf添加一下几行。(取消mynetworks的其他参数,只保留127.0.0.1/8,目的是实现sasl认证。)

############################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_application_name = smtpd

smtpd_sasl_path = smtpd


smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!


6、创建文件sasl配置文件/usr/lib/sasl2/smtpd.conf(此为32系统使用,我的是64位,所以用下面的配置文件),并添加一下两行内容:

[root@37-test ~]# vim /usr/lib64/sasl2/smtpd.conf

log_level = 3

pwcheck_method:saslauthd

mech_list:PLAIN LOGIN 两种认证机制


7、验证是否实现认证成功

[root@37-test ~]# telnet 10.40.0.37 25

Trying 10.40.0.37...

Connected to 10.40.0.37.

Escape character is '^]'.

220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!(postfix配置文件的欢迎信息)

ehlo localhost

250-37-test.localdomain

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH LOGIN PLAIN 此行表示认证功能开启

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN





smtp服务器的工作过程:

客户端要发送邮件先要和邮件服务器取得联系,通过helo指令来创建连接,然后通过mail from指令确定发送者信息、rcpt to 确定收件人信息、data确定邮件内容等情况。

可以通过

smtpd_helo_restrictions 参数来限定哪些用户可以发送helo指令。

smtpd_sender_restrictions 限定哪些用户可以发送mail from 指令

smtpd_recipient_restrictions 限定哪些用户可以发送rcpt to 指令,关键在于此参数。

smtpd_data_restrictions 限定哪些用户可以发送data指令

smtpd_client_restrictions 限定哪些用户可以发起服务器连接请求



访问表:postfix可以定义一个表,来定义哪些用户或者地址可以访问。

/etc/postfix/access——hash格式————/etc/postfix/access.db



postfix有多个内置的限制条件,如上面的permit_mynetworks和reject_unauth_destination,但是管理员也可以通过访问(查找)表(access map)来自定义限制条件,自定义访问表的条件通常使用check_client_access,check_helo_access,check_sender_access,check_recipient_access运行,他们后面通常跟上type:mapname格式的访问表类型和名称,其中,check_sender_access和check_recipient_access用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如admin@magedu.com,也可以使用域名如,magedu.com,或者用户名的部分,如admin。

具体格式如:

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

smtpd_helo_restrictions = check_helo_access mysql:/etc/postfix/mysql_user


实验1:

禁止10.40.0.57这台主机通过工作在10.40.0.37上的postfix服务器发送邮件,访问表使用hash的格式。

a、创建/etc/postfix/access文件,并作为客户端检查的控制文件,并定义一下内容:

[root@37-test ~]# vim /etc/postfix/access

10.40.0.57 REJECT                                                                     ACCES


b、将此文件转换成hash格式

[root@37-test ~]# postmap /etc/postfix/access 

[root@37-test ~]# ll /etc/postfix/

总用量 280

-rw-r--r--  1 root root 19594 2月   5 07:14 access

-rw-r--r--  1 root root 12288 2月   5 07:15 access.db



c、配置postfix使用此文件对客户端进行检查,编辑/etc/postfix/main.cf文件。

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access



d、查看测试结果

BingGongtekiMacBook-Pro:~ binggong$ telnet 10.40.0.37 25

Trying 10.40.0.37...

Connected to www1.dtedu.com.

Escape character is '^]'.

220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!

helo localhost

250 37-test.localdomain

mail from:gongbing@dtedu.com

250 2.1.0 Ok

rcpt to:gongbing

554 5.7.1 <unknown[10.40.0.57]>: Client host rejected: ACCESS(5)

data



实验2:

禁止通过本服务器向Microsoft.com域发送邮件,访问表使用hash格式

1、创建/etc/postfix/denydstdomains文件

[root@37-test ~]# vim /etc/postfix/denydstdomains


microsoft.com reject


邮箱地址的格式如下:

user@domain 用于匹配指定邮件地址

domain.com 用于匹配此域名结尾的所有邮件地址

user 用于匹配指定的主机名,用户名的邮件地址

动作的类型:

ok 接收匹配的地址

reject 拒绝匹配的地址

deffer 拒绝匹配的地址

2、转换文件格式

[root@37-test ~]# postmap /etc/postfix/denydstdomains 

[root@37-test ~]# ll /etc/postfix/denydstdomains

-rw-r--r--  1 root root    21 2月   5 07:25 denydstdomains

-rw-r--r--  1 root root 12288 2月   5 07:26 denydstdomains.db



3、配置main.cf文件对客户端的检查,注意访问表之间的先后顺序。

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/denydstdomains 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


4、重新加载配置文件并检查

BingGongtekiMacBook-Pro:~ binggong$ telnet 10.40.0.37 25

Trying 10.40.0.37...

Connected to www1.dtedu.com.

Escape character is '^]'.

220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!

helo localhost

250 37-test.localdomain

mail from:aaa    

250 2.1.0 Ok

rcpt to :gongbing@microsoft.com

501 5.5.4 Syntax: RCPT TO:<address>

data

554 5.5.1 Error: no valid recipients




实现sasl认证功能,这里实验条件默认情况下是不许发送邮件到外网,通过linux自带的用户账户及密码认证就实现了认证后发送邮件的功能。

[root@37-test ~]# telnet 10.40.0.37 25

Trying 10.40.0.37...

Connected to 10.40.0.37.

Escape character is '^]'.

220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!

helo 10.40.0.37

250 37-test.localdomain

mail from:gongbing

250 2.1.0 Ok

rcpt to:gongbing_shenlan@163.com

501 5.5.4 Syntax: RCPT TO:<address>

quit

221 2.0.0 Bye

Connection closed by foreign host.



[root@37-test ~]# telnet 10.40.0.37 25

Trying 10.40.0.37...

Connected to 10.40.0.37.

Escape character is '^]'.

220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!

auth login

334 VXNlcm5hbWU6 用户名为openssl base64位编码

Z29uZ2Jpbmc=

334 UGFzc3dvcmQ6 密码为openssl base64位编码

MTIzMTIz

235 2.7.0 Authentication successful

mail from:gongbing

250 2.1.0 Ok

rcpt to:gongbing_shenlan@163.com

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

ni hao a 

.

250 2.0.0 Ok: queued as 368F887A004

quit

221 2.0.0 Bye

Connection closed by foreign host.


openssl base64编码方法: 

BingGongtekiMacBook-Pro:~ binggong$ echo -n "123123" |openssl base64

MTIzMTIz

BingGongtekiMacBook-Pro:~ binggong$ echo -n "gongbing" |openssl base64

Z29uZ2Jpbmc=



本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1916983,如需转载请自行联系原作者

相关文章
|
19天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
41 5
linux系统服务二!
|
19天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
38 3
linux系统服务!!!
|
3月前
|
Linux
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
23天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
119 3
|
23天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
67 3
|
1月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
25 2
|
1月前
|
应用服务中间件 Linux Shell
Linux 配置 Nginx 服务的详细步骤,绝对干货
Linux 配置 Nginx 服务的详细步骤,绝对干货
72 0
|
2月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
387 3
|
2月前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
3月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?