Захист asterisk від злому
Як я вже якось раз згадував, довелося мені вивести непідготовлений Астеріск в інтернет і забув про це .. Буквально через кілька тижнів мені про це нагадали рахунки від SIP-провайдера, де красувалися значні суми. Мені знову пощастило, що провайдер заблокував акаунт після досягнення ліміту кредиту і ми не пішли у великий і віддалений ... Хмм ... Мінус :) Щоб уникнути повторення проблем, я опишу приблизний перелік заходів, які я з тих пір проводжу над Астеріск перед виведенням його в інтернет.
В інтернеті гуляє безліч історій про зломи астеріска і подальшої кари від оператора. Десь лежала байка про якусь маленької компанії в Австралії, яку попало залетіти на $ 15000-20000. Думаю ніхто не хоче опинитися в подібній ситуації. Значно краще, не чекаючи біди, зробити деякий комплекс заходів, який значно скоротить кількість варіантів злому і мінімізує небезпеку.
Оборона динамічними правилами фаервола
Я вже писав про захист програмою fail2ban. Працює теж досить ефективно, втім існує деяка заковика. Астеріск не підтримує таймаут між спробами реєстрації та по-цьому лиходій за дуже малий проміжок часу (кілька секунд), поки реагує fail2ban, може встигати зробити значно більше спроб підбору, ніж ми вказуємо в налаштуваннях. У мене є приклади, коли блокування відбувалася на ~ 95й спробі підбору, що не їсти гуд.
Нестандартний порт замість 5060
Якщо є технічна можливість - ОБОВ'ЯЗКОВО міняйте стандартний порт 5060 на будь-який подібний. Чим він буде більше несхожий на стандартний - тим краще. Зловмисники досить скоро знайдуть ваш Астеріск звичайним скануванням портів за діапазоном адрес. Це відбудеться вкрай скоро - перші спроби підбору пароля у мене виявилися вже через 3 дні після виведення Астеріск в інтернет.
Налаштування порту проводиться у файлі sip. Conf в секції general:
Bindport = 5060 = gt; bindport = 5172
Після таких дій, число підбирачів зменшиться практично попередньо нуля.
Відключаємо guest-дзвінки
Якщо у вас немає необхідності приймати дзвінки без реєстрації, неодмінно вимкніть наступну опцію в sip.conf:
Allowguest = yes = gt; allowguest = no- Allow or reject guest calls (default is yes)
Відключаємо повідомлення про невірному паролі
Практично у всіх існують акаунти asterisk виду 100, 200, 700 і т.п. За замовчуванням Астеріск видає одну помилку про невірний пароль для існуючого облікового запису і іншу для неіснуючого аккаунта. З через спец. Софта для підбору паролів, лиходій може швидко перебрати всі короткі номери і збирати паролі лише до існуючих акаунтів, які відповіли «невірний пароль». Щоб перешкодити цьому, міняємо опцію в sip.conf:
Alwaysauthreject = no = gt; alwaysauthreject = yes
Після такого налаштування, Астеріск буде давати єдиний відбій для будь-яких невірних авторизаций.
Використовуємо складні паролі для акаунтів
Будь пароль можна підібрати, проблема тільки в часі. Оскільки настройка sip-пристроїв проводиться один раз і надовго, не скупіться на складні паролі. Для себе я використовую довгі паролі з комбінаціями великих і маленьких букв + цифр такого виду:
Secret = f64GCD74ssdZ42
НЕОДМІННО приберіть всі паролі збігаються з логінами. Це - перші паролі, використовувані для паролів.
Використовуємо deny / permit для акаунтів
Обов'язковий момент! Вказуємо для всіх акаунтів, які не мають на увазі підключення з інтернету наступні рядки:
100 ...
Deny = 0.0.0.0 / 0.0.0.0
Permit = 10.1.1.1 / 24
Permit = 10.1.2.1 / 24
Де 10.1.1.1,10.1.2.1 - діапазони локальних адрес, з яких буде проводиться підключення. Підключення з інших адрес asterisk приймати не буде.
Встановлюємо ліміт дзвінків
У разі злому, для зменшення витрат, рекомендую встановити ліміт одночасних дзвінків для акаунтів в 1, щоб злочинець не міг відразу телефонувати на безліч напрямків і, тим самим, швидше витрачати ваші кошти.
100
Call-limit = 1 ...
Не використовуємо default-екстеншн без необхідності
Не потрібно воно нам :) Все, що має бути в дефолті:
Default
Exten = gt; _X., 1, Hangup
Не робимо одне універсальне постанову для всіх дзвінків
Скажемо ні правилам види:
Exten = gt; _X., 1, Dial (SIP / $ EXTEN @ operator)
Прописуємо чітко всі необхідні комбінації номерів, переданих оператору. Якщо немає необхідності використовувати міжнародну зв'язок - не описуйте правила для неї взагалі. Практично всі випадки зломів використовуються для дзвінків заграніцу.- Екстрені служби
Exten = gt; _0X, 1, Dial (SIP / $ EXTEN @ operator)
Exten = gt; _0X, N, Hangup-Москва
Exten = gt; _8495XXXXXXX, 1, Dial (SIP / $ EXTEN @ operator)
Exten = gt; _8495XXXXXXX, N, Hangup
Exten = gt; _8499XXXXXXX, 1, Dial (SIP / $ EXTEN @ operator)
Exten = gt; _8499XXXXXXX, N, Hangup
Exten = gt; _XXXXXXX, 1, Dial (SIP / $ EXTEN @ operator)
Exten = gt; _XXXXXXX, N, Hangup- Міжмісто Росія / Мобільні
Exten = gt; _8XXXXXXXXXX, 1, Dial (SIP / $ EXTEN @ operator)
Exten = gt; _8XXXXXXXXXX, N, Hangup
На цьому мабуть закінчимо :)