Instalación del sistema de facturación de llamadas y DID OV500

OV500 es un sistema de facturación de llamadas y de Números Geográficos basados en Kamailio y FreeSWITCH. Permite configurar cuentas prepago y postpago, gateway para pagos vía PayPal, configuración de usuarios, revendedores y proveedores de llamadas. A cada usuario se puede asociar una o más cuentas SIP que se pueden autenticar con usuario y contraseña o sobre IP. Se pueden crear enrutamientos personalizados y tiene un buen sistema de monitoreo accesible vía Web. El sistema puede escalar horizontalmente añadiendo servidores FreeSWITCH y verticalmente utilizando una configuración de alta disponibilidad:

En este documento veremos como instalar OV500 en CentOS 7 desde cero y como realizar la primera llamada a un numero de Estados Unidos. El documento es bastante extenso; IMPORTANTE: CAMBIEN 207.246.68.160, EN TODOS LOS PUNTOS DONDE APARECE, CON LA IP PUBLICA DE SU SERVIDOR; iniciamos preparando el servidor:

yum update -y

timedatectl set-timezone America/Bogota

yum install chrony -y

systemctl enable chronyd

systemctl start chronyd

nano /etc/hosts

modificamos estas lineas:

127.0.0.1 sip1.kamailio.xyz sip1

::1 sip1.kamailio.xyz sip1

para que queden:

#127.0.0.1 sip1.kamailio.xyz sip1

#::1 sip1.kamailio.xyz sip1

nano /root/.bash_profile

al final del archivo añadimos las siguientes lineas:

export EDITOR=/usr/bin/nano

export PS1='\[\033[0;35m\]\H\[\033[0;33m\] \w\[\033[00m\]: '

alias free="free -m"

alias kacfg="nano /home/OV500/LB/etc/kamailio/kamailio.cfg"

alias fscli="/usr/local/bin/fs_cli"

alias mysql="mysql -u root -pKLuJUE3NEwTaSH6S"

guardamos los cambios y recargamos:

source /root/.bash_profile

Desactivamos Selinux:

nano /etc/selinux/config

modificamos las dos lineas para que queden:

SELINUX=disabled

SELINUXTYPE=targeted

reiniciamos:

reboot

Instalamos toda una serie de paquetes para compilar desde las fuentes y unas dependencias que necesitamos más adelante:

yum groupinstall "Development tools" -y

yum install epel-release -y

yum install wget curl git bind-utils ntpdate systemd net-tools whois sendmail sendmail-cf mlocate iptables-devel net-snmp-devel iptables* vim -y

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y

yum-config-manager --disable remi-php54

yum-config-manager --enable remi-php73

yum install php php-fpm php-cli php-json php-readline php-xml php-curl php-gd php-json php-mbstring php-mysqlnd php-opcache php-pdo php-zip mod_ssl -y

yum install kernel-devel kernel-headers libunistring-devel flex gcc hiredis-devel libevent-devel *pcap* json-glib glib* glib2 glib2-devel xmlrpc-c-devel gcc-c++ alsa-lib-devel autoconf automake bison bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel gdbm-devel gnutls-devel ldns-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsndfile-devel libtheora-devel libtool libvorbis-devel libxml2-devel lzo-devel mongo-c-driver-devel ncurses ncurses-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel python-devel soundtouch-devel speex-devel sqlite sqlite-devel unbound-devel libuuid-devel which zlib-devel ImageMagick ImageMagick-devel iftop htop tcpdump ngrep psmisc readline* lua lua-devel postgresql-devel yasm nasm opus-devel -y

yum install -y luarocks && luarocks install lua-cjson

yum install json-devel json-c-devel -y

yum install mariadb mariadb-devel mariadb-server mysql-connector-odbc libtool-ltdl-devel unixODBC unixODBC-devel -y

Iniciamos una serie de servicios y los configuramos para que arranquen en automático:

systemctl start httpd

systemctl enable httpd

Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

systemctl start php-fpm

systemctl enable php-fpm

Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

systemctl stop firewalld

systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

systemctl enable iptables

Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

systemctl start iptables

cd /usr/src

Bajamos el programa OV500 con relativas configuraciones que utilizaremos más adelante:

git clone -b master https://github.com/openvoips/OV500.git

instalamos dos repositorios que utilizaremos a seguir:

yum install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm -y

yum install http://www.nosuchhost.net/~cheese/fedora/packages/epel-7/x86_64/cheese-r... -y

sed -i "s#gpgcheck=1#gpgcheck=0#g" /etc/yum.repos.d/okay.repo

instalamos nuevos paquetes presentes en los dos repositorios recién instalados:

yum install autoconf automake broadvoice-devel flite-devel g722_1-devel ilbc2-devel libcodec2-devel libsilk-devel lua-devel opus-devel libks libks-devel signalwire-client-c -y

yum install spandsp spandsp-devel -y

yum install libavformat-devel libswscale-devel ffmpeg vorbis-tools mpg123-devel mpg123-libs libshout-devel lame lame-devel -y

Compilamos la pila SIP Sofia desde las fuentes (requerida por FreeSWITCH):

cd /usr/src

git clone https://github.com/freeswitch/sofia-sip.git

cd sofia-sip

./autogen.sh

./configure --prefix=/usr --libdir=/usr/lib64

make

make install

descargamos las fuentes de FreeSWITCH 1.10:

cd /usr/src

git clone -b v1.10 https://github.com/signalwire/freeswitch.git

cd freeswitch

./bootstrap.sh -j

copiamos y pegamos el bloque que sigue para indicar los módulos que queremos compilar:

echo 'applications/mod_commands

applications/mod_conference

applications/mod_callcenter

applications/mod_curl

applications/mod_db

applications/mod_dptools

applications/mod_enum

applications/mod_esf

applications/mod_expr

applications/mod_fifo

applications/mod_fsv

applications/mod_hash

applications/mod_httapi

applications/mod_sms

applications/mod_spandsp

applications/mod_test

applications/mod_valet_parking

applications/mod_voicemail

codecs/mod_amr

codecs/mod_b64

codecs/mod_g723_1

codecs/mod_g729

codecs/mod_h26x

codecs/mod_opus

dialplans/mod_dialplan_asterisk

dialplans/mod_dialplan_xml

endpoints/mod_loopback

endpoints/mod_rtc

endpoints/mod_skinny

endpoints/mod_sofia

endpoints/mod_verto

event_handlers/mod_cdr_csv

event_handlers/mod_json_cdr

event_handlers/mod_cdr_sqlite

event_handlers/mod_event_socket

formats/mod_local_stream

formats/mod_native_file

formats/mod_png

formats/mod_shout

formats/mod_sndfile

formats/mod_tone_stream

languages/mod_lua

#languages/mod_v8

loggers/mod_console

loggers/mod_logfile

loggers/mod_syslog

say/mod_say_en

xml_int/mod_xml_cdr

xml_int/mod_xml_curl

xml_int/mod_xml_rpc

xml_int/mod_xml_scgi'>/usr/src/freeswitch/modules.conf

Seguimos con la compilación e instalación de las locuciones audio y música de espera:

./configure -C --prefix=/home/OV500

make

make install

make cd-sounds-install

make cd-moh-install

Para el Codec G729 necesitamos la versión 3.20 de Gmake que vamos a instalar desde las fuentes:

yum remove cmake -y

cd /usr/src

wget https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0....

tar -xf cmake-3.20.0.tar.gz

cd cmake-3.20.0

./bootstrap --prefix=/usr

gmake

make install

cd /usr/src

descargamos y compilamos la versión Open Source del codec G729:

git clone https://github.com/xadhoom/mod_bcg729.git

cd mod_bcg729/

nano Makefile

modificamos las dos lineas que siguen:

FS_INCLUDES=/usr/include/freeswitch

FS_MODULES=/usr/lib/freeswitch/mod

para que queden:

FS_INCLUDES=/home/OV500/include/freeswitch

FS_MODULES=/home/OV500/lib/freeswitch/mod

Gurdamos los cambios y compilamos:

make

make install

sed -i "s/g729/bcg729/" /home/OV500/etc/freeswitch/autoload_configs/modules.conf.xml

modificamos la configuración de los programas ejecutables de FreeSWITCH:

rm -rf /usr/local/bin/freeswitch

rm -rf /usr/local/bin/fs_cli

ln -s /home/OV500/bin/freeswitch /usr/local/bin/freeswitch

ln -s /home/OV500/bin/fs_cli /usr/local/bin/fs_cli

Instalamos algunas dependencias más para la compilación de algunos módulos de Kamailio:

yum install rtpproxy jansson-devel jansson-devel-doc -y

descargamos y compilamos la versión 4.4.7 de Kamailio:

cd /usr/src

wget https://www.kamailio.org/pub/kamailio/4.4.7/src/kamailio-4.4.7_src.tar.gz

tar -xf kamailio-4.4.7_src.tar.gz

mv kamailio-4.4.7 kamailio

cd kamailio

make include_modules="db_mysql dialplan dispatcher exec" exclude_modules="python acc_radius app_java app_lua app_mono app_perl app_python auth_ephemeral auth_identity auth_radius carrierroute cdp cdp_avp cnxcc cpl-c crypto db2_ldap db_berkeley db_cassandra db_mongodb db_oracle db_perlvdb db_postgres db_sqlite db_unixodbc dialplan dnssec erlang evapi geoip geoip2 gzcompress h350 http_async_client ims_auth ims_charging ims_dialog ims_icscf ims_isc ims_qos ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf ims_usrloc_scscf iptrtpproxy jansson janssonrpc-c json jsonrpc-c kazoo lcr ldap log_systemd memcached mi_xmlrpc misc_radius ndb_cassandra ndb_mongodb ndb_redis osp outbound peering purple regex rls sctp snmpstats xhttp_pi xmlops xmlrpc xmpp" cfg prefix="/home/OV500/LB"

make

make install

Preparamos la parte Web de OV500:

cd /usr/src/OV500

cp -rf /usr/src/OV500/portal /home/OV500/

sed -i "s/;request_terminate_timeout = 0/request_terminate_timeout = 300/" /etc/php-fpm.d/www.conf

sed -i "s#short_open_tag = Off#short_open_tag = On#g" /etc/php.ini

sed -i "s#;cgi.fix_pathinfo=1#cgi.fix_pathinfo=1#g" /etc/php.ini

sed -i "s/max_execution_time = 30/max_execution_time = 3000/" /etc/php.ini

sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 20M/" /etc/php.ini

sed -i "s/post_max_size = 8M/post_max_size = 20M/" /etc/php.ini

sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini

sed -i "s/;date.timezone =/date.timezone = America\/Bogota/" /etc/php.ini

systemctl restart php-fpm

systemctl restart httpd

eliminamos y volvemos a crear el archivo con los datos de conexión a las bases de datos que más adelante crearemos:

rm /home/OV500/portal/application/config/database.php

rm: remove regular file /home/OV500/portal/application/config/database.php? y

copiamos y pegamos todo el bloque que sigue:

echo "<?php

defined('BASEPATH') OR exit('No direct script access allowed');

\$active_group = 'default';

\$query_builder = TRUE;

\$db['default'] = array(

'dsn' => 'mysql:host=localhost;dbname=switch',

'hostname' => '',

'username' => 'ovswitch',

'password' => 'sesamo',

'database' => '',

'dbdriver' => 'pdo',

'dbprefix' => '',

'pconnect' => TRUE,

'db_debug' => TRUE,

'cache_on' => FALSE,

'cachedir' => '',

'char_set' => 'utf8',

'dbcollat' => 'utf8_general_ci',

'swap_pre' => '',

'encrypt' => FALSE,

'compress' => FALSE,

'stricton' => FALSE,

'failover' => array()

);

\$db['cdrdb'] = array(

'dsn' => 'mysql:host=localhost;dbname=switchcdr',

'hostname' => '',

'username' => 'ovswitch',

'password' => 'sesamo',

'database' => '',

'dbdriver' => 'pdo',

'dbprefix' => '',

'pconnect' => FALSE,

'db_debug' => FALSE,

'cache_on' => FALSE,

'cachedir' => '',

'char_set' => 'utf8',

'dbcollat' => 'utf8_general_ci',

'swap_pre' => '',

'encrypt' => FALSE,

'compress' => FALSE,

'stricton' => FALSE,

'failover' => array(),

'save_queries' => TRUE

);">/home/OV500/portal/application/config/database.php

hacemos lo mismo con el archivo de configuración de OV500:

rm /home/OV500/portal/api/config.php

rm: remove regular file /home/OV500/portal/api/config.php? y

copiamos y pegamos todo el bloque que sigue:

echo "<?php

error_reporting(0);

ini_set('memory_limit', '1024M');

date_default_timezone_set('America/Bogota');

define('CDR_DSN', 'mysql:dbname=switchcdr;host=localhost');

define('CDR_DSN_LOGIN', 'ovswitch');

define('CDR_DSN_PASSWORD','sesamo');

define('SWITCH_DSN', 'mysql:dbname=switch;host=localhost');

define('SWITCH_DSN_LOGIN', 'ovswitch', );

define('SWITCH_DSN_PASSWORD','sesamo');

define('LOGPATH', 'log/');

define('LOGWRITE', '0');

define('DBLOGWRITE', '1');">/home/OV500/portal/api/config.php

enlace simbólico y permisos:

ln -s /home/OV500/portal /var/www/html/portal

chown -Rf apache:apache /var/www/html/portal

chown -Rf apache:apache /home/OV500/portal

copiamos y pegamos el bloque que sigue para la configuración de MariaDB:

echo '[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd

symbolic-links=0

sql_mode=''

port = 3306

innodb_file_per_table

key-buffer-size = 248M

myisam-recover = FORCE,BACKUP

# SAFETY #

max-allowed-packet = 248M

max-connect-errors = 10000

skip-name-resolve

event_scheduler = 1

# CACHES AND LIMITS #

tmp-table-size = 124M

max-heap-table-size = 124M

query-cache-type = 0

query-cache-size = 0

max-connections = 10000

thread-cache-size = 248

open-files-limit = 65535

table-definition-cache = 4096

table-open-cache = 500

innodb-flush-method = O_DIRECT

innodb-log-files-in-group = 2

innodb-flush-log-at-trx-commit = 0

innodb-file-per-table = 1

innodb-buffer-pool-size = 2G

innodb_stats_on_metadata = OFF

skip-networking=0

skip-bind-address

 

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

 

#

# include all files from the config directory

#

!includedir /etc/my.cnf.d'>/etc/my.cnf

Activamos el arranque automatico de MariaDB:

systemctl enable mariadb

Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

reiniciamos:

systemctl restart mariadb

creamos el usario con contraseña para que tenga acceso a todas las base de datos:

/usr/bin/mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'ovswitch'@'localhost' IDENTIFIED BY 'sesamo'";

Creamos las base de datos y cargamos tablas y datos:

mysqladmin create switch

mysqladmin create switchcdr

mysqladmin create kamailio

/usr/bin/mysql switch < /usr/src/OV500/config/database/switch.sql

/usr/bin/mysql switchcdr < /usr/src/OV500/config/database/switchcdr.sql

/usr/bin/mysql kamailio < /usr/src/OV500/config/database/kamailio.sql

Creamos la contraseña del usuario root de MariaDB:

mysqladmin -u root password KLuJUE3NEwTaSH6S

instalamos SNGREP y NGREP copiando y pegando el bloque que sigue:

echo '[irontec]

name=Irontec RPMs repository

baseurl=http://packages.irontec.com/centos/$releasever/$basearch/'>/etc/yum.repos.d/sngrep.repo

importando la clave del repositorio

rpm --import http://packages.irontec.com/public.key

instalando:

yum install ngrep sngrep -y

copiamos los archivos de configuración de Kamailio:

cp -rf /usr/src/OV500/config/kamailio /home/OV500/LB/etc/

cp: overwrite â/home/OV500/LB/etc/kamailio/kamctlrcâ? y

cp: overwrite â/home/OV500/LB/etc/kamailio/tls.cfgâ? y

cp: overwrite â/home/OV500/LB/etc/kamailio/kamailio.cfgâ? y

cp: overwrite â/home/OV500/LB/etc/kamailio/dictionary.kamailioâ? y

sed -i 's/OV500LBIP/'207.246.68.160'/g' /home/OV500/LB/etc/kamailio/kamailio.cfg

sed -i 's/ovswitch123/'sesamo'/g' /home/OV500/LB/etc/kamailio/kamailio.cfg

nano +1236 /home/OV500/LB/etc/kamailio/kamailio.cfg

se comentan las dos lineas (1236 y 1237) para que queden:

#if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))

# return;

Se guardan los cambios y se continua con:

sed -i 's/OV500FSIPADDRESS/'207.246.68.160'/g' /home/OV500/LB/etc/kamailio/dispatcher.list

cd /usr/src/OV500/config/freeswitch

sed -i 's/LBSERVERIP/'207.246.68.160'/g' /usr/src/OV500/config/freeswitch/autoload_configs/acl.conf.xml

sed -i 's/OV500FSIPADDRESS/'207.246.68.160'/g' /usr/src/OV500/config/freeswitch/vars.xml

cp autoload_configs/acl.conf.xml /home/OV500/etc/freeswitch/autoload_configs/acl.conf.xml

cp: overwrite /home/OV500/etc/freeswitch/autoload_configs/acl.conf.xml? y

cp autoload_configs/lua.conf.xml /home/OV500/etc/freeswitch/autoload_configs/lua.conf.xml

cp: overwrite /home/OV500/etc/freeswitch/autoload_configs/lua.conf.xml? y

cp autoload_configs/modules.conf.xml /home/OV500/etc/freeswitch/autoload_configs/modules.conf.xml

cp: overwrite /home/OV500/etc/freeswitch/autoload_configs/modules.conf.xml? y

sed -i "s/g729/bcg729/" /home/OV500/etc/freeswitch/autoload_configs/modules.conf.xml

cp autoload_configs/switch.conf.xml /home/OV500/etc/freeswitch/autoload_configs/switch.conf.xml

cp: overwrite /home/OV500/etc/freeswitch/autoload_configs/switch.conf.xml? y

cp autoload_configs/xml_cdr.conf.xml /home/OV500/etc/freeswitch/autoload_configs/xml_cdr.conf.xml

cp: overwrite /home/OV500/etc/freeswitch/autoload_configs/xml_cdr.conf.xml? y

cp autoload_configs/xml_curl.conf.xml /home/OV500/etc/freeswitch/autoload_configs/xml_curl.conf.xml

cp: overwrite /home/OV500/etc/freeswitch/autoload_configs/xml_curl.conf.xml? y

cp vars.xml /home/OV500/etc/freeswitch/vars.xml

cp: overwrite /home/OV500/etc/freeswitch/vars.xml? y

cp sip_profiles/internal.xml /home/OV500/etc/freeswitch/sip_profiles/internal.xml

cp: overwrite /home/OV500/etc/freeswitch/sip_profiles/internal.xml? y

cp /usr/src/OV500/portal/api/lib/vm_user.lua /home/OV500/share/freeswitch/scripts/

se copia y pega el bloque que sigue para la conexión ODBC a la base de datos switch:

echo "[freeswitch]

Driver = MySQL

SERVER = localhost

PORT = 3306

DATABASE = switch

OPTION = 67108864

USER = ovswitch

PASSWORD = sesamo

">/etc/odbc.ini

se copia y pega el bloque que sigue para la configuración del cortafuegos:

echo "# sample configuration for iptables service

# you can edit this manually or use system-config-firewall

# please do not ask us to add additional ports/services to this default configuration

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

# User Agent

-A INPUT -p udp -m udp --dport 5060 -m string --string "friendly-scanner" --algo bm -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "sipcli" --algo bm -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "VaxSIPUserAgent/3.0" --algo bm -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "sipvicious" --algo bm -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "iWar" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "sipsak" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "pplsip" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Sippy" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Cisco" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Avaya" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Mitel" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "OpenScape" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Samsung" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Linksys" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "voip" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Office" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Aastra" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Yealink" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "MyPBX" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "F660" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Polycom" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "MERA" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Telovox" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "SylkServer" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "ASTPP" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Webitel" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Technicolor" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "c1" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Hello" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "15502" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "EnGenius" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Oktell" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "R2M5PBX" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Aastra" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "NWS" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "VOS2009" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Sippy" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "STARFACE" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "VOXGRID" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "Streamco" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060 -m string --string "FRITZ" --algo bm --to 65535 -j DROP

-A INPUT -p udp -m udp --dport 5060:5061 -j ACCEPT

-A INPUT -p udp -m udp --dport 6000:65000 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 10443 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 10080 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A INPUT -j DROP

COMMIT">/etc/sysconfig/iptables

Se reinicia IPtables:

systemctl restart iptables

se copia y pega el bloque que sigue para la configuración del servidor Web:

echo '

<VirtualHost *:80>

ServerAdmin demo@demo.com

ServerName localhost

DocumentRoot /var/www/html

<Directory /var/www/html>

Options Indexes FollowSymLinks MultiViews

AllowOverride All

Require all granted

</Directory>

ErrorLog error.log

CustomLog access.log combined

RewriteEngine on

</VirtualHost>'>/etc/httpd/conf.d/ov.conf

se reinician algunos servicios:

systemctl restart php-fpm

systemctl restart httpd

se copia y se pega el bloque que sigue para la configuración de los Trabajos programados relacionados con OV500:

crontab -l > /home/OV500/cron_bkp

echo "*/30 * * * * /usr/bin/sh /home/OV500/xmlcdr.sh >/dev/null 2>&1

*/15 * * * * /usr/bin/php /var/www/html/portal/index.php Billing quickservice >/dev/null 2>&1

1 4 * * * /usr/bin/php /var/www/html/portal/index.php Billing cron >/dev/null 2>&1" > /home/OV500/cron_bkp

se sube el archivo al proceso Cron:

crontab /home/OV500/cron_bkp

se copia y pega el bloque que sigue que contiene el arranque de todos los servicios:

echo '#!/usr/bin/sh

systemctl restart iptables

systemctl restart mariadb

systemctl restart php-fpm

systemctl restart httpd

killall -9 /usr/bin/rtpproxy

/usr/bin/rtpproxy -L 100000 -u root -l 207.246.68.160 -s udp:localhost:5899 -m 6000 -M 65000

killall -9 /home/OV500/LB/sbin/kamailio

/home/OV500/LB/sbin/kamailio

/home/OV500/bin/fs_cli -x "shutdown"

sleep 10

/home/OV500/bin/freeswitch -nc'> /home/OV500/ovservice.sh

se cambian los permisos del archivo:

chmod 777 /home/OV500/ovservice.sh

se copia el archivo de configuración de los CDR:

cp -rf /usr/src/OV500/config/xmlcdr.sh /home/OV500/

Se añade el archivo creado anteriormente (ovservice.sh) al arranque automático de CentOS 7:

nano /etc/rc.local

al final del archivo se pega:

/home/OV500/ovservice.sh

se guardan los cambios y se configura:

chmod +x /etc/rc.d/rc.local

systemctl enable rc-local

se reinicia el sistema:

reboot

si todo sale bien ya deberíamos poder acceder al portal:

http://207.246.68.160/portal/

Username: admin

Password: Ov500@786

Para poder realizar la primera llamada de prueba a un numero de Estados Unidos:

añadir dinero al usuario presente User Management → My Users & Services → Icono Payment → Add Payment:

añadir una nueva extensión al usuario presente: User Management → My Users & Services → Icono Services Edit → SIP-Trunk → Add SIP User:

 

añadir la tarifa USA a las tarifas del usuario presente: Rates and Package → Ratecard → customer (CUSTOMER42) → Icono View rates → Add rate:

añadir una IP/Troncal al Carrier presente: Routing Management → Carriers → Icono Edit → IP Trunk → Add Carrier IP:

Tienen que añadir un Proveedor de llamadas que los autentique sobre IP. Configuran la extensión 1000 que hemos creado en un teléfono SIP y marcan a USA utilizando el prefijo 1 + numero. La llamada debería funcionar sin problemas, el CDR de la mia:

Para subir tarifas desde archivos CSV: Rates & Package → Ratecard → Icono Edit → Upload From = Upload from file (csv).

Cosa que se deberían mejorar:

  • Actualizar el sistema a Rocky Linux 8

  • utilizar PHP 8.1 en lugar de 7.3

  • utilizar RTPEngine en lugar de RTPProxy

  • utilizar una versión más reciente de Kamailio

Si quiern comentar, añadir contenido, preguntar, pueden inscribirse al canal Telegram: https://t.me/voztovoice y opinar :)

Vota el Articulo: 

Promedio: 5 (1 voto)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Instalación del sistema de facturación de llamadas y DID OV500" Suscribirse a VozToVoice - Todos los comentarios