回答:
一般的なルールとして、ポートに到達できないことを相手に知らせるには、REJECTを使用します。他人に見られたくないホストへの接続にはDROPを使用します。
通常、LAN内の接続のすべてのルールはREJECTを使用する必要があります。インターネットの場合、特定のサーバー上のidentを除き、インターネットからの接続は通常破棄されます。
DROPを使用すると、接続は空いているIPアドレスに接続されているように見えます。スキャナーは、使用されていないように見えるアドレスのスキャンを継続しないことを選択できます。NATを使用してファイアウォール上の接続をリダイレクトできることを考えると、既知のサービスの存在は、アドレス上のサーバーの存在を必ずしも示すものではありません。
Identは、SMTPサービスを提供するアドレスで渡されるか拒否される必要があります。ただし、SMTPサーバーによるIdentルックアップの使用は使用されなくなりました。動作中のidentサービスにも依存するチャットプロトコルがあります。
編集:DROPルールを使用する場合:-UDPパケットはドロップされ、動作はサービスのない非ファイアウォールポートへの接続と同じになります。-TCPパケットはACK / RSTを返します。ACK/ RSTは、サービスのない開いているポートが応答するのと同じ応答です。一部のルーターは、ダウンしているサーバーに代わって応答し、ACK / RSTを返します。
REJECTルールを使用する場合、ポートが使用できないことを示すICMPパケットが送信されます。
違いは、REJECTターゲットは拒否応答をソースに送信するのに対し、DROPターゲットは何も送信しないことです。
これは、identサービスなどに役立ちます。REJECTを使用する場合、クライアントはタイムアウトを待つ必要はありません。
これについての詳細:http : //www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
通常、攻撃者から特定のポートへのプローブを無視する必要があります。つまり、「接続拒否」を返送したくないということです。「接続拒否」とは、「ここにサーバーが存在する」ことを意味し、パケットをドロップしてもソフトウェアバージョン、潜在的な脆弱性、またはサーバーがあなたのIPをリッスンしているという事実の手がかりを与えないのに対して、より多くの情報を提供する可能性があります。
上記は、REJECTの代わりにDROPを使用する主な理由の1つです。
ここには多くの矛盾する答えがありますが、これが適切なキーワードを使用したGoogleでの最初の記事であることを考えると、これが正しい説明です。
簡単です
。DROPはパケットに対して何もしません。ホストに転送されることも、応答されることもありません。IPtablesのマンページには、パケットを床に落とす、つまりパケットに対して何もしないと書かれています。
REJECTはパケットを送り返すという点でDROPとは異なりますが、答えはサーバーがIP上にあるが、リスニング状態のポートがないかのようになります。TCPの場合、またはUDPでICMP宛先ポートに到達できない場合、IPtablesはRST / ACKを送信します。
マシンの存在を完全に隠そうとしている場合-j DROP
は適切です。たとえば、これを使用してブラックリストを実装できます。
ポートが開いているという事実を隠そうとしている場合、ポートが開いていない場合に発生する動作を模倣する必要があります。
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
ポートスキャナーが、いくつかのポートがパケットをドロップしているのにほとんどのポートが拒否していることを検出した場合、ドロップされたパケットは開いているが非表示のポートにあると想定できます。
多くの正解にもかかわらず、ちょうど私の2セント:
以下は、禁止システム(ファイアウォール、IDSなど)のルールに関する件名への短いPoC FW.IDS-DROP-vs-REJECTです。
まもなく:
DROP
すべてのポートを禁止する場合は、侵入型侵入者に使用できます(したがって、サーバーが侵入者側でダウンしているように見えます)REJECT --reject-with tcp-reset
マルチポート禁止の最良の選択です。実際の閉じたポートとして動作するようですDROP
とREJECT
(なしtcp-reset
)ので、それは、必要なデータを提供することを期待して「攻撃」を続けるために彼を刺激する可能性があり(侵入者に何かのブロックがあることを「信号」を与えますある時点で)はい、DROPの使用は無意味です。REJECTを使用します。
ルールに「DROP」と記載されている場合でも、システムはTCP RST / ACKで着信SYNに応答します。これは、サービスが実行されていないポートのデフォルトの動作です。(tcpdumpなどはこれを記録しません。)
サービスが実行されている場合、SYNはTCP SYN / ACKで満たされます。
DROPは通常どおりTCP SYN / ACKで応答せず、代わりにRST / ACKで応答するため、DROPルールはファイアウォールをアドバタイズし、ポートスキャナーはあなたが何かをファイアウォールしていることを知り、希望を打ち続けますファイアウォールをキャッチします。
これは現在、nmapが「closed」ではなく「filtered」を報告できるようになりました。例:
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
1111/tcp filtered lmsocialserver
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -D INPUT 1
そのため、唯一の「見えない」ファイアウォール設定は、専用のデバイスがデバイスの間に置かれ、ポートを選択的に転送するだけです。
基本的なスキャナを本当に使いたければ、TCP接続をTARPITすることができます。これにより、TCPウィンドウが0に設定され、接続が開かれた後にデータが転送されなくなります。確認したい場合は、接続タイムアウトが発生します。しかし、攻撃者がこれを検出してタイムアウトを非常に短くするのは簡単です。
すべてを考慮すると、おそらくREJECTを使用するか、サーバーとインターネットの間に専用のポート転送デバイスを配置するのが最善です。
または、ファイアウォールを必要としないインターネットに直接接続されたマシンでサービスを実行するだけです。
一般に、REJECTはWebサーバーに最適です。アクセスしようとしているサービス(おそらくほとんどの場合、おそらくあなた)はすぐに応答を受け取り、ユーザーやその他のサービスはネットワークの停止があるかどうかを気にしません。
DROP
を発行する疑惑のソースを提供できますSYN/ACK
か?私は自分のマシンでこれを見たことはありません。
DROP
返すという主張はサポートしていませんSYN/ACK
。私も、どのバージョンのでもこの動作を見たことはありませんiptables
。自分の主張をサポートするソースがある場合、それを見るのが最も便利です。確かに、私が今やったパケットダンプはあなたの主張をサポートしていません。