Комментарии 54
Для этого есть fail2ban
+26
А можно комментарии практикующих пользователей услышать по этой программе?
+2
Я использую на всех серверах-в зависимости от попадания в логах каких-от записей, Ip блочатся на фаерволле. Использую для антибрутфорса ssh и asterisk. 5 неудачных попыток и в бан. Правда если попыток много за короткое время, то пока fail2ban родит и заблочит, бот успеет еще раз 30-40 поломится. Сообщения о бане присылает на почту вместе с whois информацией о Ip, с которого шла атака.
+1
Изучение принципов работы fail2ban и настройка заняли у меня полдня, а потом нужные правила писал за 10 минут каждое — регексы там очень удобны и упрощены до предела всякими словами-патернами.
0
я пробовал пользоваться. На слабом ВПСе забирал слишком много ресурсов, но в принципе работал хорошо. Сейчас ограничился защитой на уровне iptables — разрешено 3 подключения к порту в 120 секунд. Для меня этого вполне достаточно.
0
Рекомендую SshGuard www.sshguard.net
Смотрит в прямом эфире, кто пытается авторизоваться и блочит в зависимости от настроек
Я, например, блочу в случае 3 ошибок в течение 1 секунды
Смотрит в прямом эфире, кто пытается авторизоваться и блочит в зависимости от настроек
Я, например, блочу в случае 3 ошибок в течение 1 секунды
0
А ipfw потом шевелиться будет? Записей-то можно получить огого после такого.
+1
ipfw table 1 add xxx
использовать надо. Тогда точно тормозов не будет.
использовать надо. Тогда точно тормозов не будет.
+4
Праивльнее, конечно же, заносить адреса в таблицы ipfw.
+4
Про таблицы я не подумал, т.к. не так хорошо знаю ipfw, но на моем сервере он шевелился даже при 3-4 тысячах правил без затруднений. Хотя и нагрузки на нем не те, чтобы я мог об этом Вам что-то сказать.
0
Посмотрите на /usr/ports/security/bruteblock в портах, похоже что он делает практически то же самое.
Кстати, для добавления deny правил в ipfw грамотнее использовать таблицы, что bruteblock и делает.
Пользуюсь им сам уже много лет, никаких нареканий нет.
Кстати, для добавления deny правил в ipfw грамотнее использовать таблицы, что bruteblock и делает.
Пользуюсь им сам уже много лет, никаких нареканий нет.
+4
А что лучше, он или fail2ban? Я вот как раз решаю что использовать.
0
Не знаю, не пользовался fail2ban.
Попался когда-то под руку bruteblock, он настраивается легко и гибко. Неприхотлив, из зависимостей кажется перл только. Если сильно долбят снаружи то нагрузка пойдёт на ipfw в основном, так что типичную нагрузку эта связка должна держать. Вроде ничего больше и не нужно…
Альтернативы даже не смотрел, но за bruteblock могу сказать по своему реальному опыту — работает железно и никогда не подводил.
Попался когда-то под руку bruteblock, он настраивается легко и гибко. Неприхотлив, из зависимостей кажется перл только. Если сильно долбят снаружи то нагрузка пойдёт на ipfw в основном, так что типичную нагрузку эта связка должна держать. Вроде ничего больше и не нужно…
Альтернативы даже не смотрел, но за bruteblock могу сказать по своему реальному опыту — работает железно и никогда не подводил.
+1
trusted_net='192.168.'
А я бы и локальной сетке не доверял, если уж полноценно подходить к защите корпоративной информации. Ладно там раз-другой неудачно кто-то пароль ввел, но если начнется брут из локалки, сознательный или кто-нибудь чего-нибудь подцепит — ваш скрипт ему мешать не будет, как я понял из беглого его просмотра.
А я бы и локальной сетке не доверял, если уж полноценно подходить к защите корпоративной информации. Ладно там раз-другой неудачно кто-то пароль ввел, но если начнется брут из локалки, сознательный или кто-нибудь чего-нибудь подцепит — ваш скрипт ему мешать не будет, как я понял из беглого его просмотра.
+3
Я ей тоже не доверяю, но делаю допущение, т.к. все компы защищены корпоративным DrWeb. Кроме того, не хочется лишний раз беспокоить директора, который вдруг не увидит свою почту.
Это очень слабое место, но при использовании sh, мне кажется, иначе не поступить. Разве только начинать писать конкурента bruteblock.
Спасибо за подсказку, я изучу bruteblock.
Пока писал, пришло в голову: можно для доверенных подсетей сделать другой порог срабатывания. Т.е. дать им немного больше попыток ошибиться, чем внешним пользователям.
Это очень слабое место, но при использовании sh, мне кажется, иначе не поступить. Разве только начинать писать конкурента bruteblock.
Спасибо за подсказку, я изучу bruteblock.
Пока писал, пришло в голову: можно для доверенных подсетей сделать другой порог срабатывания. Т.е. дать им немного больше попыток ошибиться, чем внешним пользователям.
0
Коллеги, а вот я столкнулся с такой ситуацией, когда в логи попадает имя хоста с пробелом, это полностью парализует скрипт, т.к. пробел — есть разделитесь для {print $n}. Кто-нибудь в курсе, как такое поведение злоумышленника отработано в предложенных программах?
Пример:
- bruteblock
- fail2ban
- SshGuard
Пример:
2011-10-12 16:06:42 auth_login authenticator failed for host104-147-static.34-88-b.business.telecomitalia.it (windows) [88.34.147.104]: 535 Incorrect authentication data
0
The Full DNS name for internal domain can contain letters (a-z, A-Z), numbers (0-9), and hyphens, but not spaces.
# dig -x 88.34.147.104 +short
host104-147-static.34-88-b.business.telecomitalia.it.
# host 88.34.147.104
104.147.34.88.in-addr.arpa domain name pointer host104-147-static.34-88-b.business.telecomitalia.it.
скорей всего Exim так пишет лог
# dig -x 88.34.147.104 +short
host104-147-static.34-88-b.business.telecomitalia.it.
# host 88.34.147.104
104.147.34.88.in-addr.arpa domain name pointer host104-147-static.34-88-b.business.telecomitalia.it.
скорей всего Exim так пишет лог
+1
Я делал похожие вещи для своего сервера. Но потом сервер начал тупить. Решилось командой EXIT в конце скрипта.
и еще, это не самый производительный вариант парсить логи.
сегодня ваш лог весить 40Мб а завтра 1Гб.
Особенно использование «cat /tmp/auth.log | grep „Did not receive identification string“ |»
тут достаточно использовать один grep.
Запустите два разных скрипта с cat и без cat так time ./script.sh. Очень заметно на больших логах.
и еще, это не самый производительный вариант парсить логи.
сегодня ваш лог весить 40Мб а завтра 1Гб.
Особенно использование «cat /tmp/auth.log | grep „Did not receive identification string“ |»
тут достаточно использовать один grep.
Запустите два разных скрипта с cat и без cat так time ./script.sh. Очень заметно на больших логах.
0
Вопрос в рациональности анализа логов остается, можно сэкономить кучу нервов и сил если:
1)ССШ зафаерволить (открыть только с определенных адресов)
2) аналогично произвести с админкой веба ограничив доступ с определенных адресов(если такая имеется) .htaccess
В любом случае скрипт это хорошо, но опять же это будет хорошо работать при низкой интенсивности брутфорса.
1)ССШ зафаерволить (открыть только с определенных адресов)
2) аналогично произвести с админкой веба ограничив доступ с определенных адресов(если такая имеется) .htaccess
В любом случае скрипт это хорошо, но опять же это будет хорошо работать при низкой интенсивности брутфорса.
0
У меня всегда недопонимание, когда я слышу о таком подходе. А если с телефона надо зайти? А если админ в отпуске (в другом городе, стране)?
0
VPN для этого и придумали. В конце концов в отпуске должен быть заместитель, который может решить текущие задачи ;)
0
А если VPN тоже будут брутфорсить? )
0
это менее вероятно. Например OpenVPN попробуйте)
0
По своему опыту: увы, vpn не со всеми домашними провайдерами работает. Это касается как и OpenVPN, так и pptp/l2tp.
Я так недавно не смог подключиться к офисному pptp из отеля в отпуске.
Я так недавно не смог подключиться к офисному pptp из отеля в отпуске.
0
pptp требует умного ната, т.к используются протокол GRE, в большинстве сошо-роутерах может одновременно только 1 сессия pptp существовать.
С опенвпн все просто — ставишь его на порт 443(если ваш провайдер не зверь и он не режет/проксируется https то все будет ок.
С опенвпн все просто — ставишь его на порт 443(если ваш провайдер не зверь и он не режет/проксируется https то все будет ок.
+1
#!/bin/sh
у вас во фряхе баш дефолтным шеллом?
Ну и фраза «подобрать пароль к exim», извиние, порвала в клочья.
у вас во фряхе баш дефолтным шеллом?
Ну и фраза «подобрать пароль к exim», извиние, порвала в клочья.
0
ИМХО, описанное решение — это слегка overkill для большинства систем. Наверняка среди россыпи фрёвых фаерволов есть такой, который позволяет ограничивать количество подключений к порту каким-то стандартным правилом, и этого будет вполне достаточно.
0
да, на PF можно настроить ограничения по кол-ву соединений в минуту(если неошибаюсь) + также можно заносить провинившихся в отдельную таблицу, но опять же придется использовать крон чтобы список применялся, что не всегда уместно делать.
0
Здесь еще не упоминалась замечательная програмка sshit, которая очень легко конфигурится, и которую использую на домашнем сервере уже не первый год.
0
pipe pipe pipe… Блин меня убивает такой код… Научись наконец awk и правильным использованием пайпов :)
0
Меня смущает cat всего файла, да еще и каждую минуту!
Я бы использовал tail -f logfile | script.sh &
Я бы использовал tail -f logfile | script.sh &
0
Поэтому разрастающиеся логи ротируются каждую минуту в отдельную папочку с текущей датой. Это в самом начале скрипта:
tail же выдаст только последнюю часть файла, а не все события за период. В этом случае смысл скрипта пропадает.
# копируем логи
cat ${cur_log_dir}/${cur_log_file} > /tmp/${cur_log_file}
# очищаем исходный логфайл
cat /dev/null > ${cur_log_dir}/${cur_log_file}
# обновляем архивный логфайл
cat /tmp/${cur_log_file} >> ${log_file}
tail же выдаст только последнюю часть файла, а не все события за период. В этом случае смысл скрипта пропадает.
0
А вообще тут я бы рекомендовал использовать fifo и работать c данными уже из него.
0
Ок, попробую ответить развернуто.
У Вас на каждый тип проверки перечитывается файл (cat | grep «type»)
При использовании tail -f |
наш скрипт обрабатывает лог построчно:
#!/bin/sh
while read mon day time domain pname msg; do
тут можно разбирать, что в наших переменных
например $msg — текст сообщения, $time — время и тд, думаю Вы поняли смысл
done
Такой подход значительно экономнее и нагляднее. К тому же, он актуальнее, работа начинается как только появилась новая строка в логе.
И такая архитектура избавит Вас от необходимости как-то дополнительно подготавливать (ротировать) файлы
У Вас на каждый тип проверки перечитывается файл (cat | grep «type»)
При использовании tail -f |
наш скрипт обрабатывает лог построчно:
#!/bin/sh
while read mon day time domain pname msg; do
тут можно разбирать, что в наших переменных
например $msg — текст сообщения, $time — время и тд, думаю Вы поняли смысл
done
Такой подход значительно экономнее и нагляднее. К тому же, он актуальнее, работа начинается как только появилась новая строка в логе.
И такая архитектура избавит Вас от необходимости как-то дополнительно подготавливать (ротировать) файлы
0
Что ж, все понятно. Осталось придумать, как следить, чтобы сервис был постоянно запущен. Кажется, с этим будут сложности, также как и при запуске после ребута.
0
Сделал примерно похожий скрипт по анализу логов и бану через ipfw
Если его запускать «руками» работает отлично
При запуске через крон отказывается работать.
Долгие копания привели к тому, что я выяснил, что при запуске через крон grep возвращает ноль, а руками — нормальную цифру
Ни кто не знает в чем может быть проблема?
Команда вот такая
Это я по количеству процессов httpd определяю активность на сайтах
не работает именно /usr/bin/grep и только при запуске через крон
Если его запускать «руками» работает отлично
При запуске через крон отказывается работать.
Долгие копания привели к тому, что я выяснил, что при запуске через крон grep возвращает ноль, а руками — нормальную цифру
Ни кто не знает в чем может быть проблема?
Команда вот такая
/bin/ps aux | /usr/bin/grep httpd | /usr/bin/wc -l
Это я по количеству процессов httpd определяю активность на сайтах
не работает именно /usr/bin/grep и только при запуске через крон
0
Ларчик открывается просто:
— делаете файл sh, куда пишите свой скрипт
— пишите в крон строку на его запуск
— делаете файл sh, куда пишите свой скрипт
— пишите в крон строку на его запуск
0
А может надо в кавычки взять греп-строку?
0
скрипт /root/apachecount.sh
Содержимое:
запуск через /etc/crontab от имени рута
Через крон пишет всегда 1
Руками пишет всегда нормальную цифру
httpd пробовал писать и с двойными кавычками и с одинарными и без ковычек
Содержимое:
/bin/ps aux | /usr/bin/grep httpd | /usr/bin/wc -l > /root/apachecount.txt
запуск через /etc/crontab от имени рута
Через крон пишет всегда 1
Руками пишет всегда нормальную цифру
httpd пробовал писать и с двойными кавычками и с одинарными и без ковычек
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Активная защита FreeBSD на основе логов, sh и cron