一部のネットワークデバイスにLinuxが組み込まれています。このデバイスは非常に重要なので、多くのネットワークテストを行う必要があります(そのために別のデバイスがあります)。これらのテストには、デバイスをARPパケット(通常のパケット、不正な形式のパケット、異なるサイズのパケットなど)でフラッディングすることが含まれます。
私はインターネット上のさまざまなxx-tablesについて読みました:ebtables、arptables、iptables、nftablesなど。確かに私は自分のデバイスでiptablesを使用しています。
ARPパケットをフィルタリング(ドロップではなく制限)するのに最適なxxテーブルはどれですか?
iptables IPレイヤーから開始:ARPを処理するにはもう手遅れです。
ARPに特化していますが、arptablesには、drop ARPパケットだけでなく、limitに必要な一致やターゲットがありません。目的に使用することはできません。
ebtables候補になることができます( ARPを処理 と limit
を使用してすべてを削除しないこともできます)。
プロ:
-非常に使いやすい
短所:
-イーサネットで動作していますブリッジ。つまり、まだブリッジを使用していない場合は、ブリッジを作成して、その上に(おそらく一意の)インターフェイスをスレーブ化して、ブリッジを使用できるようにする必要があります。これには、構成と、おそらくネットワークのオーバーヘッドの両方に代償が伴います(例:ネットワークインターフェイスが無差別に設定されている)。
-iptablesのコンパニオン ipset に相当するものがないため、トラフィックの制限は大雑把です。ソースごとのオンザフライメータリングを実行することはできません(したがって、そのようなソースMACまたはIPはルールに手動で追加する必要があります)。
nft
( nftables )
プロ:
-このツールは、他のツールを置き換え、一致モジュールの複製などのコードの重複を回避することを目的として作成されました(arptablesもlimitを受け取った可能性があると想像できます)一致しますが、これは、ip(6)tables 'xt_limit
およびebtables' ebt_limit
onesに続く、このような一致モジュールの3番目の実装になります。したがって、どのレイヤーでも同じ機能を使用できるように十分に汎用的であることが意図されています。トラフィックを[〜#〜] arp [〜#〜]レベルで制限/計測しながら、それを実行することもできますソースごとグローバルではなく。
短所:
-一部の機能には、最近のカーネルとツールが必要な場合があります(例:メーターにはカーネル> = 4.3およびnftables> = 0.8.3が必要です)。
-構文がより一般的であるため、ルールを正しく作成するのがより困難になる可能性があります。ドキュメントが誤解を招く場合があります(例:機能しない例)。
tc
(トラフィック制御)?
tcを使用してARPトラフィックを制限することはおそらく可能かもしれません。 tc機能はネットワークスタックの非常に早い段階で機能するため、その使用によりリソースの使用が制限される可能性があります。しかし、このツールはその複雑さでも知られています。出力トラフィックではなく入力トラフィックに使用する場合でも、手順が必要です。私はこれを行う方法を試しさえしませんでした。
CONFIG_IP_NF_ARPFILTER
前のポイントで見たように、これは議論の余地があります:arptablesは使用できません。代わりに NF_TABLES_ARP
または BRIDGE_NF_EBTABLES
(または、tcが実際に候補である場合、 NET_SCHED
)が必要です。それがonlyの前提条件であるという意味ではありません。他に何が必要かを確認する必要があります(少なくとも、これらのオプションを使用可能にするために何を行うか、ARPを制限するために必要なさまざまな一致カーネルモジュール)。
どのレイヤーが最適ですか?
その仕事をしている最も具体的なレイヤーを使用するのが最も扱いやすいと思います。同時に、以前に処理された方が必要なオーバーヘッドは少なくなりますが、通常はより粗雑で、処理が非常に複雑になります。ここにはさまざまなアドバイスがあると思います。 ARPは、ほぼレイヤー2とレイヤー3の間にあると見なすことができます。レイヤー2で実装されますが、たとえば、同等のIPv6のNDPがレイヤー3で実装されます(マルチキャストICMPv6を使用)。考慮すべき要素はそれだけではありません。
Ebtablesはarptablesよりも利点がありますか?
ポイント1と2を参照してください。
さまざまな種類のパケットやプロトコルのネットワークトラフィックを制限/フィルタリングする方法について学ぶためのインターネット上の最良の情報源は何ですか?
申し訳ありませんが、正しい単語の検索エンジンを使用して見つけることができないものは何もありません。より難しいトピックに進む前に、簡単なトピックから始める必要があります。もちろん、SEはすでに情報源です。
以下はebtablesとnftablesの両方の例です
したがって、インターフェースeth0
があり、IP 192.0.2.2/24でebtablesを使用したいとします。インターフェイスがブリッジポートになると、eth0
にあるIPは無視されます。 eth0
からブリッジに移動する必要があります。
ip link set eth0 up
ip link add bridge0 type bridge
ip link set bridge0 up
ip link set eth0 master bridge0
ip address add 192.0.2.2/24 dev bridge0
ebtables のARPオプションを見て、さらにフィルタリングを行います。上で述べたようにebtablesは粗すぎて制限できませんソースごと各ソースをそのMACまたはIPアドレスとルールで手動で指定しない限り。
1秒あたり1つのARP要求の受け入れに制限する(考慮される任意のソース)。
ebtables -A INPUT -p ARP --arp-opcode 1 --limit 1/second --limit-burst 2 -j ACCEPT
ebtables -A INPUT -p ARP --arp-opcode 1 -j DROP
vethペアを作成し、一方の端にIPを配置し、もう一方の端をブリッジポートとして設定し、IPなしでブリッジを残す(およびFORWARD
チェーンでフィルタリングし、どのインターフェイストラフィックを示す)など、他のバリエーションもあります。 INPUT
ではなくから来ています)。
1秒あたり1つのARP要求の受け入れに制限するにはおよびオンザフライ MACアドレスごと:
nft add table arp filter
nft add chain arp filter input '{ type filter hook input priority 0; policy accept; }'
nft add rule arp filter input arp operation 1 meter per-mac '{ ether saddr limit rate 1/second burst 2 packets }' counter accept
nft add rule arp filter input arp operation 1 counter drop