一、为postfix开启基于cyrus-sasl的认证功能。

修改/etc/sysconfig/saslauthd文件中的

MECH=pam

改为

MECH=shadow

启动saslauthd

service saslauthd start

验证是否能够使用系统上的账号密码来进行认证

testsaslauthd -u user -p passwd

若认证通过,则提示:0,OK,"Success",

认证失败会提示:0,NO,"authentication failed",此时检查一下原因

可能有两种,一种是配置文件里选项写错,再次检查配置文件

另一种是SELinux限制,可以把SELinux设置为Permissive

或者setsebool -P allow_saslauthd_read_shadow 1,即可解除SELinux的限制

2. 使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:

# postconf  -a

cyrus

dovecot

如果输出结果没有cyrus,则可能的原因是postfix编译时cyrus-sasl没有安装,或者sasl的lib文件路径写错,64位系统的lib文件路径是/usr/lib64/sasl2

3. #vim /etc/postfix/main.cf

添加以下内容:

############################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!

备注:新版本的smtpd.conf文件在/etc/sasl2/目录下,

vim /etc/sasl2/smtpd.conf

添加如下内容:

pwcheck_method: saslauthd

mech_list: PLAIN LOGIN

让postfix重新加载配置文件

#/usr/sbin/postfix reload

# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 Welcome to our mail.fei.com ESMTP,Warning: Version not Available!

ehlo mail.fei.com

250-mail.example.com

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH PLAIN LOGIN

250-AUTH=PLAIN LOGIN               (请确保您的输出以类似两行,表明已经开始支持sasl认真)

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

auth login                                        (使用密码验证方式登陆)

334 VXNlcm5hbWU6

ZmVp                                               (base64加密后的用户名)

334 UGFzc3dvcmQ6

OTEwMzIz                                       (base64加密后的密码)

235 2.7.0 Authentication successful

mail from:aaa@fei.com

250 2.1.0 Ok

rcpt to:bbb@fei.com

250 2.1.5 Ok

data

354 End data with .

This is a test mail.

.

250 2.0.0 Ok: queued as 7B0EA1A0B42

测试可以正常发送邮件。

二、实现postfix基于客户端的访问控制

1、基于客户端的访问控制概览

postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制。客户端判别机制可以设定一系列客户信息的判别条件:

smtpd_client_restrictions

smtpd_data_restrictions

smtpd_helo_restrictions

smtpd_recipient_restrictions

smtpd_sender_restrictions

上面的每一项参数分别用于检查SMTP会话过程中的特定阶段,即客户端提供相应信息的阶段,如当客户端发起连接请求时,postfix就可以根据配置文件中定义的smtpd_client_restrictions参数来判别此客户端IP的访问权限。相应地,smtpd_helo_restrictions则用于根据用户的helo信息判别客户端的访问能力等等。

如果DATA命令之前的所有内容都被接受,客户端接着就可以开始传送邮件内容了。邮件内容通常由两部分组成,前半部分是标题(header),其可以由header_check过滤,后半部分是邮件正文(body),其可以由check_body过滤。这两项实现的是邮件“内容检查”。

postfix的/etc/main.cf默认配置如下:

smtpd_client_restrictions =

smtpd_data_restrictions =

smtpd_end_of_data_restrictions =

smtpd_etrn_restrictions =

smtpd_helo_restrictions =

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

smtpd_sender_restrictions =

这限制了只有mynetworks参数中定义的本地网络中的客户端才能通过postfix转发邮件,其它客户端则不被允许,从而关闭了开放式中继(open relay)的功能。

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;还可以只有用户名的部分,如marion@。

访问表:/etc/postfix/access

2、实现示例1

这里以禁止192.168.10.11这台主机通过工作在192.168.10.1上的postfix服务发送邮件为例演示说明其实现过程。访问表使用hash的格式。

(1)首先,编辑/etc/postfix/access文件,以之做为客户端检查的控制文件,在里面定义如下一行:

192.168.10.11  REJECT

(2)将此文件转换为hash格式

# postmap /etc/postfix/access

(3)配置postfix使用此文件对客户端进行检查

编辑/etc/postfix/main.cf文件,添加如下参数:

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

(4)让postfix重新载入配置文件即可进行发信控制的效果测试了,可以从下图中看到该客户端被拒绝发送邮件。

3、实现示例2

这里以禁止通过本服务器向microsoft.com域发送邮件为例演示其实现过程。访问表使用hash的格式。

(1)首先,建立/etc/postfix/denydstdomains文件(文件名任取),在里面定义如下一行:

microsoft.com REJECT

(2)将此文件转换为hash格式

# postmap /etc/postfix/denydstdomains

(3)配置postfix使用此文件对客户端进行检查

编辑/etc/postfix/main.cf文件,添加如下参数:

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/denydstdomains, permit_mynetworks, reject_unauth_destination

(4)让postfix重新载入配置文件即可进行发信控制的效果测试了,从下图中可以看到,收信人是microsoft.com域的时候确实被拒绝发送了。

4、检查表格式的说明

hash类的检查表都使用类似如下的格式:

pattern   action

检查表文件中,空白行、仅包含空白字符的行和以#开头的行都会被忽略。以空白字符开头后跟其它非空白字符的行会被认为是前一行的延续,是一行的组成部分。

(1)关于pattern

其pattern通常有两类地址:邮件地址和主机名称/地址。

邮件地址的pattern格式如下:

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

domain.tld   用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址;

user@ 用于匹配以此作为邮件地址中的用户名部分的所有邮件地址;

主机名称/地址的pattern格式如下:

domain.tld   用于匹配指定域及其子域内的所有主机;

.domain.tld   用于匹配指定域的子域内的所有主机;

net.work.addr.ess

net.work.addr

net.work

net        用于匹配特定的IP地址或网络内的所有主机;

network/mask  CIDR格式,匹配指定网络内的所有主机;

(2)关于action

接受类的动作:

OK   接受其pattern匹配的邮件地址或主机名称/地址;

全部由数字组成的action   隐式表示OK;

拒绝类的动作(部分):

4NN text

5NN text

其中4NN类表示过一会儿重试;5NN类表示严重错误,将停止重试邮件发送;421和521对于postfix来说有特殊意义,尽量不要自定义这两个代码;

REJECT optional text...   拒绝;text为可选信息;

DEFER optional text...    拒绝;text为可选信息;

linux+sasl认证失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想相关推荐

  1. pxe安装linux dhcp失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    原理有必要说明一下           (百度偷来的) 原理和概念: 1.1 什么是PXE 严格来说,PXE 并不是一种安装方式,而是一种引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含 ...

  2. linux dhcp 续租失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    1.Neutron的问题 openvswitch卡死导致主机所有网络中断 问题:L3 agent down了,所有的网络连接不上,L3所在的物理机点的公网IP地址访问不了 dhcpagent 服务器d ...

  3. linux 信号量semget,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    semget() 可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集: 系统调用:semget(); 原型:intsemget(key_t key,int nsems ...

  4. linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    网上找了很多文档都访问不了salt-api,搞了好半天,终于弄好了,写个笔记,方便以后查询 如果需要通过第三方来调用SaltStack时,使用SaltStack自带的Python API并不能很好的满 ...

  5. linux 建立vnc,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    vncserver的配置 vncserver:就是以图形化的方式去远程登录控制主机 由于linux的版本不一样安装的包也可能有所不同,其实就是名字不一样而已, 不管是linux的什么版本,如果你想安装 ...

  6. linux续行符号,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    常见的操作系统: centos:企业 Linux-----Community Enterprise Operating System----开源免费 Redhat enterprise Linux(R ...

  7. linux vbox 不能使用scsi_id 查看uuid,51CTO博客-专业IT技术博客创作平台-技术成就梦想...

    今天在搭建RAC的时候,使用udev方式来创建ASM磁盘,执行/sbin/scsi_id命令不知道啥原因,死活获取不到UUID,执行结果啥也不显示. [root@seiang2 ~]# scsi_id ...

  8. linux主节点启动nfs,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    Windows系统之间下以实现文件和目录的共享,那么在linux系统下面是否也可以实现了,我们就测试一下: 在linux下面实现目录共享的软件是nfs 要配置nfs服务首先要配置rsh服务才可以,具体 ...

  9. linux grep 快速,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    什么是grep? grep (global search regular expression(RE) and print out the line,其全称意义为全局搜索正则表达式,并打印出来.是一种 ...

最新文章

  1. 这是一个好问题:既然机器可以学习,它们能忘掉吗?
  2. 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别
  3. EM算法--应用到三个模型: 高斯混合模型 ,混合朴素贝叶斯模型,因子分析模型...
  4. 莫名其妙的突然想学日语了, 开始接触日语,希望能坚持下去。
  5. lazyload延迟加载组件
  6. Vue.js 进入/离开 列表过渡
  7. SEO:影响网站排名的一些问题
  8. 架WSUS服务器 内网自动打补丁
  9. C语言字符串操作常用库函数
  10. FTPClient登录慢的问题
  11. Android之华为平板打日志提示Permission denied
  12. ActiveMQ –经纪人网络解释–第2部分
  13. 大数据“高烧不断”,“得数据者得天下”的关键在哪?
  14. OpenResty的现状、趋势、使用及学习方法
  15. HDU——3579 Hello Kiki
  16. Java从入门到精通
  17. 2021-11-19 工作记录--apiCloud-YDUI下拉框
  18. 深度学习视觉领域常用数据集汇总
  19. 固态硬盘能不能提高计算机速度,固态硬盘掉速如何解决?几招轻松提升SSD速度方法 (全文)...
  20. IIS启动失败,发生意外错误 0x8ffe2740的解决方法

热门文章

  1. 使用嵌套循环,打印 5 行 5 列的直角三角形
  2. Java的代码书写规范
  3. php简易投票系统设计,如何使用php做出简易在线投票系统
  4. matlab 计算数据转折点,计算轨迹(路径)中的转折点/枢轴点
  5. apple pay php 文档,Apple Pay 终于可以支付 iTunes、App Store 中的内容了
  6. python链表结构_CodeSalt | Python数据结构的实现 — 链表
  7. c++ 协程_Python3 协程(coroutine)介绍
  8. 以太网的分层架构_【新能源汽车专题】智能车时代的核心,电子架构系统深度解读,国内8股进入全球产业链(名单)...
  9. vue中集合取第一个_快速学习Vue框架(知识点集合)
  10. springboot 打印slf4_SpringBoot里slf4j日志功能的默认实现