web-dev-qa-db-ja.com

iptablesを使用する場合のREJECT対DROP

私が持っていたいと思う理由はありますか

iptables -A INPUT -j REJECT

の代わりに

iptables -A INPUT -j DROP
93
Mike B

原則として、ポートが到達不能であることを相手側に知らせたい場合はREJECTを使用します。他の人に見せたくないホストへの接続にはDROPを使用します。

通常、LAN内の接続に関するすべてのルールはREJECTを使用する必要があります。インターネットの場合、特定のサーバーのidentを除いて、インターネットからの接続は通常削除されます。

DROPを使用すると、空いているIPアドレスへの接続のように見えます。スキャナは、空いているように見えるアドレスのスキャンを続行しないことを選択する場合があります。 NATを使用してファイアウォール上の接続をリダイレクトできることを考えると、既知のサービスの存在は必ずしもアドレス上のサーバーの存在を示しているわけではありません。

Identは、SMTPサービスを提供するすべてのアドレスで渡すか拒否する必要があります。ただし、SMTPサーバーによるIdentルックアップの使用は使用できなくなりました。動作中のidentサービスにも依存するチャットプロトコルがあります。

編集:DROPルールを使用する場合:-UDPパケットがドロップされ、サービスのない非ファイアウォールポートに接続する場合と同じ動作になります。 -TCPパケットは、サービスのない開いているポートが応答するのと同じ応答であるACK/RSTを返します。一部のルーターは、サーバーに代わってACK/RSTで応答し、ダウンしています.

REJECTルールを使用すると、ICMPパケットが送信され、ポートが使用できないことが示されます。

81
BillThor

違いは、REJECTターゲットがソースに拒否応答を送信するのに対し、DROPターゲットは何も送信しないことです。

これは便利です。 identサービス用。 REJECTを使用する場合、クライアントはタイムアウトを待つ必要はありません。

これについての詳細: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html

28
Zizzencs

通常、攻撃者から特定のポートへのignoreプローブを行います。つまり、「接続拒否」を送り返したくないということです。 「接続が拒否されました」とは、「ここにサーバーがあります」という意味であり、パケットをドロップしても、ソフトウェアのバージョン、潜在的な脆弱性、またはサーバーがIPをリッスンしているという事実についての手がかりは得られません。

上記は、REJECTの代わりにDROPを使用する主な理由の1つです。

8
wzzrd

ここでは多くの矛盾する答えが見られますが、これは適切なキーワードを使用したGoogleの最初の記事です。これが正しい説明です。
それは簡単です:

DROPはパケットをまったく処理しません。ホストに転送されず、応答もされません。 IPtablesのマンページには、パケットを床に落とす、つまり、パケットに対しては何もしないと書かれています。

REJECTはDROPとは異なり、パケットを送り返しますが、答えはサーバーがIP上にあるかのように見えますが、ポートがリスニング状態にありません。 TCP、またはUDPでICMP宛先ポートに到達できない場合、IPtablesはRST/ACKを送信します。

7
Ecko

マシンの存在を完全に隠そうとしている場合は、-j DROPが適切です。たとえば、これを使用してブラックリストを実装できます。

ポートが開いているという事実を隠そうとしている場合は、ポートが開いていなかった場合に発生する動作を模倣する必要があります。

  • TCP:-p tcp -j REJECT --reject-with tcp-reset
  • UDP:-p udp -j REJECT --reject-with icmp-port-unreachable

ポートスキャナーが、いくつかのポートがパケットをドロップしているのにほとんどがそれらを拒否していることを検出した場合、ドロップされたパケットは開いているが非表示になっているポートにあると想定できます。

4
Raptor007

多くの正しい答えにもかかわらず、私の2セントだけ:

Ban-systemのルール(ファイアウォール、IDSなど)に関する件名の短いPoC FW.IDS-DROP-vs-REJECT を次に示します。

まもなく:

  • DROPは、すべてのポートを禁止している場合(つまり、サーバーが侵入者側でダウンしているように見える)、侵入者の侵入者に使用できます。
  • REJECT --reject-with tcp-resetは、実際の閉じたポートとして動作しているように見えるため、マルチポート禁止の最良の選択です。
  • 一部のポートが応答している(侵入者がホストが生きていることを知っている)場合、DROPおよびREJECTtcp-resetなし)は、何かがブロックされていることを示す「シグナル」を侵入者に与えます(ある時点で必要なデータを提供するために「攻撃」を続けるように彼を刺激することができます)
0
sebres