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

Как использовать PAM для ограничения неудачных попыток входа в систему по IP?

Я работаю над усилением защиты моего сервера от ежедневных попыток взлома, возникающих в тот момент, когда вы подключаете сервер к IP и даете ему доменное имя. Я получаю от 1 до 8 попыток грубой силы в день получить доступ к SSH либо как root, либо просто грубой силой, пробуя разные имена, и это происходит на сервере без публичной репутации (на нем нет крупных веб-сайтов и т. Д.). Из-за того, как у меня настроен мой SSH-сервер, я почти уверен, что эти попытки также потерпят неудачу, но мне действительно не нравится, когда люди пытаются.

Я, конечно, также установил ограничение скорости подключения для более чувствительных сервисов, включая SSH.

Чем занимаюсь сейчас:

Я вижу из своего журнала auth.log, что PAM получает удаленный IP-адрес тех, кто пытается войти в систему, и в настоящее время я использую сценарий, который периодически сканирует эти неудачные попытки и добавляет IP-блокировку брандмауэра.

Что бы я хотел сделать:

Я хочу сделать так, чтобы процесс запрета IP-адресов отвечал гораздо быстрее. Я хочу, чтобы модуль PAM не ждал, пока скрипт опроса его подберет, а подсчитывал успешные неудачные попытки с IP-адреса (не от службы или пользователя) и предпринимал некоторые действия, например:

Вопрос:

Есть ли уже хороший модуль PAM, который может записывать IP-адреса, не прошедшие аутентификацию, или мне нужно написать свой собственный?

Я рекомендую шататься ваши решения по безопасности. Безопасность лучше всего реализована в Слои, и имея одно решение означает, что у вас будет Единственная точка отказа.

Fail2Ban, как указано выше Джеффом Ферландом, является хорошим первым шагом решения. Он будет отслеживать ваши файлы журналов на предмет признаков атаки методом грубой силы и может быть настроен на обычное прослушивание PAM.

Но что произойдет, если этот файл журнала будет потерян? разрешения меняются? если изменится место назначения файла журнала? если отказал fail2ban? если обновление изменит то, как вы собираетесь работать? шаблон регулярного выражения должен быть обновлен? что произойдет, если целевой диск или раздел файла журнала заполнится? fail2ban становится бесполезным.


  • Introducing libpam_shield

Существует модуль PAM под названием pam_shield. это не только более эффективно (работает непосредственно на уровне входа в систему), но и использует базу данных быстрого доступа, которая может сохраняться при перезагрузке.

он использует меньше памяти и не требует работающей службы, которая может дать сбой. pam_shield также можно настроить для работы с вашей таблицей маршрутизации, а также с IPTables.

Как и в случае с Fail2Ban, вы даете ему время, чтобы рассмотреть возможность блокировки хоста. вы указываете максимальное количество попыток, которое может сделать удаленный хост, и период времени, на который их можно заблокировать.

Чтобы он хорошо работал с Fail2Ban, установите их в 1,5 раза больше, чем настроено в Fail2Ban. вы также можете продлить период запрета. таким образом, fail2ban забанит пользователя в первый раз ... и, если срок его бана истечет, и они будут снова пойманы, он будет банить его намного дольше во второй раз.

Вот ссылка на страницу руководства по файлам конфигурации: Shield.conf


  • Introducing pam_tally2

Вы также можете рассмотреть pam_tally2 для блокировки учетной записи определенного пользователя.

если учетная запись пользователя специально нацеленный, вам нужно будет заблокировать эту учетную запись пользователя и предотвратить вход в систему полностью или до тех пор, пока атака не будет устранена.

это особенно полезно на разделяемом сервере, когда атака исходит «изнутри». когда вы не можете заблокировать локальный хост (например, 127.0.0.1).

Надеюсь, это поможет! Я понимаю, что исходный пост уже устарел, но очень важно реализовать многослойную защиту ... и охватить все ваши базы! НЕ существует пакета, который можно просто установить, чтобы обезопасить вашу систему. даже не Fail2Ban.

Существует модуль PAM, который позволяет вам вести черный список, который называется Автоматический черный список PAM (pam_abl). До недавнего времени он не обновлялся какое-то время, но у него есть новый сопровождающий, который снова активно работает над ним.

Модуль всегда делал первый шаг в том, что вы хотели бы сделать, то есть он блокирует будущие попытки входа в систему с ошибочного и заблокированного IP-адреса. Однако эти попытки проходят через брандмауэр и снова возвращаются в PAM.

Хотя до сих пор нет встроенного способа взаимодействия с брандмауэром из самого модуля, теперь он может запускать произвольные команды, что также позволяет выполнять второй шаг.

Я запускаю команду, чтобы добавить запрещенный хост в ipset, который я настроил в моем брандмауэре.


Вот как я обрабатываю запрет PAM на брандмауэр:

В /etc/pam.d/sshd:

auth       include      system-remote-login
auth       required     pam_abl.so config=/etc/security/pam_abl.conf

в pam_abl.conf файл:

host_clr_cmd=ipset del blacklist %h; logger clear host %h
host_blk_cmd=ipset add blacklist %h; logger block host %h

Это с немедленным добавлением хоста, который не соответствует критериям для блокировки, добавлен в список ipset, который я заблокировал в iptables. Вы также можете напрямую удалить хост в iptables следующим образом:

host_blk_cmd=iptables --append INPUT --source %h --jump DROP; logger block host %h

Есть больше параметров конфигурации и настройки для брандмауэра, но это та часть, которая не дает запрещенным IP-адресам снова проходить через брандмауэр.

Хотя PAM может быть полезен для ограничения скорости входа в систему и настройки блокировки ( как заблокировать учетную запись пользователя linux после определенных неудачных попыток ), лучший инструмент для обработки нескольких попыток с одного и того же IP-адреса - это заблокировать его от сетевого трафика из-за множества последовательных попыток.

Итак, для этого ответ - не модуль PAM. Скорее используйте fail2ban.