スマートスタイル TECH BLOG

データベース&クラウド技術情報

Group Replication 環境での SELinux / firewalld

はじめに

皆さんはMySQLの検証を行うときに、SELinux や firewalld をどうしているでしょうか?

本番環境でMySQLを稼働させる場合、セキュリティについても十分に考慮する必要があります。
SELinux および firewalld は、RHEL7(CnetOS7)に標準実装されている優秀なセキュリティソフトです。折角あるのであれば、これを使わない手はありません。

ということで、この記事では両ツールを稼働させながらMySQL8.0のGroup Replication環境を構築する手順について触れたいと思います。

SELinux / firewalld について

これらのセキュリティの詳細については他の詳しい解説記事なども参考にして欲しいですが、本記事内では以下のような認識で問題ありません。

SELinux

サーバ上のファイルなどへのアクセスを制御する。適切に権限が設定されていないと、任意のファイル作成もできない。

firewalld

その名の通りファイヤーウォール。任意のIPアドレスやポート番号を設定し、サーバへのアクセスを許可・拒否できる。

環境について

vagrantで作成した以下のサーバにMySQL8.0をインストールしています。
OSは全て CentOS7.4 です。

hostname IP address 役割
server1 192.168.100.101 Node1
server2 192.168.100.102 Node2
server3 192.168.100.103 Node3

環境構築手順

全サーバに、yumコマンドでサクっとMySQL8.0をインストールします。

Group Replicationの設定は、公式マニュアルを見ながら進めましょう。

Node1を初期ノードとして、Group Replicationを開始しますと、エラーが発生します。これはSELinuxが有効になっているためです。

一旦ここではSELinuxをOFFにしましょう。

Node2 / Node3 でもGroup Replicationを開始します。
(ノード間で名前解決ができるよう、/etc/hostsの設定に注意してください)

SELinuxの設定方法

では、Group Replicationの通信ができるようSELinuxを設定してみましょう。
手順としては、SELinuxを有効にしたあと、Group Replicationが通信するportを
semanageコマンドを使って手動で開放していきます。具体的には、group_replication_local_address変数で指定しているポートです(今回は33061)
実際にNode3で試してみましょう。

この状態でNode3のGroup_Replicationを再起動します。

問題なく接続ができているようです。

ちなみに semanage で全く別のポートを開放してしまうと、以下のようにSTART GROUP_REPLICATIONができなくなります(その場合は同じくsemanageで設定を削除しましょう)。

firewalldの設定方法

次にfirewalldを設定します。こちらも基本的にはSELinuxと同じく、Group Replicationで使用するポート(33061)を開放していく形になります。ただし、firewalldの場合はアクセスが可能なIPアドレスを明示的に指定する必要があります。

早速、Node3で試してみましょう。ここでは、デフォルトの public ゾーンに対して、 rich_rule を使って設定します。

この状態でNode3のmysqldを再起動し、GROUP_REPLICATIONを再開しても問題なく接続ができます。

次にNode2では、firewalldを起動した後に33061ポートの開放をスキップして、Group Replicationを再起動します。すると、33061ポートに繋ぐことができずタイムアウトになります。

InnoDB Clusterの場合

前回、InnoDB Clusterの記事を書きましたが、実際に本番環境でGroup Replicationを使用される場合は InnoDB Cluster として合わせて構築するケースが多いと思います。その場合は、Group Replicationで使用するポートに加え、MySQL Shellが使用するポートも開放する必要があります(デフォルト:33060)。

まとめ

MySQLの検証などを中心に行っていると、SELinux や firewalld はつい軽視しがちですが、可能な限り検証環境の段階から有効にすることをオススメします。
実際に触ってみると思ったよりも操作は簡単なので、是非お試しください。

おまけ:Galeraの場合

PXCなどのGalera Clusterの場合は、開放するポートが Group_Replication とは異なります。基本的には以下4つのポートを SELinux および firewalld で開放すれば問題ありません。

  • 3306 : 通常のMySQL通信用ポート
  • 4567 : Galeraレプリケーション(wsrep replication)用ポート
  • 4568 : ノード間の差分同期(IST)用ポート
  • 4444 : ノード間の完全同期(SST)用ポート

参考サイト

18.9 Frequently Asked Questions
FIREWALL SETTINGS
Lock Down: Enforcing SELinux with Percona XtraDB Cluster

MySQL

 

Return Top