Tiếp theo phần bài viết tìm hiểu về tổng đài IP mã nguồn mở. Hôm nay mình xin giới thiệu bài lab xây dựng tổng đài IP dùng mã nguồn mở Asterisk, FreePBX trên Centos8
1. Chuẩn bị
Máy ảo vps hoặc VMvare,Virtuabox.
Hệ điều hành: Centos 8
Ram: 512MB-1G
HDD: 10-20G hoặc hơn
2. Cài đặt
2.1 Cập nhập hệ thống.
- Tắt SELinux.
setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config ln -sf /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
- Cập nhập hệ thống đảm bảo các gói update mới nhất.
dnf -y update && dnf -y install dnf-plugins-core epel-release && dnf -y remove sendmail
dnf config-manager --enable PowerTools
dnf -y install yum wget make which rsyslog crontabs automake gcc gcc-c++ ncurses-devel openssl-devel libxml2-devel unixODBC-devel libcurl-devel libogg-devel libvorbis-devel speex-devel freetds-devel net-snmp-devel newt-devel popt-devel libtool-ltdl-devel lua-devel sqlite-devel portaudio-devel neon-devel libical-devel openldap-devel mysql-devel bluez-libs-devel jack-audio-connection-kit-devel gsm-devel libedit-devel libuuid-devel libsrtp-devel git subversion libxslt-devel kernel-devel audiofile-devel gtk2-devel libtiff-devel libtermcap-devel bison tftp-server httpd tzdata mariadb mariadb-server mariadb-connector-odbc fail2ban xmlstarlet ghostscript libtiff-tools patch e2fsprogs mpg123 postfix whois mod_ssl nodejs
#Cài php 5.6
Install repository.
dnf remove php php* dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Install PHP v7.3
dnf -y module disable php dnf -y module enable php:remi-7.3 dnf -y install php php-mysqlnd php-process php-pear php-mbstring php-xml php-gd php-curl
#Cài ODBC
cat >> /etc/odbc.ini << EOF [MySQL-asteriskcdrdb] Description = MariaDB connection to 'asteriskcdrdb' database driver = MySQL server = localhost database = asteriskcdrdb Port = 3306 Socket = /var/lib/mysql/mysql.sock option = 3 Charset=utf8 EOF
sed -i 's/\/lib64\/libmyodbc5.so/\/lib64\/libmaodbc.so/' /etc/odbcinst.ini
# Cài một số gói bổ sung
dnf -y install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm dnf -y install ffmpeg
dnf -y install https://forensics.cert.org/cert-forensics-tools-release-el8.rpm dnf -y install lame sox
Reboot
2.2 Cài đặt Asterisk Freepbx
-
Cài dahdi
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.10.2+2.10.2.tar.gz tar zxvf dahdi-linux-complete-2.10* cd /usr/src/dahdi-linux-complete-2.10*/ make all && make install && make config systemctl restart dahdi
-
Cài Asterisk16
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz tar zxvf asterisk-16-current.tar.gz cd /usr/src/asterisk-16*/ make distclean ./contrib/scripts/install_prereq install ./configure --libdir=/usr/lib64 --with-jansson-bundled make menuselect
#Go to Applications and make sure app_macro
is checked.
adduser asterisk -s /sbin/nologin -c "Asterisk User" make && make install && chown -R asterisk. /var/lib/asterisk
3. Cài Freepbx
Khởi động mariadb
systemctl restart mariadb
cd /usr/src git clone -b release/15.0 --single-branch https://github.com/freepbx/framework.git freepbx
touch /etc/asterisk/modules.conf cd /usr/src/freepbx ./start_asterisk start ./install -n
Module install
fwconsole ma downloadinstall framework core voicemail sipsettings infoservices \ featurecodeadmin logfiles callrecording cdr dashboard music soundlang recordings conferences
fwconsole chown fwconsole reload
#Có thể cài qua GUI > Admin > Module Admin
.
Chạy lệnh dưới để cài các module
fwconsole ma installall fwconsole chown fwconsole reload
Thêm cấu hình để FreePBX tự khởi động khi reboot hệ thống.
cat >> /etc/systemd/system/freepbx.service << EOF [Unit] Description=Freepbx After=mariadb.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/fwconsole start ExecStop=/usr/sbin/fwconsole stop [Install] WantedBy=multi-user.target EOF
systemctl enable freepbx
#Thiết lập một số phân quyền cho apache.
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini sed -i 's/memory_limit = .*/memory_limit = 256M/g' /etc/php.ini sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf sed -i ':a;N;$!ba;s/AllowOverride None/AllowOverride All/2' /etc/httpd/conf/httpd.conf sed -i 's/^\(user\|group\).*/\1 = asterisk/' /etc/php-fpm.d/www.conf sed -i 's/.*listen\.owner =.*/listen.owner = asterisk/' /etc/php-fpm.d/www.conf sed -i 's/.*listen\.group =.*/listen.group = asterisk/' /etc/php-fpm.d/www.conf sed -i 's/^listen\.acl_users/;&/' /etc/php-fpm.d/www.conf
#Thiết lập một số service tự khởi động khi reboot lại server.
systemctl enable mariadb systemctl enable httpd systemctl enable php-fpm systemctl enable postfix
Reboot
#Thiết lập xóa file log cho asterisk
nano /etc/logrotate.d/asterisk
/var/spool/mail/asterisk /var/log/asterisk/full /var/log/asterisk/dtmf /var/log/asterisk/fail2ban { weekly missingok rotate 4 #compress notifempty sharedscripts create 0640 asterisk asterisk postrotate /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null || true endscript su root root }
#Thêm rule port vào firewall để bảo mật.
systemctl enable firewalld systemctl restart firewalld
firewall-cmd --permanent --zone=public --add-service={http,https} firewall-cmd --permanent --zone=public --add-port=5060-5061/tcp firewall-cmd --permanent --zone=public --add-port=5060-5061/udp firewall-cmd --permanent --zone=public --add-port=10000-20000/udp firewall-cmd --reload
Như vậy, qua bài viết mình đã hướng dẫn các bạn xây dựng được một tổng đài ip nội bộ dùng cho công ty mà không phải tốn chi phí nhiều dựa trên hạ tầng sẵn có và mã nguồn mở hoàn toàn miễn phí. Chúc các bạn thành công!