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 :)