Linux

Вчера, на конференции «Стальной бубен 2011», увидел новый продукт от Kerio — IP PBX. Стало очень интересно, тем более цена: 450 Евро (сервер и 5 операторов) + 15 Евро за каждого дополнительного оператора. Начал изучать — это Asterisk! 🙂

А на сайте карсиво написано:

Раньше, АТС представляла собой таинственный ящик, закрепленный на стене. Сегодня АТС — это сервер, установленный в серверной стойке. Раньше, для обслуживания АТС требовался телефонист. Сегодня ее администрирует ИТ-специалист, причем для него это так же просто, как и работа с любым другим продуктом компании Kerio.

Kerio Operator — это система IP PBX (корпоративная АТС на основе межсетевого протокола IP) для предприятий малого и среднего бизнеса, доступная и как серверное программное обеспечение, и как hardware appliance. Kerio Operator упрощает внедрение и интеграцию IP-телефонии в уже сущесвующую IT-инфраструктуру и обеспечивает удобство как для пользователя, так и для системного администратора.

Kerio Operator использует протокол SIP и совместим с любым SIP-устройством и SIP-провайдером, что позволяет ему работать с самыми популярными телефонами.

Усе дуже просто: необхідно заблокувати певним адресатам писати нам листи 🙂
Встановлено postfix, створюємо файл /etc/postfix/sender_access, куди заносимо наших небежених друзів:

user@bad.com REJECT

Створюємо базу:

postmap hash:sender_access

Прописуємо у конфіг main.cf

smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/sender_access

Та перезапускаємо! Тепер наш «товариш» отримає:

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

me@it-sfera.com.ua
SMTP error from remote mail server after RCPT TO::
host postfix [192.168.22.13]: 554 5.7.1 :
Sender address rejected: Access denied

—— This is a copy of the message, including all the headers. ——

Oktell logoКак я описывал раньше, есть у меня SIP-GSM шлюз на базе Asterisk, который подключен к офисному серверу с Oktell. На модемы приходят разные SMS и пока они ложатся в файл на Linux сервере. В них бывает информация о балансе на карточках :). Идея — перенести все эти SMS в Oktell.

Для начала решил все SMS записывать в базу MySQL на сервере, а потом служебным сценарием забирать в Oktell. Создаю в MySQL пользователя, базу, и таблицу:

CREATE TABLE  `asterisk`.`gsm` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATETIME NOT NULL ,
`modem` VARCHAR( 10 ) NOT NULL ,
`callerid` VARCHAR( 16 ) NOT NULL ,
`msg` VARCHAR( 160 ) NOT NULL ,
`oktell` ENUM(  '0',  '1' ) NOT NULL DEFAULT  '0'
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT =  'Входящие SMS'

На своєму домашньому нетбуці я встановив останню версію Ubuntu 10.10. Чудово працює, усі пристрої розпізнав «з коробки». Також завівся і мій iPhone 3Gs, але не в режимі модема… А тут знадобилося вийти в інтернет через Utel.

Як змусити запрацювати модем? Необхідно встановити iPhone USB Ethernet Driver. У глобальній мережі Ви знайдете ось ці 3 пакунки:
dkms_2.1.1.2-3ubuntu1_all.deb
ipheth-dkms_1.0-1ubuntu1.1_all.deb
ipheth-utils_1.0-1ubuntu1.1_i386.deb

Після чого на iPhone для Utel прописуємо точку входу 3g.utel.ua і вмикаємо режим модему:

Інтернет запрацював на нетбуці, швидкість відмінна:

UPD: для мого тарифу Укртелеком заявляє швидкість 1024/256 і тішить, що саме так і є:

Довго шукав якогось простого, функціонального і безкоштовного SIP-клієнта для iPhone…. Здається, знайшов! 😉
Linphone — це OpenSource інтернет телефон. Я ним успішно користуюся дома на Linux, а тут, як виявилось, існують версії під: Linux, Windows, MacOS, iOS і Android! Тож я відразу ж вирішив скачати:

Linphone About
Linphone About

Asterisk LogoМы уже имеем настроенный сервер Asterisk через который Oktell осуществляет звонки на мобильные. Вся статистика храниться в /var/log/asterisk/cdr-csv/Master.csv Не очень удобно в плане работы… Вот и хочу перенести все в MySQL, а потом смогу эту информацию использовать в сценариях Oktell. Как и в предыдущей статье все будим собирать с исходников на Ubuntu Linux.
Приступим!

Много я уже написал про Oktell и Asterisk, а вот сегодня провел эксперимент с Yate (Yet Another Telephony Engine). Yate — это программная IP-PBX, может интегрироваться с другими приложениями, например с WEB сервером. YATE работает под управлением операционных систем Linux, BSD и Windows, поддерживает SIP, H.323, IAX и Jingle. Написан на C++ и позволяет использовать внешние модули и расширения.

Документации по этой IP-PBX не очень много… Опишу процесс установки и запуска на Debian Linux.
Для начала установка зависимостей:

aptitude install libspeex-dev libgsm1-dev libopencore-amrnb-dev autoconf sox

Получаем последнюю версию кода:

svn checkout http://voip.null.ro/svn/yate/trunk yate

Процесс сборки и установки:

./autogen.sh
./configure --prefix=/usr/local
make install all

Сьогодні потрібно було обмежети для одного працівника (192.168.0.2) швидкість до 512 Кб/с на вхід та вихід. Допоміг ось такий скрипт:

#!/bin/bash
#
#  tc uses the following units when passed as a parameter.
#  kbps: Kilobytes per second
#  mbps: Megabytes per second
#  kbit: Kilobits per second
#  mbit: Megabits per second
#  bps: Bytes per second
#       Amounts of data can be specified in:
#       kb or k: Kilobytes
#       mb or m: Megabytes
#       mbit: Megabits
#       kbit: Kilobits
#  To get the byte figure from bits, divide the number by 8 bit
#
TC=/sbin/tc
IF=eth1                 # Interface
DNLD=512kbps        # DOWNLOAD Limit
UPLD=512kbps        # UPLOAD Limit
IP=192.168.0.2      # Host IP
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"

start() {

    $TC qdisc add dev $IF root handle 1: htb default 30
    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
    $U32 match ip dst $IP/32 flowid 1:1
    $U32 match ip src $IP/32 flowid 1:2

}

stop() {

    $TC qdisc del dev $IF root

}

restart() {

    stop
    sleep 1
    start

}

show() {

    $TC -s qdisc ls dev $IF

}

case "$1" in

  start)

    echo -n "Starting bandwidth shaping: "
    start
    echo "done"
    ;;

  stop)

    echo -n "Stopping bandwidth shaping: "
    stop
    echo "done"
    ;;

  restart)

    echo -n "Restarting bandwidth shaping: "
    restart
    echo "done"
    ;;

  show)

    echo "Bandwidth shaping status for $IF:\n"
    show
    echo ""
    ;;

  *)

    pwd=$(pwd)
    echo "Usage: $(/usr/bin/dirname $pwd)/tc.bash {start|stop|restart|show}"
    ;;

esac

exit 0