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
数日前、友人から、最近の3つのルールにREJECT
がある理由を尋ねられました。代わりにDROP
があるべきだと彼は私に言った、そして彼はDROP
の場合のより良いセキュリティについて何かについて言及した。
だから、私は2つの質問があります:
3つのルールは何をしますか?
そこにDROP
を置いたときに何か違いはありますかREJECT --reject-with
?はいの場合、違いは何ですか?
3つのルールは何をしますか?
これら3つのルールは一目瞭然のようです。
詳細(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..1023)をわずか1.5時間でスキャンすることが可能です。スキャンは常に自動化されており、攻撃者は結果が即時でないことを気にしません。
より洗練されたスキャナーは、オペレーティングシステムのTCP実装に依存するのではなく、パケット自体を送信します。このようなスキャナーは高速で効率的で、REJECTまたはDROPの選択に影響されません。
[〜#〜]結論[〜#〜]
DROPは敵対的な力に対する効果的な障壁を提供しませんが、正当なユーザーが実行するアプリケーションを劇的に遅くする可能性があります。 DROPは通常使用しないでください。