Postfix部署【5】认证配置

一、Postfix+Dovecot+Sasl 工作原理


1.A用户使用MUA客户端借助smtp协议登陆smtpd服务器,需要先进行用户和密码认证,而SMTPD服务器端支持sasl认证,例如有一个sasl客户端,就会去连接SASL。当SASL接受到验证请求时就会根据验证方式去进行验证,常用的有PAM,passwd等。验证成功后就会返回给Smtpd服务器。而smtpd就会允许A用户登陆发送邮件。

2.Smtpd服务器接受到邮件转发请求后,查看邮件是本域的还是外部域的,如果是本域内的用户,就会开启MDA进程并进行邮件投递到用户的邮箱。

3.B用户使用MUA客户端借助pop3协议登陆dovecot服务器,需要先进行用户和密码认证,而Dovecot服务器端本身就有sasl认证的功能,而根据设置的认证方式进行用户和密码的认证。认证成功之后用户登录,Dovecot就会用MDR工具去用户邮箱中取回邮件并下载到用户的客户端本地进行查看。

二、Postfix+SASL 进行用户发邮件认证


通过验证配置可以发现,如果想发送邮件给外部(中继邮件)基本配置只能在mynetwork规定的ip范围内使用。这个方式在现实中也是不可行的。互联网上常用的方式是通过账号的认证方式允许中继邮件。但Postfix本身没有认证功能所以只能借助于第三方认证组件SASL来实现。与Postfix配合较好的SASL有:dovecot-SASL和cyrus-SASL,以及courier-authlib这几款组件。各有千秋,使用哪个根据实际选择即可。

  • 确定cyrus-sasl已安装

    $ rpm -qa | grep  cyrus-sasl
    cyrus-sasl-gssapi-2.1.23-13.el6_3.1.x86_64
    cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64
    cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64
    cyrus-sasl-2.1.23-13.el6_3.1.x86_64
    cyrus-sasl-md5-2.1.23-13.el6_3.1.x86_64
    cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64
    
  • 确定Postfix支持sasl认证

    $ postconf -a
    cyrus
    dovecot
    	//默认支持cyrus和dovecot这两种认证方式
    
  • Postfix主配置添加以下内容

    [root@localhost ~]# vim /etc/postfix/main.cf
    ###################CYRUS-SASL################
    broken_sasl_auth_clients = yes
      // 定义是否支持像outlook、foxmail等非标准协议认证
    smtpd_sasl_auth_enable = yes
      // 开启sasl验证用户功能
    smtpd_sasl_local_domain = $myhostname
      // 用于识别本地主机
    smtpd_sasl_security_options = noanonymous
      // 不支持匿名用户
    smtpd_sasl_path = smtpd
      // 指定使用sasl的程序名
    smtpd_banner = welcome to smtp.baofeng.com
      // 定义telnet连接时显示信息
    smtpd_client_restrictions = permit_sasl_authenticated
      // 用于限制客户端连接服务器
    smtpd_sasl_authenticated_header = yes
      // 从头信息查找用户名
    smtpd_sender_restrictions = permit_mynetworks,reject_sender_login_mismatch
      // 定义发件人规则
    smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated, reject_invalid_hostname,reject_unauth_destination
      // 定义收件人规则
      // permit_mynetworks:允许本地网络
      // permit_sasl_authenticated:允许sasl认证过的用户发送邮件
      // reject_unauth_destination:拒绝没有经过认证的目标地址(这个一定要放在最后)
      // reject_invalid_hostname:HELO命令中的主机名称无效时返回501
      // reject_non_fqdn_hostname:HELO命令中的主机名称不是FQDN形式则返回504
      // reject_non_fqdn_recipient:收件地址不是FQDN则返回504
      // reject_non_fqdn_sender:发件地址不是FQDN则返回504
      // reject_unauth_pipelining:拒绝不守规定的流水线操作
      // reject_unknown_client:DNS查不出客户端IP的PTR记录时拒绝
      // reject_unknown_hostname:HELO命令中的主机名称没有A和MX记录时拒绝
      // reject_unknown_recipient_domain:收件人地址的网域部分查不出有效的A或MX记录时拒绝
      // reject_unknown_sender_domain:发件人地址的网域部分查不出有效的A或MX记录时拒绝
    
  • 查看SASL支持哪些认证机制

    $ saslauthd -v
    saslauthd 2.1.23
    authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap
    
  • Postfix开启基于SASL用户认证
    这里介绍2种认证方式,saslauthd和auxprop,一个是使用系统的账号来做认证,一个使用外部的账户来做认证,对于安全性来说,当然是使用外部的账号更安全了,这里介绍的使用sasldb2数据库,mysql的方式暂不介绍。2种方式任选其一即可。

    Saslauthd

    $ vim /usr/lib64/sasl2/smtpd.conf
    pwcheck_method: saslauthd
    mech_list: PLAIN LOGIN
    	// 登录方式
    

    Auxprop

    $ vim /usr/lib64/sasl2/smtpd.conf
    pwcheck_method: auxprop
    auxprop_plugin: sasldb
    mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
    	// 登录方式
    
  • SASL 配置文件 /etc/sysconfig/saslauthd
    SASL只是个认证框架,实现认证的是认证模块,而pam是sasl默认使用的认证模块。如果使用shadow做认证的话直接修改就可以不需要做其他任何配置了。

    Saslauthd

    $ vim /etc/sysconfig/saslauthd
    SOCKETDIR=/var/run/saslauthd
    #MECK= pam
    MECK = shadow
    

    Auxprop

    $ vi /etc/sysconfig/saslauthd
    #MECH=
    FLAGS=sasldb
    
    
    $ saslpasswd2 -c -u 'baofeng.com' redis
    	//执行之后输入2次密码就可以了
    $ sasldblistusers2
    	//查看添加的用户
    $ saslpasswd2 -d redis@baofeng.com
    	//删除用户
    $ chown postfix:postfix /etc/sasldb2
    $ chmod 640 /etc/sasldb2
    	//数据库权限修改
    
  • 重启服务

    $ /usr/sbin/postfix reload
    $ service saslauthd restart
    $ chkconfig saslauthd on
    
    测试账号	
    $ testsaslauthd -u hadoop -p hadoop
    0: OK “Success”
    

三、SMTP 认证指令


在这里插入图片描述

四、Postfix内部邮件过滤


除了在上面配置文件中使用的一些过滤指令外,管理员也可以使用访问表(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@

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

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

    172.16.100.66 REJECT

    (2) 将此文件转换为hash格式产生一个access.db文件

    postmap /etc/postfix/access

    (3) 配置postfix使用此文件对客户端进行检查编辑/etc/postfix/main.cf文件添加如下参数:

    smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

    (4) 让postfix重新载入配置文件即可进行发信控制的效果测试了

  • 案例二
    这里以禁止通过本服务器向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重新载入配置文件即可进行发信控制的效果测试了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值