我在 CentOS 机器上设置了 Postfix 来服务多个虚拟域 - 并且一切工作正常。客户端的登录通过 sasl2 (saslauthd) 和 pam_mysql 进行身份验证。当登录尝试失败时,saslauthd 会报告“saslauthd:pam_mysql - SELECT 没有返回结果。”
然而,偶尔我会遇到字典攻击,尽管这些攻击从未成功,但我还是想限制 sasl/pam_mysql 重试次数。
请注意,我不想限制客户端会话或连接的数量。目标是限制每封电子邮件的最大登录失败次数。
我尝试过的一些来源(但不限于此)
- www.postfix.org/SASL_README.html#saslauthd_pam
- www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html
- 限制失败的 SSH 登录
- www.lehman.cuny.edu/cgi-bin/man-cgi?pam_sm_authenticate+3
答案1
这pam_tally2(8)PAM 模块可用于在登录尝试失败次数过多后拒绝访问帐户,这听起来正是您想要做的。如果您当前的设置是通过 进行身份验证PAM
,那么这应该可以正常工作。
本文有一些配置示例。
你提到你看过聚丙烯酰胺凝胶电泳,其中记录了pam_tally2
,但您没有说明为什么它没有帮助。如果您已经查看过此模块并认为它不能满足您的需求,那么更新您的问题以说明为什么其他各种解决方案不起作用会有所帮助。
sasl2-sample-server
这是使用 Cyrus SASL2和程序的示例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
,首先使用正确的密码:
$ 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
太好了,成功了。现在我要输入三次错误的密码……
...好的,很快。现在pam_tally2
显示失败:
# pam_tally2
Login Failures Latest failure From
lars 3 07/31/13 12:17:00 unknown
如果我再次使用正确的密码登录,我会被拒绝:
$ sasl2-sample-client -p 9999 localhost
.
.
.
lars[0]lars[0]lars
authentication failed
closing connection
pam_tally2
记录以下内容:
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
,我就能再次登录。