2011-10-17 10 views
2

コンテキスト:私は、私のプログラムのメモリのどこかにあるコレクションで、DOS攻撃のために禁止されたIPアドレスのテーブルを持っています。javaソケット:受け入れる前に聴く?

TCPサーバーソケットを使用してすべての接続を受け入れ、次にIPアドレスを確認してから、接続を閉じるか、クライアントの処理を続行します。

Javaで、TCPサーバーソケットで接続の受信をリッスンし、要求元のクライアントのIPアドレスが指定されていれば、何らかの方法でTCPリンクを確立することを拒否することができますか?私はすでに受け入れているクライアントソケットを閉じるために&を受け入れる必要はありません。

ありがとうございました。

答えて

6

SecurityManagerを使用しない場合は、着信するIPアドレスのみを受け入れて確認し、禁止されている場合は接続を切断します。 SecurityManagerでは、SecurityExceptionを投げて、特別な処理(アプリケーションのセキュリティログに接続要求を記録するなど)を与えることができます。

これらの接続が(私が推測している)サーバに衝突しないようにするには、本当にファイアウォールレベルでブロックしたいと考えています。接続がアプリケーションにヒットすると、すでにアプリケーションに接続するのに必要なメモリとリソースが占有されているので、その時点で既にDOS/DDOSゲームを失ってしまっています。

接続が既にアプリケーションのアプリケーションレベルに当たっているため、承認の前後にドロップすることは問題になりません。 SecurityManagerがあっても、サーバーの負荷は依然として増加しています。

+0

はそれを知らなかった! – Joel

2

あなたは可能かもしれませんが、とにかくJavaコードのシステムへのアクセスを停止することはできません。

ベスト・ベットは、Javaを使用する代わりに、iptablesなどのファイアウォールを使用して、すぐにパケットを破棄することです。

serverfaultの男の子はおそらくSOよりも優れています。

1

.policyファイルで定義されたアドレスを持つことができ、独自のPolicyオブジェクトを作成できる場合は、SocketPermissionsを適切に受け入れてSecurityManagerを使用できます。

編集:しかし、私はファイアウォールがより良い解決策であることを認めなければなりません。

+0

セキュリティマネージャオブジェクトとアプリケーションを接続するにはどうすればいいですか? – Joel

+1

'System.setSecurityManager(new SecurityManager()); ' – EJP

関連する問題