Для предотвращения bruteforce-атак по подбору паролей во FreeBSD или OpenBSD можно использовать
возможность пакетного фильтра PF по лимитированию числа соединений за единицу времени в сочетании с блокировкой по таблицам.Добавляем в /etc/pf.conf
# Подключаем ранее составленный список заблокированных за излишнее число коннектов IP
table <ftp-attacks> persist file "/etc/pf.ftp.block.list"
# Блокируем все входящие соединения с IP, которые присутствуют в черном списке
block in quick on $ext_if from <ftp-attacks>
# Выявляем IP с которых было более 5 обращений за 40 секунд
# и добавляем этот IP в ранее созданную таблицу блокировки
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port 21 keep state (max-src-conn-rate 5/40, overload <ftp-attacks> flush global)Перечитываем конфигурацию PF:
/etc/rc.d/pf reload
или
/sbin/pfctl -f /etc/pf.confДалее, чтобы сохранить созданную таблицу блокировки между перезагрузками, необходимо добавить
в /etc/rc.shutdown код для сброса в файл состояния таблицы перед завершением работы:
/sbin/pfctl -t ftp-attacks -T show > /etc/pf.ftp.block.listДля удаления определенного IP (например, 192.168.1.1) из таблицы:
/sbin/pfctl -t ftp-attacks -T delete 192.168.1.1Для добавления IP или подсети вручную:
/sbin/pfctl -t ftp-attacks -T add 192.168.1.1
/sbin/pfctl -t ftp-attacks -T add 192.168.1.0/24Для полной очистки таблицы
/sbin/pfctl -t ftp-attacks -T flushДля загрузки таблицы из файла:
/sbin/pfctl -t ftp-attacks -T replace -f /etc/pf.ftp.block.listДля поиска IP в таблице
/sbin/pfctl -t ftp-attacks -T test 192.168.1.1Для вывода более подробной статистики по каждому из IP в таблице:
/sbin/pfctl -t ftp-attacks -T show -vДля очистки счетчиков срабатываний:
/sbin/pfctl -t ftp-attacks -T zeroURL: http://www.cyberciti.biz/faq/freebsd-openbsd-pf-stop-ftp-bru.../
Обсуждается: http://www.opennet.me/tips/info/2140.shtml
Спасибо.
Тоже спасибо. А то sshit regexp'ов не имеет для распознавания ftp брутов, а ума и трудолюбия дописать у меня не хватает. Хорошо было бы ftp-серверы наделить опцией: "писать в auth.log сообщения об отказе в аутентификации формате sshd". Было бы сверхудобно.
>Хорошо было
>бы ftp-серверы наделить опцией: "писать в auth.log сообщения об отказе в
>аутентификации формате sshd".А давайте этому научим(*) соотв.модули PAM, и _волшебным_ образом fail2ban-у и аналогам "научатся" login, telnet, всякие pop3d и прочие.
Ой, а в опенбсд пам-то есть? $)
(*)И да -- пусть кто-нибудь другой.
этому научим(*) - мысль есть, денег нет. Но, вообще, созреваю. fail2ban - целует морковь взасос или, по простому, сосёт. Нужно переписывать sshit. Только тупой | в сканер логов дает эффект. РАМ, волшебным образом, бесполезен для диагностирования брутов.
А разве "во FreeBSD или OpenBSD" нет простого fail2ban?
есть. Тесты на ВПС показывают, что fail2ban потребляет заметное количество ресурсов, поэтому лучше не плодить сущности.
Тебе альтернативный вариант описали, это не значит что все забыли что такое fail2ban .И не все должны им пользоваться.
>А разве "во FreeBSD или OpenBSD" нет простого fail2ban?А нарисуйте-ка мне how-to для брута против ftp?
Буду искренне признателен.
Сам нарисовал. fail2ban рулит.
Еще можно добавить max-src-nodes и max-src-conn
А смысл держать таблицу в файле, да еще сохранять ее при перезагрузке?
Можно просто каждый час по cron-у ее чистить, так по-моему проще, да и для честных юзеров какого-нибудь прокси может случиться вечный бан.
bruteblockd
+1
хорошая штука http://samm.kiev.ua/bruteblock/
pf не умеет(
>pf не умеет(Оть иманна. Нет PF - гулять лесом.
угум .. нет PF'а - нет пролем с натом GRE и перебором паролей ..
>угум .. нет PF'а - нет пролем с натом GRE и перебором
>паролей ..нет проблем
ЖЖоте, а еще десяток альтернативных вариантов слабо написать? Или теперь каждый кто пишет заметки , должен расписывать все варианты что бы его не обливали грязью и было советами.
Манов ещё так много, а все нужно обязательно поместить на опеннет в виде заметок...
У меня работает скрипт по крону анализируя лог ftp
и никаких списков не надо держать.
Больше 3-х неправильных заходов и пошел в bruteforce.
=================================
#!/bin/sh# add IP to PF table bruteforce
#
logfile="/var/log/xferlog"
grep "Authentication failed" ${logfile} >/dev/null 2>&1
if [ $? -eq 0 ]; then
set `grep "Authentication failed" ${logfile}|sed 's/.*\@//; s/).*//'|uniq -c`
while [ $# -ge 2 ]; do
ip=$2
count=$1
if [ $count -ge 3 ]; then
/sbin/pfctl -t bruteforce -T show | grep $ip
if [ $? -ne 0 ]; then
/sbin/pfctl -t bruteforce -T add $ip
echo "Address $ip add to table PF \"bruteforce\"" >> /tmp/bruteforce
fi
fi
shift 2
donefi
if [ -f /tmp/bruteforce ]; then
cat /tmp/bruteforce | mail -s "Bruteforce" root; rm -rf /tmp/bruteforce
fi
/sbin/pfctl -t bruteforce -T expire 86400exit