iptablesで-j REJECTまたは-j DROPを設定する方が良いでしょうか?


33

archlinux wikiにiptablesルールの例があります:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

数日前に、私の友人からREJECT、最後の3つのルールになぜあるのかと尋ねられました。彼はDROP代わりにあるべきであると私に言った、そして彼はの場合のより良いセキュリティについて何かに言及したDROP

だから、私は2つの質問があります:

  1. 3つのルールは何をしますか?

  2. 私はそこに置いたとき、それはどんな違いを生むんDROP場所にREJECT --reject-with?はいの場合、違いは何ですか?


回答:


33

3つのルールは何をしますか?

これらの3つのルールは、一目瞭然です。

  1. ICMPメッセージ「port unreachable」で着信UDPパケットを拒否します
  2. 「tcp reset」で着信TCPパケットを拒否します
  3. ICMPメッセージ "protocol unreachable"で(他のプロトコルの)着信パケットを拒否します

より詳細な情報(UDP / TCPパケット、ICMPについて)を探している場合は、ネットワーキングドキュメントを掘り下げる必要がありman iptablesます。

DROPをREJECT --reject-withに配置すると、違いが生じますか?はい、誰かが私に違いを説明できれば、本当に感謝します。

違いが生まれます。そして、一般的な信念に反して、DROPより良いセキュリティを与えませんREJECT。正当なユーザーには不便であり、悪意のあるユーザーからの保護は事実上ありません。この投稿では、推論について詳しく説明します。

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

REJECTではなくDROPを使用する一般的な理由は、開いているポートに関する情報を漏らさないようにすることです。ただし、パケットを破棄すると、拒否とまったく同じ情報が失われます。

REJECTでは、スキャンを実行し、結果を「接続が確立されました」と「接続が拒否されました」に分類します。

DROPでは、結果を「接続が確立されました」と「接続がタイムアウトしました」に分類します。

最も単純なスキャナーは、オペレーティングシステムの「接続」呼び出しを使用し、1つの接続試行が完了するまで待ってから次の接続を開始します。このタイプのスキャナーは、パケットをドロップすることでかなり遅くなります。ただし、攻撃が接続試行ごとに5秒のタイムアウトを設定する場合、わずか1.5時間でマシン上のすべての予約済みポート(1..1023)をスキャンできます。スキャンは常に自動化されており、攻撃者は結果がすぐに反映されないことを気にしません。

より洗練されたスキャナーは、オペレーティングシステムのTCP実装に依存するのではなく、パケット自体を送信します。このようなスキャナーは高速で効率的であり、REJECTまたはDROPの選択に影響されません。

結論

DROPは敵対的な力に対する効果的な障壁を提供しませんが、正当なユーザーが実行するアプリケーションを劇的に遅くする可能性があります。通常、DROPは使用しないでください。


@janos-パケットが3つのルールのそれぞれに到達したときに実際に何が起こるかについてもう少し書いていただけますか?
ミハイルモルフィコフ14年

3
@Kiwy-リンクを読んで、自分で試してください。DROPは、REJECTよりも優れたセキュリティを提供しません。正当なユーザーには不便であり、悪意のあるユーザーからの保護は事実上ありません。これは、正当なユーザーが接続のタイムアウトを待つ間に接続が遅くなり、クラッカーがタイムアウトを待たないようにツールを設定するだけだからです。接続が遅い(タイムアウトの待機のため)という事実は、サーバーがそこにあり、ファイアウォールで保護されていることを示しています。
パンサー14年

2
その結論には行きません。拒否すると、分析可能なICMP応答が生成されます。この分析に基づいて、優れた攻撃エンジンは使用されているOSを導き出すことができます。そのため、すべてのポートが既知のシステムでは、ドロップの方が優れている場合があります。これは、実稼働環境のサーバーに適用されます。
ニルス14年

1
特定のポートのみを転送するファイアウォールはさらに優れています。DROP an REJECTは、最初に実行されるサービスがまったくないこととは異なります。多くのポートスキャナは、外部から検出される可能性があるため、ホストでファイアウォールがリジェクトまたはドロップを検出した場合にファイアウォールをキャッチすることを期待して、将来のスキャンの潜在的なターゲットとしてマークします。chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf

1
引用されたテキストにはもう1つの段落、更新があり、DDoS攻撃が発生した場合はDROPの方が優れていることを示しています。
アレクシスウィルケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.