Моя конфигурация FreePBX / Asterisk недавно была принудительно разрешена как для анонимных входящих вызовов, так и для гостей SIP. Так что, конечно, сейчас нас атакуют попытки спама / взлома.
Они отображаются в журнале как:
[2020-05-02 11:09:53] ПРЕДУПРЕЖДЕНИЕ [30801]: res_pjsip_registrar.c: 1051 registrar_on_rx_request: конечная точка «анонимная» не имеет настроенных AOR
И получаем десятки в секунду.
Могу ли я внести изменения в конфигурацию, чтобы по существу заблокировать каждый из них каким-либо механизмом, который просто заставляет вызывающего абонента ждать некоторое время (например, час), а затем вешает трубку? Я думаю, что это ограничит ресурсы спамеров и на порядки снизит полосу пропускания, которую они используют.
Итак, во-первых, возможно ли это? Как сделать это безопасно?
Во-вторых, есть ли у этого серьезные недостатки? Например, замедление любой перезагрузки конфигурации на порядок или что-то в этом роде.
Какие-нибудь мысли или советы по теме?
Я бы добавил несколько iptables.
Я бы начал с просмотра каналов sip show и / или использования tcpdump и некоторых прямых команд консоли asterisk.
tcpdump -i eth0 port sip -l -A | egrep -i 'INVITE sip'
tcpdump -i eth0 port sip -l -A | egrep -i 'User-Agent'
# tcpdump -i ens3 port sip -l -A | egrep -i 'INVITE sip'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
15:58:28.377294 IP ns542407.ip-144-217-77.net.7112 > 10.0.0.11.sip: SIP: INVITE sip:+10390237920793@107.179.205.23:5060 SIP/2.0
...........INVITE sip:+10390237920793@107.179.205.23:5060 SIP/2.0
asterisk -rx "sip show channels"
Peer User/ANR Call ID Format Hold Last Message Expiry Peer
13.78.236.138 7780 1317157998-1339 (nothing) No Rx: INVITE <guest>
144.217.77.27 8888942908 00lFxPc9nsGj22f (nothing) No Rx: ACK <guest>
если ваши запросы - ПРИГЛАСИТЬ или РЕГИСТРАЦИЯ, как в моем примере. вы можете замедлить их с помощью iptables вручную или узнать, как добавить это при загрузке, в зависимости от вашей версии Linux. (микросфти я понятия не имею)
iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "INVITE sip:" --algo bm --to 65535 -m recent --update --seconds 60 --hitcount 12 --rttl --name VOIPINV --rsource
iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "INVITE sip:" --algo bm --to 65535 -m recent --set --name VOIPINV --rsource
iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "REGISTER sip:" --algo bm --to 65535 -m recent --update --seconds 60 --hitcount 12 --rttl --name VOIP --rsource
iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "REGISTER sip:" --algo bm --to 65535 -m recent --set --name VOIP --rsource
Вы можете играть с разными переменными (секунды / счетчик / строка). Я считаю, что с помощью fail2ban это эффективно замедляет их работу. не говоря уже о блокировке диапазонов стран с ipset, к которым эта телефонная система не будет иметь много подключений для людей.