分享
 
 
 

在postfix中实现基于cyrus-sasl的SMTP认证

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

前言:

postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。下面一段话摘自postfix的官方站点(http://www.postfix.org):“postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真实一个让人吃惊的数字。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。”

全世界范围内的SMTP服务器与日俱增,但是这些SMTP服务器都有一个与生俱来的缺点,那就是没有任何的认证机制。因为在设计这些SMTP服务器时,全世界范围的Internet主机还不是很多,彼此间都有很高的可信任级别,所以没有全面考虑安全性问题。这种现象也可以在别的Internet协议中看到。

正是因为SMTP通讯过程缺乏认证机制,以及ip欺骗的容易实现,导致了以下两个方面的问题:SMTP服务器无法确认SMTP客户机的合法性;SMTP客户机也无法确认SMTP服务器的合法性。从而也就导致了用户可以不经过认证就发送邮件,用户可以冒名发送邮件,以及垃圾邮件的泛滥。

Postfix设置了好多选项让网络管理员来限制服务器资源的使用,以及确定用户的合法性。但遗憾的是,这些认证机制都是基于ip地址或者客户DNS信息。在客户ip地址固定的情况下,这些方法或许有一定的作用(虽然还是无法解决冒名发送邮件),但是在客户ip地址不固定的情况下,就很难通过这种机制来进行限制了。当然,现在也有一些其他的技术,比如POP-before-SMTP(在发信前收信)来解决这个问题,但是这需要运行额外的服务程序。并且用户在发行之前一定要先收信,这或多或少都会带来一些不方便。

好在有简单认证安全层(SASL),它提供了模块化的SMTP认证扩展,因此SMTP就可以在SASL之上构建自己的SMTP认证,因为可以通过开放式的机制和协议来建立认证会话。另外,SASL在实现了对PLAIN以及CRAM-MD5加密等协议的基础上,还提供了多种认证方法,比如通过Kerberos、用户数据库、passwd文件、PAM等。这样,SMTP程序不需要支持这些认证方法就可以实现多种认证方式。并且,SMTP在用户经过成功认证以后同样可以定义自己的访问策略来对用户访问进行控制。

当然,首先我们必须保证该SMTP服务器能够提供对SASL的支持

要求:

首先要保证您的postfix版本是snapshot-20000507及其以上的版本,从而保证postfix对SASL的支持。强烈建议您升级至postfix-20010228及其以上版本。可以从www.postfix.org下载postfix的源代码包,在测试过程中我使用的是postfix-2.3.-20060517-milter.tar.gz

然后,要保证您的SASL的版本是1.5.5及其以上版本,因为已经有报告称这些版本的SASL可以和postfix工作得很好。可以从ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/下载SASL,在测试过程中我使用的是cyrus-sasl-1.5.28.

整个测试过程是在FC3中进行的.

什么是sasl呢?

SASL(即Simple Authentication and Security Layer)是为基于连接协议提供辅助认证支持的一种方法。使用SASL认证库时,应用层协议通过插入相关的认证命令来获取服务器的访问授权,同时也可以协商协议交互时的增强保护措施。当使用协商的安全措施时,一个安全协议层会被插入到应用协议层与连接层之间。

步骤:

1.首先检查系统中是否装了Cyrus-sasl

rpm -qa |grep cyrus

检查结果是未安装,那么我接下来先安装Cyrus-sasl

a.tar -zxvf cyrus-sasl-1.5.28.tar.gz

b.cd

cyrus-sasl-1.5.28

c../configure --prefix=/usr/local

--sysconfdir=/usr/local/etc

--with-plugindir=/usr/local/lib/sasl

--with-dbpath=/usr/local/etc/sasldb

--includedir=/usr/local/include/sasl

--enable-static

--enable-login

--disable-plain

--disable-krb4

--disable-anon

--with-pwcheck=/var/pwcheck

--with-rc4=openssl

--disable-gssapi

--with-dblib=ndbm

各个选项的含义请运行./configure --help获取。--disable-plain在测试时可以不要,--enable-login是必需的,否则Outlook/Outlook Express客户端不能实现SMTP认证。SASL除了支持DB3、ndbm数据库外,还支持MySQL、LDAP1和LDAP2等。

d.编译makee.安装make install

cyrus-sasl安装完毕后下面我们将编译postfix

a.tar xvzf postfix-postfix-2.3.-20060517-milter.tar.gz

b.cd

postfix-2.3.-20060517-milter

c.make tidy

d. make makefiles CCARGS='-DUSE_SASL_AUTH -I/usr/include' AUXLIBS='-L/usr/lib -lsasl'

e.make

f. adduser -s /bin/false postfix

g. make install

接着为了告诉postfix采用sasl来进行SMTP的用户认证,我们必须用vi命令在/etc/postfix/目录下的main.cf文件的最后添加以下几行:

smtpd_sasl_auth_enable = yes?smtpd_delay_reject=yes?smtpd_recipient_restrictions = permit_mynetworks

permit_sasl_authenticated

= permit_auth_destination reject

broken_sasl_auth_clients = yes

smtpd_sasl_security_options = noanonymous

然后保存并退出,添加以上几行的详细说明如下:

smtpd_sasl_auth_enable:告诉SMTP客户,该SMTP服务器需要进行用户认证。

smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination

reject:仅仅中继通过SMTP认证的客户端邮件,以及接收本postfix为最后一站的邮件。

broken_sasl_auth_clients = yes:有一些Microsoft 的SMTP客户端,比如Outlook Express 4.X采用的是非标准的SMTP认证协议,将该选项设置为yes可以解决这类不兼容问题。

smtpd_sasl_security_options = noanonymous:控制本地SMTP认证所采用的机制,这里是允许任何非匿名认证方法。这样用户的postfix就支持smtp认证.

配置SASL:

a.cd

/usr/lib/sasl/

b.touch

smtpd.conf

c.more

smtpd.conf

d.vi

smtpd.conf插入pwcheck_method:pam(也就是通过PAM来进行用户认证)

什么是PAM呢?

PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。说白了就是一种可插入模块,是一个用于认证用户的灵活机制.

配置PAM

a.cd /etc/pam.d

b.touch smtp

c.more smtp

d.more pop

要将pop和smtp的内容设置相同:

auth required /lib/security/pam_stack.so service=system-authaccount required /lib/security/pam_stack.so service=system-auth

修改/etc/shadow文件权限

因为PAM最终要去读取/etc/shadow文件的内容来进行用户认证,但是/etc/shadow文件权限是设置为只有root用户可以读写,而我们的postfix是运行在postfix用户权限之下,所以我们要合理的设置/etc/shadow文件权限,以便让pam可以读取其内容。

执行以下命令,让root组也可以读取shadow

a.chmod 640 /etc/shadow

然后再将postfix用户加入root组,采用以下命令:

b.usermod -G root postfix

最后启动postfix

c.postfix start

这样,一个支持SMTP认证的postfix就开始工作了.

然后telnet本机的

25端口

a.telnet 127.0.0.1

b.ehlo 127.0.0.1ok大功告成,要是哪里有不对之处希望大家给予点拨斧正.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有