1 | изначальная версия редактировать | |
Гостей запрещать не хочу, поэтому озаботился банилкой. Раньше банил только за сип флуд (по количеству пакетов в минуту), но решил добраться и до остальных.
Дефолтный сип контекст для 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:.*
2 | No.2 Revision редактировать |
Гостей запрещать не хочу, поэтому озаботился банилкой. Раньше банил только за сип флуд (по количеству пакетов в минуту), но решил добраться и до остальных.
Дефолтный сип контекст для 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:.*
3 | No.3 Revision редактировать |
Гостей запрещать не хочу, поэтому озаботился банилкой. Раньше банил только за сип флуд (по количеству пакетов в минуту), но решил добраться и до остальных.
Дефолтный контекст для 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.