Syslogファイルを確認したところ、次のエントリが大量にあることに気付きました。
8月25日13:06:17ssrv001 mysqld:150825 13:06:17 [警告]ユーザー「root」@「61.160.232.48」のアクセスが拒否されました(パスワードを使用:YES)
私以外の誰もこのサーバーへのルートアクセス権を持っていないため、IPは悪意があります。ルートmysqldユーザーのリモートアクセスを削除しますが、これでこの種の事態の発生を防ぐのに十分でしょうか?
また、無効なリクエストを何度も行ったIPアドレスからの接続を禁止するものを実装することも考えていました。
まず、localhostからのみmysqlへのrootとしてのログインを許可することをお勧めします。別のサーバーからmysqlに接続する必要がある場合は、新しいユーザーを作成し、必要な権限のみを付与します。
また、fail2banなどを使用して、接続の試行に何度も失敗した後、ハッカーのIPをブラックリストに追加できます。
そして最後に、ばかげたブルートフォース攻撃を回避するためにmysqlポートを変更することができます。
LinuxでのMySQLデータベースの保護について詳しくは、こちらをご覧ください: Linux VPSでMySQLおよびMariaDBデータベースを保護する方法
UPDATE:ログイン試行に失敗した後、MySQLにIPをブロックする独自のツールがあることを忘れました。これは、mysql構成ファイルで使用できます。
max_connect_errors = 5;
ただし、デフォルトでは、mysqldは10回の接続エラーの後にホストをブロックします。
詳細については、こちらをご覧ください: サーバーシステム変数#sysvar_max_connect_errors およびこちら: ホスト 'Host_name'はブロックされています
私はマキシムと一緒にいて、知っています。ローカルホストからのみMySQLへのrootとしてのログインを許可します。さらに、ローカルホストへのログインまたはすべてのユーザーの特定のIPを許可します。
ローカルユーザーとしてリモートMySQLサーバーに接続するためにできることは、sshトンネリングです。
このようなものはUNIXシステムで機能するはずです:
ssh -fNg -L 9999:127.0.0.1:3306 [email protected]
これにより、クライアントポート9999がリモートyourhost.com:3306ポートへの「トンネル」として有効になります。
Windowsシステムの場合、おそらくPuTTYでうまくいくはずです。これをみて:
http://www.ytechie.com/2008/05/set-up-a-windows-ssh-tunnel-in-10-minutes-or-less/
現在のMySQLグラフィカルクライアントのほとんどは、トンネル接続を許可しています。たとえば、MySQLWorkbenchはうまく機能します。
Iptablesでmysqlをブロックする必要があります。このスニペットは、localhost以外のホストからのmysqlをブロックします。
iptables -A INPUT -i lo -p tcp --dport mysql -j ACCEPT
iptables -A INPUT -p tcp --dport mysql -j DROP
Iptablesのこれらの設定は永続的ではないことに注意してください。ディストリビューションに応じて、iptables構成を編集する必要があります。 Redhat6ベースのシステムの場合、たとえば/etc/sysconfig/iptables
を編集する必要があります。
また、次のSQLクエリを使用してmysqlのリモートrootログインを無効にする必要があります。
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
ログインに失敗したIPが多すぎるIPをブロックするためにfail2banを実装することも考えられます。 このserverfaultの質問 はそれを助けるはずです。