前提
RedHat8 系の OS (CentOS/Rocky Linux/Almalinux) が minimal インストールで構築されていることとします。(Guest Addition のインストール有無は問わない。)
例えば Rocky Linux なら以下の手順。
SELinux は Enforcing のまま
Zabbix 6.0 のリポジトリを見ると zabbix-selinux-policy-6.0.0-1.el8.x86_64.rpm というパッケージがありました。どうやら SELinux へ適合しているようです。
なので 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
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 へアクセスし、セットアップ
以下のスライドの通りにセットアップをしていきます。
Web UI へログインします。初期状態では ID= Admin , PW= zabbix です。
以上で Zabbix サーバ側のセットアップは完了です。
コメント