質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Q&A

解決済

1回答

2481閲覧

MySQLのmax_connect_errors の値を大きくした場合のリスク

uzihamada

総合スコア40

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

0グッド

2クリップ

投稿2017/09/28 09:46

編集2017/10/02 01:37

Host '10.x.x.x' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

MySQLを利用していて上記のようなエラーが発生した場合はMySQLのmax_connect_errorsの値を大きくして対応すると、様々なサイトで確認しましたが、この値を大きくすることによるリスクとはどういったものが考えられるのでしょうか?

https://dev.mysql.com/doc/refman/5.6/ja/blocked-host.html
MySQLのドキュメントをみると

max_connect_errors システム変数の値は、連続して接続要求が中断された場合にそれを許可する回数を決定します。(セクション5.1.4「サーバーシステム変数」を参照してください。)接続が成功せずに max_connect_errors 回要求が失敗すると、mysqld は何らかの問題があると見なし (たとえば、何者かが侵入しようとしている)

侵入者が接続を中断・失敗させるとはどういうことが考えられるのでしょうか。
最初はユーザー名・パスワード間違いもカウントするものだと思って、理解できたのですが、そうではないみたいなので、どういう状況の想定かわからなくなりました。
セキュリティの知識がなく、助言いただきたいです。よろしくお願いします。

【追記】
max_connect_errorsにカウントされるエラーはハンドシェイクエラーに限るようです
https://dev.mysql.com/doc/refman/5.6/ja/host-cache-table.html
上記リンクSUM_CONNECT_ERRORSの項目を参照。

今運用しているサーバーだと、リクエスト数が増える一瞬にこのハンドシェイクエラーが多発しているようです。おそらくサーバーのスペックがこの一瞬足りなくなるので、ハンドシェイクエラーが発生しているようです。
なので役に立つのはおそらくdos攻撃の際くらいかなと考えています。単純なサーバー負荷が原因で起こるものに関しては、max_connect_errors をある程度増やしての対応でいいのかなと考えていますがこの考えでいいのでしょうか…??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Understanding max_connect_errorsという記事を読むと、認証失敗の場合コネクションエラーをカウントするのではなく、逆にリセットするようですね。パスワードが間違いとわかるということは、コネクションは成立しているわけですから、カウンタをリセットすることはなるほどそういうものかとは思いますが、セキュリティ上の効果を期待していると、がっかりしますよね。

私は、PHPからMySQLにつなぐ実験をしていてこのエラーに遭遇したことがありますが、それはセキュリティ上の問題が発生していたからではなく、設定等が間違っていたからでした。私は、PHP 3.0.18以降のすべてのPHPを試す環境を持っていますが、古いPHPから新しいバージョンのMySQLに接続しようとすると、設定を変えないと接続できないのです。その状態で多くのPHPバージョンを試すスクリプトを動かしたところ、接続失敗が数十回発生して、このエラーになりました。では、max_connect_errors を増やしたら問題は解決するか。解決しないですよね。つまり、max_connect_errors を増やすリスクというのは、問題発見を遅らせるというリスクがあるわけです。

通常、コネクションエラーになるのは原因があるはずです。その原因を取り除く代わりにmax_connect_errorsを増やしても問題は根本解決しません。なので、よほど特別な理由がない限りは、max_connect_errors はそのままの状態で使うべきかと思います。

投稿2017/09/28 21:56

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uzihamada

2017/11/09 09:35

遅くなってしまいましたが、回答ありがとうございました。 おっしゃる通りで、max_connect_errorsを増やしたところでただの対症療法で問題解決にはならないどころか別の問題も生むのでは?と思います。 私が行った対策としては、アプリケーション側を修正して、WEB・DBサーバー両方の負荷を下げることで一応ハンドシェイクエラーは起きなくなったようです(今のところ)。結局明確な理由はわかりませんでしたが、なんとか解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問