установив Asterisk 10 столкнулся с проблемой - в логи сыпятся сообщения о том, что некий девайс пытался зарегистрироваться с моим внешним IP. Отбросив море какашек в форумах - "типа сам дурак" и "чо гугл отменили?", а так же "iptables настроить не можешь ?", пылесосенье интернета дало результаты.
Респект и уважуха автору Cybermind с Asteriskforum.ru, его статейка прямо в жилу.
Автор: Cybermind
Добавлено: Пт Авг 10, 2012 06:28 (GMT 1)
Asterisk 1.8.15.0. Недавно начали надоедать господа из оккупированных палестинских территорий. В логах можно заметить такое:
Код:
Sending fake auth rejection for device 5550000<sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;tag=f140a208
Естественно правило fail2ban сработает только блокировкой внешнего IP Asterisk. Здесь на форуме предлагали лекарство правкой исходника, но оно не работает на 1.8.
Открыв исходник chan_sip.c, можно увидеть в нескольких местах строчки:
Код:
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s\n", get_header(req, "From"));
Поиском по форуму digium, нашлось решение. Заменил в исходнике вышеуказанные строчки на вот такую конструкцию:
Код:
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s (%s)\n", get_header(req, "From"), ast_sockaddr_stringify(addr));
Теперь в логах детектится IP адрес:
Код:
Sending fake auth rejection for device 5550000<sip:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;tag=b80e9671 (83.244.6.160:10045)
Правило в /etc/fail2ban/filter.d/asterisk.conf:
Код:
NOTICE.* .*: Sending fake auth rejection for device.* \(<HOST>:.*\)
Теперь палестинцы успешно отправляются в бан. Возможно есть ошибка в решении вопроса, поправьте пожалуйста.
От себя добавлю что механика изменений оч проста, достаточно в местах в chan_sip.c исправить логирование и вот вам счастье. Обратите внимание когда будете править, что в ряде мест не "Sending fake auth rejection for device", а "Failed to authenticate device". У меня получалось что-то вроде :
if (res == AUTH_FAKE_AUTH) {
ast_log(LOG_NOTICE, "Sending fake auth rejection for device %s (%s)\n", sip_get_header(req, "From"), ast_sockaddr_stringify(addr));
transmit_fake_auth_response(p, SIP_SUBSCRIBE, req, XMIT_UNRELIABLE);
} else {
ast_log(LOG_NOTICE, "Failed to authenticate device %s for SUBSCRIBE (%s)\n", sip_get_header(req, "From"), ast_sockaddr_stringify(addr));
transmit_response_reliable(p, "403 Forbidden", req);
}
Далее три шага: запускаем еще раз make, копируем chan_sip.so в папочку с модулями и перегружаем астериск. Радостно наблюдаем растущий список fail2ban.
конечно везде рекомендуемое решение не помешает:
iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \
-j LOG --log-prefix "SIP flood detected: "
У этого решения есть недостаток, некоторые устройства заносятся в флуд, например Panasonic Sip-Dect. Я хочу конкретно знать, что за гадина и откуда лезет.