{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Очередной IT блог: заметки с тегом voicemail",
    "_rss_description": "Очередной IT блог",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/crabs.pro\/tags\/voicemail\/",
    "feed_url": "https:\/\/crabs.pro\/tags\/voicemail\/json\/",
    "icon": "https:\/\/crabs.pro\/pictures\/userpic\/userpic@2x.jpg?1700078106",
    "authors": [
        {
            "name": "lifespirit",
            "url": "https:\/\/crabs.pro\/",
            "avatar": "https:\/\/crabs.pro\/pictures\/userpic\/userpic@2x.jpg?1700078106"
        }
    ],
    "items": [
        {
            "id": "3",
            "url": "https:\/\/crabs.pro\/all\/boremsya-so-spamom-s-pomoschyu-asterisk\/",
            "title": "Боремся со спамом с помощью Asterisk",
            "content_html": "<p>Сегодня мне на мобильный позвонили очередные спамеры-мошенники и я серьёзно задумался о том, чтобы избавиться от них насовсем, так как их подход становится всё агрессивнее и агрессивнее от месяца к месяцу. К тому же давно хотел получать голосовую почту в telegram и желания совпали с необходимостью. Я пользуюсь Мегафоном, так что я «стёр пыль» с услуги Мультифон, прикупил VPS на Ubuntu и сел писать скрипты для Asterisk. И так, если вам интересно пострить автоотбивку для спамеров а заодно и принимать голосовую почту в telegram, приветствую.<\/p>\n<p>Почему именно Asterisk, ведь есть куча приложений на телефон? Потому что asterisk может поднять трубку и проговорить «Номер абонента больше не используется» или включить что нибудь более особенное спамеру, а это значит что спамер заплатит за этот звонок, а вы нет. Потому что входящие бесплатны. Так же это позволит вообще не подходить к телефону при звонках спамеров, а только читать в ленте сообщений от телеграм бота что были спам звонки.<\/p>\n<p>Я пользуюсь Мегафоном, поэтому SIP шлюз у меня есть как услуга. Тем не менее вы можете использовать нижеописанный метод для любого оператора, предварительно изменив шаги таким образом, что бы они соответствовали вашей ситуации. Я так же не буду описывать покупку VPS так как тут вопрос на усмотрение каждого. Лишь скажу что рекомендую покупать поближе к точке терминации оборудования провайдера. В моём случае это Москва.<\/p>\n<p>ВАЖНО! Нулевым шагом мы настроим iptables. Важно хотя бы примерно понимать что означают те или иные команды. Так же я напоминаю что при первом входе необходимо сменить пароль системного пользователя на максимально сложный, или в идеальном случае сделать вход на сервер только по ключам, так как если злоумышеник получит доступ к серверу телефонии он сможет бесконтрольно звонить с вашего номера.<\/p>\n<h2>Шаг 0. «Усиливаем безопасноть».<\/h2>\n<p>Этот шаг исходит из того что на сервере нет ничего кроме asterisk. Если есть ещё что-то то вам придётся исправить правила iptables под свой случай. Итак, установим iptables-persistent и fail2ban<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt install iptables-persistent fail2ban<\/code><\/pre><p>Далее создадим два файла:<br \/>\n<b>\/etc\/iptables\/rules.v4<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Generated by ip6tables-save v1.6.0 on Thu Sep  8 13:29:11 2016\r\n*filter\r\n:INPUT DROP [0:0]\r\n:FORWARD DROP [0:0]\r\n:OUTPUT ACCEPT [0:0]\r\n-A INPUT -i lo -j ACCEPT\r\n#Лучше не блокировать icmp вообще так как получится blackhole, что не очень хорошо, а просто уменьшить доступную пропускную способность для icmp пакетов\r\n-A INPUT -p icmp -m limit --limit 15\/sec -j ACCEPT\r\n-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT\r\n#Multifon SBC\r\n-A INPUT -s 193.201.229.35\/32 -p udp -m udp --dport 5060 -j ACCEPT\r\n#Multifon Media Gateway\r\n-A INPUT -s 193.201.229.19\/32 -p udp -m udp --dport 10000:10100 -j ACCEPT\r\n#SSH\r\n-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT\r\nCOMMIT<\/code><\/pre><p><b>\/etc\/iptables\/rules.v6<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Generated by iptables-save v1.6.0 on Thu Sep  8 13:29:11 2016\r\n*filter\r\n:INPUT DROP [0:0]\r\n:FORWARD DROP [0:0]\r\n:OUTPUT ACCEPT [0:0]\r\n#BASE INPUT\r\n-A INPUT -i lo -j ACCEPT\r\n-A INPUT -p ipv6-icmp -m limit --limit 15\/sec -j ACCEPT\r\n-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT\r\n#DROP ALL ANOTHER\r\n-A INPUT -j REJECT --reject-with icmp6-port-unreachable\r\nCOMMIT<\/code><\/pre><p>И настроим fail2ban, а именно проверим что в \/etc\/fail2ban\/jail.d\/defaults-debian.conf включено:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[sshd]\r\nenabled = true<\/code><\/pre><p>Так же можно увеличить время бана на 24 часа в \/etc\/fail2ban\/jail.conf:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bantime  = 24h<\/code><\/pre><p>Вообще очень рекомендую сделать rsa ключ и ходить только по нему выставив «PasswordAuthentication no» в \/etc\/ssh\/sshd_config, но если такой возможности нет поставьте по настоящему сильный пароль (20 символов со спецзнаками, цифрами, большими и малыми буквами) и лучше не root’у а какому то пользователю с привилегиями sudo а root’а заблокируйте через «passwd -l».<\/p>\n<p>Теперь когда всё готово включим демон fail2ban и загрузим правила iptables:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl enable --now fail2ban\r\niptables-restore &lt; \/etc\/iptables\/rules.v4\r\nip6tables-restore &lt; \/etc\/iptabes\/rules.v6<\/code><\/pre><p>Затем рекомендую отключиться от SSH и подключиться снова что бы проверить что всё работает корректно.<\/p>\n<h2>Шаг 1. «Настройка Asterisk»<\/h2>\n<p>Теперь когда настройка безопасности завершена поставим asterisk:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt install asterisk asterisk-config asterisk-core-sounds-en asterisk-core-sounds-en-g722 asterisk-core-sounds-en-gsm asterisk-core-sounds-en-wav asterisk-core-sounds-ru asterisk-core-sounds-ru-g722 asterisk-core-sounds-ru-gsm asterisk-core-sounds-ru-wav asterisk-voicemail<\/code><\/pre><p>И приступим к его настройке:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cd \/etc\/asterisk<\/code><\/pre><p>Далее в asterisk.conf:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">defaultlanguage = ru           ; Default language\r\ndocumentation_language = ru_RU  ; Set the language you want documentation<\/code><\/pre><p>Выключим лишние модули в modules.conf:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[modules]\r\nautoload=no\r\n\r\nload =&gt; chan_sip.so\r\nload =&gt; res_rtp_asterisk.so\r\nload =&gt; app_dial.so\r\nload =&gt; bridge_simple.so\r\nload =&gt; app_playback.so\r\nload =&gt; app_voicemail.so\r\nload =&gt; cdr_csv.so\r\n\r\nload =&gt; res_musiconhold.so\r\nload =&gt; res_adsi.so\r\nload =&gt; pbx_config.so\r\n\r\nload =&gt; codec_a_mu.so\r\nload =&gt; codec_adpcm.so\r\nload =&gt; codec_alaw.so\r\nload =&gt; codec_ulaw.so\r\nload =&gt; codec_gsm.so\r\nload =&gt; codec_lpc10.so\r\n\r\nload =&gt; func_shell.so\r\nload =&gt; func_callerid.so\r\n\r\nload =&gt; format_wav.so\r\n\r\nload =&gt; func_cut.so\r\n\r\nload =&gt; res_sorcery_config.so\r\nload =&gt; res_pjproject.so\r\n\r\n[global]<\/code><\/pre><p>В rtp.conf настроим количество портов для голосового трафика:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">rtpstart=10000\r\nrtpend=10100<\/code><\/pre><p>Не думаю что понадобится больше 100 параллельных вызовов.<br \/>\nДалее перейдём в sip.conf (замените $phone_number и $password на свои)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[general]\r\ncontext=public\r\nallowguest=no\r\nallowoverlap=no\r\nrealm=asterisk.local\r\nudpbindaddr=0.0.0.0\r\ntcpenable=no\r\ntransport=udp\r\n\r\n[multifon]\r\nusername = $phone_number\r\ntype = peer\r\nsecret = $password\r\nhost = sbc.megafon.ru\r\nport = 5060\r\ninsecure = invite\r\ntrustrpid=yes\r\ncallbackextension = $phone_number\r\nfromuser = $phone_number\r\nfromdomain = sbc.megafon.ru\r\ncontext = from-sip\r\ndisallow = all\r\nallow = alaw\r\nnat = no\r\ndirectmedia = no\r\ndtmfmode = inband\r\nlanguage = ru<\/code><\/pre><p>Я так же хотел принимать сообщения атвоответчика в telegram, раз уж я всё равно получаю звонки на asterisk, поэтому мне понадобилось установить<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt install dos2unix lame sox<\/code><\/pre><p>и настроить voicemail.conf (замените $voicemail_password и $tg_client_id на свои):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[general]\r\n#format=wav49|gsm|wav\r\nformat=wav\r\nserveremail=asterisk@voice.local\r\nattach=yes\r\n#maxmsg=180\r\n#maxsecs=180\r\n#minsecs=4\r\n#maxlogins=1\r\nemaildateformat=%A, %d %B %Y at %H:%M:%S\r\nemailbody=XTGMESSAGE_ ${VM_CALLERID} _ ${VM_DATE}\r\nmailcmd=\/usr\/local\/sbin\/telegrammp3\r\nsendvoicemail=no\r\n\r\n[zonemessages]\r\neastern=America\/New_York|&#039;vm-received&#039; Q &#039;digits\/at&#039; Imp\r\ncentral=America\/Chicago|&#039;vm-received&#039; Q &#039;digits\/at&#039; Imp\r\ncentral24=America\/Chicago|&#039;vm-received&#039; q &#039;digits\/at&#039; H N &#039;hours&#039;\r\nmilitary=Zulu|&#039;vm-received&#039; q &#039;digits\/at&#039; H N &#039;hours&#039; &#039;phonetic\/z_p&#039;\r\neuropean=Europe\/Copenhagen|&#039;vm-received&#039; a d b &#039;digits\/at&#039; HM\r\n\r\n[voicemail]\r\n1 =&gt; $voicemail_password,homegroup,$tg_client_id,delete=yes<\/code><\/pre><p>А теперь перейдём к диалплану extensions.conf (все $phone_number надо заменить на свой номер телефона):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[incoming]\r\nexten =&gt; $(phone_number)1,1,Playback(\/usr\/share\/asterisk\/sounds\/ru_RU\/ss-noservice)\r\nsame =&gt; n,Hangup()\r\n\r\nexten =&gt; $phone_number,1,ringing\r\nsame =&gt; n,wait(30)\r\nsame =&gt; n,Voicemail(1@voicemail,u)\r\nsame =&gt; n,Hangup()\r\n\r\nexten =&gt; $(phone_number)0,1,ringing\r\nsame =&gt; n,wait(30)\r\nsame =&gt; n,Voicemail(1@voicemail,u)\r\nsame =&gt; n,Hangup()\r\n\r\n[curlblacklist]\r\nexten =&gt; _X.,1,Goto(incoming,${EXTEN}${SHELL(\/usr\/local\/sbin\/spamn.sh ${CALLERID(num)} ${EXTEN} | tr -d &quot;\\n&quot;)},1)\r\nsame =&gt; n,Hangup()\r\n\r\n[from-sip]\r\nexten =&gt; $phone_number,1,Goto(curlblacklist,${CUT(CUT(SIP_HEADER(To),@,1),:,2)},1)\r\nsame =&gt; n,Hangup()<\/code><\/pre><p>При желании можно завести своих родственников на тот же самый Asterisk, для этого надо сделать запись по аналогии с [multifon] в sip.conf и продублировать все записи с $phone_number в extensions.conf.<\/p>\n<h2>Шаг 2. «Распаковка скриптов»<\/h2>\n<p>Нам понадоится установить curl и git<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt install curl git<\/code><\/pre><p>Затем скачаем скрипты:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">git clone https:\/\/github.com\/lifespirit\/asterisk-scripts.git<\/code><\/pre><p>и переместим их в рабочую папку:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cp asterisk-scripts\/spamn.sh \/usr\/local\/sbin\/\r\ncp asterisk-scripts\/telegrammp3 \/usr\/local\/sbin\/\r\nchmod +x  \/usr\/local\/sbin\/spamn.sh\r\nchmod +x  \/usr\/local\/sbin\/stelegrammp3<\/code><\/pre><p>Далее необходимо ввести данные своего телеграм бота если вы хотите получать уведомления о звонках и голосовую почту в телеграм. Инструкции как создать телеграм бота можно найти в документации telegram и тут я это пропущу. В обоих скриптах нужно порпавить две переменных:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">botid=bot111222333\r\nbotkey=AAssddffgghhjjkkllqqwwweerrttyyuuiioozxc<\/code><\/pre><p>а также в скрипте spamn.sh нужно заменить<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chatid=&quot;444555666&quot;<\/code><\/pre><p>на id своего аккаунта или чат группы.<\/p>\n<p>Осталось только переключить роутинг услуги Мультифон на sip+gsm режим, что бы если это спам или телефон долго не отвечает трубку снимал asterisk, а если всё нормально трубку можно было снять с мобильного телефона. Сделать это можно например с помощью API:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">curl -s &#039;https:\/\/sm.megafon.ru\/sm\/client\/routing?login=71112223344&amp;password=mysecret&amp;routing=2&#039;<\/code><\/pre><p>На этом настройка завершена. Приятного использования.<\/p>\n",
            "date_published": "2023-03-24T23:47:02+03:00",
            "date_modified": "2023-03-24T23:46:43+03:00",
            "tags": [
                "asterisk",
                "megafon",
                "multifon",
                "spam",
                "telegram",
                "ubuntu",
                "voicemail"
            ],
            "_date_published_rfc2822": "Fri, 24 Mar 2023 23:47:02 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "3",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4116,
    "_e2_ua_string": "Aegea 11.2 (v4116)"
}