FreeBSD: блокируем bruteforce перебор паролей с помощью pam_af

Думаю любой, кто администрирует *nix сервера обращал внимание на множество ботов, пытающихся подобрать пароль к ssh. Достаточно взглянуть на auth.log:

Sep  5 16:25:56  sshd[10571]: Invalid user nagios from 196.46.242.38
Sep  5 16:28:07  sshd[10573]: Invalid user nagios from 196.46.242.38
Sep  5 16:30:15  sshd[10803]: Invalid user nagios from 196.46.242.38
Sep  5 16:32:24  sshd[10805]: Invalid user nagios from 196.46.242.38
Sep  5 16:34:40  sshd[10831]: Invalid user oracle from 196.46.242.38
Sep  5 16:36:53  sshd[11061]: Invalid user oracle from 196.46.242.38
Sep  5 16:39:12  sshd[11063]: Invalid user oracle from 196.46.242.38


Конечно, чтобы обезопасить себя необходимо прописать пользователей, которым разрешен доступ через ssh в /etc/ssh/sshd_config:

AllowUsers user1


Кроме того, нам поможет pam модуль pam_af. Он отслеживает число неудачных попыток и блокирует доступ на заданное время, кроме того, можно прописать команды, которые будут выполняться при блокировании и при разблокировании. Это более естественный способ, чем парсить лог файл (как, например, в fail2ban).

Устанавливаем:

pkg_add -r pam_af


Главное перед тем как начать — будьте осторожны, не заблокируйте себе доступ! Чтобы заблокировать себе доступ достаточно ошибиться в настройке pam!



Редактируем настройки pam /etc/pam.d/sshd, добавив наш модуль в секцию auth сверху:

auth            requisite       /usr/local/lib/pam_af.so
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
#auth           sufficient      pam_krb5.so             no_warn try_first_pass
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass


Попробуем зайти под неправильным пользователем и паролем и посмотрим статистику с помощью:

/usr/local/sbin/pam_af_tool statlist


<hoststat>
	<host hostname='xx.xx.xx.xx'>
		<attempts>3</attempts>
		<last_attempt>Mon Sep  5 23:52:12 2011</last_attempt>
		<status>unlocked</status>
	</host>
</hoststat>


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

/usr/local/sbin/pam_af_tool ruleadd -h localhost -a unlimited -t 0
/usr/local/sbin/pam_af_tool ruleadd -h '*' -a 3 -t 2H


Первое правило позволяет ошибаться сколько угодно раз при работе через localhost. Второе правило — блокировать остальные хосты после 3х неудачных попыток ввода пароля на 2 часа.

Просмотрим созданные правила:

/usr/local/sbin/pam_af_tool rulelist


<hostrules>
	<host ip='*'>
		<attempts>3</attempts>
		<locktime>7200S</locktime>
		<lockcmd></lockcmd>
		<unlockcmd></unlockcmd>
	</host>
	<host ip='127.0.0.1'>
		<attempts>unlimited</attempts>
		<locktime>0S</locktime>
		<lockcmd></lockcmd>
		<unlockcmd></unlockcmd>
	</host>
	<host ip='::1'>
		<attempts>unlimited</attempts>
		<locktime>0S</locktime>
		<lockcmd></lockcmd>
		<unlockcmd></unlockcmd>
	</host>
</hostrules>


Правила вступают в силу немедленно, так что хосты у которых был накручен счетчик будут заблокированы:

/usr/local/sbin/pam_af_tool statlist


<hoststat>
	<host hostname='xx.xx.xx.xx'>
		<attempts>16</attempts>
		<last_attempt>Mon Sep  5 23:58:48 2011</last_attempt>
		<status>locked</status>
	</host>
</hoststat>


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

Автор данного PAM модуля — Станислав Седов, за простоту и элегантность решения ему большое спасибо!

Комментарии (3)

RSS свернуть / развернуть
+
0
Спасибо, очень в тему, как раз сейчас sshd настраиваю. Еще пара советов: использовать нестандартный порт и входить только по ключу, запретив вход по паролю, набираемому с клавиатуры. Ключ следует защитить качественной парольной фразой.
avatar

yababay

  • 06 сентября 2011, 16:15
+
0
Да это понятно, вообще боты обычно только по 22му и ищут порту, можно также portknocking сделать, вариантов масса.
avatar

Sergei_T

  • 06 сентября 2011, 16:40
+
0
еще бывает 23 й порт используют — там телнет или ssh тоже бывает на этих портах у некоторых. Боты не дремлют .
avatar

FREExLOADER

  • 07 сентября 2011, 07:24

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.