У меня есть установка Postfix, обслуживающая несколько виртуальных доменов в системе CentOS, и все работает, как ожидалось. Логин клиента аутентифицируется через sasl2 (saslauthd) и pam_mysql. И когда попытка входа в систему не удалась, saslauthd сообщает «saslauthd: pam_mysql - SELECT не вернул результата».
Однако время от времени я получаю атаки по словарю, и хотя эти атаки никогда не увенчались успехом, я хотел бы ограничить повторные попытки sasl / pam_mysql.
Обратите внимание, что я не хочу ограничивать количество клиентских сеансов или подключений. Цель состоит в том, чтобы ограничить максимальное количество неудачных попыток входа в систему по электронной почте.
Некоторые, но не ограничиваясь ими, источники, которые я пробовал
В pam_tally2 (8) Модуль PAM можно использовать для отказа в доступе к учетной записи после слишком большого количества неудачных попыток входа в систему, что похоже на то, что вы хотите сделать. Если ваша текущая настройка аутентифицируется через PAM
, тогда это должно работать нормально.
Эта статья есть несколько примеров конфигурации.
Вы упомянули, что просмотрели ПАМ САГ, какие документы pam_tally2
, но вы не сказали, почему это не помогло. Если вы уже просмотрели этот модуль и решили, что он не соответствует вашим потребностям, было бы полезно, если вы обновите свой вопрос, чтобы указать, почему другие различные решения не сработали.
Вот пример использования Cyrus SASL2 sasl2-sample-server
и 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
, Я смогу войти снова.