如何让postfix支持cyrus-sasl认证

如何让postfix支持cyrus-sasl认证,第1张

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

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

另外说明一点,整个测试过程都是在RedHat7.1中进行的。

步骤:

1.检查系统中是否安装了cyrus-sasl-1.5.24

执行以下命令查看系统中是否安装了cyrus-sasl:

rpm –qa |grep cyurs

如果您看到以下提示,则说明已经安装了cyrus-sasl-1.5.24-17和cyrus-sasl-devel-1.5.24-17:

[root@test bye2000]# rpm -qa |grep sasl

cyrus-sasl-devel-1.5.24-17

cyrus-sasl-1.5.24-17

否则,请用rpm –ivh 命令先安装所需sasl-cyrus包。

2.编译postfix

首先,下载postfix-20010228-pl04.tar.gz,然后解开源代码包:

[root@test /tmp]# tar xvzf postfix-20010228-pl04.tar.gz

命令执行完后,会生成postfix-20010228-pl04目录,然后进入该目录:

[root@test /tmp]# cd postfix-20010228-pl04

接下来,依次执行以下命令编译postfix:

[root@test postfix-20010228-pl04]# make tidy

[root@test postfix-20010228-pl04]#make makefiles CCARGS='-DUSE_SASL_AUTH -I/usr/include' AUXLIBS='-L/usr/lib -lsasl'

[root@test postfix-20010228-pl04]# make

建立一个新用户“postfix”,该用户必须具有唯一的用户id和组id号,同时应该让该用户不能登录到系统,也即不为该用户指定可执行的登录外壳程序和可用的用户宿主目录。我们可以先用adduser postfix 添加用户再编辑/etc/passwd文件中的相关条目如下所示:

postfix:*:12345:12345:postfix:/no/where:/no/shell

最后执行安装脚本安装postfix

[root@test postfix-20010228-pl04]# ./INSTALL.sh

对于安装脚本的问题,可以统统回车确定。

3.配置postfix

安装完postfix后,就可以编辑/etc/postfix/main.cf文件来配置postfix了,关于如何配置

postfix,可以参考本站解决方案中的相关文章来获取更多的信息。

唯一需要补充的是,为了告诉postfix采用sasl来进行SMTP的用户认证,我们必须在/etc/postfix/main.cf文件的最后添加以下几行:

smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions = 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认证所采用的机制,这里是允许任何非匿名认证方法。

4.配置SASL

进入/usr/lib/sasl/目录,用touch新建这样一个文件:

[root@test sasl]# touch smtpd.conf

在该文件中加入以下内容:

[root@test sasl]# more smtpd.conf

pwcheck_method:pam

也就是指定通过PAM来进行用户认证。

5.配置PAM

进入/etc/pam.d/目录,用touch新建这样一个文件:

[root@test pam.d]# touch smtp

在该文件中加入如下内容:

[root@test pam.d]# more smtp

#%PAM-1.0

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

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

也即和/etc/pam.d/pop文件的内容是一致的。

6.修改/etc/shadow文件权限

因为PAM最终要去读取/etc/shadow文件的内容来进行用户认证,但是/etc/shadow文件

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

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

[root@test /etc]# chmod 640 /etc/shadow

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

[root@test /etc]# usermod -G root postfix

7.启动postfix

执行

[root@test /etc]# postfix start

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

Redhat 7.1下的Sendmail SASL认证的实现

Jephe Wu(吴阿亭)

一: 本文目的

利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,

以允许外面的用户以用户名和密码认证来relay邮件。

二: 网络系统

Redhat 7.1

__________

| |

| SMTP |

| Server |smtp.domain.com

________ |_________| (1.2.3.4)

Intranet | | | ________

_________________|Firewall|_____________|____________| Router|____Internet

| | |_______|

|________|

公司域名 : domain.com

用来认证的SMTP服务器全称域名: smtp.domain.com

三: 为什么要这样用?

假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构, 公司有统一的域名

domain.com,所有员工的邮件地址类似如staffname@domain.com。 但是分支机构大多数没

有专线接入,用ISDN或者普通拨号方式入网, 并且越来越多的ISP不允许以非ISP的邮件地址

域名后缀发送邮件, 即使你是他们的拨号用户。

还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,

则也同样需要一种认证方案去允许正确的用户relay邮件。

现在我们考虑做公司自己内部的邮件relay系统。

就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统'方式安装所有

需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay

自己公司的员工的邮件。

四: 配置Sendmail

1. 选择‘服务器系统'安装Redhat 7.1

2. 进入目录 /usr/share/sendmail-cf/cf 。

如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。

3. 修改文件redhat.mc如下

divert(-1)

dnl This is the sendmail macro config file. If you make changes to this file,

dnl you need the sendmail-cf rpm installed and then have to generate a

dnl new /etc/sendmail.cf by running the following command:

dnl

dnl m4 /etc/mail/sendmail.mc >/etc/sendmail.cf

dnl

include(`../m4/cf.m4')

VERSIONID(`linux setup for Red Hat Linux')dnl

OSTYPE(`linux')

define(`confDEF_USER_ID',``8:12'')dnl

undefine(`UUCP_RELAY')dnl

undefine(`BITNET_RELAY')dnl

define(`confAUTO_REBUILD')dnl

define(`confTO_CONNECT', `1m')dnl

define(`confTRY_NULL_MX_LIST',true)dnl

define(`confDONT_PROBE_INTERFACES',true)dnl

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

define(`ALIAS_FILE', `/etc/aliases')dnl

define(`STATUS_FILE', `/var/log/sendmail.st')dnl

define(`UUCP_MAILER_MAX', `2000000')dnl

define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl

define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl

define(`confAUTH_OPTIONS', `A')dnl

define(QUEUE_DIR,`/var/spool/mqueue/q*')

TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

DAEMON_OPTIONS(`Port=25,Name=MTA')dnl

DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl

dnl define(`confTO_QUEUEWARN', `4h')dnl

dnl define(`confTO_QUEUERETURN', `5d')dnl

dnl define(`confQUEUE_LA', `12')dnl

dnl define(`confREFUSE_LA', `18')dnl

dnl FEATURE(delay_checks)dnl

FEATURE(`no_default_msa',`dnl')dnl

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl

FEATURE(redirect)dnl

FEATURE(always_add_domain)dnl

FEATURE(use_cw_file)dnl

FEATURE(use_ct_file)dnl

FEATURE(local_procmail)dnl

FEATURE(`access_db')dnl

FEATURE(`blacklist_recipients')dnl

EXPOSED_USER(`root')dnl

dnl This changes sendmail to only listen on the loopback device 127.0.0.1

dnl and not on any other network devices. Comment this out if you want

dnl to accept email over the network.

dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')

dnl We strongly recommend to comment this one out if you want to protect

dnl yourself from spam. However, the laptop and users on computers that do

dnl not have 24x7 DNS do need this.

dnl FEATURE(`accept_unresolvable_domains')dnl

dnl FEATURE(`relay_based_on_MX')dnl

MAILER(smtp)dnl

MAILER(procmail)dnl

其中,我加了下面的行:

1. define(QUEUE_DIR,`/var/spool/mqueue/q*')

2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl

5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl

注:

第1行 我启动了多个邮件队列,希望得到更好的队列处理和性能改进。

第2,3行 移走前面的注释,打开相应的各种认证机制。

第4,5行 设置相应的MTA和MSA所在的端口号。

且注释出了

1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')

2. dnl FEATURE(`accept_unresolvable_domains')dnl

第1行 允许通过网络连接Sendmail。

第2行 禁止不可解析的域名relay邮件

最后运行

#m4 /etc/mail/sendmail.mc >/etc/sendmail.cf

写到/etc/sendmail.cf文件中

既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如

#cd /var/spool/mqueue

#mkdir q1 q2 q3 q4 q5 q6

这样Sendmail将会使用这六个目录做为队列目录,增加了性能。

五: 设置SASL认证方案

1. 运行下面的命令,确保SASL被编译进Sendmail.

#/usr/sbin/sendmail -d0.1 -bv root |grep SASL

输出应该类似如下面:

NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG

确保你能看见上面的文本中的 SASL

2. 测试端口25,确保输出AUTH提示行。

#telnet localhost 25

Trying 127.0.0.1...

Connected to smtp.domain.com.

Escape character is '^]'.

220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2Sun, 1 July 2001 17:56:54 -0800

EHLO localhost

250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-EXPN

250-VERB

250-8BITMIME

250-SIZE

250-DSN

250-ONEX

250-ETRN

250-XUSR

250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5

250 HELP

quit

221 2.0.0 smtp.domain.com closing connection

Connection closed by foreign host.

你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。

3. 增加SASL用户且更改密码

#/usr/sbin/saslpasswd jephe

Password: *******

Again (for verification): *******

#/usr/sbin/sasldblistusers

user: jephe realm: smtp.domain.com mech: DIGEST-MD5

user: jephe realm: smtp.domain.com mech: PLAIN

user: jephe realm: smtp.domain.com mech: CRAM-MD5

用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。

特别注意: 在下面的windows的Outlook Express中设置用户名和密码时

并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,

在这里是 jephe@smtp.domain.com作为用户名。

#chmod 400 /etc/sasldb

可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。

4. 更改默认的Redhat 7.1密码认证方法

默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了

增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。

#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面

pwcheck_method:sasldb

5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。

六: 设置Windows的Outlook Express。

1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中

的AUTH行输出PLAIN LOGIN即可。

2. 在‘工具'-‘帐号'-‘属性'-‘服务器‘-

'发送邮件服务器'中选中‘我的服务器需要认证'

然后在‘登录用户帐号'上填上

“你的用户名@你的realm冒号后面的服务器全称域名”

如:本文的情况是 jephe@smtp.domain.com

密码为你在前面输入的密码。

注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。

3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误

然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)

在后面表示是通 过允许的认证机制relay的邮件。

七: FAQ。

1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。

答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。

2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。

答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为

pwcheck_method:pam

则你就简单地用useradd增加一个系统用户并更改密码即可。

然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。

附加部分:

对前面两篇文章

VI的常见使用技巧 和 如何设置一个基本的OpenLDAP Server 的补充:

1. 用 %s/string1/string2/gc 提示你在遇到每个string1时是否改变为string2

2. 在用VI打开一个现有的文件后想不退出该文件而编辑另一个文件用

e filename 和 e #在两个文件间切换。

---------------

4) 如何记录LDAP查询Log且方便调试?

你可以在/etc/syslog.conf中加入

local4.* /var/log/openldap.log

然后每一次LDAP请求将会被记录进该文件,你也可根据该文件中的信息调试问题。

完 Jephe Wu (吴阿亭)

(一)安装

Windows环境下面分了CollabNet / Tigris.org(Apache2.2和Apache2.0) / SlikSVN / VisualSVN 5个链接,我选的是Tigris Apache2.2,下载一个目前最新的Setup-Subversion-1.6.6.msi,点击,一路安装即可,很简单。

开始菜单-》运行-》输入Cmd回车,敲“svn --version --quiet”,会得到SVN的版本号。

(二)配置

1、创建repository

Rrepository是存储数据的地方。

例如要在F:\svnroot下创建repository,就使用命令行svnadmin create f:\svnroot。如果执行正确的话,会在F盘下多一个SVNROOT的目录,目录下有4个目录和2个文件。

2、启动SVN服务

使用命令行 svnserve -d -r f:/svnroot,这样外部就可以它能够过客户端来访问了。

我运行完才发现,这样cmd窗口还不得不一直开着,很难看,当然一般大公司的代码服务器是24小时开着的。

上网搜了一下,也可以作为一个服务自动启动的。执行脚本 sc create svn binpath= "\"d:\Program Files\Subversion\bin\svnserve.exe\" --service -r\"f:/svnroot\"" displayname= "Subversion Server" depend= Tcpip start= auto 就可以将svnserve程序作为服务载入。安装路径和存储数据的目录要根据自己的情况修改。

执行完这个脚本,可以去管理工具-》控制面板-》服务那里找找Subversion Server,如果没启动就启动

3、基本设置

修改f:|svnroot\repos\conf\svnserve.conf,注释很详细。

[general]

anon-access = none

auth-access = write

password-db = passwd

authz-db = authz

realm = My First Repository

[sasl]

# use-sasl = true

# min-encryption = 0

# max-encryption = 256

期中,anon-access = none表示要用户名和密码,password-db = passwd表示passwd是存身份验证的用户名和密码。sasl,就是加密访问用的,一般也可以不用。

4、用户管理

在f:|svnroot\repos\conf\passwd里添加有权限的用户名和密码。例如添加用户yobin,密码123456,就这样:

[users]

# harry = harryssecret

yobin = 123456

hh = 111

ss = 222

5、分组管理和权限设置

如果是所有文件对用户都可见的话,上面几步也足够用了。但要想对一些人可见,一些人不可见的话,就要去修改authz文件了。

&别名:别名的引用

@用户组名:某组用户

$authenticated:所有已授权用户

$anonymous:匿名用户

* : 任何人

r:写权限

rw:读写权限

:不能访问(空,什么都不写)

设置用户权限的时候,'='左侧代表用户名称,可以是实际用户名,也可以是定义的用户组名,也可以是别名,但要用'@'作为前缀,或者是所有用户'*'。'='右侧代表设置的权限'r'、'rw'或者为空即代表用户对于该目录无任何权限。

authz文件中对版本库路径的表示方法。用'[/]'来表示版本库的根目录,如果有子目录foo,设置该目录权限时用'[/foo]'即可,其他任何目录都以'/'为版本根目录进行表示。注意了,别用”\“!!!

用户某个目录的权限是向子目录递归的。如果用户对于/foo目录有读写权限,则该用户对于foo目录下的所有子目录都有读写权限。如果不设置最上层的目录没有设置权限,那么就相当于不设置,禁止访问。

权限分配,只可以分配到某个目录,而不能到某个文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11319568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存