суббота, 24 сентября 2016 г.

Почему использовать аппаратные телефоны с TLS в VOIP из мира - это плохая идея.

Собственно купил я телефон своим коллегам аппаратный. Пока один.
Работает он неплохо, До поры до времени.
Здесь нужно понимать, что IP-телефоны хардверные предназначены для использования ВНУТРИ офиса. И программная АТС должна стоять в ОФИСЕ.
Если хотим чтобы телефон всегда был онлайн - никаких извращений с шифрованием голосового трафика трафика по SRTP между этим телефоном и сессионной авторизации с использованием TLS городить не нужно.
Именно номера локальных телефонов нужно элементарно описать в SIP-сервере как SIP-пиры без шифрования трафика и с использованием протокола UDP. Тогда они доступны всегда и мгновенно.

Почему?
Во-первых шифрование трафа в локалке бессмысленно. Если конечно Вы не работайте в компании где все коллеги спецслужбы которые следят за Вами. В таком случае надо смотреть в сторону ieee 802.1x. Эта локалка стоит за корпоративным интернет-шлюзом. Шифрование немного ухудшает качество голоса (я заметил да).
А во вторых что САМОЕ ужасное - так это TLS. Телефону нужно переустановить соединение с сервером после устранения сетевых проблем (если они возникли). Для этого нужно заново пройти TLS -рукопожатие (Handshake), обменяться серт-инфой. Инженера Д-ЛИНК(а) не слишком заморочились с этим гемором в прошивке телефона. Потому если сервер телефонии ребутается то при включеном в аппаратном телефоне TLS-шифровании голоса он отпадает на рандомное время от минуты до бесконечности.

SIP-клиенты в мобильных телефонах реконектяться мгновенно. Ибо расчитаны на использование на нестабильном мобильном инете.
Вывод - если хотите юзать апапатные телефоны во всех офисах - Вам придеться поднимать сервер телефонии в каждом, строить туннели и шифровать трафик с двух сторон между ними. А уже хардверным телефонам отдавать нешифрованый траф по локалке и по не-сессионному RAW-протоколу UDP.

Иначе Вы заебетесь ребутать телефоны. Пользователям.
Ну или посмотреть модели от CISCO, говорят в них как бы с этим меньше проблем. Попробую - отпишусь.

четверг, 22 сентября 2016 г.

Настройка простого сервера IP-телефонии ASTERISK с SSL / TLS шифрованием.

У меня тут спросили как настроить SIP сервер чтоб пользователи могли звонить друг другу и все ихние разговоры были зашифрованы. Рассказываю на практике.
Первый шаг - купить VPS, сервер для виртуальной АТС.
Чисто технически подойдет на основе openvz. Ресурсов ASTERISK кушает мало (в районе нескольких мегабайт ОЗУ на звонок), процессор тоже почти не грузит и даже на гиге RAM и 1-2 ядрах CPU выдержит немалое количество клиентов. Практически Asterisk нормально обслуживает до 280 одновременных звонков, выше начинаются проблемы. Если хотите обслуживать большее количество абонентов, советую использовать FreeSwitch.
И вообще для телефонии важна приоритезация трафика, потому как бы есть необходимость настройки шейпинга где только можно. Иначе Васян с его торентами будет мешаться Вам в офисе болтать по SIP'у.

Настройка SIP-телефонии сводиться к 2 этапам
1) Генерация сертификата, которым по TLS протоколу будет шифроваться SIP трафик.
2) Редактирование конфигурации ASTERISK.

Установить asterisk всегда можно из репозиториев, он есть во всех линуксах. В дебьяне / убунте через apt-get install, в centos через yum install

1) Генерим серт!
Информация по генерации TLS серта была взята с этой статьи, автору спасибо https://habrahabr.ru/post/186530/

создаем папочку mkdir /etc/asterisk/certificates/ переходим в нее cd /etc/asterisk/certificates/

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
openssl genrsa -out key-server.pem 1024
openssl req -new -key key-server.pem -out req-server.csr
openssl x509 -req -days 365 -in req-server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out cert-server.crt
cat /etc/asterisk/certificates/key.pem > /etc/asterisk/certificates/asterisk.pem
cat /etc/asterisk/certificates/cert-server.crt >> /etc/asterisk/certificates/asterisk.pem

В результате этих действий у нас будет достаточно файлов, из которых нам понадобиться только
/etc/asterisk/certificates/asterisk.pem
/etc/asterisk/certificates/ca.crt

все остальное нафиг не нужно, можно удалять. а эти файлы нужно забэкапить.
для надежности файл /etc/asterisk/certificates/asterisk.pem можно изучить любым текстовым редактором, его содержимое должно соответствовать

-----BEGIN RSA PRIVATE KEY-----
ТУТ ДАННЫЕ КЛЮЧА (КАША цифробукв в разных регистрах)
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
ТУТ ДАННЫЕ СЕРТА (КАША цифробукв в разных регистрах)
-----END CERTIFICATE-----

Содержимое второго файла должно быть:

-----BEGIN CERTIFICATE-----
ТУТ ДАННЫЕ СЕРТА (КАША цифробукв в разных регистрах)
-----END CERTIFICATE-----


На этом закончили.

2) Переходим ко второму этапу - конфигурирование ASTERISK'a

Привожу пример файлов конфигурации. Создадим 2 пользователей с номерами 111 и 222 и разрешим звонить друг другу.

/etc/asterisk/sip.conf

[general]
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/certificates/asterisk.pem
tlscafile=/etc/asterisk/certificates/ca.crt
tlsclientmethod=tlsv1
dtmfmode=RFC2833
promiscredir = no        ; не запрещаем редиректы между юзерами (перевод звонка на другого)
nat=yes
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = yes

[111]
host=dynamic
disallow=all
allow=alaw
context=default
type=friend
username=111
nat=yes
transport=tls
encryption=yes
secret=USER_PASSWORD

[222]
host=dynamic
disallow=all
allow=alaw
context=default
type=friend
username=222
nat=yes
transport=tls
encryption=yes
secret=USER_PASSWORD

/etc/asterisk/extensions.conf

[default]
exten => 111,1,Dial(SIP/111)
exten => 222,1,Dial(SIP/222)

[messages]
exten => _XXX,1,MessageSend(sip:${EXTEN},"${CALLERID(name)}"${MESSAGE(from)})

Вот и все, пользователи 111 и 222 могут звонить друг другу с шифрованием голоса и обмениваться текстовыми сообщениями. Это МИНИМАЛЬНАЯ конфигурация секурного сервера телефонии.
Для добавления пользователей нужно редактировать эти два файла. первый файл описывает пользователя и его пароль, а второй файл описывает права пользователя. В контексте мы создаем первый диалплан и разрешаем его использовать пользователям.

Останется только установить софтофон на ваш андроид-смартфон / яблофон / ПК / или купить аппаратный SIP телефон.
Для смартов настоятельно рекомендую клиент bria, он радует качеством звука.
В следующих статьях я расскажу как настроить остальной функционал (по мере надобности). А Астериск умеет все.

1) Аудиоконференции с неограниченым количеством участников. Вызов всех участников отдела в конфу по звонку на определенный номер и добавление себя же (реализуется костылями).
2) Видеоконференции с неограниченым количеством участников.
3) Маршрутизация звонков входящих и исходящих, музыка вместо гудков, перенаправление на секретаря, Голосовое меню.
4) Пиринг с мобильными и городскими операторами через SIP транки и просто через аналоговое оборудование. Поддержка аналогового оборудования для создания мостов
5) Запись разговоров в аудиофайлы (если нужно).
6) Голосовая почта


Для просмотра активных звонков (кто кому звонит и сколько времени) есть команда
asterisk -vvvvvrx 'core show channels' | grep call

Для просмотра подключеных к серверу и готовых звонить / принимать звонки клиентов (айпи, время подключения) есть команда
asterisk -r -x 'sip show peers' | grep -v 'Unspecified'

воскресенье, 28 августа 2016 г.

checkinet.sh

Скрипт который реконектит PPPoE Фрегата бесконечно если оно отпадает...
Первым делом добавляем его в crontab и задаем исполнение каждых 5 минут.

Добавляем в /etc/crontab
*/5   *   * * *   root    bash /root/checkinet.sh

и создаем файл
/root/checkinet.sh
с содержимым

#! /bin/bash

wget --spider http://ya.ru
if [ "$?" != 0 ]; then
  echo `date` >> /root/reconnect.log
  /usr/bin/poff dsl-provider
  sleep 10
  /usr/bin/pon dsl-provider
fi

не забываем файл сделать исполняемым и дать на него права всем:
chmod +X /root/checkinet.sh chmod 777 /root/checkinet.sh
логи реконектов пишуться в /root/reconnect.log

суббота, 30 июля 2016 г.

Начинаю изучать FreeBSD

Милости прошу к нашему сервашу.





По долгу службы, да и на благо родины + ради саморазвития решил я изучить фряху и ее возможности роутинга.
Вот тривиальная задача - есть роутер на фре с двумя провайдерами, за которым через свитч подрублены 2 тачки (172.16.0.2 и 172.16.0.3)
На роутере есть 2 интернета - первый работает через дефолтный шлюз, у второго openvpn интерфейса (tap0) айпи адрес 10.0.0.2 и шлюз 10.0.0.1
Нужно чтоб первая клиентская тачка (172.16.0.2) ходила через первый инет (дефолтный шлюз), и вторая (172.16.0.3) через второй. При этом нужно чтоб машина с IP 172.16.0.3 могла заходить по ssh на роутер наш фряшный (172.16.0.1) и получать доступ к сервисам на нем (ssh, proxy etc).

Таки запилил, ничего сложного.

1) Пересобираем ядро ОС с нужными нам параметрами, устанавливаем, ребутаемся.

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=50
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=16
options         DUMMYNET
options         HZ="1000"
options         IPFIREWALL_DEFAULT_TO_ACCEPT

2) Настраиваем сеть.
3) Настраиваем IPFW

Конфиг IPFW, его нужно разбить на 2 части и 1 часть исполнять после загрузки ос и поднятия интерфейса em0, вторую часть после загрузки и поднятия интерфейса tap0  (тама где двойка + последняя строка касается интерфейса tap0), последних 2 строки тоже исполнять после поднятия tap0

#!/bin/sh
/sbin/ipfw -q flush
/sbin/ipfw disable one_pass
/sbin/ipfw nat 1 config if em0 reset same_ports
/sbin/ipfw nat 2 config if tap0 reset same_ports
/sbin/ipfw add nat 1 ip from 172.16.0.2 to any out
/sbin/ipfw add nat 2 ip from 172.16.0.3 to any out via em0
/sbin/ipfw add nat 1 ip from not me to any in
/sbin/ipfw add nat 2 ip from not me to any in via tap0
/sbin/ipfw add fwd 10.0.0.1 ip from 172.16.0.3 to not me



и не забываем добавить в /etc/rc.conf
gateway_enable="YES"  (врубаем форвардинг пакетов в ядре)
в /etc/sysctl.conf
net.inet.ip.fastforwarding=1   (врубаем быстрый фовардинг - будет пахать быстрее на 20-30%, но может побить фреймы IPSec, если он используется.

проверил на машинах 172.16.0.2 и 172.16.0.3 действительно первая ходит через первый инет вторая через второй

поднимаем SOCKS5 прокси для второго провайдера (VPN)!!!
копируем /etc/ssh/sshd_config в /etc/ssh/sshd_config_fib1
редактируем конфиг sshd_config_fib1, задаем порт отличный от стандартного ssh (например 23), и listen 127.0.0.1

используя команду setfib, прокладываем маршрут по 1 шлюзу через tap0
setfib 1 route add default 10.0.0.1
запускаем после подключения к интерфейсу tap0
setfib 1 /usr/sbin/sshd -f /etc/ssh/sshd_config_fib1

и сопсно запускаем соксик:

 nohup sshpass -p [пароль_рута] ssh -p 23 -N -D 192.168.0.250:1089 root@localhost &
можно создать отдельного юзера и от него запускать сокс

все, на интерфейсе 192.168.0.250 на 1089 появился соксик пятый который виден из локалки и пашет через 2 провайдера.

чтоб поднять сокс для 1 прова нужно просто выполнить 
 nohup sshpass -p [пароль_рута] ssh -p 22 -N -D 192.168.0.250:1090 root@localhost &

все, на интерфейсе 192.168.0.250 на 1089 появился соксик пятый который виден из локалки и пашет через 1 провайдера.

это если ssh дефолтный висит на 22 порту (а это как бы не круто, не забываем его перевесить на 2244 хотя бы).

пятница, 10 июня 2016 г.

Вебсервер своими руками, который отдает картинку и штмл-файл)))
Собственно, для этого нам понадобиться netcat, bash, html и графический файл с картинкой.
1) устанавливаем на сервер netcat из репозитория
2) пишем html-файл, называем index.html

<html>
        <h2>Hello world from Melnax Web server, v 0.0</h2><br>
        <img src="http://rockorus.ru:8889/image.jpg">
</html>

3) создаем bash-скриптик server.sh
поскольку неткат вылетает после отдачи данных, ставим это все в бесконечный цикл.

while true
do
nc -l 8888 < index.html
nc -l 8889 < image.jpg
done

4) ложим картинку image.jpg рядом с bash-скриптом и index.html

5) запускаем под скрином ./server.sh

6) результат можно глянуть тут

http://rockorus.ru:8888


конечно это все хуета... но зато нескучно убил 10 минут времени

пятница, 20 мая 2016 г.

Конвертируем ЗверополисЪ в MP4, в два прохода, с максимальным качеством.
За основу взят блюрейрип- исходник mkv с nnm-club Full HD, весом 5.7 ГБ
Отсюда http://nnmclub.to/forum/viewtopic.php?t=1018396


//первый проход
ffmpeg -i Zootopia.2016.BDRip.1080p.LINE.RUS.mkv -t 01:40:03 -acodec mp3 -ab 96k -af volume=+7 -map 0:a:0 -map 0:v:0 -vcodec libx264 -preset veryslow -vf scale=960:404 -pass 1 -vb 1000k Zveropolis.mp4

//второй

ffmpeg -i Zootopia.2016.BDRip.1080p.LINE.RUS.mkv -t 01:40:03 -acodec mp3 -ab 96k -af volume=+7 -map 0:a:0 -map 0:v:0 -vcodec libx264 -preset veryslow -vf scale=960:404 -pass 2 -vb 1000k Zveropolis.mp4

четверг, 19 мая 2016 г.

Шпаргалочка по openvz \ virtuozzo

Шпаргалочка по openvz \ virtuozzo


vzctl create 1 --ostemplate centos-7-x86_64           - создать контейнер (ID=1) с предустановленной centos7 (образ качается и устанавливается из Интернета)
prlctl delete 2                                       - удалить контейнер (ID=2)
prlctl list -a                                        - вывести список всех контейнеров-виртуальных машин и их состояние (запущен остановлен приостановлен итд)
prlctl start 1                                        - запустить виртуальную машинку (ID=1)
prlctl stop 1                                         - остановить виртуальную машинку(ID=1)
prlctl enter 1                                        - зайти в машинку-контейнер для работы снутри
prlsrvctl net list                                    - показать сетевые адаптеры всей системы
vzctl set 1 --ram 1024M --swap 1056M --save           - задает ОЗУ и размер файла подкачки для машины (ID=1)
prlctl restart 1                                      - перезапуск виртуальной машины (ID=1)

vzctl set 1 --ipadd 192.168.0.1 --save                - добавить IP в машинку (ID=1)
vzctl set 1 --ipdel 192.168.0.1 --save                - удолить IP из машинки (ID=1)
vzctl set 1 --nameserver 8.8.8.8 --save               - добавить DNS в машинку (ID=1)

nano /etc/modprobe.d/parallels.conf  - поменять  ip_conntrack_disable_ve0=1 на  ip_conntrack_disable_ve0=0 , перезагрузить нужно для работы nat в iptables


iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE  - добавить это в /etc/rc.local   - разрешит виртуальным машинам выход в Интернет (если айпишники виртуалок лежат в пределах подсети 192.168.0.0/24 )
iptables -t nat -A PREROUTING -p tcp --dport 2245 -j DNAT --to-destination 192.168.0.1:22   - проброс 2245 порта с хоста на 22 гостя - чтоб можно было через Интернет зайти по ssh