Назад | Перейти на главную страницу

Как я могу ограничить количество неудачных попыток входа в систему sasl2 / pam_mysql?

У меня есть установка 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, Я смогу войти снова.