首页 > 系统相关 >Linux中Postfix邮件认证配置(五)

Linux中Postfix邮件认证配置(五)

时间:2023-07-07 19:11:33浏览次数:49  
标签:Postfix smtpd 认证 postfix localhost Linux sasl root 邮件

摘自:http://www.ywnds.com/?p=1784

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已安装

 

 
1 2 3 4 5 6 7 [root@localhost ~]# 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认证

 
1 2 3 4 [root@localhost ~]# postconf -a cyrus dovecot   #默认支持cyrus和dovecot这两种认证方式

③Postfix主配置添加以下内容

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [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.ywnds.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支持哪些认证机制

 
1 2 3 [root@localhost ~]# saslauthd -v saslauthd 2.1.23 authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap

⑤Postfix开启基于SASL用户认证

这里介绍2种认证方式,saslauthd和auxprop,一个是使用系统的账号来做认证,一个使用外部的账户来做认证,对于安全性来说,当然是使用外部的账号更安全了,这里介绍的使用sasldb2数据库,mysql的方式暂不介绍。2种方式人选其一即可。

Saslauthd

 
1 2 3 4 [root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf pwcheck_method: saslauthd mech_list: PLAIN LOGIN #登录方式

Auxprop

 
1 2 3 4 5 [root@localhost ~]# 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

 
1 2 3 4 [root@localhost ~]# vim /etc/sysconfig/saslauthd SOCKETDIR=/var/run/saslauthd #MECK= pam MECK = shadow

Auxprop

 
1 2 3 [root@localhost ~]# vi /etc/sysconfig/saslauthd #MECH= FLAGS=sasldb

 

 
1 2 3 4 5 6 7 8 9 [root@localhost ~]# saslpasswd2 -c -u 'ywnds.com' redis   #执行之后输入2次密码就可以了 [root@localhost ~]# sasldblistusers2   #查看添加的用户 [root@localhost ~]# saslpasswd2 -d [email protected]   #删除用户 [root@localhost ~]# chown postfix:postfix /etc/sasldb2 [root@localhost ~]# chmod 640 /etc/sasldb2   #数据库权限修改

⑦重启服务

 
1 2 3 [root@localhost ~]# /usr/sbin/postfix reload [root@localhost ~]# service saslauthd restart [root@localhost ~]# chkconfig saslauthd on

测试账号

 
1 2 [root@localhost ~]# 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用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如[email protected];也可以只使用域名,如magedu.com;还可以只有用户名的部分,如marion@

案例

1.这里以禁止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重新载入配置文件即可进行发信控制的效果测试了

 

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重新载入配置文件即可进行发信控制的效果测试了

 

标签:Postfix,smtpd,认证,postfix,localhost,Linux,sasl,root,邮件
From: https://www.cnblogs.com/LiuYanYGZ/p/17535864.html

相关文章

  • Linux中Postfix虚拟用户及虚拟域(六)
    摘自:http://www.ywnds.com/?p=1797 Postfix基于虚拟用户虚拟域的邮件架构 上图是一个几乎完整的邮件系统架构图,这里基于Mysql数据库进行用户认证,不管是Postfix、Dovecot、webmail都需要去Mysql数据库中进行用户认证。1、用户可以基于outlook连接postfix然后通过Courier-au......
  • CygWin:windows上运行类linux命令
    CygWin是一个在Windows平台上运行的类UNIX模拟环境,是CygnusSolutions公司开发的自由软件。它提供了类似于Linux系统的终端环境和工具,使用户可以在Windows平台上运行Unix-like的程序,如Bash、awk、sed和grep等。下载setup.exe安装Cygwin,您需要下载setup.exe,此程序根据您选择的软......
  • Linux中Postfix邮件安装配置(二)
    摘自:http://www.ywnds.com/?p=1764Postfix安装配置本套邮件系统的搭建,从如何发邮件到收邮件到认证到虚拟用户虚拟域以及反病毒和反垃圾邮件等都有详细的介绍。在搭建过程中必须的参数解释以及原理都有告诉,这样才能更好地理解邮件系统。一、卸载自带postfix 123......
  • linux环境变量配置文件
    在linux系统中有很多地方可以配置环境变量,有时候我们需要增加一个或者查找具体是谁修改了环境变量,往往找不到地方。这里列举一下有哪些文件会影响环境变量。配置文件正常情况,linux系统启动的时候会按照如下加载环境变量/etc/environment/etc/profile/etc/bash.bashrc/etc/z......
  • linux HAproxy
     HAproxy服务可以完成负载均衡,和反向代理,不仅可以完成几十万的高并发请求,而且可以完成保护真实服务器。 目录一、HAProxy概念二、HAProxy主要特性三、HAProxy负载均衡策略四、LVS、nginx和HAProxy区别五、部署HAproxy六、日志分析七、总结        ......
  • Linux | curl命令详解
    curl是一个命令行访问URL的计算机逻辑语言的工具,发出网络请求,然后得到数据并提取出,显示在标准输出“stdout”上面,可以用它来构造httprequest报文,curl(CommandLineUniformResourceLocator),即在命令行中利用URL进行数据或者文件传输。在Linux中curl是一个利用URL规则在命令行......
  • 如何利用 Python 自动发邮件,打工人福音
    在工作中,每天或者每周结束的时候我们都会发送相应的日报或者周报给上级领导,来汇报你做了那些工作,可是汇报工作内容的时候我们始终都是打开邮箱、写入内容,发送和抄送给固定的人,那么这么繁琐并且重复的一件事,我们能不能使用程序来简化?答案是可以的,接下来我们就使用Python来操作......
  • Linux修改ip
    1、打开终端;2、在终端执行“vi/etc/sysconfig/network-scripts/ifcfg-eth0”命令;3、点击i进入编辑模式,修改IPADDR、NETMASK等项的值;4、esc退出编辑模式,shift+:,输入x就保存好了;5、重启网卡:servicenetworkrestart;6、检查ip是否更新成功:ifconfig-a......
  • linux环境安装golang
    在使用pprof工具分析性能时,发现我们的环境上默认没有装go,所以执行不了gotoolpprof命令,于是自己手动装了下。步骤如下:首先下载一个对应系统架构的golang包,这里我用的是arm包,装的1.14.12版本。(见附件)。在环境上创一个个人目录,把包传上去,然后执行以下命令解压到/usr/local目录下(官......
  • 大模型复现实践记录-在linux环境4090GPU(24G)
    chatglm-6btiger-7b......