Está en la página 1de 24

Tercera Parte - Instalación A2Billing

A2billing es un clase 4 y clase 5 softswitch para Asterisk distribuido bajo una licencia Open Source
(GNU GPL) y basado en MySQL/MariaDB para las base de datos y PHP como lenguaje de
programación.

Se puede utilizar:

• Como sistema de tarjetas de llamadas a través de números de acceso telefónicos;


• Como sistema de venta de trafico telefónico al por mayor (Wholesale)
• Como sistema de facturación de llamadas
• Como sistema de venta de números geográficos (DID)
• Como sistema para la gestión de revendedores

Preparación del sistema

A2billing requiere por lo menos la versión 5.3 de PHP. En Almalinux 8 está disponible la versión 7.2
pues se instalará junto al servidor Web Apache y el modulo SSL (para conexiones seguras hacia el
servidor Web):

dnf install php php-gd php-mysqlnd php-process httpd mod_ssl php-cli php-soap php-xml -y

Para la instalación del paquete php-json se activa el repositorio epel:

dnf --enablerepo=epel install php-json -y

Como se va a utilizar el acceso cifrado al servidor Web, hay que crear el certificado para el subdominio
asociado al servidor. Primero se instala el programa:

dnf --enablerepo=epel install certbot -y

se desactiva momentáneamente el cortafuegos:

systemctl stop firewalld

se crea el certificado:

certbot certonly
Ahora hay que modificar el archivo de configuración de apache para modificar la parte relacionada con
el certificado creado

nano +59 /etc/httpd/conf.d/ssl.conf

se modifica la linea para que quede:

SSLProtocol -ALL +TLSv1.2

la linea 85 para que quede (PERSONALIZAR):

SSLCertificateFile /etc/letsencrypt/live/sip10.voztovoice.org/fullchain.pem

la linea 93 para que quede (PERSONALIZAR):

SSLCertificateKeyFile /etc/letsencrypt/live/sip10.voztovoice.org/privkey.pem
Se guardan los cambios. Se reinicia el cortafuegos:

systemctl start firewalld

Terminada esta operación, se configura la zona horaria en el archivo de configuración de PHP (php.ini)

nano +902 /etc/php.ini

Se modifica la linea para que quede (personalizar con su zona horaria):

date.timezone = America/Bogota

En el mismo archivo se busca esta linea (825):

upload_max_filesize = 2M

y se modifica para que quede:

upload_max_filesize = 8M

De esta forma se podrán cargar los archivos de tarifas que tengan un tamaño de hasta de 8 MegaBytes

Siempre en el mismo archivo, se busca esta linea (460):

error_reporting = E_ALL & ~E_DEPRECATED

y se modifica para que quede:

error_reporting = E_ALL & ~E_NOTICE

De esta forma en el LOG de apache aparecerán solamente los errores relacionados con el lenguaje PHP.
Se guardan los cambios y se descarga la ultima versión disponible de A2Billing desde GitHub:

dnf install git -y

cd /usr/local/src

git clone https://github.com/voztovoice/a2billing.git

se entra en la carpeta creada:

cd a2billing

A partir de la versión 2.1.1 se utiliza Composer para instalar toda las dependencias necesaria:

curl -sS https://getcomposer.org/installer | php

php composer.phar update


Continue as root/super user [yes]? yes

php composer.phar install

Continue as root/super user [yes]? yes

Luego se entra en el cliente MySQL:

mysql

se crea la base de datos a2billing:

mysql> create database a2billing;


Query OK, 1 row affected (0.00 sec)

se otorgan los permisos de acceso a la base de datos creada al usuario a2user identificado con la
contraseña sesamo:

mysql> CREATE USER 'a2user'@'localhost' IDENTIFIED BY 'sesamo';


Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL PRIVILEGES ON a2billing.* TO 'a2user'@'localhost';


Query OK, 0 rows affected (0.00 sec)

se actualizan los permisos:

mysql> flush privileges;


Query OK, 0 rows affected (0.00 sec)

se sale del cliente MySQL:

mysql> quit
Bye

Se crean las tablas en la base de datos a2billing utilizando el script presente en la siguiente carpeta:

cd DataBase/mysql-5.x/

chmod +x install-db2.sh

luego se ejecuta:

./install-db2.sh

Se insertan los datos como mostrado en la imagen que sigue:


Para resumir:

Database Name: a2billing


Hostname: localhost
Username: root
Password: C48WPNSyte4SBef

Se instalan las locuciones audio distribuidas con el programa (ingles, francés, español, portugués y
ruso):

cd /usr/local/src/a2billing/addons/sounds/

utilizando el siguiente script:

./install_a2b_sounds.sh

Como las locuciones en español no son de muy buena calidad, se descarga el archivo que sigue que
contiene las locuciones mejoradas:

cd /tmp

wget https://campus.voztovoice.org/a2bsip/a2billing-locuciones-es.tar

se descomprimen:

tar -xf a2billing-locuciones-es.tar

se mueven a la carpeta de las locuciones en español:

mv *.wav /var/lib/asterisk/sounds/es/
mv: ¿sobreescribir '/var/lib/asterisk/sounds/es/vm-and.wav'? (s/n) y

Se continua con la instalación copiando el archivo de configuración de a2billing en la carpeta /etc:

cp /usr/local/src/a2billing/a2billing.conf /etc/

se abre con el editor:


nano /etc/a2billing.conf

se modifican estas lineas:

[database]
hostname = localhost
port =
user = a2billing_dbuser
password = a2billing_dbpassword
dbname = a2billing_dbname
dbtype = mysql

para que queden:

[database]
hostname = 127.0.0.1
port = 3306
user = a2user
password = sesamo
dbname = a2billing
dbtype = mysql

De esta forma el programa se conectará correctamente a la base de datos a2billing que se acaba de
crear. Se guardan los cambios.

Por defecto A2billing trabaja con Asterisk en Realtime, es decir que las extensiones SIP y IAX2 se
guardan en la base de datos a2billing y Asterisk accede a ellas a través de la configuración del modulo
de Realtime. Existe también la posibilidad de guardarlas en un archivo de texto. Para este tipo de
configuración se crean dos archivos que son los que a2billing utilizaría para guardar las extensiones
SIP y IAX2:

touch /etc/asterisk/additional_a2billing_iax.conf

touch /etc/asterisk/additional_a2billing_sip.conf

se asignan los permisos de escritura/lectura para estos dos archivos al usuario y grupo apache, es decir
al servidor Web:

chown apache:apache /etc/asterisk/additional_a2billing_iax.conf

chown apache:apache /etc/asterisk/additional_a2billing_sip.conf

A2Billing para recargar la configuración de Asterisk (en el caso que las extensiones se guarden en los
archivos que se acaban de crear) y para generar las llamadas de callback se apoya al AMI (Asterisk
Manager Interface) de la PBX. Es por eso que hay que configurar el archivo manager.conf. Se abre:

nano /etc/asterisk/manager.conf

Se cambian las siguientes tres lineas:


enabled = no
;allowmultiplelogin = yes
;displayconnects = yes

para que queden:

enabled=yes
allowmultiplelogin = yes
dislplayconnects=yes

A2billing, para conectarse al AMI de Asterisk, se instala con un usuario y una contraseña predefinidos.
Por este motivo al final del archivo se añaden las siguientes lineas:

[myasterisk]
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.255
secret=mycode
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,originate

Se guardan los cambios y se continua con los script AGI presentes en el paquete de A2Billing. Uno se
utiliza para realizar las llamadas (a2billing.php) y el segundo para monitorear el servidor
(a2billing_monitoring.php). Se entra en la carpeta que contiene los AGI:

cd /usr/local/src/a2billing/AGI

se crean dos enlaces simbólicos de los dos AGI en la carpeta /var/lib/asterisk/agi-bin donde Asterisk
busca los AGI que se ejecuten:

ln -s /usr/local/src/a2billing/AGI/a2billing.php /var/lib/asterisk/agi-bin/a2billing.php

ln -s /usr/local/src/a2billing/AGI/a2billing_monitoring.php /var/lib/asterisk/agi-bin/a2billing_monitoring.php

Como los AGI se apoyan en una serie de librerías contenidas en la carpeta /lib, se crea un enlace
simbólico también a esta carpeta:

ln -s /usr/local/src/a2billing/AGI/lib /var/lib/asterisk/agi-bin/lib

Se vuelven ejecutables los dos archivos:

chmod +x /var/lib/asterisk/agi-bin/a2billing.php

chmod +x /var/lib/asterisk/agi-bin/a2billing_monitoring.php

Una vez terminada esta parte se crean una series de carpetas. La primera es donde se instalará la parte
web de A2Billing:

mkdir /var/www/html/a2billing
La segunda donde se guardarán los archivos temporales y los script de A2Billing:

mkdir -p /var/lib/a2billing/script

la tercera donde se guardará el proceso del servicio de callback y de los trabajos programados (cron):

mkdir -p /var/run/a2billing

Como esa carpeta se borra cada vez que se reinicia el servidor, para que se vuelva a crear de manera
automática:

nano /etc/tmpfiles.d/a2billing.conf

se copia la linea:

d /var/run/a2billing 0755 root root -

se guardan los cambios: Ahora ya se puede crear un enlace simbólico a las carpetas que se necesitan
para la parte Web de A2billing que son:

• admin (para la conexión de los administradores)


• customer (para la conexión de los clientes)
• agent (para la conexión de los agentes/revendedores)
• common (común a la demás tres)

ln -s /usr/local/src/a2billing/admin/ /var/www/html/a2billing/admin

ln -s /usr/local/src/a2billing/agent/ /var/www/html/a2billing/agent

ln -s /usr/local/src/a2billing/customer/ /var/www/html/a2billing/customer

ln -s /usr/local/src/a2billing/common/ /var/www/html/a2billing/common

Se cambian los permisos en estas tres carpetas donde se guardarán los archivos temporales para cada
tipo de usuario:

chmod 775 /usr/local/src/a2billing/admin/templates_c

chmod 775 /usr/local/src/a2billing/customer/templates_c

chmod 775 /usr/local/src/a2billing/agent/templates_c

Se cambia el usuario y grupo que tiene acceso a todas las carpetas creadas (el servidor Web Apache):

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

chown -Rf apache:apache /var/www/html/a2billing/admin/


chown -Rf apache:apache /var/www/html/a2billing/agent/

chown -Rf apache:apache /var/www/html/a2billing/customer/

chown -Rf apache:apache /var/www/html/a2billing/common/

Los registros de las actividades de A2Billing se guardan en una serie de archivos que hay que crear
antes de acceder por primera vez a la pagina de administración. Primero se crea la carpeta:

mkdir /var/log/a2billing

luego los archivos:

cd /var/log/a2billing

touch cront_a2b_alarm.log cront_a2b_autorefill.log cront_a2b_batch_process.log \


cront_a2b_archive_data.log cront_a2b_bill_diduse.log cront_a2b_subscription_fee.log \
cront_a2b_currency_update.log cront_a2b_invoice.log cront_a2b_check_account.log \
a2billing_paypal.log a2billing_epayment.log a2billing_api_ecommerce_request.log \
a2billing_api_callback_request.log a2billing_api_card.log a2billing_agi.log

Se cambian los permisos de los archivos creados:

chown apache:apache *

A2biblling necesita que se ejecuten una serie de script para monitorear el sistema y para elaborar
algunas funciones (ejemplo: pagos, facturas, etc.). Estos script se añaden al cron del sistema:

crontab -e

Se pega el siguiente bloque de lineas:

# A2Billing
# Para actualizar la tasa de cambio de las monedas (OBSOLETO)
# 0 6 * * * php /usr/local/src/a2billing/Cronjobs/currencies_update_yahoo.php
# Para el pago se servicios subscritos
0 6 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_subscription_fee.php
# Para notificaciones cuando el crédito del cliente es más bajo de lo indicado
0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_notify_account.php
# Para el pago de los números geográficos asociados a los clientes
0 2 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_bill_diduse.php
# Para el pago de servicios periódicos
0 12 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_process.php
# Para la generación de las facturas de los clientes
0 6 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_billing.php
# Para la gestión de las alarmas que se pueden configurar en A2Billing
0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_alarm.php
# Para archivar los datos de las llamadas más viejos de lo indicado en la configuración de A2Billing
0 12 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_archive_data_cront.php
# Para recargar el crédito de un cliente en automático
0 6 1 * * php /usr/local/src/a2billing/Cronjobs/a2billing_autorefill.php

Se guardan las modificaciones e se reinicia Cron:

systemctl restart crond

--------------------- ESTA PARTE CON PYTHON2.7 y PYTHON3 NO FUNCIONA MÁS ------------

Instalación del demonio CallBack

El demonio para el Callback es el que permite utilizar el sistema de callback (Rellamada) de A2Billing.
El programa está escrito en el lenguaje de programación Python y es por eso que primero hay que
instalar unos paquetes que se necesitan para su compilación:

dnf install python2-setuptools python2-PyMySQL python2-devel python2-sqlalchemy -y

Luego, a través de easy_install, se instala el programa sqlalchemy:

easy_install sqlalchemy

Una vez satisfechas estas dependencias, se puede empezar con la compilación y instalación del
programa de callback:

cd /usr/local/src/a2billing/CallBack/callback-daemon-py/dist/

tar -xf callback_daemon-1.0.prod-r1528.tar.gz

cd callback_daemon-1.0.prod-r1528

se compila:

python2 setup.py build

python2setup.py bdist_egg

easy_install dist/callback_daemon-1.0.prod_r1528-py2.7.egg

Compilado el programa se instala come servicio a través de uno script presente en el paquete de
A2Billing:

cd /usr/local/src/a2billing/CallBack/callback-daemon-py/callback_daemon

Se copia el script:

cp a2b-callback-daemon.rc /etc/init.d/a2b-callback-daemon

Se vuelve ejecutable:
chmod +x /etc/init.d/a2b-callback-daemon

Por defecto el servicio guarda los registros en la carpeta /var/log y tiene que arrancar después de
MySQL y Asterisk. Para ese efecto hay que abrir el archivo:

nano /etc/init.d/a2b-callback-daemon

y cambiar estas lineas:

# chkconfig: 2345 40 60
LOG='/var/log/a2b-callback-daemon.log'

para que queden:

# chkconfig: 2345 95 60
LOG='/var/log/a2billing/a2b-callback-daemon.log'

Se guardan los cambios y se configura para que arranque en automático con el sistema:

chkconfig --add a2b-callback-daemon

Ahora ya se puede iniciar el servicio:

systemctl start a2b-callback-daemon

Si el arranque se queda congelado, terminar con CTRL-C y luego controlar que esté funcionando
correctamente:

tail -f /var/log/a2billing/a2b-callback-daemon.log

"2011-04-23 19:10:52,297 - root - MainThread - INFO - waiting..."


"2011-04-23 19:10:57,308 - root - MainThread - INFO - waiting..."
"2011-04-23 19:11:02,322 - root - MainThread - INFO - waiting..."
"2011-04-23 19:11:07,355 - root - MainThread - INFO – waiting..."

Se sale del comando tail con CTRL-C

--------------------- ESTA PARTE CON PYTHON2.7 y PYTHON3 NO FUNCIONA MÁS ------------

Configuración de Asterisk

Como se ha dicho anteriormente, en este curso no se explicarán las configuraciones de Asterisk pero es
importante saber que los archivos que se modifican son solamente los que se necesitan para que
A2Billing funcione.

sip.conf
En el archivo sip.conf se configurarán las troncales para sacar las llamadas hacia el proveedor VoIP.
Antes de la configuración, para conocer las IP disponibles en el servidor:

ifconfig

Aparecerá:

La primera evidenciada es la IP publica, la segunda la IP privada. Se renombra el sip.conf predefinido:

mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.old

se crea uno nuevo:

nano /etc/asterisk/sip.conf

se pegan las siguientes lineas:

[general]
context=default
allowguest=no
allowtransfer=no
realm=asterisk
udpbindaddr=0.0.0.0:5090
tcpenable=no
tcpbindaddr=0.0.0.0:5090
tcpauthtimeout=30
tcpauthlimit=100
transport=udp
srvlookup=yes
pedantic=yes
maxexpiry=3600
minexpiry=60
defaultexpiry=120
mwiexpiry=3600
maxforwards=70
qualifyfreq=120
qualifygap=200
keepalive=yes
disallow=all
allow=ulaw
allow=alaw
mohinterpret=default
mohsuggest=default
language=es
relaxdtmf=no
sendrpid = yes
prematuremedia=no
progressinband=no
useragent=CursoA2BillingPBX
promiscredir=no
dtmfmode = rfc2833
videosupport=yes
maxcallbitrate=384
callevents=yes
alwaysauthreject=yes
rtptimeout=60
rtpholdtimeout=300
allowsubscribe=yes
subscribecontext=subscribe
notifyringing=yes
notifyhold=yes
callcounter = yes
t38pt_udptl = yes,fec,maxdatagram=400
faxdetect=yes
directmedia=no
sdpsession=A2Billing
sdpowner=a2billing
externaddr=162.243.37.95
localnet=10.39.96.0/255.255.255.0

en la penúltima linea se pone la IP publica del servidor y en la ultima la ip privada utilizando la misma
sintaxis indicada en el parámetro de ejemplo. Hay que destacar que Asterisk se ha puesto a la escucha
en el puerto 5090 en lugar del “clásico” 5060. Esto porque el 5060 lo utilizará OpenSIPs.

Siempre en el mismo archivo se añaden los datos para configurar las troncales. En este caso se crean
dos de ejemplo con el mismo proveedor, utilizando la autenticación con usuario y contraseña; la
segunda troncal se utilizará como respaldo de la primera:

[voztovoice1]
type=peer
port=5060
host=sip.voztovoice.eu
defaultuser=24399
fromuser=24399
secret=qALEivJDjeZH4pGH
dtmfmode=rfc2833
disallow=all
context=from-trunk
canreinvite=no
allow=ulaw
allow=alaw
qualify=yes

[voztovoice2]
type=peer
port=5060
host=sip1.voztovoice.eu
defaultuser=24399
fromuser=24399
secret=qALEivJDjeZH4pGH
dtmfmode=rfc2833
disallow=all
context=from-trunk
canreinvite=no
allow=ulaw
allow=alaw
qualify=yes

Para terminar, se incluye el archivo que se ha creado en el primer párrafo y que contendrá las
extensiones creadas en A2Billing en el caso que no se utilice el Realtime:

#include additional_a2billing_sip.conf

Se guardan los cambios y se hace lo mismo con el archivo iax.conf en el caso que se quiera configurar
también extensiones IAX2 (NO ACONSEJADO):

echo "#include additional_a2billing_iax.conf" >> /etc/asterisk/iax.conf

extensions.conf

Se sigue con el dialplan. Se renombra el archivo extensions.conf predefinido:

mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.old

Se crea uno nuevo:

nano /etc/asterisk/extensions.conf

se pegan la lineas que siguen:


[general]
static = yes
writeprotect = no
autofallthrough = yes
extenpatternmatchnew = true
clearglobalvars = no
userscontext=default

[globals]
; Variables globales

y se incluye el contexto para las llamadas con el AGI de a2billing:

[a2billing]
exten => _X.,1,NoOp(A2Billing Start)
same => n,Agi(a2billing.php,1)
same => n,Hangup
exten => h,1,Hangup

Se guardan los cambios y se averigua que efectivamente el dialplan englobado esté presente. Se entra
en la consola de Asterisk:

asterisk -rvvvvvvvvvvvvvv

se recarga el dialplan:

CLI> dialplan reload

y se escribe el comando:

CLI> dialplan show a2billing

debe aparecer:

CLI> quit

Se sale de la consola de Asterisk.

Asterisk Realtime
Las extensiones creadas a través del sistema de facturación se guardarán en la base de datos de
A2Billing. Para que Asterisk las pueda leer y actualizar, hay que configurar Asterisk utilizando su
funcionalidad, llamada Realtime (ARA), que le permite interactuar con base de datos para la
configuración, en este caso, de las extensiones SIP e IAX

En este curso la configuración se implementará con ODBC en lugar de utilizar directamente MySQL.
El primer paso es configurar Asterisk para que cargue los módulos ODBC antes de todos los demás.
Esto cambio se efectúa modificando el archivo /etc/asterisk/modules.conf. Se abre:

nano /etc/asterisk/modules.conf

Después de esta linea:

;preload = your_special_module.so

se añade:

preload => res_odbc.so


preload => res_config_odbc.so

Como el canal sip de manera predefinida esta desactivado, se elimina esta linea para cargarlo:

noload = chan_sip.so

Como no se va a escribir el dialplan en lenguaje AEL y LUA, es mejor desactivar los dos módulos
juntos a otros módulos que tampoco se van a utilizar. Al final de archivo se pone:

noload => pbx_lua.so


noload => pbx_ael.so
noload => res_config_ldap.so
noload => cdr_radius.so
noload => cdr_sqlite3_custom.so
noload => cel_radius.so
noload => cel_sqlite3_custom.so

Se guardan los cambios. Luego se configura ODBC para la conexión a MariaDB:

nano /etc/odbcinst.ini

se deja como está; la parte de MariaDB:

[MariaDB]
Description=ODBC for MariaDB
Driver=/usr/lib/libmaodbc.so
Driver64=/usr/lib64/libmaodbc.so
FileUsage=1

Se guardan los cambios y se continua con la conexión a la base de datos a2billing:


nano /etc/odbc.ini

se añaden las siguientes lineas:

[a2billing]
Description = MySQL a2billing
Driver = MariaDB
Database = a2billing
Server = localhost
User = a2user
Password = sesamo
Port = 3306
Option = 3

Se guardan los cambios y se pasa a Asterisk. En la PBX la configuración Realtime con ODBC se
realiza en dos archivos:

• extconfig.conf
• res_odbc.conf

En el primero se define que las extensiones SIP e IAX deberán ser configuradas en Realtime utilizando
ODBC y la base de datos a2billing:

nano /etc/asterisk/extconfig.conf

se modifican estas lineas:

;iaxusers => odbc,asterisk


;iaxpeers => odbc,asterisk
;sippeers => odbc,asterisk

para que queden:

iaxusers => odbc,a2b,cc_iax_buddies


iaxpeers => odbc,a2b,cc_iax_buddies
sippeers => odbc,a2b,cc_sip_buddies

Se guardan los cambios. cc_iax_buddies y cc_sip_buddies son las tablas de la base de datos a2billing
donde están guardadas las extensiones creadas desde el sistema de facturación. a2b es el nombre de la
etiqueta inicial del bloque que se configurará en el archivo res_odbc.conf. Para terminar se configura
el archivo res_odbc.conf:

nano /etc/asterisk/res_odbc.conf

al final del archivo se añaden las siguientes lineas:

[a2b]
enabled => yes
dsn => a2billing
username => a2user
password => sesamo
pre-connect => yes

La conexión funciona de la siguiente manera. En el archivo extconfig.conf se define la conexión a la


base de datos utilizando el nombre que aparece como etiqueta del bloque presente en el archivo
res_odbc.onf (en este caso el nombre es a2b). En el archivo res_odbc.conf en el parámetro dsn se
define el nombre de la etiqueta del bloque configurado en el archivo odbc.ini (a2billing). En el archivo
odbc.ini se define la conexión a la base de datos MySQL (en este caso la base de datos se llama
a2billing).

Se reinicia Asterisk y se averigua que la conexión esté funcionando:

systemctl restart asterisk

asterisk -rvvvvvvvvvvvvvvvvv

CLI> odbc show

la respuesta debe ser:

Se sale de la consola de Asterisk:

CLI> quit

Configuración del Firewall

Para proteger el servidor Linux de accesos no autorizados hay que instalar un firewall (cortafuegos) y
abrir los puertos que A2Billing necesita para aceptar conexiones externas. Esta es la parte más delicada
de la configuración del servidor porque es donde se definen los puertos y los servicios que son
accesibles desde Internet. Desde la versión 7 de CentOS, el programa para gestionar y configurar el
cortafuegos es firewalld. Aunque sea un sistema muy valido, no he encontrado el equivalente de
algunas reglas que utilizaba con IPtables. Es por este motivo que he preferido continuar a utilizar
IPtables y para hacerlo, en CentOS 7.X, hay que seguir los siguientes pasos:

Parar firewalld si está corriendo:

systemctl stop firewalld


Desactivar el arranque automático:

systemctl disable firewalld

Averiguar que todo esté bien:

systemctl status firewalld


* firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)

Instalar IPtables:

dnf install iptables-services -y

Activarlo para que arranque con el sistema:

systemctl enable iptables


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

Mover la configuración que viene por defecto para crear una nueva:

mv /etc/sysconfig/iptables /etc/sysconfig/iptables.old

Si A2Billing se encuentra instalado en un computador local conectado a Internet a través de un router


hay dos opciones:

• Abrir los puertos desde la pagina de administración del router.


• Configurar una DMZ en el router que apunte a la IP local del servidor Linux y luego gestionar
los puertos directamente con IPtables

IPtables se encarga de gestionar todos los paquetes que entren y salgan del servidor Linux. Para eso
utiliza distintos tipos de tablas:

• la tabla filter donde pasan todos los paquetes en entrada y salida. La tabla filter acepta tres tipos
de opciones (cadenas):
• INPUT para los paquetes en entrada
• OUTPUT para los paquetes en salida
• FORWARD para redireccionar los paquetes

• la tabla NAT se utiliza para rescribir las direcciones y/o los puertos de los paquetes y utilizas las
siguiente cadenas:
◦ PREROUTING
◦ OUTPUT
◦ POSTROUTING
• la tabla MANGLE se utiliza para modificar algunos parámetros de los paquetes (un ejemplo es
marcar los paquetes para que sean procesados y enviados con una prioridad más alta). Utiliza
las siguientes cadenas:
◦ PREROUTING
◦ POSTROUTING
◦ OUTPUT
◦ INPUT
◦ FORWARD
• la tabla RAW que permite crear exenciones en el procesamiento de los paquetes por parte del
“Connection Tracking System”. Este sistema guarda la información acerca del estado de una
conexión en un espacio de memoria permitiendo luego la aplicación de reglas y filtros a la
conexión misma. Utiliza las cadenas:
◦ PREROUTING
◦ OUTPUT
• La tabla SECURITY utilizada para las reglas del Mandatory Access Control, es decir para las
políticas de seguridad aplicadas en el sistema. Utilizas las cadenas:
◦ INPUT
◦ OUTPUT
◦ FORWARD

Las reglas se definen una por linea y serán procesadas por IPTABLES siguiendo la misma secuencia.

Cuando no se especifica diversamente, todas las reglas aplican a la tabla filter.

Se inicia la configuración aceptando todo el trafico en entrada dirigido a la interfaz lookpack:

iptables -A INPUT -i lo -j ACCEPT

Se rechaza (REJECT) todo el trafico entrante con destino las IP 127.0.0.0/127.255.255.255 menos los
paquetes para la interfaz -lo

iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

Se aceptan todos los paquetes en entrada de conexiones ya establecidas, o relacionados con conexiones
establecidas. Véase protocolo TCP

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

Se deja pasar todos los paquetes salientes.

iptables -A OUTPUT -j ACCEPT

Se deja pasar todo el trafico en entrada para el protocolo SSH (puerto 22 tcp)

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

Se deja pasar todo el trafico en entrada para el protocolo HTTP (puerto 80 tcp)

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Se deja pasar todo el trafico en entrada para el protocolo HTTPs (puerto 443 tcp)
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

Se bloquea el trafico sobre el puerto 5060 procedente de los más conocidos programas de escaneo de
servidores/PBX SIP utilizados para ataques y fraudes de llamadas:

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

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

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

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

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

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

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

Se deja pasar todo el trafico en entrada destinado al puerto udp 5060 (protocolo SIP) donde escuchará
OpenSIPs

iptables -A INPUT -p udp --dport 5060 -j ACCEPT

Se deja pasar el trafico hacia Asterisk (puerto 5090), para que los usuarios puedan registrarse
directamente en Asterisk. Una vez instalado y configurado OpenSIPs, como las extensiones se
registrarán directamente en el Proxy SIP, esta linea se quitará:

iptables -A INPUT -p udp --dport 5090 -j ACCEPT

Se deja pasar todo el trafico en entrada destinado a los puertos udp que van de 10000 a 20000
(protocolo RTP)

iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

Se dejan pasar las solicitudes de ping

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

A este punto, ya que se han definido los puertos base que se necesitan abiertos, se bloquea todo el
trafico restante.

iptables -A INPUT -j REJECT

iptables -A FORWARD -j REJECT

Se averigua el estado de las reglas definidas con el comando:


iptables -L

Chain INPUT (policy ACCEPT)


target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
DROP udp -- anywhere anywhere udp dpt:sip STRING match "friendly-scanner" ALGO name bm TO
65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sipcli" ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "VaxSIPUserAgent" ALGO name bm TO
65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sipvicious" ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sundayddr" ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "iWar" ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sipsak" ALGO name bm TO 65535
ACCEPT udp -- anywhere anywhere udp dpt:sip
ACCEPT udp -- anywhere anywhere udp dpt:5090
ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp
ACCEPT icmp -- anywhere anywhere icmp echo-request
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)


target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)


target prot opt source destination
ACCEPT all -- anywhere anywhere

Para guardar los cambios:

service iptables save


iptables: Guardando las reglas del cortafuegos en /etc/sysconfig/iptables [ OK ]

Se inicia el servicio:

service iptables start

Se configura el arranque automático también para el servidor Web:

systemctl enable httpd


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

Ahora que se ha terminado con la configuración del servidor y de A2Billing se reinicia el sistema para
averiguar que todos los servicios arranquen correctamente:
reboot

Primer acceso

Reiniciado el servidor se vuelve a entrar con el cliente SSH y se accede a la consola de Asterisk:

asterisk -rvvvvvvvvvvvvvv

para acceder a la consola de Asterisk se puede utilizar también el alias de comando:

aste

desde un navegador web se entra a la pagina de administración de A2Billing utilizando el subdominio


asociado al servidor (PERSONALIZAR) y la pagina segura:

https://sip10.voztovoice.org/a2billing/admin

Debe aparecer:

Los datos por defecto para registrarse son:

User: root
Password: changepassword

Lo primero que hay que hacer es crear un nuevo administrador y borrar el predefinido. Se entra en el
menú ADMINS → Add :: Search:

En la pagina que aparece se escoge ADD Administrator:

En la nueva pagina se rellenan los campos indicados, personalizándolos:


Se guardan presionando el botón CONFIRM DATA. Se regresará a la pagina anterior y ya se podrá
borrar el usuario root:

y confirmando con el botón DELETE en la pagina siguiente:

Ya se puede salir del programa:

y volver a entrar con los datos del nuevo administrador:

También podría gustarte