2

コンテキスト:プログラムのメモリのどこかにあるコレクションに、DOS攻撃のために禁止されたIPアドレスのテーブルがあります。

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

Javaで、TCPサーバーソケットで着信接続をリッスンし、要求元のクライアントのIPアドレスを指定して、tcpリンクの確立を受け入れるか拒否することが可能かどうかを知りたいです。つまり、クライアントソケットを受け入れて閉じる必要はありません。これは、私がすでに行っていることです。

ありがとう。

4

3 に答える 3

6

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

これらの接続がサーバーに到達することさえ望まない場合(これがポイントだと思います)、ファイアウォールレベルでブロックする必要があります。接続がアプリに到達すると、アプリケーションとの通信に必要なメモリとリソースがすでに消費されているため、その時点でDOS/DDOSゲームはすでに失われています。

接続はすでにアプリのアプリケーションレベルに達しているため、承認の前後にドロップしても問題ありません。SecurityManagerを使用しても、サーバーの負荷は増加します。

于 2011-10-17T23:57:35.543 に答える
2

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

最善の策は、Javaを使用する代わりに、iptablesファイアウォールなどを使用してパケットをすぐにドロップすることです。

serverfaultにいる少年たちは、おそらくSOよりもうまくそれを助けることができます。

于 2011-10-17T23:56:47.333 に答える
1

.policyファイルでアドレスが定義されているか、独自のポリシーオブジェクトを記述している場合は、適切なacceptSocketPermissionsが定義されたSecurityManagerを使用できます。

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

于 2011-10-17T23:57:09.173 に答える