arptableはnmapでは使用できません

arptableはnmapでは使用できません

私のラップトップでネットワーク検索を防ぐ方法を実装しようとしています。私が望む1つは、特定のホスト(たとえば、私のゲートウェイ)に対するarp要求を許可することです。
arptableを使っていくつかのルールを追加しましたが、(最初は)正しく動作しているようです。

arptables -A OUTPUT -d 192.168.1.30 -j DROP
arptables -A INPUT  -s 192.168.1.30 -j DROP

これにより、ホストに対する arp 要求を効果的にブロックします。私が実行した場合:

tcpdump -n port not 22 and host 192.168.1.38 (target host)

そして、以下を実行してください:

arp -d 192.168.1.30; ping -c 1 192.168.1.30; arp -n (notebook)

tcpdumpは宛先に着信パケットがないことを示し、ラップトップはarp -n(不完全)を示します。

ただし、ラップトップでnmap -sS 192.168.1.30を実行すると、ターゲットホストに到達します。

22:21:12.548519 ARP, Request who-has 192.168.1.30 tell 192.168.1.38, length 46
22:21:12.548655 ARP, Reply 192.168.1.30 is-at xx:xx:xx:xx:xx:xx, length 28
22:21:12.728499 ARP, Request who-has 192.168.1.30 tell 192.168.1.38, length 46
22:21:12.728538 ARP, Reply 192.168.1.30 is-at xx:xx:xx:xx:xx:xx, length 28

しかし、ノートブックのarp -nはまだ不完全であるとマークされていますが、nmapはホストを検出します。
私も試しました。nftablesそしてebtables成功しませんでした。

nmapがarpリクエストを送信してホストを見つけるのを止める方法は?

答え1

OP設定完了です。アドレスは192.168.1.38/24eth0で、ゲートウェイ(実際には不要)192.168.1.1です。設定で実際のイーサネットの代わりにWi-Fiを使用している場合は、追加の作業なしに最初の方法(ブリッジング)を使用することはできません(アクセスポイントの場合は簡単ですが、AP以外の場合は非常に困難または不可能かもしれません)。


  • nmap使うパケットソケット(タイプAF_PACKET)を使用すると、カーネルのネットワークスタックを使用してARPキャッシュと解析を処理する代わりにARP要求を処理できます。arping動作は似ています(例を単純化するために使用されます)。

  • tcpdump 返品キャプチャ用AF_PACKET

  • 一方、他の特別なツール(例)も使用されているかどうかだけがフィルタリングpingされます。AF_INET, SOCK_DGRAM, IPPROTO_IPAF_INET, SOCK_RAW, IPPROTO_ICMPAF_PACKETiptables

それらの方法を使用できますstrace -e trace=%network(例:ユーザー)このコマンドに使用されます。

で紹介したように一般ネットワークのNetfilterとパケットフロー:

一般ネットワークのNetfilterとパケットフロー

AF_PACKETほとんどのNetfilterサブシステムは、前(受信)または後(出口)が発生します。ebtables(脚),arpテーブルまたはiptablesそしてその同等物nftables表:ファイアウォールがバイパスされました。tcpdump(またはnmap)着信パケットをファイアウォールの前でキャプチャするために読み取ることができ、ファイアウォールの後ろに注入するnmapため、ARPパケットを送信できます。

したがって、標準設定では、このツールで生成された、またはnmap他のツールで使用されるすべてのパケットを(または)を使用してフィルタリングするAF_PACKETことはできません。arptablesiptables

この問題を克服する方法はいくつかあります。

従来の方法:ブリッジの使用ebtables

ブリッジされているため、ほとんどの場合Wi-Fiと互換性がありません。

~のためebtables(またはnftablesホームのbridge場合、これは通常問題ではありません。フィルタリングできないARPまたはIPパケットがイーサネットフレームに変換されると、ネットワークスタックの他の層に戻ります。これで、ネットワークスタック内にあり、使用を含むすべての施設の影響を受けますebtables(またはnftables家族と一緒に過ごしてくださいbridge)。したがって、ネットワークブリッジを使用すると、ファイアウォールバイパスの問題を克服できます。

ブリッジを作成し、eth0ポートをブリッジに設定br0し、アドレスとルートを移動します(もちろん、これは使用している適切なネットワークツールを再設定して実行する必要があります。

ip link add name br0 up type bridge
ip link set dev eth0 master br0
ip addr flush dev eth0
ip addr add 192.168.1.38/24 brd + dev br0
ip route add default via 192.168.1.1 # not needed for this problem

次に、arptablesルールをebtablesルールに置き換えます。彼らはルーティングスタックと(より良い用語はありません)ブリッジスタックの間のチェーンであるため、まだINPUTandを使用します。OUTPUT

ebtables -A OUTPUT -p ARP --arp-ip-dst 192.168.1.30 -j DROP
ebtables -A INPUT -p ARP --arp-ip-src 192.168.1.30 -j DROP

約aに等しいnftablesルールセットは次のようにnft -f somerulefile.nftロードできます。

add table bridge t    # for idempotence
delete table bridge t # for idempotence

table bridge t {
    chain out {
        type filter hook output priority 0; policy accept;
        arp daddr ip 192.168.1.30 drop
    }

    chain in {
        type filter hook input priority 0; policy accept;
        arp saddr ip 192.168.1.30 drop
    }
}

(影響を受けるインターフェイスを制限するには、追加のフィルタリングを追加する必要があります。)

これらのルールの1つを作成したら、次のように1対1tcpdumpで2つを同時に実行します。br0eth0

tcpdump -l -n -e -s0 -i br0 arp &
tcpdump -l -n -e -s0 -i eth0 arp &

リリースは表示されますが、br0表示されなくなりましたeth0。挿入時にブロックできないARPパケットがブリッジ層によって効果的にブロックされました。ルールを削除すると、両方のインターフェイスにトラフィックが表示されます。同様に、リモートリバーステストの場合、パケットはキャプチャされますがeth0到着しませんbr0。つまりブロックされます。

新しい方法:nftablesそしてnetdev家族そしてegressフック

: Linuxが必要カーネル >= 5.16egressフックを提供し、nftables>= 1.0.1それを書いてください。ingressカーネル4.2から利用可能です。

関連するブリッジがないため、ネットワークレイアウトを変更する必要はなく、これはイーサネットやWi-Fiでも同様です。

特にこれは犯罪ユースケースの提示:

netfilter: 終了フックの紹介

次のユーザー要件に合わせてパケットを分類するための送信時のnetfilterの使用をサポートします。

  • コンテナのアウトバウンドセキュリティポリシー(Laura)
  • ロードバランサー(Laura)でのノード内Direct Server Return(DSR)トラフィックのフィルタリングとブロック
  • ローカルARPトラフィックなど、AF_PACKETを介して着信ローカル生成トラフィックをフィルタリングします。クラスタリング目的またはDHCP用に作成された
    (Laura、後続のコミットにAF_PACKETパイプラインが含まれています)

[...]

nftablesnetdevインターフェイスレベルで動作するファミリの他のNetfilterフック(前の図には説明されていません)へのアクセスを提供しingressますegress。これらのフックは受信と送信に近いですAF_PACKET(受信/送信とキャプチャ/注入に関連する実装の詳細にわずかな微妙さがあるため、あいまいに保たれます)。egressに注入されたパケットに影響を与える可能性がありますAF_PACKET

ファミリテーブルのベースチェーンはnetdevインターフェイスに接続する必要があります。 OPの初期設定を使用した移行nftablesルールセットは、netdev次のように系列の構文を使用して書き換えることができます。

add table netdev t    # for idempotence
delete table netdev t # for idempotence

table netdev t {
    chain out {
        type filter hook egress device eth0 priority 0; policy accept;
        arp daddr ip 192.168.1.30 drop
    }

    chain in {
        type filter hook ingress device eth0 priority 0; policy accept;
        arp saddr ip 192.168.1.30 drop
    }
}

tcpdump注入されたARPは送信時に捕捉されません。以前に削除されました。受信すると、キャプチャはまだ最初に発生します。に依存するツールAF_PACKET(で始まるtcpdump)はまだキャプチャできます(ただし、ファイアウォールはすぐにキャプチャを削除します)。


tcその他:ソケットをフィルタリングするためのツールもありますAF_PACKET(ツールがそのオプションを使用していない場合)。PACKET_QDISC_BYPASS)。tc扱いが難しいです。これは私の答えQ/A(書いてみると私が理解した内容や全体的な説明が正確ではありません。) フィルタがない簡単な例があります。

関連情報