おことわり
- AlmaLinuxをあえて使うメリットはありません
- SIPなど標準ポート(5060)で動かすのはセキュリティ的に良くないので、適宜置き換えてください
- 「とりあえず動いた」の程度なので、ちゃんと動かしたい場合はDebianで公式のインストーラーを使った方がいいと思います
- 細かい解説はしません(できません)
- Asterisk / FreePBXがある程度分かってる人向けです(が、私はあまり分かっていません)
- KAGOYA CLOUD VPSの2コア/2GB/25GBで検証しています
- FreePBX標準?のファイアウォールは使用できません
- UCPのエラーログが出ます(解決方法わかりません)
KAGOYAのVPSを使うことが要件だったので、今回AlmaLinux 9をあえて採用していますが、Debianを使える環境であれば、間違いなく公式のインストーラーを使うべきです。
# cat /etc/almalinux-release
AlmaLinux release 9.4 (Seafoam Ocelot)
下ごしらえ・日本語環境・SELinux無効化
アップデート
dnf check-update
dnf upgrade
日本語環境
dnf -y install langpacks-ja
普段英語で扱ってる人には不要に思えるかもしれませんが、FreePBXの日本語言語適用に上記必須です。
SELinux無効化
sed -i 's/^\(SELINUX=\).*/\1disabled/' /etc/selinux/config
grubby --update-kernel ALL --args selinux=0
再起動
reboot
SELinux無効化を適用するため、再起動が必要です。
MariaDBのインストール・ODBCの設定
Asteriskで使うODBCの設定はネットに色々な情報がありますが、AlmaLinux 9とMariaDBで動くのは以下の設定です。
MariaDB・ODBCのインストール
dnf -y install mariadb-server mariadb-connector-odbc unixODBC-devel
ODBC設定ファイルの作成(odbcinst.ini、odbc.ini)
cat <<EOF > /etc/odbcinst.ini
[MySQL]
Description = ODBC for MySQL (MariaDB)
Driver = /usr/lib64/libmaodbc.so
FileUsage = 1
EOF
cat <<EOF > /etc/odbc.ini
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Socket = /var/lib/mysql/mysql.sock
Option = 3
EOF
MariaDB起動・有効化
systemctl start mariadb
systemctl enable mariadb
PHP8.2のインストール
FreePBXはPHP8.2で動くので、8.2を指定してインストールします。8.3では動作しません。
dnf install -y epel-release
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf module install php:remi-8.2
dnf install -y php-mysql php-cli php-gd php-mbstring php-intl php-xml php-pear php-soap
Node.js 18のインストール
FreePBXはNode.jsの18で動くので、18を指定してインストールします。20で動作するかは未確認です。
dnf module -y enable nodejs:18
dnf module -y install nodejs:18/common
Asteriskのインストール・設定
コンパイルなどに必要なもののインストール
dnf config-manager --set-enabled crb
dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm
dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
dnf groupinstall -y "Development Tools"
dnf -y group install multimedia
dnf install -y wget subversion libedit-devel libuuid-devel libxml2 libxml2-devel sqlite-devel chkconfig initscripts sox mpg123 lame ffmpeg ffmpeg-devel ffmpeg-libs jansson-devel libogg-devel libvorbis-devel icu libicu-devel postgresql-devel alsa-lib-devel libcurl-devel portaudio-devel speex-devel speexdsp-devel xmlstarlet gmime-devel libxslt-devel lua-devel neon-devel uriparser-devel bluez-libs-devel freetds-devel libcap-devel radcli-devel libical-devel net-snmp-devel newt-devel popt-devel spandsp-devel binutils-devel doxygen gsm-devel libresample-devel libsrtp-devel codec2-devel fftw-devel libsndfile-devel unbound-devel
Asteriskのダウンロード・コンパイル・インストール
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
tar zxvf asterisk-20-current.tar.gz
cd asterisk-20.*
contrib/scripts/get_mp3_source.sh
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
make
make install
make samples
make config
ldconfig
日本語音声のダウンロード・展開
cd /usr/src
git clone https://github.com/takao-t/asterisk-sound-ja.git
cd asterisk-sound-ja
cp core-sound-ja.tgz /var/lib/asterisk/sounds/.
cd /var/lib/asterisk/sounds/
tar zxvf core-sound-ja.tgz
ユーザー作成・パーミッション変更
groupadd asterisk
useradd -r -d /var/lib/asterisk -g asterisk asterisk
usermod -aG audio,dialout asterisk
chown -R asterisk:asterisk /etc/asterisk
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
chown -R asterisk:asterisk /usr/lib64/asterisk
AlmaLinuxはDebianと設定ファイルの場所が異なります。
- AlmaLinux 9 : /etc/sysconfig/asterisk
- Debian : /etc/default/asterisk
sed -i 's|#AST_USER|AST_USER|' /etc/sysconfig/asterisk
sed -i 's|#AST_GROUP|AST_GROUP|' /etc/sysconfig/asterisk
sed -i 's|;runuser|runuser|' /etc/asterisk/asterisk.conf
sed -i 's|;rungroup|rungroup|' /etc/asterisk/asterisk.conf
echo "/usr/lib64" >> /etc/ld.so.conf.d/x86_64-linux-gnu.conf
ldconfig
自動起動の無効化・停止
systemctl disable asterisk
systemctl stop asterisk
AsteriskはFreePBXから起動するため、systemctl disable asteriskしておく。
Apache2のインストール・設定
dnf install -y httpd httpd-devel mod_ssl
sed -i 's/^\(upload_max_filesize =\).*/\1 120M/' /etc/php.ini
sed -i 's/^\(memory_limit =\).*/\1 512M/' /etc/php.ini
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf
sed -i 's/^\(user\ =\|group\ =\).*/\1 asterisk/' /etc/php-fpm.d/www.conf
sed -i -e "s/listen.acl_users = apache,nginx/listen.acl_users = apache,nginx,asterisk/" /etc/php-fpm.d/www.conf
sedでさくっと書き換えていますが、Apache2・PHP-FPMの動作ユーザーをasteriskに変更しています。
AlmaLinuxのPHPは標準でPHP-FPMらしい? ので、/etc/php-fpm.d/www.confの変更も必要です。
upload_max_filesizeやmemory_limitについては、特にFreePBX 16から復元・移行する場合のバックアップサイズが大きい場合、そのファイルサイズ以上に調整する必要があるかと思います。
Apache2の起動・有効化
systemctl start httpd
systemctl enable httpd
ポート開放(http)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
httpsも開放していますが、使わない場合は省いてください。
FreePBXのインストール
ダウンロード・インストール
cd /usr/local/src
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest.tgz
tar zxvf freepbx-17.0-latest.tgz
cd /usr/local/src/freepbx/
./start_asterisk start
./install -n
FreePBXモジュールのインストール
fwconsole ma installall
fwconsole reload
fwconsole restart
自動起動の設定
cat <<EOF > /etc/systemd/system/freepbx.service
[Unit]
Description=FreePBX VoIP Server
After=mariadb.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start -q
ExecStop=/usr/sbin/fwconsole stop -q
[Install]
WantedBy=multi-user.target
EOF
systemctl start freepbx
systemctl enable freepbx
SIPポートの開放 ※注意
標準のSIPポート(5060)は攻撃のターゲットになり、セキュリティ上の懸念があります。
適切なポート設定・開放を行ってください。
firewall-cmd --zone=public --add-port=5060/udp --permanent
firewall-cmd --zone=public --add-port=10000-20000/udp --permanent
firewall-cmd --reload
おわりに
何回でも書きますが、AlmaLinuxをあえて使うメリットはありません。
ファイアウォールなどの機能も使える、Debianで公式のインストーラーを使った方がいいと思います(3回目)。
また、実際の運用はfail2banの設定なども最低限行っています(気が向いたら書きます)。
ここまで設定して、ucp_err.logには以下のようにエラーログが吐かれています。
2024-09-09 15:35 +09:00: Unable to connect to asterisk!
2024-09-09 15:35 +09:00: There was an error with Asterisk Manager Connection
解決方法は分かりません。誰か教えてください。
コメントする