zabbix

Zabbix 6.0 LTS をRHEL8系, Nginx, MySQL でインストール/構築する

前提

RedHat8 系の OS (CentOS/Rocky Linux/Almalinux) が minimal インストールで構築されていることとします。(Guest Addition のインストール有無は問わない。)

例えば Rocky Linux なら以下の手順。

Rocky Linux 9 minimal (最小限) インストール手順 on VirtualBOX
Rocky Linux 9 を VirtualBOX へインストールする手順を紹...

SELinux は Enforcing のまま

Zabbix 6.0 のリポジトリを見ると zabbix-selinux-policy-6.0.0-1.el8.x86_64.rpm というパッケージがありました。どうやら SELinux へ適合しているようです。

Zabbix Official Repository

なので Enforcing のままでいきましょう。

Firewalld の設定追加

Zabbix サーバの Web UI 用の https、Zabbix エージェントから Active に受信する 10051/tcp を開放します。また、Zabbix サーバ自体が Zabbix エージェントを含み、自分で監視を行うこともできますので、Zabbix エージェント用の 10050/tcp も開放します。

[root@localhost ~]# firewall-cmd --permanent --add-service={http,https}
[root@localhost ~]# firewall-cmd --permanent --add-port={10050/tcp,10051/tcp}
[root@localhost ~]# firewall-cmd --reload

Zabbix の release を確認

まずは Zabbix のレポジトリを追加。

[root@localhost ~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
[root@localhost ~]# dnf clean all

必要パッケージをインストール。

[root@localhost ~]# dnf -y install mysql-server mysql zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-web-japanese zabbix-agent

MySQL の tcp ポートを閉じる

今回は MySQL を使うのは PHP ですが、MySQL と PHP は同一サーバ内にあるので TCP/3306 を使う必要がありません。UNIX ドメインによる socket ファイルを通じた通信を行えば、セキュリティもパフォーマンスも向上します。

3306/tcp を Listen しないようにするため、/etc/my.cnf の最後に [mysqld] セクションとして skip-networking を追加します。

[root@localhost ~]# vi /etc/my.cnf
~~~
[mysqld]
skip-networking

デフォルトでは mysqld サービス起動時に /var/lib/mysql/mysql.sock というソケットファイルができますので zabbix-server からこのソケットファイルを使って MySQL の DB 通信を行います。

MySQL の設定

systemctl enable --now [service name] で起動と自動起動を同時設定。

[root@localhost ~]# systemctl enable --now mysqld
[root@localhost ~]# ls -l /var/lib/mysql/mysql.sock

MySQL の初期セットアップとおよび ユーザー [zabbix@localhost] の作成、権限付与 (DB [zabbix] を自由に使える権限)。

[root@localhost ~]# mysql_secure_installation
Press y|Y for Yes, any other key for No: y

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
New password: [password]
Re-enter new password:[password]

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

[root@localhost ~]# mysql -uroot -p
Enter password: [password]

mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'P@ssw0rd';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;

DB [zabbix] へひな型 sql を投入。

[root@localhost ~]# zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql zabbix -uzabbix -p
Enter password: P@ssw0rd
以前は /usr/share/doc/zabbix-server-mysql の下に create.sql.gz がありましたが、最近のバージョンでは "dnf install zabbix-sql-scripts" した上で上記パスを使うようです。

DB の状態を確認。(設定作業ではなく、ただの状態確認)

[root@localhost ~]# mysql -uzabbix -p
Enter password: P@ssw0rd
mysql> show databases;
mysql> use zabbix;
mysql> show tables;
mysql> quit;

zabbix_server.conf の設定

[root@localhost ~]# vi /etc/zabbix/zabbix_server.conf
~~~
DBPassword=P@ssw0rd
~~~

PHP-FPM の設定

[root@localhost ~]# vi /etc/php-fpm.d/www.conf
~~~
user = apache nginx
group = apache nginx
[root@localhost ~]# vi /etc/php-fpm.d/zabbix.conf
user = apache nginx
group = apache nginx
~~~
php_value[date.timezone] = Asia/Tokyo
[root@localhost ~]# vi /etc/php.ini
~~~
;date.timezone=
date.timezone=Asia/Tokyo  # 追記
~~~
  [Esc -> :wq]

systemctl enable [service name] --now で起動と自動起動を同時設定。

[root@localhost ~]# systemctl enable --now php-fpm

Nginx の設定

自己署名証明書を作る

まず、ディレクトリを作成します。nginx側の設定を変更するのはだるいので、nginx の初期設定に合うように、/etc/pki の下に nginx/private ディレクトリを作成します。

[root@localhost ~]# cd /etc/pki
[root@localhost pki]# mkdir -p nginx/private
[root@localhost pki]# cd nginx/private

次に、openssl コマンドを使って秘密鍵 (server.key) を作成します。

[root@localhost private]# openssl genrsa -out server.key 3072

そして秘密鍵を使って CSR (server.csr) を作成します。対話形式でいくつか聞かれますが、最初の Country Name を JP にし、途中の CommonName を www.example.com に設定し、あとは空欄のまま Enter にします。(このあたりは好みの問題です。

[root@localhost private]# openssl req -new -key server.key -out ../server.csr
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@localhost private]#

次に、CSR に署名をします。

一般的なケースでは、上位の認証局に CSR を送付して、その認証局の秘密鍵で署名をしてもらうのですが、だるいので自己署名にします。つまり、CSR を生成するときに使った秘密鍵を、署名用にも使うわけです。

そして署名と同時に、有効期間=365日、SANs (サブジェクト代替名 : Subject Alternative Name) = www.example.com を設定します。

最近のブラウザは CommonName を一切見ず、SANs のみをチェックするので、SANs に設定が入っていないと、証明書をインストールしていても警告が出てしまいます。

SANs を設定するには適当なテキストファイルに subjetcAltName = DNS:www.example.com と記述し、openssl の -extfile オプションでそのテキストファイルを指定します。

[root@localhost private]# cd ..
[root@localhost nginx]# vi sans.txt
subjectAltName = DNS:www.example.com

   [Esc -> :wq]

[root@localhost nginx]# openssl x509 -req -days 365 -in server.csr -signkey private/server.key -out server.crt -extfile sans.txt

nginx の zabbix サイトの https 設定

[root@localhost nginx]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# cp -p zabbix.conf zabbix.conf_org
[root@localhost conf.d]# vi zabbix.conf
    server {

	listen     80  443 ssl http2 default_server;
	server_name  www.example.com;

        ssl_certificate "/etc/pki/nginx/server.crt";
        ssl_certificate_key "/etc/pki/nginx/private/server.key";
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";
        ssl_prefer_server_ciphers off;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 10m;
~~~
	[Esc -> :wq]

そして必要なディレクトリパーミッション変更を行います。

[root@localhost ~]# chown -R root.nginx /var/lib/php
[root@localhost ~]# chown -R nginx.nginx /etc/zabbix/web

nginx , zabbix-server , zabbix-agent を起動します。(自動起動も同時に設定)

[root@localhost ~]# systemctl enable --now nginx zabbix-server zabbix-agent

常時SSL化 (nginx のリダイレクト設定

ここまでの設定で https 接続はできるようになりますが、http 接続もできてしまいます。ここでは http 接続が来た時に https 接続へリダイレクトする設定をします。server の listen 80 となっているブロックで return 301 https://$host$request_uri; を追記します。

[root@localhost ~]# vi /etc/nginx/nginx.conf
~~~
    server {
        listen       80 default_server;
        # listen       [::]:80 default_server;
        server_name www.example.com;
        return 301 https://$host$request_uri;

        root         /usr/share/nginx/html;
~~~

nginx を再起動します。

[root@localhost ~]# systemctl restart nginx

Web UI へアクセスし、セットアップ

以下のスライドの通りにセットアップをしていきます。

zbx-install-01v2
zbx-install-02
zbx-install-03
zbx-install-04
zbx-install-05
zbx-install-06
zabbix-almalinux-install-07
previous arrow
next arrow
zbx-install-01v2
zbx-install-02
zbx-install-03
zbx-install-04
zbx-install-05
zbx-install-06
zabbix-almalinux-install-07
previous arrow
next arrow

Web UI へログインします。初期状態では ID= Admin , PW= zabbix です。

以上で Zabbix サーバ側のセットアップは完了です。

コメント

タイトルとURLをコピーしました