web-dev-qa-db-ja.com

MySQLに対するブルートフォース攻撃を防止しますか?

MySQLdのネットワークをオンにする必要がありますが、オンにするたびに、サーバーはブルートフォース攻撃で忘却されます。一部の意味するパスワード推測スクリプトは、サーバーを攻撃し始め、ポート3306で接続を開き、ランダムなパスワードを永久に試します。

どうすればこれを防ぐことができますか?

SSHの場合、私はdenyhostsを使用します。これはうまく機能します。 denyhostsをMySQLdで動作させる方法はありますか?

MySQLが実行されているポートを変更することも検討しましたが、これは理想的とは言えず、一時的な解決策にすぎません(新しいポートを発見した場合はどうなりますか?)

他に何かアイデアはありますか?

それが違う場合は、FreeBSD6.xでMySQL5.xを実行しています。

9

MySQL用のdenyhostsのようなソフトウェアパッケージは知りませんが、いくつかの解決策があります。

  • ログインを特定のIPアドレスに制限します。すべてのホストがサーバーに接続できるようにするために%を使用しないでください。
  • さらに安全な場合は、許可されたIPアドレスからの3306へのアクセスのみを許可するようにiptablesを設定します。
  • トラフィックをsshでボックスにトンネリングしてから、ローカルホスト経由で接続します
  • DenyhostsまたはBFDスクリプトを変更して、mysqlアクセスログを分析し、ファイアウォールでのブルートフォース攻撃をブロックします

編集

あなたのコメントに答えるために、 これを試してください

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

ここで、.20はMySQL、.50はリモート接続IPアドレスです。

9
Dave Drager

1:ポートを3306から変更します。セキュリティを向上させるためではなく、サーバーの負荷をかけて誤ったログイン攻撃に対処するためです。

2:SSL証明書を作成し、MySQLサーバーで有効にします(とにかくクライアントサーバー接続を暗号化するために必須です)

3:1つ以上のクライアント証明書を作成します(すべてのクライアントが証明書を持っている必要があり、クライアントソフトウェアはそれを使用するように構成する必要があります)。クライアントが。Netの場合、クライアント証明書をpkcs12形式に変換する必要がありますが、これは簡単に実行できます。 this を参照してください。ガイド..

4:MySQLユーザーアカウントをx509クライアント証明書を要求するように設定すると、攻撃者はログイン資格情報とクライアント証明書の両方を必要とします(クライアント証明書にパスワードを設定することもでき、攻撃者もそれを要求する必要があります)。

this ガイドを使用して証明書とキーファイルを作成しましたが、そこには多くのガイドがあります。

クライアントアクセスではなく、管理目的でLinuxボックスにアクセスするためにSSH接続のみを使用することを好みます。

1
MrCalvin

MySQLプロキシを使用すると、ユーザーとパスの組み合わせを取得するが、接続要求が未承認のIP範囲からのものである場合、ログインを処理するためにX秒待機する小さなLUAスクリプトを作成できます。

さらに、LUAスクリプトに少し余分なロジックを追加して、3回失敗した後にIP範囲をブラックリストに登録することもできます。

全体として、技術的には実行可能ですが、SSHまたはVPNを介して一般的なホワイトリストに登録された(FWまたはその他の手段を介して)IP範囲にトンネリングする他の推奨事項を使用します。

1
Oscar

この問題の実際の解決策ではありませんが、サーバーを別のポートで実行するだけの場合は役立つ可能性があります。これらのスキャンボットのほとんどは、おそらく3306をチェックするようにプログラムされています。問題は解決しませんが、ポートを変更するだけでスキャン数が大幅に減少する可能性があります。

0
Eric Petroelje

My.cnf-ini [mysqld]セクションで検討する提案

max_connect_errors=10  # to limit hacker/cracker attempts to guess a password.

90秒で何百回もの試行を回避します。 10回の試行でそれらを切り落とします。

1日に1回、FLUSH HOSTSを検討して、パスワードを思い出せないシステムを使用しようとしている正当な人々を排除してください。たぶん数日で、彼らはそれを手に入れるでしょう。

0
Wilson Hauck

接続はファイアウォールで保護する必要があると思います。高速で優れています。 iptablesなどのチュートリアルはたくさんあります:)

また、ファイアウォールが既知のホストをブロックするのを防ぐために、サーバー上でsmthを実行するcronjobをクライアントのホストにインストールすることもできます。

0
kolypto

トンネルにsshを使用するのが最善ですが、denyhostsの代わりにfail2banを使用することもできます。これは、より多くの異なるアプリケーションを監視することを目的としているため、mysqlログを追加しても問題はないはずです。

0
Jure1873

安全なホストからのみmysqlポートへのアクセスを許可しないのはなぜですか?

0
quaie

これは「本当の」答えではありませんが、なぜそれを外の世界に直接公開する必要があるのか​​わかりません。

そのボックスでsshを有効にし、トンネリングを使用してdbエンジンにアクセスすることはできませんか?

またはそれにアクセスするための他のVPNソリューション(openvpnが思い浮かびます)。

0
Sunny