28.12.2017

polycom CA default certificate

Документация по TLS для телефонов Polycom здесь: Device_Certificates_on_Phones_TB37148.pdf
Изначально я столкнулся с тем, что поликом отдает свой собственный сертификат, который администратор никогда не загружал, но чтение документации дало понимание, что да такой сертификат зашивается на заводе, и чтобы им пользоваться, нужно скачать сертификат удостоверяющего центра Polycom – http://pki.polycom.com/pki/

23.12.2017

восстановить пароль centos 7

всё просто с этим:
статья

19.12.2017

firewalld управление

Задача организовать защиту пула серверов находящихся в одной публичной подсети.

Firewalld использует понятие zone (зона), и распределяет трафик по ним, по крайней мере входящий т.к. я работаю именно с ним.

Итак, смысл такой, я хочу чтобы медлу серверами всё было открыто, поэтому использовать для этого буду встроенную зону work.
У зон можно настроить дефолтное правило ACCEPT,REJECT,DROP – установим ACCEPT.

    firewall-cmd –zone=work –set-target=DROP –permanent
    *сработает только после firewall-cmd –reload

затем нужно добавить ip адреса трафик с которых будет считаться относящимся к этой зоне.

    firewall-cmd –zone=work –add-source=123.123.123.123/32 –permanent
    firewall-cmd –zone=work –add-source=123.123.123.123/32

тут можно использовать маски вместо 32, нужные.

хорошая статья по управлению firewall-cmd

http://landoflinux.com/linux_firewall_cmd_config.html

19.12.2017

настройка centos для обработки большого кол-ва соединений

пока положу сюда статью, которая крайне полезна в том, что какие настройки влияют на это
https://toster.ru/q/276364

27.11.2017

High load. Высокая нагрузка на сервер Астериск.

В рамках проекта с высокой нагрузкой нужно было решить проблему, описание которой звучит так: После 360 секунд вызовы переставали попадать в биллинг. Первонаперво была выяснена причина это отсутствие некоторых переменных, получаемых через AGI интерфейс php скриптом. При этом, если использовать AGI то такой проблемы не наблюдалось.
В нашем случае используется FASTAGI и связка ASterisk, xinetd, phpagi-fastagi.php, myscript.php.

Поиск решений занял несколько дней, потому, что нагрузка на сервер была высокой итак: 1. Обнаружили что mysript.php не получает значение переменной DIALSTATUS после выполнения команды DIAL. И поиск в интернете ничего не давал, пока я не набрел на собственно код phpagi библиотеки на sourceforge.net. (https://sourceforge.net/p/phpagi)
И в багтреке были прикреплены несколько вопросов именно по поводу переменной DIALSTATUS. Но комментиариев с решением под ними не было, а были они в “обсуждениях”, вот здесь: https://sourceforge.net/p/phpagi/discussion/366892/thread/5a4c09f0/

В двух словах, phpagi Общается с асетриском через потоки как будто пишет и читает из файла строки, и вот какое дело, иногда когда скрипт читает данные из потока он получает толи пустые строки толи что, и не может получить значение переменной, хотя по agi debug четко видно, переменная передается скрипту.

Было два решения которые предложила система, это а) повторить запрос переменной несколько раз, пример:
function get_var($agi_in, $value)
{
$temp = $agi_in->get_variable($value);
$temp = $agi_in->get_variable($value);
$temp = $agi_in->get_variable($value);
$temp = $temp;
$agi_in->verbose($value." :".$temp);
return $temp;
}

б) решить вопрос кардинально, но я это решение реализовать не смог, т.к. до конца не понял как работают стримы и куда вставить код.

function evaluate($command)
{
//clear the buffer
stream_set_blocking($this->in,0);
do {
$line = fgets($this->in);
} while ($line);
stream_set_blocking($this->in,1);

Всем пока.

12.07.2017

Неплохо бомбилo с ubuntu и boot разделом

Сначала не работал nginx как я хотел, а именно, он не отличал виртуальные хосты. Всё уходило вероятно в дефолтный.

Оказалось что версия nginx старая 1.4 решил обновить и понеслось.

1. /boot оказался слишком маленьким и образы системы не загружались
Потратил часа два чтобы понять как увеличить partition на живой системе, оказалось, что достаточно было выполнить команду apt-get autoremove и старые образы удалились, а новые загрузились

а дальше всё просто, обновляем nginx добавляем в nginx.cong “include …/sites-enabled/*”

и всё зажурчало прекрасно.

hints: no space left on device

26.06.2017

добавить Ip к интерфейсу в centos 6.8

Особенностью является то, что для интерфейса выделяется 1 ip адрес привязанный к MAC и таким образом можно использовать больше IP выделенных для маленьких подсетей.
В общем-то это особенность одного из клиентов.

1. смотрим все интерфейсы доступные в машине, в том числе отключенные:

ipconfig -a

2. копируем файл /etc/sysconfig/network-scripts/ifcfg-eth0 > ifcfg-eth1 т.к. у нас интерфейс в машине eth1 .

3. затем изменяем ifcfg-eth1 на нужный нам, указывая новый mac, адрес шлюза и сам IP.

4. Изменяем /etc/sysconfig/network
добавляем:

gateway = gataway_ip
gatewaydev = eth1

5. Обновляем MAC у виртуальной машины

6. запускаем.

22.06.2017

Настройка voip телефона Polycom 331 для работа с TLS и DNS SRV

Странная логика у этого аппарата, ну понятно, что в виду нехватка документации объяснить какие-то пункты я не смогу, например, мне не понятно, как взаимодействует раздел SIP и line1. Но моя задача была настроить телефон так, чтобы он работал с TLS и DNS SRV, т.к. в текущем проекте, мы использовали DNS failover. Сразу скажу, что все получилось и сама схема DNS SRV failover прекрасна.

Общая схема такая: Polycom 331tlsKamailio —udp— Asterisk

Итак, вот скрины настроек.

Остальные настройки вне line1 нужно сделать дефолтными, и всё пойдет.

20.06.2017

Тестирование Kamailio и multidomain сертификата ssl

Как подключить к Камалио самоподписанный multidomain сертификат.

Как обычно источники: Статья 1, Статья 2

Смысл простой, я так понял это можно сделать добавив extensions в сертификат, а это в свою очередь определяется в файлике openssl.conf

Находим секцию REQ в openssl.conf проверяем, что x509_extensions не закомментирован:

[req]
...
x509_extensions = v3_ca

Затем добавляем секцию v3_ca и указываем в ней следующее:

[v3_ca]
...
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = example.co.uk
DNS.4 = www.example.co.uk

У меня сработало и сертификат стал иметь несколько доменных зон, что крайне удобно когда использует DNS файловер.

Проверить, кстати, можно очень просто после создания запроса на сертификат, выполните

openssl req -text -noout -in <запрос_сертификата>.csr

И если увидите, что-то подобное, то можно генерировать сертификат.

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=DE, ST=Germany, L=City, O=Company, OU=Organisation-Unit, CN=server1.example.com/emailAddress=alias@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (4096 bit)
                Modulus (4096 bit):
[...]
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name:
                DNS:server1.example.com, DNS:mail.example.com, DNS:www.example.com
, DNS:www.sub.example.com, DNS:mx.example.com, DNS:support.example.com
    Signature Algorithm: sha1WithRSAEncryption
[...]

значит всё удалось.

16.06.2017

TLS. Kamailio. Asterisk. Настройка

Схема которую планировали реализовать:

Client1 —<TLS>— Kamailio —<UDP>— Asterisk —<UDP>— Kamailio —<TLS>— <Client2>

Что почитать перед тем как настраивать, это сразу несколько позиций, они обязательно вам пригодятся, ибо быстро сделать даже такую простую схему без понимания принципа не получится. А может и получится, но останутся дыры.

  1. Документация TLS модуля для Камалио 4.4 – прекрасно описывается как создать сертификат без получения и т.д.
  2. ssldump -Nn покажет обмен внутри протокола ssl кто кому какие сертификаты посылает
  3. howto kamailio and tls

Теперь непосредственно, то как работает TLS в двух словах.

  1. создать центра сертификации – CA
  2. подписать им сертификат для Камалио
  3. скопировать в подписанный сертификат приватный ключь, этот на всякий случай
  4. создать сертификат для sip-клиента
  5. скопировать приватный ключ в сертификат т.к. некоторые сип клиенты не имеют возможность для указания отдельно приватного ключа в настройках
  6. вынести конфигурацию tls в отдельный файл
  7. далее прописать в calist.pem сертификат CA. Это нужно чтобы камалио получив сертификат от клиента проверил его CA в своем списке и если СА в доверенных, то одобрить сертификат (при этом неважно откуда звонит клиент и какой домен (CN) указан в сертификате
  8. Повесить камалио на lts : listen:tls:ip_address:5061
  9. подключить к своему клиенту сертификат.
  10. клиент будет проверять сертификат поэтому, в виндоус нужно добавить в доверенные центры сертификации ваш сертификат CA, который вы создавали в самом начале.
  11. в сертификате Камалио обязательно должен быть указан CN соответствующий домену Камалио, либо его IP адресу если домена как такогово нет.
  12. В настройках камалио нужно оставить только verify_certificate = yes, require_certificate = no. Если поставить оба значения, то у меня ситуация выглядела так: Во время звонка при передаче ACK сообщения sip-клиент создавал новое соединение TLS и оно было отказывалось работать, потому, что не совпадали CN ожидаемые sip-клиентом и указанные в сертификате. Не стал разбираться дальше почему так происходит.

Настройка на данном этапе завершена, сертификат проверяется, т.е. использовать левый сертификат не получится.