Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2013-09-28 13:56:48 +0400

borispr Gravatar borispr

Решил приделать автоматическую банилку левых звонков

Гостей запрещать не хочу, поэтому озаботился банилкой. Раньше банил только за сип флуд (по количеству пакетов в минуту), но решил добраться и до остальных.

Дефолтный сип контекст для SIP - from-external, звонки на "правильный" did идут дальше, а остальные банить! :)

[from-external]
exten => 1111111,1,Goto(ext-did,1111111,1)
exten => _X.,1,Ringing
exten => _X.,n,System(/var/lib/asterisk/bin/sipban.sh ${CHANNEL} ${EXTEN})
exten => _X.,n,Wait(900)
exten => _X.,n,Hangup

Ringing и Wait(900) для удобства отладки. Для работы ringing можно убрать и сделать Wait(10). ${EXTEN} передается просто для инфы, он в логе присутствовать будет.

скрипт /var/lib/asterisk/sipban.sh

channels=`asterisk -rx "sip show channels"|awk '/Rx: INVITE/&&/<guest>/'`
oldIFS=$IFS
IFS=$'\n'
for line in $channels
do
peer=`echo $line|awk -F' ' '{print($1)}'`
chan_id=`echo $line|awk -F' ' '{print($3)}'`
chan=`asterisk -rx "sip show channel $chan_id"|grep 'Owner channel ID'|awk '{print($4)}'`
if [[ "$chan" == "$1" ]]
then
  logger -t sipguest "peer:$peer channel:$chan extension:$2"
  break
fi
done
IFS=$oldIFS

Если при выводе каналов "sip show peers" в конце не выдается локальный пир, то нужно заменить в первой строке на аsterisk -rx "sip show channels"|grep 'Rx: INVITE'

Скрипт кидает в /var/log/messages строку

Sep 28 12:55:42 hostname sipguest: peer:192.187.115.66 channel:SIP/xx.xx.xx.xx-000000c0 extension:00441904891101

А дальше пусть с этим fail2ban разбирается.
Строка разбора для fail2ban:

.* sipguest: peer:<host> channel:SIP.* extension:.*

Решил приделать автоматическую банилку левых звонков

Гостей запрещать не хочу, поэтому озаботился банилкой. Раньше банил только за сип флуд (по количеству пакетов в минуту), но решил добраться и до остальных.

Дефолтный сип контекст для SIP - from-external, звонки на "правильный" did идут дальше, а остальные банить! :)

[from-external]
exten => 1111111,1,Goto(ext-did,1111111,1)
exten => _X.,1,Ringing
exten => _X.,n,System(/var/lib/asterisk/bin/sipban.sh ${CHANNEL} ${EXTEN})
exten => _X.,n,Wait(900)
exten => _X.,n,Hangup

Ringing и Wait(900) для удобства отладки. Для работы ringing можно убрать и сделать Wait(10). ${EXTEN} передается просто для инфы, он в логе присутствовать будет.

скрипт /var/lib/asterisk/sipban.sh

channels=`asterisk -rx "sip show channels"|awk '/Rx: INVITE/&&/<guest>/'`
oldIFS=$IFS
IFS=$'\n'
for line in $channels
do
peer=`echo $line|awk -F' ' '{print($1)}'`
chan_id=`echo $line|awk -F' ' '{print($3)}'`
chan=`asterisk -rx "sip show channel $chan_id"|grep 'Owner channel ID'|awk '{print($4)}'`
if [[ "$chan" == "$1" ]]
then
  logger -t sipguest "peer:$peer channel:$chan extension:$2"
  break
fi
done
IFS=$oldIFS

Если при выводе каналов "sip show peers" в конце не выдается локальный пир, то нужно заменить в первой строке на аsterisk -rx "sip show channels"|grep 'Rx: INVITE'

Скрипт кидает в /var/log/messages строку

Sep 28 12:55:42 hostname sipguest: peer:192.187.115.66 channel:SIP/xx.xx.xx.xx-000000c0 extension:00441904891101

А дальше пусть с этим fail2ban разбирается.
Строка разбора для fail2ban:

.* sipguest: peer:<host> channel:SIP.* extension:.*

Решил приделать автоматическую банилку левых звонков

Гостей запрещать не хочу, поэтому озаботился банилкой. Раньше банил только за сип флуд (по количеству пакетов в минуту), но решил добраться и до остальных.

Дефолтный контекст для SIP - from-external, звонки на "правильный" did идут дальше, а остальные банить! :)
И, конечно же, звонки через транки не должны попадать в этот контекст!

[from-external]
exten => 1111111,1,Goto(ext-did,1111111,1)
exten => _X.,1,Ringing
exten => _X.,n,System(/var/lib/asterisk/bin/sipban.sh ${CHANNEL} ${EXTEN})
exten => _X.,n,Wait(900)
exten => _X.,n,Hangup

Ringing и Wait(900) для удобства отладки. Для работы ringing можно убрать и сделать Wait(10). ${EXTEN} передается просто для инфы, он в логе присутствовать будет.

скрипт /var/lib/asterisk/sipban.sh

channels=`asterisk -rx "sip show channels"|awk '/Rx: INVITE/&&/<guest>/'`
oldIFS=$IFS
IFS=$'\n'
for line in $channels
do
peer=`echo $line|awk -F' ' '{print($1)}'`
chan_id=`echo $line|awk -F' ' '{print($3)}'`
chan=`asterisk -rx "sip show channel $chan_id"|grep 'Owner channel ID'|awk '{print($4)}'`
if [[ "$chan" == "$1" ]]
then
  logger -t sipguest "peer:$peer channel:$chan extension:$2"
  break
fi
done
IFS=$oldIFS

Если при выводе каналов "sip show peers" в конце не выдается локальный пир, то нужно заменить в первой строке на аsterisk -rx "sip show channels"|grep 'Rx: INVITE'

Скрипт кидает в /var/log/messages строку

Sep 28 12:55:42 hostname sipguest: peer:192.187.115.66 channel:SIP/xx.xx.xx.xx-000000c0 extension:00441904891101

А дальше пусть с этим fail2ban разбирается.
Строка разбора для fail2ban:

.* sipguest: peer:<host> channel:SIP.* extension:.*

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.