63 '- Wrong password2ban для asterisk працює таким чином:
enabled = true = asterisk = iptables [name = ASTERISK] = xmpp [name = ASTERISK] =/var/log/asterisk/messages = 5
bantime = 259200
Використовуючи фільтр asterisk, який описується як
Registration from '. *' failed for '' - Wrong passwordfrom '. *' failed for '' - No matching peer found
шукаються запису В«Wrong passwordВ» і В«No matching peer foundВ» і якщо їх кількість відповідає параметру bantime = 259200, то на відповідний ip адресу накладається блокування через iptables:
$ IPTABLES-A INPUT-s 176.67.48.163-j DROP
5.4 Аналіз стан локальних користувачів сервера телефонії
Спершу потрібно зрозуміти, що локальні користувачі сервера телефонії це не тільки людина, яка сидить за soft-фоном або за будь-яким іншим sip-клієнтом, а й voip і goip шлюзи, sip-транки від постачальника послуги віртуальних номерів. За всі ці послуги власники сервера платять гроші і коли щось з перерахованого не працює (за будь-якої причини), організація втрачає гроші, що нам і допоможе вирішити ця частина скрипта. p align="justify"> Для початку опишемо з чим в цьому блоці доведеться працювати, а саме:
На сервері встановлена ​​PBX Asterisk 1.4.42 з GUI Voiceone - v.0.7.1.
Так само у нас є два goip шлюзу і один sip транк, які налаштовані і працюють в штатному режимі. Приклад одного з транков:
[trunk_500]
; SIP/w_ht323_0.222_2P Channel-Incoming context = +8632309777,1, NoOp (Incoming-8632309777: trunk_500 CallerID: $ {CALLERID (all)} - Calling: $ {EXTEN}) = _8632309777., 1, NoOp (Incoming-8632309777: trunk_500 CallerID: $ {CALLERID (all)} - Calling: $ {EXTEN}) = s, 1, NoOp (Incoming-s. CallerID: $ {CALLERID (all)} - Calling: $ {EXTEN}) = s, n, AGI (incoming.php | answered = $ {EXTEN} & channel = 500 & rule = 2 & uniqueid = $ {UNIQUEID}) = t, 1, Hangup
Збираємо дані про цікавлять нас Транки:
$ noSession = true; include ("/ home/www/voiceone/voiceone/admin/config/cfg.php"); $ ret = $ asterisk-> getTrunk (0, 0) ; if ($ err = $ asterisk-> getError ()) die ("Trunk error: $ err"); $ trunk_count = count ($ ret);
І кладемо ці дані в wtcher.log. Функція, що описує це дію: put_log ($ text)
Якщо в момент збору відомостей транки змінилися, то ми запускаємо цю частину заново:
while (true) {$ msg = ""; $ ret2 = $ asterisk-> getTrunk (0, 0); if (count ($ ret2)! = $ trunk_count) {exit ;} if ($ md5_script <> md5_file (__FILE__)) {put_log ("Restart script. Change MD5 script:". __ FILE__); exit (1);}
Всі статичні дані про Тр...