Когда-то эта тема уже подымалась. Рассматривалось решение блокировки ip с помощью sshit. Решил дополнительно ознакомиться с еще одной программой того же назначения - bruteblock.
Кстати... Для защиты от ssh-брутефорса не обязательно сразу же устанавливать дополнительный софт . Существуют также варианты запуска демона sshd на нестандартном порту, разрешения доступа только с определенных IP, авторизация по ключам... Лично я остановился на анализе лог-файлов и автоматической блокировке доступа плюс запуск демона на нестандартном порту.
Для начала немного общей информации о bruteblock. Программа bruteblock позволяет блокировать попытки подбора паролей к сервисам UNIX. Программа анализирует журнал запущенных служб и
заносит ip злоумышленников в определенную таблицу firewall ipfw2. Через некоторое, определённое пользователем, время программа удаляет их из этой таблицы. Использование регулярных выражений позволяет использовать утилиту для практически любой службы. Утилита написана на C и не использует вызова внешних программ, работая с таблицами IPFW2 через RAW SOCKETS API.
Итак, приступим непосредственно к установке bruteblock. Устанавливать, как всегда, будем из портов:
# cd /usr/ports/security/bruteblock && make install clean |
Как хороший, "порядочный" порт, bruteblock вывел на экран список необходимых действий по завершению установки:
Configuration of the bruteblock is done via configuration files located at /usr/local/etc/bruteblock/ To run the script, append following lines to /etc/syslog.conf: !* and restart syslogd. Also you should add ipfw2 table and the corresponding deny rule. # ipfw add deny ip from table(1) to any Next, you'll want to setup periodical cleanup of ipfw2 table. Add following bruteblockd_enable="YES" and start bruteblockd: /usr/local/etc/rc.d/bruteblockd.sh start |
Тем лучше для нас... Кстати, пора ознакомиться с принципом работы bruteblock. Утилита bruteblock состоит из двух частей – bruteblock и bruteblockd. Файл bruteblock прописывается в /etc/syslog.conf и обеспечивает анализ журнала и добавление ip адресов в таблицу IPFW2. Каждая запись IPFW2 содержит такие поля: адрес/маска, значение. Значение – это необязательное поле, которое может содержать любое число формата unsigned int. Оно может использоваться для выборки подмножества таблицы в правилах IPFW2. Утилита bruteblock использует это поле для хранения времени действия правила, в unix формате. Утилита bruteblockd периодически проверяет указанную таблицу и удаляет устаревшие записи. Таким образом удалось обеспечить возможность хранить в одной таблице записи для нескольких сервисов. Кроме того, всегда можно легко получить список актуальных блокировок и при необходимости отредактировать его.
С принципом работы ознакомились, пора приступать к настройке. Для начала ознакомимся с тем, что у нас находится в каталоге /usr/local/etc/bruteblock/ . В каталоге уже есть готовые конфигурационные файлы для ssh і ftp. Я же затрону только настройку для ssh.
Редактируем /usr/local/etc/bruteblock/ssh.conf до следующего состояния:
# cat /usr/local/etc/bruteblock/ssh.conf
# regexp - регулярное выражение, по которому производится поиск ip адресов
regexp = sshd.*Illegal user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) # Количество неудачных попыток входа в течении времени within_time, max_count = 4 # Время, в секундах в течении которого должны произойти max_count within_time = 300 # Время жизни правила блокировки, по истечению которого bruteblockd # 30 минут # Номер таблицы ipfw2 |
Конфигурационный файл готов. Думаю, исходя из подробных коментариев, все понятно. А стандартные регулярные выражения немного сменил, исходя из анализа лог-файлов. Также можете устанавливать свои значения счетчика, времени и таблицы ipfw.
Пора включить парсилку логов. Для этого в /etc/syslog.conf вносим такую строку:
auth.info;authpriv.info |exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/ssh.conf |
Чтобы изменения вступили в силу, перестартовываем syslogd. Кстати, что бы не сбивать с толку наш блокировщик сообщениями вида "last message was repeated 5 times", предварительно добавим в /etc/rc.conf следующую строку "syslogd_flags="-c""
# echo '# Syslogd settings change' >> /etc/rc.conf # echo 'syslogd_flags="-c"' >> /etc/rc.conf # sh /etc/rc.d/syslogd restart Stopping syslogd. Starting syslogd. |
Теперь пора добавить запрещающее правило в файрвол. Я создаю его под номером 11, чтобы оно стояло первым в списке правил файрвола.
# ipfw add 11 deny all from "table(101)" to me |
Ну а как именно "запихнуть" в стартовый скрипт файрвола, думаю догадаетесь
Пора, собственно, запустить bruteblockd и наслаждаться результатами проделанной работы. В /etc/rc.conf добавляем следующие строки:
# echo '# Bruteblockd' >> /etc/rc.conf |
Собственно запуск...
# sh /usr/local/etc/rc.d/bruteblockd start Starting bruteblockd. |
Чтобы окончательно "успокоиться" решено смоделировать ситуацию брутефорса. С "дружественного" сервера нарочно пытаюсь неверно авторизоваться на сервер с только что установленным и настроенным bruteblockd. После нескольких неверных попыток сервер авторизации соединение разорвалось. В лог-файл /var/log/auth.log bruteblock вписал строку о "нарушителе":
# tf /var/log/auth.log | grep bruteblock Dec 12 02:01:32 router bruteblockd[24317]: starting.... Dec 12 02:02:37 router bruteblockd[24339]: starting.... Dec 12 02:03:41 router bruteblock[24139]: Adding 192.168.159.250 to the ipfw table 101 |
Что ж... Настройка завершена успешно. Можно и поспать
Примечание:
Для более уверенной работы советую отключить резолвинг ДНС-имен для ssh. Для этого в /etc/ssh/sshd_config необходимо добавить параметр "UseDNS no" и перезапустить sshd:
# echo 'UseDNS no' >> /etc/ssh/sshd_config # sh /etc/rc.d/sshd restart |
Дякую за чудову приблуду
Дякую за чудову приблуду (програму).
Але маю питання:
Зробив все як написано та зробив рестарт syslogd
Чтобы изменения вступили в силу, перестартовываем syslogd.
Кстати, что бы не сбивать с толку наш блокировщик сообщениями вида "last message was repeated 5 times",
предварительно добавим в /etc/rc.conf следующую строку "syslogd_flags="-c""
але всеодно ці повідомлення не пропадають
Dec 13 09:34:16 vhd sshd[21099]: error: PAM: authentication error for root from 193.xxx.xxx.150
Dec 13 09:34:19 vhd last message repeated 2 times
Dec 13 09:34:49 vhd sshd[21171]: error: PAM: authentication error for root from 193.xxx.xxx.150
Dec 13 09:34:53 vhd last message repeated 2 times
Dec 13 09:34:56 vhd sshd[21176]: error: PAM: authentication error for root from 193.xxx.xxx.150
Dec 13 09:34:57 vhd last message repeated 2 times
Dec 13 09:35:01 vhd sshd[21182]: error: PAM: authentication error for root from 193.xxx.xxx.150
можливо ще щось треба зробити?
Спроби авторизуватись з неіснуючими користувачами блокуються гарно, а от коли користувач є, наприклад root або хтось інший,
то з'являються ці повідомлення і блокування не відбувається .(
Дуже дивно... Спробуйте
Дуже дивно...
Спробуйте визначити PID, під яким працює syslogd і зупинити його. Після зупинки запустити syslogd знову. Приклад:
# ps -ax | grep syslogd
603 ?? Ss 0:57,67 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s
# kill -9 603
# sh /etc/rc.d/syslogd start
Starting syslogd.
Re: Bruteblock - защита от перебора паролей по ssh
можно заменить на 2 регулярных выражения
Re: Bruteblock - защита от перебора паролей по ssh
На одном из серверов сменил правила. Тестовый бан отработался.
Проверим, как дальше дело пойдет. Нужно набрать в логах немного статистики...
Re: Bruteblock - защита от перебора паролей по ssh
опишите ситуацию с мониторингом 2х служб, наример ssh и VPN или ftp
Re: Bruteblock - защита от перебора паролей по ssh
К сожалению сейчас у меня очень большая загрузка. Паралельно веду несколько проектов. Поскольку большая нагрузка - свободного времени совсем нету, и в связи с этим новых статей почти не пишу. А освобожусь не раньше, чем через несколько месяцев... Так что, приношу извинения, но нету возможости реализовать вашу просьбу :(
Re: Bruteblock - защита от перебора паролей по ssh
Добрый день,
тоже очень интересно решение для почты (для других служб). Если у вас появилось время на написание статьи, напоминаю вам, что это было бы интересно.
P.S. Благодарю, за потраченное время.
Re: Bruteblock - защита от перебора паролей по ssh
Со временем все также - его катастрофически не хватает! Однако некоторые рекомендации все же дам. Например, добавим поддержку Exim (остальные службы можно по аналогии, главное смотреть формат логов и писать соответствующие регекспы).
Создадим конфигурационный файл bruteblockd для Exim - /usr/local/etc/bruteblock/exim.conf. Содержание (зависит от Вашего формата логов):
regexp2=exim.* \[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\] .* rejected RCPT .* relay not permitted
regexp3=exim.* \[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\] .* rejected RCPT .* Sender verify failed
# Number of failed login attempts within time before we block
max_count = 4
# Time in seconds in which all failed login attempts must occur
within_time = 300
# Time in seconds to block ip in firewall - 15 minutes
reset_ip = 900
# IPFW table number to add "bad" hosts
ipfw2_table_no = 101
Необходимо, чтобы в syslog писались события Exim. Соответственно:
После этого перезапускаем syslog и bruteblock, проверяем результаты...
Re: Bruteblock - защита от перебора паролей по ssh
Лучше так не делать. По порядку: Unknown user - проверка всегда должна быть доступна, в т.ч. - для келлаута. Мало-ли кто может отсылать почту от адресов из домена релей или просто сделать описку в адресе - это законно. А залочится весь релей.
relay not permitted - так можно залочить серверы, тестирующие вас на открытый релей.
Sender verify failed - т.е., если один из отправителей описАлся в имейле, то залочим весь релей - замечательно.
Все эти правила лишь сильно вредят - письмо и так не проходит, зато можно залочить вполне нормальные почтовые сервисы. Бороться со спамом нужно средствами самого Exim. А блокировать нужно совсем другое - подборку паролей для SMTP авторизации.
Re: Bruteblock - защита от перебора паролей по ssh
Доброго времени суток
Уважаемые коллеги установил эту замечательную программу на FreeBSD 8.3, пользователей блокирует отлично, только есть одно но, если я хочу сбросить применившиеся правила к хосту мне приходиться перезагружать сервер. Подскажите пожалуйста как можно решить данную проблему, потому как обычный перезапуск firewall и демона bruteblock никак не помогают?
Re: Bruteblock - защита от перебора паролей по ssh
Вообщем спасибо за ответ, которого нет:))) Нашел решение данной проблемы, уже и забыл, что писал сюда,сегодня вспомнил и решил написать ответ.
Вообщем для удаления правила bruteblock нужно выполнить команду:
ipfw table №таблицы delete и IP адрес
У меня в системе это номер 3 поэтому я ввожу команду:
ipfw table 3 delete 1.1.1.1
где 3 - это номер таблицы
1.1.1.1 - IP адрес, который мы удаляем из списка запретов
Для просмотра списка заблокированных адресов, в таблице IPFW, вводим команду:
ipfw table 5 list
Re: Bruteblock - защита от перебора паролей по ssh
Кстати, синтаксис работы с таблицами можно посмотреть в man ipfw:
ipfw table number delete addr[/masklen]
ipfw table {number | all} flush
ipfw table {number | all} list
Re: Bruteblock - защита от перебора паролей по ssh
прикрутив цю приблуду до net.inet.tcp.log_in_vain=1
працює