私のラップトップでネットワーク検索を防ぐ方法を実装しようとしています。私が望む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_IP
AF_INET, SOCK_RAW, IPPROTO_ICMP
AF_PACKET
iptables
それらの方法を使用できますstrace -e trace=%network
(例:根ユーザー)このコマンドに使用されます。
で紹介したように一般ネットワークのNetfilterとパケットフロー:
AF_PACKET
ほとんどのNetfilterサブシステムは、前(受信)または後(出口)が発生します。ebtables(脚),arpテーブルまたはiptablesそしてその同等物nftables表:ファイアウォールがバイパスされました。tcpdump
(またはnmap
)着信パケットをファイアウォールの前でキャプチャするために読み取ることができ、ファイアウォールの後ろに注入するnmap
ため、ARPパケットを送信できます。
したがって、標準設定では、このツールで生成された、またはnmap
他のツールで使用されるすべてのパケットを(または)を使用してフィルタリングするAF_PACKET
ことはできません。arptables
iptables
この問題を克服する方法はいくつかあります。
従来の方法:ブリッジの使用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
ルールに置き換えます。彼らはルーティングスタックと(より良い用語はありません)ブリッジスタックの間のチェーンであるため、まだINPUT
andを使用します。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つを同時に実行します。br0
eth0
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(書いてみると私が理解した内容や全体的な説明が正確ではありません。) フィルタがない簡単な例があります。