FreeBSD Часть 12 Bruteblock - защищаем SSH

   Т.к. пользуемся ssh, а его все стараются пробить, ставим защиту, например Bruteblock.
Устанавливать будем из портов:

# cd /usr/ports/security/bruteblock
# make install clean
# hash -r

   После успешной установки мы получим краткое руководство по настройке утилиты. Обратите внимание, на нюансы зависящие от типа используемого Вами файрвола (ipfw или pf).
Итак, следуя полученной инструкции, сначала добавляем запись в /etc/syslog.conf:

auth.info;authpriv.info                    |exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/ssh.conf

Добавить ее нужно сразу после строки конфига:

"auth.info;authpriv.info                    /var/log/auth.log"

Перезапустим syslogd:

# /etc/rc.d/syslogd restart

Добавляем в /etc/rc.conf  такие строчки:

syslogd_flags="-c -c"         # что бы не сбивать с толку наш блокировщик сообщениями вида

                                      # "last message was repeated 3 times"(два раза - это не опечатка)
bruteblockd_enable="YES"  # включаем сам bruteblock
bruteblockd_table="1"        # номер таблицы блокированных ip адресов
bruteblockd_flags="-s 5"     # время в секундах когда bruteblock проверяет правила

Раскоментируем строчку и поменяем YES на NO в /etc/ssh/sshd_config

UseDNS no          # Bruteblock может работать только с ip адресами, имена отключаем

Редактируем /usr/local/etc/bruteblock/ssh.conf  У меня он выглядит так:

regexp = sshd.*(?:Illegal|Invalid) user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp1 = sshd.*Failed \S+ for (?:(?:illegal|invalid) user )?\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp2 = sshd.*error: PAM: authentication error for (?:(?:illegal|invalid) user )\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp3 = sshd.*error: PAM: authentication error for \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp4 = sshd.*Did not receive identification string from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

# Количество неудачных попыток входа в течении времени within_time
#  после которых bruteblock добавляет ip в таблицу ipfw2
max_count       = 3
#Время, в секундах в течении которого должны произойти max_count
# неудачных попыток входа.
within_time     = 60
# Время жизни правила блокировки, по истечению которого bruteblockd
#  удаляет правило из таблицы
reset_ip       = 600
# Номер таблицы ipfw2
ipfw2_table_no = 1

В Firewal`е l в файле /etc/rc.firewall прописываем две строчки:
${FwCMD} -f table 1                                        # в начале файла, чтобы при перезапуске очищалась таблица
${FwCMD} add deny ip from "table(1)" to any    # это правило ставим сразу после правила ${FwCMD} add allow ip from any to any via lo0

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

# less /var/log/auth.log

и тут же набираем Shift+F и мы будем видеть все что записывается в файл в реальном времени. Логинимся через ssh на сервак и проверяем работу защиты.
Если логинимся неизвестным юзером, блокировать должно сразу. Если известным, то дается 3 попытки, затем блок, если неправильно вводим пароль. Через время reset_ip блокировка должна сняться. В firewall можно посмотреть что занеслось в таблицу такой командой:

ipfw table 1 list 

Вот, мы защитились от атак на порт SSH. Но это еще не все методы защиты. Можно сделать еще вот это:

Ограничить доступ к серверу с помощью файервола.  Т.к. мы используем ipfw2, то для этого, в файле конфигурации /etc/rc.firewall добавляем запись такого вида:

${FwCMD} add allow tcp from ALLOWED_IP to me 22 in via ${LanOut}

где ALLOWED_IP — это IP адрес сервера, с которого надо разрешить доступ к серверу.

   Можно включить кое какую защиту через файл настройки самого демона ssh — /etc/ssh/sshd_config. Вот некоторые из наиболее полезных параметров этого файла: можно указать IP-адреса сетевых карт, которые будут принимать SSH-соединение, к примеру — имеются 2 карты, eth1 — в локальной сети, eth0 — в мир:
eth0 IP 99.999.99.99 и eth1 IP 10.0.0.1.
Разрешим доступ только из локальной сети:

ListenAddress 10.0.0.1

Не самый лучший вариант разрешить удалённый доступ под пользователем root, закроем его (во FreeBSD он и так закрыт):

PermitRootLogin no

Можно разрешить доступ только определённым пользователям:

AllowUsers tester otheruser

Или разрешить доступ только определённой группе:

AllowGroups wheel ssh

А можно запретить доступ определённым пользователям:

DenyUsers tester otheruser

Или запретить доступ целой группе:

DenyGroups nossh

Ещё вариант — изменить стандартный порт SSH, это уменьшит активность некоторых ботов, можно указать несколько портов:

Port 2222
Port 2525

Полезно подредактировать параметр времени ожидания ввода пароля, по умолчанию целых 2 минуты, ставим 30сек.:

LoginGraceTime 30s

Разорвем соединение, если нет активности более 20 минут:

ClientAliveInterval 1200
ClientAliveCountMax 0

Ещё полезный параметр, который указывает сколько неавторизованных сессий может висеть одновременно:

MaxStartups 5

Так же, его можно задать и в виде:

MaxStartups 5:50:10

Т.е., первоначально максимальное число сессий 5, если это число превышается, то половина соединений будет отброшено (50%) и с ростом числа сессий все большее число соединений будет отбрасываться, и, наконец, если число сессий превысит 10, то все дальнейшие соединения к sshd будут отсечены. Будьте осторожны с этим параметром.
 

После любых изменений в /etc/sshd_config перезагрузите демон:

# /etc/rc.d/sshd restart

 

Категории:

Рейтинг: 
Средняя: 5 (1 оценка)

Комментарии

У меня ip адрес не выходи из таблицы после указанного периода.
Покопавшись понял, что в таблицу прописывается время выхода из таблицы без учета часового пояса.

Не подскажете в чем может быть причина?

Спасибо.
 

http://eyesvision.ru/

s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11s11
s11s11s11s11s11s11s11s11s11s11s11s11s11 сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт
сайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайтсайт

Добавить комментарий

Filtered HTML

Plain text