3CX, phppgadmin & nginx
3CX hat nicht gerade die Vorzeige-Dokumentationen, man möchte sich bedeckt halten, um die Services wirtschaftlicher vermarkten zu können. Nichts dagegen, wir wollen trotzdem ein bisschen mehr Informationen haben.
Wie sieht wohl das Datenmodell einer 3CX VoIP Telefonanlage aus? Wie kommen wir an wichtige Infos und wo stehen die? Wir brauchen doch einen Dialer für Firefox ohne Telify!
Voraussetzungen:
3CX 16.0.2.910
Debian 9.9
Die 3CX basiert auf dem original Debian Image, das ursprünglich auf Debian 8 daher kam.
Problem, bzw. warum das Ganze:
Das Telify Addon für Firefox gibt es nicht mehr. Wir brauchen eine Alternative, die intelligent sein und in unserer Umgebung UCS/3CX/Snom für Clients unter macOS, Linux und Windows einen Ersatz finden soll.
Da wir daher an der nativen Implementierung eines Firefox Dialers für unsere Snom Telefone, die an einer 3CX hängen, arbeiten, haben wir uns gedacht, dass es keine schlechte Idee wäre, sich die PostgreSQL DB der 3CX näher anzusehen, um das Datenmodell dahinter schneller zu verstehen. Geeignet ist dazu phppgadmin, das wir temporär installieren wollen.
Ziel ist es, die MAC-Adressen der Snom-Telefone für bestimmte Extensions auszulesen. Die MAC-Adresse brauchen wir, um die IP und damit die URL für das entsprechende Snom Telefon heraus zu finden. Mehr zu dem Dialer in einem der nächsten Beiträge.
Jetzt kümmern wir uns erst mal darum, dass phppgadmin läuft.
Aktuell stehen einige Informationen zur PostgreSQL DB in der 3CX hier:
/var/lib/3cxpbx/Bin/3CXPhoneSystem.ini
Wir benötigen zusätzliche Komponenten:
admin@3cx[~]# sudo apt update && apt-get install nginx-common nginx php php-fpm php-apcu php-curl php-cli php-pgsql php-gd php-mcrypt php-mbstring php-fdomdocument php-intl php7.0-fpm libjs-jquery libphp-adodb slony1-2-bin php-cgi php-cli php-common php-pgsql libzip4 postgresql-client-common; sudo apt --purge remove *apache*
Erstellung der root- und log-Verzeichnisse, setzen der Rechte:
admin@3cx[~]# sudo mkdir -p /var/www/getcom.de/phppgadmin/; sudo mkdir /var/log/phppgadmin; sudo chown www-data.adm /var/log/phppgadmin
Download phppgadmin:
admin@3cx[~]# cd /var/www/getcom.de/phppgadmin/; sudo wget https://github.com/phppgadmin/phppgadmin/archive/REL_5-6-0.tar.gz
Auspacken!
admin@3cx[/var/www/getcom.de/phppgadmin]# sudo gunzip REL_5-6-0.tar.gz; sudo tar -xvf REL_5-6-0.tar; sudo mv phppgadmin-REL_5-6-0/* .; sudo rm REL_5-6-0.tar; sudo rm -R phppgadmin-REL_5-6-0/
Erstellen der Config-Datei:
admin@3cx[/var/www/getcom.de/phppgadmin]# sudo cp -a conf/config.inc.php-dist conf/config.inc.php
Hier ändern wir zwei Parameter ab:
$conf['servers'][0]['host'] = '127.0.0.1'; $conf['extra_login_security'] = false;
Weiterhin benötigen wir einen Superuser auf der PostgreSQL DB, für den wir ein Passwort vergeben:
admin@3cx[/var/www/getcom.de/phppgadmin]# sudo su - Remote: 14:22:25h@3cx [root@~] # sudo su - postgres postgres@3cx:~$ createuser --superuser --pwprompt getcom
Da wir den nginx worker für phppgadmin auf Port 81 laufen lassen wollen, muss die 3CX Firewall dafür geöffnet werden. Dafür identifizieren wir die Regel IDs, setzen die iptables regeln und schreiben die neue Configuration als persistentes Setup:
Remote: 14:22:36h@3cx [root@~] #iptables -L INPUT --line-numbers | grep -e 5060 -e 5090 | grep tcp 2 ACCEPT tcp -- anywhere anywhere multiport dports http,81,https,sip,sip-tls,5090,bacula-fd tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 13 ACCEPT tcp -- anywhere anywhere multiport dports http,81,https,sip,sip-tls,5090,bacula-fd tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
Regel IDs sind somit 2 und 13. Jetzt ändern wir das.
Remote: 02:22:46h@3cx [root@~] # /sbin/iptables -R INPUT 2 -p tcp -m multiport --dports 80,81,443,5060,5061,5090,9102 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ACCEPT Remote: 02:22:48h@3cx [root@~] # /sbin/iptables -R INPUT 13 -p tcp -m multiport --dports 80,81,443,5060,5061,5090,9102 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ACCEPT Remote: 02:22:50h@3cx [root@~] # service netfilter-persistent save; exit
Die nginx Config:
admin@3cx[~]# sudo vi /etc/nginx/sites-available/phppgadmin server { listen 81; listen [::]:81; index index.html index.htm index.php; root /var/www/getcom.de/phppgadmin; access_log /var/log/phppgadmin/access.log; error_log /var/log/phppgadmin/error.log; access_log off; location ~ \.php$ { include /etc/nginx/fastcgi.conf; try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; } }
Wichtig ist hier der Pfad bei fastcgi_pass, der muss stimmen.
Anschließend die Aktivierung:
admin@3cx[~]# sudo ln -s /etc/nginx/sites-available/phppgadmin /etc/nginx/sites-enabled/
Jetzt noch eine kleine Änderung der php settings von fpm:
Hier ist zu aktivieren:
cgi.fix_pathinfo=0
admin@3cx[~]# sudo vi /etc/php/*/fpm/php.ini
admin@3cx[~]# systemctl restart php7.0-fpm
Es ist Zeit für den restart von nginx:
admin@3cx[~]# systemctl restart nginx
Prüfung, ob der Port 81 hoch kam:
admin@3cx[~]# sudo netstat -anp | grep 0.0.0.0:81 tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 30341/nginx: master
Im Browser mit der URL http://3cx.getcom.de:81 und nach Anmeldung mit unserem neuen Superuser sieht die 3CX DB so aus:
Ziel erreicht!