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


9

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

これを防ぐにはどうすればよいですか?

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

MySQLが実行されているポートを変更することも検討しましたが、これは理想的ではなく、あっという間に過ぎないソリューションです(新しいポートを発見した場合はどうなりますか?)

誰か他のアイデアはありますか?

異なる場合は、MySQL 5.xをFreeBSD 6.xで実行しています。

回答:


9

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

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

編集

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

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アドレスです。


いくつかの注意:ポート3306へのアクセスを特定のIPアドレスのセットのみに制限するにはどうすればよいですか?MySQLユーザーを制限するだけでは機能しません。リモートマシンが接続してブルートフォースでパスワードを要求できるためです。SSHトンネルは、エンドユーザー向けに設定するのに多少不便に思われます...これを行うIPTablesの例はありますか?
キースパーマージュニア

2

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

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

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

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

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

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


答えてくれてありがとう。このガイドを使用して#2、3、4を行いました。digitalocean.com
community / tutorials

1

MySQLプロキシを使用すると、ユーザー/パスの組み合わせを使用する小さなLUAスクリプトを記述できますが、接続リクエストが未承認のIP範囲からのものである場合は、X秒待機してログインを処理します。

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

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


MySQLプロキシのもう1つの使用法+1 :)
Andy

0

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


これを検討しましたが、1,000以上のクライアントのIPアドレスの変更を監視する必要があります。それはお尻の巨大な痛みでしょう...どうすればこれをどうやって行うことができますか?それらはMySQLサーバーに接続でき、実際にはデータベースを選択しないだけなので、MySQL内でそれらをロックアウトするのに役立ちません...
キースパルマーJr.

1
上記のデイブのドレーガーを引用:いくつかのhierogliphicパスワードを:)最高のアイデアだか使用「MySQLのアクセスログを分析し、ファイアウォールで任意のブルートフォースの試みを阻止するためにDenyhostsやBFDスクリプトを変更」
quaie

0

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

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

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


0

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


-1あいまいさによるセキュリティ
thepocketwade 2009

@thepocketwade-それが問題の実際の解決策ではないと私が言った理由です。しかし、それでもなお役立つかもしれません。
Eric Petroelje

0

接続はファイアウォールで保護する必要があると思います。iptablesやその他のチュートリアルはたくさんあります:)

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


0

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


0

my.cnf-ini [mysqld]セクションを検討するための提案

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

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

1日1回FLUSH HOSTSを使用して、パスワードを覚えられないだけでシステムを使用しようとしている正当なユーザーを排除することを検討してください。多分数日で、彼らはそれでうまくいくでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.