LINUX.ORG.RU

Настраиваем Asterisk на собственном VPS для голосовых/видео вызовов и текстовых сообщений

 , ,


10

3

Ниже — руководство + полный установочный скрипт для Debian 12, собирающий Asterisk 22.5.1 из исходников, включающий TLS + SRTP, 3 абонента (1001–1003), блокировку анонимов, короткие сообщения (SIP MESSAGE) для Linphone, и видеозвонки по H.264.

Скрипт автоматически учитывает NAT: если задать локальную сеть — пропишет external_* и local_net; если не задавать — считает, что сервер не за NAT.


Что получится

  • Сигнализация: TLS 5061/tcp для domain.name.com (Let’s Encrypt).
  • Медиа (аудио+видео): RTP/RTCP 10000–20000/udp (SRTP для аудио/видео).
  • Абоненты: 1001, 1002, 1003 (пароли сгенерируются).
  • Диалплан: внутренние вызовы 10XX, эхо-тест 600, и контекст messages для SIP MESSAGE.
  • H.264 для видео (pass-through; без транскодирования).
  • Блокировка анонимов (контекст publicHangup()).
  • Автопродление LE-сертификата + deploy-hook, который подкладывает ключи и делает core reload.
  • systemd-юнит (нативный), запуск под пользователем asterisk.
  • Без записи звонков (ничего не включаем).

Параметры, которые можно (и нужно) задать

  • DOMAIN — имя домена (по умолчанию domain.name.com).

  • LE_EMAIL — e-mail для Let’s Encrypt (рекомендовано).

  • Если сервер за NAT:

    • LOCAL_NET — локальная IP адрес сервера (например, 10.1.2.24).
    • PUBLIC_IP — внешний IP (если не указать, скрипт попробует взять A-запись домена).

Примеры запуска (все — от root):

# Сервер с публичным IP (НЕ за NAT)
DOMAIN=domain.name.com ASTVER=22.5.1 ./install-asterisk-22.sh

# Сервер за NAT
DOMAIN=domain.name.com ASTVER=22.5.1 PUBLIC_IP=203.0.113.10 LOCAL_NET=10.1.2.24 LE_EMAIL=you@example.com ./install-asterisk-22.sh

Скрипт установки «под ключ»

Сохраните в файл install-asterisk-22.sh, затем:

chmod +x install-asterisk-22.sh
sudo ./install-asterisk-22.sh
#!/usr/bin/env bash
set -euo pipefail

# ====== Параметры (можно задавать как переменные окружения) ======
DOMAIN="${DOMAIN:-domain.name.com}"
PUBLIC_IP="${PUBLIC_IP:-}"       # если за NAT; иначе оставьте пустым
LOCAL_NET="${LOCAL_NET:-}"       # если за NAT, напр. 10.1.2.0/24
LE_EMAIL="${LE_EMAIL:-}"         # e-mail для Let's Encrypt

ASTVER="22.5.1"
TARBALL="asterisk-${ASTVER}.tar.gz"
SRC_URL="https://downloads.asterisk.org/pub/telephony/asterisk/${TARBALL}"
SRC_DIR="/usr/src/asterisk-${ASTVER}"  # внутри архива именно asterisk-22.5.1
AST_USER="asterisk"
AST_GROUP="asterisk"

say(){ printf "\n\033[1;32m[*]\033[0m %s\n" "$*"; }
warn(){ printf "\n\033[1;33m[!]\033[0m %s\n" "$*"; }
die(){ printf "\n\033[1;31m[x]\033[0m %s\n" "$*"; exit 1; }
[[ $EUID -eq 0 ]] || die "Запускайте как root."

# ====== Базовые пакеты ======
say "Установка зависимостей"
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y \
  build-essential git curl wget gnupg2 ca-certificates \
  libssl-dev libncurses5-dev libnewt-dev libxml2-dev libsqlite3-dev uuid-dev \
  libjansson-dev libedit-dev pkg-config libcurl4-openssl-dev \
  libspeexdsp-dev libopus-dev libsrtp2-dev \
  python3 python3-venv \
  certbot socat

# ====== Системный пользователь ======
say "Создание пользователя/группы asterisk"
id -u "$AST_USER" &>/dev/null || adduser --system --group --home /var/lib/asterisk --no-create-home "$AST_USER"

# ====== Сборка Asterisk 22.5.1 ======
say "Загрузка и сборка Asterisk ${ASTVER}"
cd /usr/src
wget -O "$TARBALL" "$SRC_URL"
tar xzf "$TARBALL"
cd "$SRC_DIR"

contrib/scripts/install_prereq install
contrib/scripts/get_mp3_source.sh || true

./configure --with-pjproject-bundled --with-ssl=openssl
make menuselect.makeopts
# включим SRTP, сообщения и H.264 (pass-through)
menuselect/menuselect \
  --enable res_srtp \
  --enable res_pjsip_messaging \
  --enable format_h264 --enable res_format_attr_h264 \
  menuselect.makeopts
make -j"$(nproc)"
make install
make samples
make config
ldconfig

# ====== Каталоги и права ======
say "Каталоги/права"
install -d -m 0750 -o "$AST_USER" -g "$AST_GROUP" /var/lib/asterisk /var/spool/asterisk /var/log/asterisk
install -d -m 0755 -o "$AST_USER" -g "$AST_GROUP" /var/run/asterisk
chown -R "$AST_USER:$AST_GROUP" /var/lib/asterisk /var/log/asterisk /var/spool/asterisk

# ====== Let's Encrypt (standalone) ======
say "Выпуск сертификата Let’s Encrypt для ${DOMAIN}"
systemctl stop asterisk || true
if [[ -n "$LE_EMAIL" ]]; then
  certbot certonly --standalone -d "$DOMAIN" -m "$LE_EMAIL" --agree-tos --no-eff-email --non-interactive
else
  warn "LE_EMAIL не указан — регистрируемся без e-mail"
  certbot certonly --standalone -d "$DOMAIN" --agree-tos --register-unsafely-without-email --non-interactive
fi

say "Развёртывание сертификатов в /etc/asterisk/keys"
install -d -m 0750 -o root -g "$AST_GROUP" /etc/asterisk/keys
install -m 0640 -o root -g "$AST_GROUP" /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/asterisk/keys/asterisk.crt
install -m 0640 -o root -g "$AST_GROUP" /etc/letsencrypt/live/$DOMAIN/privkey.pem   /etc/asterisk/keys/asterisk.key

# ====== asterisk.conf ======
say "Правка /etc/asterisk/asterisk.conf"
sed -i \
  -e 's~^\s*;*\s*runuser\s*=.*~runuser = asterisk~' \
  -e 's~^\s*;*\s*rungroup\s*=.*~rungroup = asterisk~' \
  -e 's~^\s*;*\s*astrundir\s*=.*~astrundir = /var/run/asterisk~' \
  -e 's~^\s*;*\s*astctl\s*=.*~astctl = asterisk.ctl~' \
  /etc/asterisk/asterisk.conf

# ====== modules.conf ======
say "Модули: autoload + PJSIP/SRTP/MESSAGE/H.264"
cat >/etc/asterisk/modules.conf <<'EOF'
[modules]
autoload=yes
load = res_pjsip.so
load = res_pjsip_session.so
load = chan_pjsip.so
load = res_srtp.so
load = res_pjsip_messaging.so
load = format_h264.so
load = res_format_attr_h264.so
EOF

# ====== RTP ======
say "RTP порты 10000–20000"
cat >/etc/asterisk/rtp.conf <<'EOF'
[general]
rtpstart=10000
rtpend=20000
EOF

# ====== Пароли абонентов ======
say "Генерация паролей абонентов"
P1="$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 60)"
P2="$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 60)"
P3="$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 60)"

# ====== PJSIP (TLS, SRTP, H.264, MESSAGE, NAT опционально) ======
say "Формирование pjsip.conf"
{
cat >/etc/asterisk/pjsip.conf <<EOF
[global]
type=global
endpoint_identifier_order=auth_username,username,ip,anonymous

; ===== Транспорт TLS =====
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
method=tlsv1_2
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
EOF

# NAT-блок только если задана локальная сеть
if [[ -n "$LOCAL_NET" ]]; then
  # если PUBLIC_IP не задан — попробуем взять из DNS домена
  if [[ -z "$PUBLIC_IP" ]]; then
    PUBLIC_IP="$(getent hosts "$DOMAIN" | awk '{print $1; exit}')"
    [[ -z "$PUBLIC_IP" ]] && warn "Не удалось определить PUBLIC_IP из DNS — пропускаю external_*"
  fi
  if [[ -n "$PUBLIC_IP" ]]; then
cat >>/etc/asterisk/pjsip.conf <<EOF
; NAT / публичные адреса
external_signaling_address=${PUBLIC_IP}
external_signaling_port=5061
external_media_address=${PUBLIC_IP}
local_net=${LOCAL_NET}
EOF
  else
    warn "LOCAL_NET задан, но PUBLIC_IP пуст — external_* не будут прописаны"
  fi
fi

cat >>/etc/asterisk/pjsip.conf <<'EOF'

; ===== Шаблоны =====
[endpoint-template](!)
type=endpoint
context=internal
message_context=messages
disallow=all
; ВИДЕО: H.264 первым, затем аудио
allow=h264,opus,alaw,ulaw,g722
dtmf_mode=rfc4733
direct_media=no                 ; при желании можно включить yes для прямой медиа
rewrite_contact=yes
force_rport=yes
rtp_symmetric=yes
ice_support=yes
rtp_keepalive=20
media_encryption=sdes
srtp_tag_32=yes                 ; совместимость с 32-бит SRTP-тегом
max_video_streams=1
max_audio_streams=1
transport=transport-tls

[aor-template](!)
type=aor
max_contacts=1
remove_existing=yes

[auth-template](!)
type=auth
auth_type=userpass

; ===== Абоненты =====
[1001](endpoint-template)
aors=1001
auth=1001
[1001](aor-template)
[1001](auth-template)
username=1001
password=__PASS1001__

[1002](endpoint-template)
aors=1002
auth=1002
[1002](aor-template)
[1002](auth-template)
username=1002
password=__PASS1002__

[1003](endpoint-template)
aors=1003
auth=1003
[1003](aor-template)
[1003](auth-template)
username=1003
password=__PASS1003__
EOF
}
sed -i "s/__PASS1001__/${P1}/" /etc/asterisk/pjsip.conf
sed -i "s/__PASS1002__/${P2}/" /etc/asterisk/pjsip.conf
sed -i "s/__PASS1003__/${P3}/" /etc/asterisk/pjsip.conf

# ====== Диалплан (внутренние, эхо, сообщения, блок анонимов) ======
say "Формирование extensions.conf"
cat >/etc/asterisk/extensions.conf <<'EOF'
[internal]
exten => _10XX,1,NoOp(Internal call to ${EXTEN})
 same => n,Dial(PJSIP/${EXTEN},30)
 same => n,Hangup()

; Эхо-тест
exten => 600,1,Answer()
 same => n,Playback(demo-echotest)
 same => n,Echo()
 same => n,Hangup()

; Контекст для SIP MESSAGE
[messages]
exten => _10XX,1,NoOp(SIP MESSAGE to ${EXTEN} from ${MESSAGE(from)})
 same => n,MessageSend(pjsip:${EXTEN})
 same => n,NoOp(Send status: ${MESSAGE_SEND_STATUS})
 same => n,Hangup()

; Блок анонимного доступа
[public]
exten => _.,1,NoOp(Block anonymous)
 same => n,Hangup()
EOF

# ====== systemd unit (нативный) ======
say "Создание systemd-юнита"
cat >/etc/systemd/system/asterisk.service <<'EOF'
[Unit]
Description=Asterisk PBX
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=asterisk
Group=asterisk
RuntimeDirectory=asterisk
RuntimeDirectoryMode=0755
ExecStartPre=/usr/bin/install -d -m 0755 -o asterisk -g asterisk /var/run/asterisk
ExecStart=/usr/sbin/asterisk -f -U asterisk -G asterisk
ExecStop=/usr/sbin/asterisk -rx 'core stop gracefully'
Restart=on-failure
LimitCORE=infinity
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

# ====== Certbot deploy-hook ======
say "Настройка deploy-hook для автопродления LE"
install -d -m 0755 /etc/letsencrypt/renewal-hooks/deploy
cat >/etc/letsencrypt/renewal-hooks/deploy/asterisk-reload.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
DOMAIN="${DOMAIN:-domain.name.com}"
install -m 0640 -o root -g asterisk /etc/letsencrypt/live/${DOMAIN}/fullchain.pem /etc/asterisk/keys/asterisk.crt
install -m 0640 -o root -g asterisk /etc/letsencrypt/live/${DOMAIN}/privkey.pem   /etc/asterisk/keys/asterisk.key
if systemctl is-active --quiet asterisk; then
  /usr/sbin/asterisk -rx "core reload" || systemctl restart asterisk
fi
EOF
chmod +x /etc/letsencrypt/renewal-hooks/deploy/asterisk-reload.sh

# ====== Запуск ======
say "Запуск Asterisk"
systemctl enable --now asterisk
sleep 1
asterisk -rx "core show version" || true
asterisk -rx "module show like format_h264" || true
asterisk -rx "core show codecs video" | sed -n '1,80p' || true
asterisk -rx "pjsip show transports" || true
asterisk -rx "dialplan reload" || true

say "ГОТОВО. Данные для подключения:"
cat <<OUT

SIP по TLS:
  Host:   ${DOMAIN}
  Port:   5061
  SRTP:   SDES (желательно включить в клиенте)
Абоненты:
  1001 : ${P1}
  1002 : ${P2}
  1003 : ${P3}

Проверка на сервере:
  asterisk -rvvvvv
  pjsip show endpoints
  pjsip show aor 1001
  pjsip show contacts like 1001
  dialplan show internal
  (Эхо-тест: набрать 600)

Если сервер за NAT и вы задали LOCAL_NET (и PUBLIC_IP), мы прописали external_* и local_net
и включили rtp_symmetric/rewrite_contact/force_rport/ice_support на эндпойнтах.

OUT

Подключение с Android (Zoiper / Linphone / GS Wave)

  • Username: 1001 (или 1002, 1003)
  • Password: (из вывода скрипта / /etc/asterisk/pjsip.conf)
  • Domain/Host: domain.name.com
  • Transport: TLS
  • Port: 5061
  • SRTP: SRTP (SDES)
  • Видео: включить, кодек H.264 (на обоих устройствах); на время отладки можно отключить прочие видеокодеки.
  • NAT: включить ICE и указать STUN (например, stun.linphone.org) — это помогает с публичными кандидатами для RTP и снижает шанс «тишины».

Проверки и отладка

  • Регистрация: pjsip show aor 1001Contacts: 1 pjsip show contacts like 1001

  • Видео-кодеки: core show codecs video → должен быть H.264 pjsip show endpoint 1001Allow: h264,..., max_video_streams=1

  • Медиа/SDP (во время вызова):

    asterisk -rvvvvv
    pjsip set logger on
    rtp set debug on
    

    В SDP будет m=video ... и a=rtpmap:H264/90000, а в rtp debug — RTP-пакеты и для аудио, и для видео.

  • Сообщения (SIP MESSAGE): В Linphone откройте чат с 1002 и отправьте текст. В консоли увидите MESSAGE_SEND_STATUS=SUCCESS.

  • Анонимы: все неизвестные входящие попадают в public и завершаются Hangup().


Короткая теория и полезные справки

  • PJSIP и NAT: external_signaling_address, external_media_address, local_net на транспорте; rtp_symmetric, rewrite_contact, force_rport, ice_support на эндпойнтах.
  • TLS в PJSIP: protocol=tls, method=tlsv1_2, cert_file/priv_key_file с путями к LE-файлам.
  • SRTP (SDES): media_encryption=sdes (подходит для мобильных SIP-клиентов).
  • Видеозвонки: Asterisk не транскодирует видео — клиенты должны договориться по одному кодеку (мы используем H.264).
  • SIP MESSAGE: message_context в endpoint + MessageSend() в диалплане.
  • Автопродление LE: certbot.timer делает renew, deploy-hook копирует файлы и выполняет core reload.

(Имена разделов и ключевые слова легко находятся в официальной документации Asterisk: разделы по PJSIP Configuration, NAT Traversal, TLS, MessageSend(), Video Codecs/H.264.)


Настраиваем Linphone

1) Создание SIP-аккаунта

Linphone → Settings → Accounts → + (Add account) → SIP (в некоторых версиях: Menu → Accounts → “+” → Use a SIP account)

Заполни:

  • Username: 1001 (или 1002/1003)
  • Password: пароль из /etc/asterisk/pjsip.conf (секция type=auth у соответствующего номера)
  • Domain (Server): domain.name.com
  • Display name: любое (не важно)
  • Transport: TLS
  • Port: 5061
  • Outbound proxy (рекомендуется, чтобы не гадал транспорт): sip:domain.name.com:5061;transport=tls
  • Registration: ON (включена), Expires: 3600 (по умолчанию ок)

Важно: используй домен, а не IP, иначе сломается проверка TLS-сертификата.

2) Безопасность / шифрование

  • Media encryption: SRTP (SDES) (Prefer/Mandatory — лучше Prefer)
  • TLS certificate: проверка включена (по умолчанию). Сертификат LE подойдёт автоматически.

3) Аудио-кодеки (минимум для совместимости)

Settings → Audio codecs:

  • Включи: PCMA (G.711 A-law), PCMU (G.711 μ-law), Opus, G722
  • Остальные можно отключить для чистоты переговоров.

4) Видео (H.264)

Settings → Video:

  • Enable video: ON (и дай разрешение камере/микрофону в Android)
  • Video codecs: H.264 — ON, VP8 — OFF (мы используем H.264 в Asterisk)
  • Желательно включить аппаратное ускорение (Hardware acceleration), если пункт есть.
  • На время отладки звони сразу “Video call” (иконка камеры), а не включай камеру посередине аудио — так меньше re-INVITE-сюрпризов.

5) Чат (SIP MESSAGE)

Ничего особого: просто открой контакт (например, 1002) и отправь сообщение. У нас на Asterisk задан message_context=messages + MessageSend() — сообщения дойдут, если адресат зарегистрирован.

6) Быстрые тесты

  1. Проверь регистрацию: статус аккаунта в Linphone должен стать Registered. На сервере: pjsip show aor 1001Contacts: 1.
  2. Эхо-тест: набери 600 — услышишь своё эхо.
  3. Звонок 1002 → 1001: должен идти звук в обе стороны.
  4. Видеозвонок: запусти «Video call» 1002 → 1001. В обоих клиентах должна быть включена камера и H.264.
  5. Чат: отправь текст от 1001 к 1002, проверь доставку.

7) Если что-то не работает — мини-чеклист

  • TLS: домен в аккаунте ровно domain.name.com, не IP; дата/время телефона верные.
  • Нет звука/видео: — включи ICE и STUN как выше; — оба абонента должны быть Registered; — на сервере pjsip show transport transport-tls должен показывать external_*/local_net, если сервер за NAT.
  • Видео падает при включении камеры: — на обоих клиентах включи H.264 и временно выключи VP8; — делай сразу «Video call»; — при упорных проблемах на сервере можно попробовать direct_media=yes (мы его оставили OFF по умолчанию).
  • Сообщения не доходят: убедись, что адресат онлайн (SIP MESSAGE не буферизуется сервером).


Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 5)

Спасибо за труд.

А теперь о грустном - почему бы сперва не собрать все в пакеты Deb. Затем из пакетов не установить.

Ведь иногда хакеры ломают системы и очень радуются, когда на сервере установлен весь build-essential.

Nurmukh ★★★★
()
Ответ на: комментарий от Nurmukh

В Debian 13 уже есть готовый пакет, если хочется что-то изменить - в докер или другой системе собрать из debian src (dsc) с добавлением нужных патчей готовые deb пакеты.

Если хочется именно в debian 12 - собрать на основе dsc от debian 13 пакеты для debian 12.

Я собирал, там нужно всего одну строчку из зависимостей пакета убрать.

На выходе нормальные deb пакеты и не заспанная мусором как у ТС система от пакетов для сборки.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

А что с push-уведомлениями ? Без них на мобильных - практически бесполезно. Не дозвонишься.

ovax ★★★
()
Ответ на: комментарий от kostik87

В Debian 13 уже есть готовый пакет

Нет, в релиз он не попал, остался в unstable. Есть еще вариант поставить через скрипт от разработчиков FreePBX с ключиком --nofreepbx. Правда оно у них rpm пересобранный через alien в deb, но всё еще лучше чем собирать у себя )

Turbid ★★★★★
()
Последнее исправление: Turbid (всего исправлений: 1)

libspeexdsp-dev

кто когда последний раз использовал кодек speex?

contrib/scripts/install_prereq install

А зачем несколькими строчками выше вы забиваете зависимости вручную в переменную DEBIAN_FRONTEND?

say «Создание systemd-юнита»

чем не устроил штатный из make install?

Dial(PJSIP/${EXTEN}

Лучше заменить на Dial(PJSIP_DIAL_CONTACTS(${EXTEN}..., т.к. если у пользователя мультирегистрация, то звонок улетит только на первый попавшийся контакт.

NoOp

Лучше поменять на Verbose с нужным уровнем чтобы не загаживать лог когда это не надо.

disallow=all

allow=h264,opus,alaw,ulaw,g722

Зачем ulaw если мы не в США или Японии? Широкополосный g722 лучше поставить перед alaw. Две строчки можно заменить одной: allow=!all,h264,opus,g722,alaw

Turbid ★★★★★
()
Ответ на: комментарий от Nurmukh

Если хакеры уже внутри и могут использовать установленные тобой пакеты - то система всё равно скомпрометирована.

firkax ★★★★★
()
Ответ на: комментарий от Nurmukh

selinux никак не влияет на данную ситуацию. Как впрочем и наличие gcc на сервере. Если есть шелл значит есть полный доступ на что угодно как минимум с правами юзера шелла, и надеяться на то что хакер глупый и испугался отсутствия gcc совершенно не следует.

firkax ★★★★★
()
Ответ на: комментарий от Nurmukh

Помню был какой то дистр на базе шапки/centos как раз для этого, причем с веб-мордой (которую так любят виндовс юзеры…) забыл уже его название :(

mx__ ★★★★★
()
Ответ на: комментарий от firkax

selinux никак не влияет на данную ситуацию.

был очень известный в 2010 году случай (точно дату не помню), из какой то баги в пхп положили очень много серверов в инете кроме тех что работали под selinux. Там им не давали доступ к памяти, из какой то дыры в php.

mx__ ★★★★★
()
Ответ на: комментарий от ovax

андроид можно настроить и без пушей, иось - без шансов

чтобы иметь пуши надо регистрироваться в эпле/гугле, получать ключи и пересобирать с ними приложение. Т.е. приложений с пушами, которые при этом не прибиты к конкретному сервису быть не может даже в теории.

sergej ★★★★★
()
Ответ на: комментарий от mx__
docker run --rm -it debian:bookworm
apt update apt install dpkg-dev devscripts
dget http://deb.debian.org/debian/pool/main/a/asterisk/asterisk_22.4.1~dfsg+~cs6.15.60671435-2.dsc
dpkg-source -x asterisk_22.4.1~dfsg+~cs6.15.60671435-2.dsc
cd asterisk_22.4.1~dfsg+~cs6.15.60671435
Удалить systemd-dev их debian/control
apt-get build-dep . 
dpkg-checkbuilddeps 
debuild -b -uc -us

Значит удалили. Когда я собирал для Debian 12 ещё был в репах для Debian 13.

Выше то как собирал в docker пакеты для Debian 12.

Указанного DSC файла уже нет, берём из SID:

http://deb.debian.org/debian/pool/main/a/asterisk/asterisk_22.5.1~dfsg+~cs6.15.60671435-1.dsc
kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от mx__

Это связано с тем, что по мнению мантейнеров Debian качество кода и скорость устранения ошибок и уязвимостей в Asterisk не соответствуют для его добавления в стабильный релиз.

kostik87 ★★★★★
()
Ответ на: комментарий от mx__

Это конечно хорошо в плане возможного уменьшения ущерба, но скомпрометированная система должна считаться таковой (и проходить мероприятия по восстановлению чистоты) вне зависимости от того, был ли там selinux или нет.

firkax ★★★★★
()
Ответ на: комментарий от mx__

Причём тут старые версии и причём тут левые репы? Речь исключительно про фильтрацию пакетов в момент релиза новой stable-ветки.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Просто если в el не готова версия пакета то оставляют старую с патчами по секурити …

Опять же в el может и не быть в самом дистре нужного пакета но есть подписанные, почти официальные репы для софта не вошедшего в дистр. epel, elrepo, rpm-fusion и т.д.

Эти репы не заменяют пакеты из дистра а дополняют, легко дополняются и убираются из дистра, легко делает локальный реп для них и т.д.

например сабж представлен для el9 в официальном репозитарии epel в версии 18.12.1 и в каком то lux которые считается сторонним и там версия 18.26.3.

Я подумал что в Debian как то также, есть какой то подписанный реп с астриском и его нужно просто добавить в source лист.

mx__ ★★★★★
()
Ответ на: комментарий от mx__

Нет, не так. В дебиане есть два отдельных процесса: 1) обновление пакетов в последней репе, 2) проверка годности имеющихся в репе пакетов для релиза, когда этот релиз оформляют. То есть вариантов «какую версию пакета взять» там не рассматривают, есть только один кандидат.

Теоретически если ты (т.е. мейнтейнер) успеешь до начала релизного процесса откатить пакет в тестовой ветке до менее забагованной версии - у неё будет больше шансов на принятие, но в самом релизном процессе этим уже не занимаются, там только смотрят годен - не годен. Да и вообще подобные откаты - редкое событие.

в самом дистре нужного пакета но есть подписанные, почти официальные репы для софта не вошедшего в дистр

Есть такая, sid называется, и в ней есть asterisk. А ещё скоро сделают новую версию для тестинга дебиана 14, в ней он тоже будет.

Если ты хочешь чтобы была репа именно к дебиану 13 с невошедшими пакетами, то такой нет. Подозреваю, на её поддержку и ресурсов не найдётся, предпочитают тратить их на поддержку того что вошло.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от kostik87

В Debian 13 уже есть готовый пакет

это не совсем так. там беды с мейнтейнером и поэтому весь астериск выкинули на мороз после bullseye. и всё никак.

aol ★★★★★
()
Ответ на: комментарий от firkax

sid это не то, в el это Fedora/rawhide, Centos X Stream.

Я про другое. Вот к примеру у нас нет пропер дров нвидиа, подключаешь rpm-fusion или elrepo и ставишь.

Если ты хочешь чтобы была репа именно к дебиану 13 с невошедшими пакетами, то такой нет. Подозреваю, на её поддержку и ресурсов не найдётся, предпочитают тратить их на поддержку того что вошло.

Хм. Не понял. В шапке/fedora этим занимаются все кому не лень, я даже у себя такие репы держал… с тем же dahdi.

Нормальный админ никогда не будет ставить в систему пакет мимо пакетного менеджера.

Взять к примеру ту же 1с, скачиваешь рпм в диру, лепишь репо. Потом на серваках через ansible хлоп и все обновилось.

mx__ ★★★★★
()
Ответ на: комментарий от unclestephen

Кстати я думаю (что Asterisk, особенно без всяких dahdi) одно из тех приложений что оптимально его юзать через контейнер.

mx__ ★★★★★
()
Ответ на: комментарий от unclestephen

нормально приходят вызовы

это пока телефон не уснул глубоко. дальше его можно только пушем разбудить оперативно.

ну, или отключить энергосбережение для сип-клиента, но это скажется на времени автономной работы

aol ★★★★★
()
Ответ на: комментарий от unclestephen

оно работает (но лучше бы не), только Asterisk – жирное, монструозное, кривое говно.
используем его более 10 лет в проде, поэтому мнение авторитетное.

я очень рекомендую Prosody+Jitsi, для твоих задач самое оно, настраивается хорошо, работает замечательно, сильно лучше, чем тот же Zoom или Teams, в которых через раз кто-то обязательно отваливается и не может войти в конференцию.

ann_lortemp2
()
Ответ на: комментарий от ann_lortemp2

только Asterisk – жирное, монструозное, кривое говно. используем его более 10 лет в проде, поэтому мнение авторитетное.

странно.

Вроде тоже в продакшене, вообще ничего не жрет и не потребляет. Правда версия очень старая …

mx__ ★★★★★
()
Ответ на: комментарий от mx__

старые версии – с дырявым и неподдерживаемым chan_sip.
новые версии – тоже дырявые, особенно с дефолтным конфигом, причём неочевидно дырявые и скорее UB, чем баг.

и те, и другие – кривые и косые, жрут гигабайты памяти, текут и тормозят.

use Freeswitch, luke.

ann_lortemp2
()
Ответ на: комментарий от mx__

Я про другое. Вот к примеру у нас нет пропер дров нвидиа, подключаешь rpm-fusion или elrepo и ставишь.

Я ничего не понял, но в дебиане, говорят, можно ставить из sid устаревшие нвидиа-драйвера, которые уже выкинули из основной ветки.

Хм. Не понял. В шапке/fedora этим занимаются все кому не лень, я даже у себя такие репы держал… с тем же dahdi.

Сделать свою репу ты можешь и в дебиане, но при чём тут официальный дебиан? Они не могут на себя брать ответственность за её содержимое. А так делай, раздавай юзерам её адрес и они будут её себе прописывать. Таких реп полно.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Поэтому в той же федоре нет вообще попер дров нвидиа, никаких так они не могут брать отвественность за бины нвидиа.

mx__ ★★★★★
()
Ответ на: комментарий от ann_lortemp2

Если есть дыра то она патчится на уровне старой версии.

mx__ ★★★★★
()
Ответ на: комментарий от Nurmukh

Большая просьба не употреблять слово «хакеры» в смысле, который ему придали Microsoft и проплаченные журнашлюхи. Оно в оригинале про другое, вообще-то.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

Доброго! Идея хороша! Но… 22.5.1 - Более недоступен. Актуален 22.5.2, https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22.5.2.tar.gz Думаю, стоит поправить в статье.

Или переделать на current https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz

И проблема с SSL сертификатом, пока не понял куда копать… :-(

WARNING[40073]: pjproject: <?>: SSL SSL_ERROR_SSL (Handshake): Level: 0 err: <167773202> <error:0A000412:SSL routines::sslv3 alert bad certificate> len: 0 peer: **********:

Зхо-тест проходит, а вот SIP’ы соединятся не хотят (((

RED2
()
Ответ на: комментарий от RED2

я вам могу посоветовать только отладить скрипт для своей специфики, указать её и выложить, например тут

поправить текст уже нет возможности

версия загружаемого приложения определяется параметром, то есть с надеждой, что оно сработает и для следующих версий

WARNING[40073]: pjproject: <?>: SSL SSL_ERROR_SSL (Handshake): Level: 0 err: <167773202> <error:0A000412:SSL routines::sslv3 alert bad certificate> len: 0 peer: **********:

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

если не хватает опыта, можно воспользоваться одним из ИИ

unclestephen
() автор топика
Последнее исправление: unclestephen (всего исправлений: 1)
Ответ на: комментарий от RED2

я честно скажу, что собирал скрипт из фрагментов, то есть скрипт целиком не пробовал запускать, да покарает меня @hobbit

я потратим почти 12 часов в течении двух дней, и мне не хватило сил прогнать всё на чистовую

unclestephen
() автор топика
Ответ на: комментарий от ann_lortemp2

asterisk, freeswitch - согласен, тяжело..

Но, насколько понял, описанная связка позволит даже спрятаться от DPI (в наше время актуально становится).

Может ли Prosody+Jitsi так же закрыться полностью от Deep Packet Inspection (DPI) чтобы уменьшить вероятность блокировки?

one_more_alex
()
Ответ на: комментарий от ann_lortemp2

Разве в статье ТС не tls×srtp?

Сигнализация: TLS 5061/tcp для domain.name.com (Let’s Encrypt).
Медиа (аудио+видео): RTP/RTCP 10000–20000/udp (SRTP для аудио/видео).

И зачем его прятать? Возможно так наоборот повысится вероятность блокировок.

MirandaUser2
()
Ответ на: комментарий от MirandaUser2

Прятать, чтобы потом не разбираться почему соединение устанавливается, но не работает или частично работает. Потом же и настраивать новые способы. Лучше уже сразу прикрыться HTTPS-подобным зонтиком. Авось и не заметят )…

С шифрованиями по снифу трафика очень интересно получается. Там чуть ли не прямо (в частности у OpenvPN) говорится «А сейчас я такая-то программа начну/продолжу шифрованную сессию». Ну и исход dpi понятен. Конечно могут прийти к блокировке вообще «всё что зашифровано», но пока HTTPS пролазит…

one_more_alex
()

Немного оффтопа: как сказать GS Wave, что transport - tcp? Через «domain;transport=tcp» не работает. =(

ComradeDOS
()
Ответ на: комментарий от one_more_alex

Прятать, чтобы потом не разбираться почему соединение устанавливается, но не работает или частично работает.

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

Конечно могут прийти к блокировке вообще «всё что зашифровано», но пока HTTPS пролазит…

скорее к замедлениям, я с ними уже сталкиваюсь. Для аудио это определенно критично.

Так, что мне кажется, что лучше начинать с типовой конфигурации, а не что-то маскирующееся под HTTPS.

MirandaUser2
()

Интересный мануал, спасибо!

nuxster ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.