我有Postfix安装程序在CentOS盒子上提供多个虚拟域,并且所有的function都按预期工作。 客户端的login通过sasl2(saslauthd)和pam_mysql进行身份validation。 而当login尝试失败,saslauthd报告“saslauthd:pam_mysql – SELECT返回没有结果”。
然而,偶尔我得到字典式的攻击,虽然这些攻击从来没有成功,但我想限制sasl / pam_mysql重试。
请注意,我不想限制客户端会话和连接的数量。 目标是限制每封电子邮件的最大失败login尝试次数。
一些,但不限于,我试过的来源
login尝试失败失败后,可以使用pam_tally2(8) PAM模块来拒绝对帐户的访问,这听起来像是你想要做的。 如果你当前的设置是通过PAMauthentication,那么这应该工作得很好。
本文有一些configuration示例。
你提到你已经看过了PAM SAG ,它logging了pam_tally2 ,但是你没有说明它为什么没有帮助。 如果你已经看过这个模块,并认为它不能满足你的需求,那么如果你更新你的问题来说明为什么其他解决scheme不能解决问题,这将会有所帮助。
以下是使用Cyrus SASL2 sasl2-sample-server和sasl2-sample-client程序sasl2-sample-client 。
在/etc/pam.d/sample我有:
auth required pam_tally2.so deny=3 unlock_time=300 auth sufficient pam_mysql.so config_file=/etc/pam_mysql.conf auth required pam_deny.so account required pam_mysql.so config_file=/etc/pam_mysql.conf
和/etc/pam_mysql.conf看起来像这样:
users.database=pamuser users.table=pamuser users.db_user=pamuser users.db_passwd=pamuser users.user_column=user users.password_column=password users.password_crypt=plain verbose=1
我有一个与表pamuser数据库pamuser看起来像这样:
mysql> select * from pamuser; +------+----------+ | user | password | +------+----------+ | lars | lars | +------+----------+
在/etc/sasl2/sample.conf我有:
pwcheck_method: saslauthd mech_list: plain
我开始像这样saslauthd :
saslauthd -a pam
我启动sasl2-sample-server :
sasl2-sample-server -p 9999 -m plain -s sample
我尝试使用sasl2-sample-client身份validation,首先使用正确的密码:
$ sasl2-sample-client -p 9999 localhost receiving capability list... recv: {5} plain plain please enter an authentication id: lars please enter an authorization id: lars Password: send: {5} PLAIN send: {1} Y send: {14} lars[0]lars[0]lars successful authentication closing connection
太好了,工作。 现在我要三次input错误的密码
…好吧,那很快。 现在pam_tally2显示失败:
# pam_tally2 Login Failures Latest failure From lars 3 07/31/13 12:17:00 unknown
如果我再次使用正确的密码login,我会被拒绝:
$ sasl2-sample-client -p 9999 localhost . . . lars[0]lars[0]lars authentication failed closing connection
pam_tally2logging以下内容:
Jul 31 12:18:01 madhatter saslauthd[14122]: pam_tally2(sample:auth): user lars (1000) tally 4, deny 3
并且pam_tally2命令显示增加的故障计数:
# pam_tally2 Login Failures Latest failure From lars 4 07/31/13 12:18:01 unknown
在那里你可以得到一个整合pam_tally2和pam_mysql的完整例子。 如果我要等五分钟,或运行pam_tally2 -u lars -r ,我将能够再次login。