MariaDBの初期設定をサイバー攻撃を受けない為に手堅く設定する方法

CentOSのデータベースとして採用されているMariaDBサーバをサイバー攻撃を受けないように手堅く設定する方法をお伝えします。特に初期設定で不要なデータベースを削除したり、アカウントを削除したり、必ずやるべき設定があります。ぜひまねして堅牢なサーバを構築して下さい。

なお、DBと連携することが多いWebサーバ(apache)の一般的な設定については、こちらを参照ください。

MariaDB(mysqlの派生)のインストール

サーバのOSはCentOS系のAlmaLinuxを使用し、MariaDBをインストールします。OSは「最小限」でインストールしたものを想定しています。もしすでにmysqlや違うバージョンのmariadbがインストールされている場合は、先にアンインストールをおススメします。
では早速インストールを進めていきます。管理者権限で以下のコマンドを実行します。

自動起動の設定を有効にして、サービスを起動させます。

インストールは簡単ですね。自動起動の設定は忘れずに実施ください。ここで実施しておかないとサーバを再起動した際に自動起動して来ません。構築中に気が付かず、運用に入ってからDBにアクセスできずに気が付くことが多いです。

インストール直後に絶対やるべきMariaDBの初期設定(セキュリティ対策)の実施

インストールした後では、デフォルトではセキュリティ的に甘い設定になっていますので、初期設定ツールを実行します。基本的にはすべて「Y」を入力して進めてください。

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y

New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
アドバイザー
アドバイザー

不要なデータベースや、アカウントの削除を実施します。これをするだけでセキュリティ対策がなされます。逆に実施しないと、かなり危険な状態だと思ってください。

データベースで使用する文字コードの変更(utf8mb4)

文字コードをutf8mb4に設定します。utf8mb4文字コードは、Unicode(UTF-8)の1文字を最大4バイトで表現する文字コードで、記号や絵文字などもサポートしているようです。

下記の通り、まず設定ファイルをバックアップしたうえで、ファイルを開きます。

mysqldの設定部分に以下を追記します。

[mysqld]
character-set-server=utf8mb4

クライアント設定ファイルにも下記を追記します。

[client]
default-character-set=utf8mb4

サービスを再起動して、設定を反映させます。

GUIでデータベースを操作可能なphpMyAdminのインストール

まず、以下のコマンドを実行して、remiリポジトリとphpMyAdminをインストールします。

次に、phpMyAdminの設定を変更する前に、バックアップを取得します。私は必ず設定変更する前にはファイルのバックアップを取得するようにしています。何か問題があったときにすぐに戻すことできるのでおススメです。

デフォルトのままだと、https://hogehoge.jp/phpmyadmin でアクセスできてしまいますので、こちらを別のURLに変更します。ここでは、「db-kanri」としていますが、任意の名前にして、phpmyadminを使用していることがわからないようにしておくべきです。
また、こちらにアクセスできるIPアドレスを登録して、制限することでさらにセキュリティを強化します。

#Alias /phpMyAdmin /usr/share/phpMyAdmin ←先頭に#をつけてコメント化
#Alias /phpmyadmin /usr/share/phpMyAdmin ←先頭に#をつけてコメント化
Alias /db-kanri /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
 SSLRequireSSL
 # Require local ←先頭に#をつけてコメント化
 Require ip IPアドレス1 IPアドレス2 ←phpmyadminにアクセス可能なIPを追記

こちらの設定が完了しましたら、apacheのサービスを再起動して本設定を反映させます。

ブラウザを起動して、https://hogehoge.jp/db-kanri/ にアクセスして、root ユーザで、設定したパスワードを入力してログインできるか確認します。

出来るSEは実施しているphpMyAdminのさらなるセキュリティ対策

よりセキュリティを強力にするには、rootのログインを許可しない方が望ましいです。

まず、phpMyAdminにrootでログインして、「ユーザアカウント」より新規に別の名前の管理者ユーザを作成します。

この時、ユーザ名(※)、localhost、パスワード2回をそれぞれ入力し、グローバル権限をすべてチェック、して「作成」を実行します。

その後、以下の設定を実施することで、rootのログインを不許可に設定します。

config.inc.phpの最終行に、以下の1行を追記します。

$cfg['Servers'][$i]['AllowRoot'] = false; //rootの利用を禁止

これにより、phpMyAdminにrootでのログインはNGとなります。実際にログインできなくなっているか試してみてくださいね。私も必ず動作確認するようにしています。

今後phpmyadminにログインする際は、※で作成したユーザでログインしてください。

今回はここまでです。アクセスするURLを変更したり、ユーザを作成するなどして、一般的に知れ渡っているデフォルトの設定から変えるだけでもセキュリティ的には有効です。デフォルトの設定はなるべく使用しないように心がけてください。最後までお読みいただきありがとうございました。