time=$(expr `/bin/date +%H%M` / 1)
if [ $time -eq 1015 ]; then
echo "Table 56 contents IP:"
echo "====================="
/sbin/ipfw table 56 list
echo "====================="
/sbin/ipfw table 56 flush
echo "Table 56 flushed"
fi
if [ $time -eq 0 ]; then
rm -rf `/bin/date -v-180d +'/var/log/asterisk/%Y/%m/'`
# echo "Deleted dir " `/bin/date -v-180d +'/var/log/asterisk/%Y/%m/'`
mkdir -p `/bin/date +'/var/log/asterisk/%Y/%m/'`
# echo "Created dir " `/bin/date +'/var/log/asterisk/%Y/%m/'`
fi
/usr/local/sbin/asterisk -rx 'logger rotate'
/bin/sleep 2
/usr/bin/grep -E ' chan_sip.c: Registration from .* No matching peer found$' /var/log/asterisk/messages.0 | \
awk -F "'" '{ ips[$4]++ } END { for (a in ips){ if (ips[a]> 10 ){ cmd=sprintf("/sbin/ipfw table 56 add %s/32 5060 >/dev/null 2>&1",a); system(cmd); printf ("asterisk: Wrong peers repeated [%d] times: IP [%s] blocked\n",ips[a],a); } } }'
/usr/bin/grep -E ' chan_sip.c: Registration from .* Wrong password$' /var/log/asterisk/messages.0 | \
awk -F "'" '{ ips[$4]++ } END { for (a in ips){ if (ips[a]> 20 ){ cmd=sprintf("/sbin/ipfw table 56 add %s/32 5061 >/dev/null 2>&1",a); system(cmd); printf ("asterisk: Wrong passwords repeated [%d] times: IP [%s] blocked\n",ips[a],a); } } }'
mesdst=`/bin/date +'/var/log/asterisk/%Y/%m/mes_%Y%m%d.log'`
evtdst=`/bin/date +'/var/log/asterisk/%Y/%m/evt_%Y%m%d.log'`
quedst=`/bin/date +'/var/log/asterisk/%Y/%m/que_%Y%m%d.log'`
cat /var/log/asterisk/messages.0 >> $mesdst
rm /var/log/asterisk/messages.0
cat /var/log/asterisk/event_log.0 >> $evtdst
rm /var/log/asterisk/event_log.0
cat /var/log/asterisk/queue_log.0 >> $quedst
rm /var/log/asterisk/queue_log.0
среда, 12 октября 2011 г.
Простейший скрипт для защиты Asterisk
Защита Asterisk с помощью Fial2ban в связке с pf.
Установка и настройка fail2ban
Устанавливаем из портов. За собой он потянет Python, если у Вас он не установлен.
- КОД: ВЫДЕЛИТЬ ВСЁ
cd /usr/ports/security/py-fail2ban; make install clean
После установки переходим в каталог /usr/local/etc/fail2ban и приступаем к настройке.
- КОД: ВЫДЕЛИТЬ ВСЁ
cd /usr/local/etc/fail2ban
В папке находятся 2 поддиректории.
action.d – Хранятся файлы, в которых описываются действия при срабатывании правил.
filter.d – Хранятся шаблоны, использующие в основном регулярные выражения, которые служат для обнаружения атак, попытки подбора паролей, и т.д.
А так же 2 файла:
fail2ban.conf - Файл содержит общие настройки для демона, такие как уровень логирования и т.д.
jail.conf - Файл в котором содержится описание фильтров.
Редактируем файл jail.conf, в конец файла добавляем следующее.
- КОД: ВЫДЕЛИТЬ ВСЁ
[asterisk-pf]
enabled = true
filter = asterisk
action = pf[table=asterisk-ban]
sendmail[name=ASTERISK, dest=root, sender=fail2ban@example.com]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 86400
ignoreip = 192.168.15.0/24ляем
Немного подробнее о переменных.
filter = asterisk - Название фильтра, которые будут использоваться для обнаружения совпадений.
В случае срабатывания фильтра, будут выполнены следующие действия.
action = pf[table=asterisk-ban]
sendmail[name=ASTERISK, dest=root, sender=fail2ban@example.com]
pf[table=asterisk-ban] - Будет выполнен скрипт pf.conf (в директории action.d), которому будет передана переменная table со значением asterisk-ban (Где asterisk-ban - это название таблицы в pf)
sendmail[name=ASTERISK, dest=root, sender=fail2ban@example.com] - Будет отправлено уведомление о срабатывании фильтра. (name - тема письма, dest - кому будет послано, sender - отправитель)
logpath = /var/log/asterisk/messages - Путь до лог файла asterisk
maxretry = 5 - Количество совпадений, который вызывает блокировку IP адреса
bantime = 86400 - Продолжительность (в секундах), в течение которых IP адрес будет блокирован.
ignoreip = 192.168.15.0/24 - Не проверять данные сети, IP адреса.
Создадим файл - шаблон /usr/local/etc/fail2ban/filter.d/asterisk.conf следующего содержания.
- КОД: ВЫДЕЛИТЬ ВСЁ
cat /usr/local/etc/fail2ban/filter.d/asterisk.conf
# Fail2Ban configuration file
#
#
# $Revision: 250 $
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Wrong password
NOTICE.* .*: Registration from '.*' failed for '<HOST>' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Username/auth name mismatch
NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Device does not match ACL
NOTICE.* <HOST> failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from <HOST>\)
NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Далее создаем файл /usr/local/etc/fail2ban/action.d/pf.conf в котором опишем связь с pf.
- КОД: ВЫДЕЛИТЬ ВСЁ
cat /usr/local/etc/fail2ban/action.d/pf.conf
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = pfctl -t <table> -Ta <ip>
actionunban = pfctl -t <table> -Td <ip>
[Init]
port = any
localhost = 127.0.0.1
Где переменную <table> мы описали в jail.conf (action = pf[table=asterisk-ban])
Asterisk
Теперь нужно немного настроить Asterisk.
- КОД: ВЫДЕЛИТЬ ВСЁ
vim /usr/local/etc/asterisk/logger.conf
И раскомментируем
- КОД: ВЫДЕЛИТЬ ВСЁ
[general]
dateformat=%F %T
Заходим в консоль asterisk и рестартуем сервис логирования
- КОД: ВЫДЕЛИТЬ ВСЁ
asterisk -rx "logger reload"
PF
Добавим блокирующее правило в pf.conf. Для примера:
- КОД: ВЫДЕЛИТЬ ВСЁ
block in log quick on $EXT_IF proto {tcp udp} from <asterisk-ban> to $EXT_IF port 5060
Запуск
Добавляем fail2ban в /etc/rc.conf.
- КОД: ВЫДЕЛИТЬ ВСЁ
echo ‘fail2ban_enable="YES"’ >> /etc/rc.conf
И запускаем
- КОД: ВЫДЕЛИТЬ ВСЁ
/usr/local/etc/rc.d/fail2ban start
Теперь можно проверить, попробовать авторизироваться на asterisk с неправильным паролем и посмотреть, что из этого получится, должно будет прийти письмо, если вы добавили эту возможность, или смотрите лог файл.
Логи fail2ban пишет в /var/log/fail2ban.log или настройте сами, куда вам удобно в /usr/local/etc/fail2ban/fail2ban.conf
Постскриптум
В папке filter.d вы можете найти много различных фильтров ко многим известным сервисам, да вы и сами можете написать их, это не так сложно.
И еще по поводу Asterisk. Помните, fail2ban не поможет Вам, если вы используете легкие пароли (123 и т.д.), используйте сложные, длинные пароли, по возможности привязывайте аккаунты к ip адресам. Только совокупность этих мер поможет вам и вашей компании не получить гигантский счет за связь.
APF и BFD для защиты Asterisk
BFD расшифровывается как Brute Force Detection (обнаружение брутфорса). Он используется, чтобы контролировать любые неудавшиеся попытки входа в систему и блокировать IP-адреса. Он запускается как демон cron и отлично работает с APF.
Установка обеих программ очень проста. Вы можете загрузить их с сайтов, указанных выше, распаковать и запустить install.sh. Тим также создал скрипт инсталлятора, который устанавливает последнюю версию APF/BFD. Чтобы получить этот скрипт, Вы можете использовать wget. Зайдите под root и выполните следующие команды:
wget http://engineertim.com/install_apf_bfd.sh
chmod 755 install_apf_bfd.sh
./install_apf_bfd.sh
APF
Конфиг APF находится в /etc/apf/conf.apf
Чтобы начать редактировать файл, используйте следующую команду:
Рекомендуется установить SET_TRIM=0 для интерфейса, смотрящего в Интернет.
Фильтрация входящего трафика используется, чтобы открыть порты для доступа; у TCP и UDP есть отдельные параметры настройки. Для Asterisk (Trixbox) следующие порты должны быть открытыми; и TCP и UDP перечислены. Если Вы не используете TFTP, то не открывайте порт 69. Не забывайте изменять порт SSH. Иначе, Вы не сможете получить доступ; здесь мы используем порт 2222 из нашего последнего примера. Мы не включали порты IAX в эту установку. Есть легкий способ убедиться, что только определенные хосты могут использовать IAX, который мы откроем позже. Это удобно, если Вы используете IAX, чтобы поднять межстанционные транки, невидимые для внешнего мира.
IG_UDP_CPORTS="69,5060,10000_20000"
Чтобы увидеть список параметров командной строки, запустите apf без флагов.
apf(3402): {glob} status log not found, created
APF version 9.6 < apf@r-fx.org>
Copyright (C) 1999-2007, R-fx Networks < proj@r-fx.org>
Copyright (C) 2007, Ryan MacDonald < ryan@r-fx.org>
This program may be freely redistributed under the terms of the GNU GPL
usage /usr/local/sbin/apf [OPTION]
-s|--start ......................... load all firewall rules
-r|--restart ....................... stop (flush) & reload firewall rules
-f|--stop........ .................. stop (flush) all firewall rules
-l|--list .......................... list all firewall rules
-t|--status ........................ output firewall status log
-e|--refresh ....................... refresh & resolve dns names in trust
rules
-a HOST CMT|--allow HOST COMMENT ... add host (IP/FQDN) to
allow_hosts.rules and immediately load new rule into firewall
-d HOST CMT|--deny HOST COMMENT .... add host (IP/FQDN) to
deny_hosts.rules and immediately load new rule into firewall
-u|--remove HOST ................... remove host from
[glob]*_hosts.rules and immediately remove rule from firewall
-o|--ovars ......................... output all configuration options
Для старта APF мы используем следующие команды:
apf(3445): {glob} activating firewall
apf(3489): {glob} determined (IFACE_IN) eth0 has address 192.168.1.31
apf(3489): {glob} determined (IFACE_OUT) eth0 has address 192.168.1.31
apf(3489): {glob} loading preroute.rules
apf(3489): {resnet} downloading http://r-fx.ca/downloads/reserved.
networks
apf(3489): {resnet} parsing reserved.networks into
/etc/apf/internals/reserved.networks
apf(3489): {glob} loading reserved.networks
apf(3489): {glob} SET_REFRESH is set to 10 minutes
apf(3489): {glob} loading bt.rules
apf(3489): {dshield} downloading http://feeds.dshield.org/top10-2.txt
apf(3489): {dshield} parsing top10-2.txt into /etc/apf/ds_hosts.rules
apf(3489): {dshield} loading ds_hosts.rules
apf(3489): {sdrop} downloading http://www.spamhaus.org/drop/drop.lasso
apf(3489): {sdrop} parsing drop.lasso into /etc/apf/sdrop_hosts.rules
apf(3489): {sdrop} loading sdrop_hosts.rules
apf(3489): {glob} loading common drop ports
...........trimmed for this document.........
apf(3489): {glob} default (ingress) input drop
apf(3445): {glob} firewall initalized
apf(3445): {glob} !!DEVELOPMENT MODE ENABLED!! - firewall will flush
every 5 minutes.
Мы можем видеть, что APF стартанул, загрузил несколько правил с dshield.org и spamhaus.org. Теперь проведем тест захода на Asterisk (Trixbox)-сервер по SSH, чтобы убедиться, что Вы настроили все правильно. Если Вы не можете соединиться, необходимо подождать 5 минут, и затем APF снимет блокировку. Как только Вы уверены, что можете войти по SSH, мы можем изменить в conf.apf DEVEL_MODE = "1" на DEVEL_MODE = "0" и перезапустить APF. APF стартанет и не выдаст предупреждение о том, чтобы он находится в DEVELOPMETN_MODE.
APF: дополнительный тюнинг
Это позволит системе 192.168.1.216 соединяться с любым портом на зафаерволенном сервере, таким образом, обходя правила брандмауэра. Если Вы управляете APF на обоих Asterisk (Trixbox), убедитесь, что сделали ту же самую вещь на другом хосте, использующем правильный IP-адрес.
APF также позволяет системному администратору блокировать хост или целую подсеть. Это удобно, если Вы видите, что кто-то пытается соединиться с Вашей машиной по FTP, Telnet, SSH и так далее. Чтобы заблокировать определенный хост, используйте следующее: убедитесь, что использовали IP-адрес, который Вы хотите заблокировать.
for i in `echo $TOS_0 | tr ',' ' '`; do
i=`echo $i | tr '_' ':'`
$IPT -t mangle -A PREROUTING -p tcp --sport $i -j TOS --set-tos 0
done
fi
Мы должны добавить параметры настройки для UDP. Мы копируем одну строку и изменяем tcp на udp. Образец ниже.
for i in `echo $TOS_0 | tr ',' ' '`; do
i=`echo $i | tr '_' ':'`
$IPT -t mangle -A PREROUTING -p tcp --sport $i -j TOS --set-tos 0
$IPT -t mangle -A PREROUTING -p udp --sport $i -j TOS --set-tos 0
done
fi
BFD
Первая переменная конфигурации, на которую мы обратим внимание, - TRIG; это число неудавшихся попыток прежде, чем злоумышленник будет заблокирован. По умолчанию равно 15. Имейте в виду, что это число попыток не с одного аккаунта, а с одного IP-адреса. Так, если с 1 IP-адреса прихоидт 15 неудачных попыток входа, используя разные аккаунты, он все равно будет залочен.
У BFD есть хорошая фича - послать электронные письма при обнаружении брутфорса. Чтобы включить данную опцию, установите EMAIL_ALERTS в 1; не забудьте указать адрес, на который Вы хотите получать уведомления - EMAIL_ADRESS.
BFD запускается cron-ом каждые 3 минуты и находится в /etc/cron.d.
Вы можете получить список забаненных IP-адресов, используя команду:
bfd -s
Резюме
С оригиналом статьи Вы можете ознакомиться по ссылке
http://packtpub.com/article/securing-your-trixbox-server
Asterisk и fail2ban или как что делать с iptables
Код безопасности Asterisk от Ranch Networks
Компания Digium, создавшая Asterisk, специализирующаяся в области телефонии на открытых кодах, и фирма Ranch Networks, разработчик устройств для IP-телефонии, представляют свой код безопасности для платформы открытых кодов Asterisk.
Совместное использование Asterisk и устройств модельного ряда RN производства Ranch Networksобеспечивает безопасность и масштабирование для телефонии на открытых кодах. Загрузить код можно с сайта ranchnetworks.com.
По мнению разработчиков, устройства Ranch Networks решают проблемы, присущие VoIP, как путем интеграции MIDCOM с платформой Asterisk, так и при помощи ряда собственных технологий, находящихся в стадии оформления патента. MIDCOM-интеграция обеспечивает динамическое управление межсетевыми экранами для каждого звонка, управление шириной полосы пропускания, прохождение NAT и маршрутизацию потоков, передаваемых по протоколу RTP, при этом поддерживая прохождение шифрованных потоков. В то же время ожидающие патента технологии Ranch Networks позволяют разделить голосовой трафик, видеосигналы и трафик данных по множественным изолированным зонам безопасности без необходимости реконфигурации IP-адресов.
«Безопасность решений на базе SIP вызывает серьезное беспокойство, — говорит президент Digium и автор платформы Asterisk Марк Спенсер. — Необходимость держать порты постоянно открытыми для прохождения голосового трафика распахивает двери для нежелательных визитеров в вашу сеть. Наша же технология не только обеспечивает активную безопасность VoIP еще до того, как создаются предпосылки к вторжению, но и позволяет управлять распределением нагрузки и качеством обслуживания, а также масштабировать систему».
Защита Asterisk или элементарные правила безопасности VoIP
Правило первое: Всегда менять логины и пароли на вех сетевых устройствах. Особенно на IP телефонах, VoIP шлюзах и т.д.
Пароли абонентов, админов, менеджеров Asterisk и т.д. должны состоять, не менее чем из 12 символов (буквы, цифры, перемена регистра), используйте сложные логины и паролиНе соблюдение этого простого правила стоило 15000 рублей.
Правило второе: Использовать нестандартные порты SIP, IAX, SSH. Применение данной модели безопасности не даст особого эффекта защиты само по себе, но несколько усложнит задачу злоумышленников, а в купе с другими рекомендациями поможет избавиться от незапланированных трат.
Меняйте стандартные порты на любые другие. Чем он будет больше непохож на стандартный – тем лучше.
SIP: Настройка порта производится в файле sip. Conf в секции general:
Bindport=5060 => bindport=5172
SSH: Новый порт не должен конфликтовать с уже открытыми в системе портами. Например, будем использовать 9321. Редактируем /etc/ssh/sshd_config.
меняем в строке порт на любой свободный ;bindport=4569
Перезапускаем Asterisk командой /etc/ininit.d/asterisk restart
Правило третье: Использовать пользователя с правами доступа по SSH. Следует создать юзера и наделить его правами доступа только по SSH. Сейчас мы создадим пользователя myasterisk и зададим ему пароль. Пароль должен содержать символы, числа и буквы со сменой регистра.
Правило четвертое: Задать разрешенные адреса для внутренних абонентов (Deny/Permit).
Для каждого экстеншена задаем диапазон адресов или допустимый IP адрес.
Правило четвертое: Отключить ответ о неверном пароле.
Правило пятое: Отключить гостевые вызовы (guest-звонки) и регистрации.
Данный вариант подойдет не всем пользователям, иногда бывает, что отказаться от guest-вызовов не представляется возможным.
Правило шестое: Установить лимит звонков.
Правило седьмое: Использовать различные правила исходящей маршрутизации.
Эти простейшие семь правил, которые помогут вам защитится от элементарных методов хищения вашего трафика. Также рекомендую обсудить с вашим sip провайдером возможность регистрации только с вашего ip адреса, установить лимит расходования средств в сутки, исходя их ваших средних затрат, Также думаю будет не лишним отключить междугороднюю и международную связь, если вы ей не пользуетесь, или сделать возможным совершать исходящие МГ и МН вызовы после ввода pin кода.
Сейчас перейдем к более серьезным настройкам для защиты вашего Asterisk.
Правило восьмое: Использовать Iptables и Fail2ban.
Думаю все слышали про программу Fail2ban, а некоторые даже умеют настраивать её для работы с логом Asterisk. Действительно, вылавливая строки вида «failed for ’127.0.0.1′ – Wrong password» и «failed for ’127.0.0.1′ – Peer is not supposed to register» – можно существенно сократить количество мусорного SIP трафика. Однако, есть несколько неприятных ситуаций, в которых анализ лога Asterisk не поможет. Например, в случае когда злоумышленник посылает запрос REGISTER без идентификационных данных – в логе никогда не появится сообщение «Wrong password».
Лично я не особо боюсь того, что к моей системе подберут пароль одного из клиентов. Вероятность данного события мала, поскольку все пароли в системе стойкие. И даже если пароль подберут, у большинства клиентов установлено ограничение на 1-2 одновременных вызова. Для меня неприятность SIP брутфорса заключается в другом. Дело в том, что в Asterisk вся SIP UDP сигнализация обрабатывается одним единственным тредом. Обработка SIP трафика – ресурсоёмкий процесс, 7-8 мегабит мусорных запросов заставляют Asterisk полностью скушать ядро процессора (например Intel E5335, E5405). Когда ядро полностью съедено, происходит вытеснение полезного SIP трафика – мусорным. Перестают работать DTMF у клиентов использующих SIP INFO. Начинаются проблемы с установкой новых и завершением существующих соединений. И вот это – основная угроза которую несут роботы-брутфорсеры.
Так как же бороться с проблемами о которых нет сообщений в логах? Очень просто – необходимо сгенерировать сообщение о проблеме самому, тогда всю остальную часть нашей системы противодействия (например программу fail2ban) можно будет оставить без изменений. Характерным признаком брутфорса является большое количество SIPпакетов в единицу времени. Посчитать количество пакетов в единицу времени можно с помощью модуля iptables под названием recent. В интернете есть много примеров как с помощью модуля recent отбрасывают пакеты приходящие с частотой выше определённой. Мы, вместо отбрасывания, будем генерировать сообщения для нашей системы обнаружения атак (например fail2ban). Такой подход имеет свои недостатки и преимущества. Основным недостатком является, то что на обработку сообщений будут тратиться ресурсы системы, тогда как отбрасывание пакета условно бесплатное. Преимуществ чуть больше: мы сможем воспользоваться всеми возможностями нашей системы обнаружения атак, такими как белые списки IP адресов, единообразный учёт всех обнаруженных атак и так далее.
От теории – к практике! Подготовим скелет из правил iptables:
-A INPUT -p udp --dport 5060 -j SCAMBLOCK -A INPUT -p udp --dport 5060 -m recent --set --name SIP -A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \ -j LOG --log-prefix "SIP flood detected: "
Первое правило проверяет наш пакет по цепочке SCAMBLOCK. В данной цепочке хранятся заблокированные IP адреса, если пакет совпадает с одним из адресов этой цепочки – он отбрасывается. Если пакет не отброшен, то во втором правиле он помечается для учёта под именем SIP. Третье правило считает не превысил ли данный пакет указанное количество (60) за указанное время (2 секунды). Если количество не превышено – правило игнорируется, если превышено – выполняется действие. В нашем случае в системный лог пишется детальная информация о пакете начинающаяся со строки «SIP flood detected: «. Количество пакетов и время считаются отдельно для каждого источника. Таким образом получается, что мы ограничили скорость приёма SIP пакетов от каждого незаблокированного IP адреса на уровне 30 пакетов в секунду. Для меня данное ограничение является комфортным, с одной стороны все клиенты, даже самые крупнные, шлют пакеты с одного IP адреса со скоростями ниже 30 пакетов/с, с другой стороны, 30 пакетов в секунду практически не отражаютя на работе системы. Возможно, что эту величину следует подправлять в ту или иную сторону в зависимости от производительности сервера, количества и типа абонентов.
В некоторых системах встроенное ограничение модуля recent на параметр hitcount весьма небольшое, например в CentOS это ограничение составляет 20 пакетов. Если вы попробуете выполнить приведенную выше команду, то получите следующую ошибку:
iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \ -j LOG --log-prefix "SIP flood detected: " iptables: Unknown error 4294967295
Или вот так, для 64 битных систем:
iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \ -j LOG --log-prefix "SIP flood detected: " iptables: Unknown error 18446744073709551615
Изменить максимальное ограничение можно передав модулю recent специальный параметр при загрузке. Для этого создадим файл /etc/modprobe.d/ipt.conf и пропишем в нём интересующий нас параметр:
options ipt_recent ip_pkt_list_tot=60
Будьте осторожны увеличивая данное ограничение, помните что вместе с ним увеличивается память, требуемая для хранения последних пакетов, а также количество циклов процессора требуемые на их обработку.
Ну вот и всё, теперь любой флуд на порт 5060 будет обнаружен с помощью модуля recent пакета iptables. Сообщение об обнаруженном флуде будет направлено в системный лог где его сможет увидеть наша любимая система обнаружения атак (например fail2ban). iptables не ограничивает нас одним лишь системным логом, действию LOG можно указать уровень (level) и facility сообщения, а в настройках Syslog перенаправить данные сообщения в отдельный файл. Сами же сообщения о SIP флуде будут выглядеть вот так:
Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3 DST=192.168.224.217 LEN=370 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP SPT=5495 DPT=5060 LEN=350 Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3 DST=192.168.224.217 LEN=369 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP SPT=5495 DPT=5060 LEN=349 Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:
Соблюдайте правила безопасности, чтобы не стать очередным героем этого ролика!
Automated VOIP penetration testing using sipautohack from Sandro Gauci on Vimeo.