組み込みLinuxでARPパケットをフィルタリング/制限する最良の方法

組み込みLinuxでARPパケットをフィルタリング/制限する最良の方法

一部のネットワーク機器にはLinuxが組み込まれています。このデバイスはとても重要なので、ネットワークテストをたくさんする必要があります(このためのデバイスは別途あります)。このテストは、私のデバイスをARPパケット(通常のパケット、間違ったパケット、異なるサイズのパケットなど)でいっぱいにすることで構成されています。

私はインターネットからebtables、arptables、iptables、nftablesなど、さまざまなxxテーブルについて読みました。もちろん、私のデバイスではiptablesを使用しています。

  1. ARPパケットのフィルタリング(削除せずに制限)に最適なxxテーブルは何ですか?
  2. カーネルに含まれる内容に関する情報を含む/proc/config.gzファイルについて聞いたことがあります。 CONFIG_IP_NF_ARPFILTERが含まれていないことを確認しました。したがって、arptablesを使用するには、CONFIG_IP_NF_ARPFILTERオプションを有効にしてカーネルをコンパイルする必要があります。そうですか? ebtablesも同じですか?
  3. iptablesはOSIレベル3で動作しますが、ebtablesとarptablesはOSIレベル2で動作することを読みました。だからレベル2で何でもフィルタリングする方がレベル3よりもフィルタリング(性能?)が良いと思います。そうですか?
  4. このサイトのどこかでebtablesを使用してARPパケットをフィルタリングする方法についての答えを見つけました。 arptableに比べてebtableの利点はありますか?
  5. さらに1つ。さまざまな種類のパケットとプロトコルのネットワークトラフィックの制限/フィルタリングについて学ぶための最良のインターネットソースは何ですか?

ベストアンサー1

  1. ARPパケットのフィルタリング(削除せずに制限)に最適なxxテーブルは何ですか?

    • iptables

      iptablesIP層から始まる:ARPを処理するには遅すぎます。

    • arpテーブル

      ARPに特化していますが、arpテーブル必要な一致項目および/またはターゲットが不足している限界そして同様に減らすARPパケット。あなたの目的には使用できません。

    • ebtables

      ebtables候補になることができます。ARP処理そして使用limitすべてをあきらめないため)。

      利点:
      - 非常に使いやすいです。

      欠点:
      - イーサネットで動作します。。つまり、ブリッジをまだ使用していない場合は、ブリッジを作成し(おそらく唯一の)インターフェイスをブリッジに配置する必要があります。これは、構成といくつかのネットワークオーバーヘッド(たとえば、ネットワークインターフェイスを無差別に設定する)の面でコストがかかります。 -
      同等ではないからiptables仲間IPセット、交通を制限することは失礼です。ソースごとに動的測定を実行することはできません。したがって、これらのソースMACまたはIPはルールに手動で追加する必要があります。

    • nftnftables)

      利点:
      - このツールの目的は、他のツールを置き換えて、一致するモジュールの重複などのコードの重複を避けることです(想像することができます)。arpテーブルあなたも受けたことがあるでしょう。限界一致しますが、これは一致するモジュールの3番目の実装です。IP(6) テーブル'xt_limitそしてebtables'ebt_limitそれら)。したがって、すべての階層で同じ機能を使用できるほど一般的に作成されました。つまり、トラフィックを制限/測定できます。ARPレベルも同時に進んでいます。ソースごとグローバルにではなく。

      欠点:
      - 一部の機能には最新のカーネルとツールが必要な場合があります(メーターにはカーネル> = 4.3、nftables>= 0.8.3)。
      - 構文がより一般的であるため、ルールを正しく生成することはより困難になる可能性があります。時には、文書が誤解を招く可能性があります(例:機能しない例)。

    • tc(交通制御)?

      多分それは使用することができますTCARPトラフィックを制限します。TCこの機能はネットワークスタックの初期に機能し、使用するとリソース使用量が制限される可能性があります。しかし、このツールは複雑さとしても知られています。送信トラフィックの代わりに受信トラフィックに使用しても、手順が必要です。私はこれを行う方法を試していませんでした。

  2. CONFIG_IP_NF_ARPFILTER

    前のポイントからわかるように、これは意味がありません。arpテーブルサービスが中断されました。あなたに必要なものNF_TABLES_ARPそうでなければBRIDGE_NF_EBTABLES(またはTC実は候補なのに、NET_SCHED)。だからこんな意味ではないただ前提条件として、その他の必要事項(少なくともこれらのオプションを使用可能にするために必要なものとARPを制限するために必要なさまざまな一致カーネルモジュール)を確認する必要があります。

  3. どのレイヤーが一番いいですか?

    タスクを実行するために最も具体的なレイヤーを使用するのが処理が最も簡単であると言いたいです。同時に、処理速度が速くなるにつれて、必要なオーバーヘッドは減少しますが、通常、処理はより粗く複雑になります。ここにはさまざまな提案があるかもしれないと確信しています。 ARPは、ほぼレイヤ2とレイヤ3の間のどこかに考えることができます。これはレイヤ2で実装されていますが、たとえばNDPと同等のIPv6はレイヤ3で実装されています(マルチキャストICMPv6を使用)。考慮すべき唯一の要因ではありません。

  4. arptableに比べてebtableの利点はありますか?

    ポイント1と2を参照してください。

  5. さまざまな種類のパケットとプロトコルのネットワークトラフィックの制限/フィルタリングについて学ぶための最良のインターネットソースは何ですか?

    申し訳ありません。正しい単語を使用する検索エンジンでは、見つからない項目はありません。簡単なトピックから始めて、より難しいトピックに進む必要があります。もちろん、SEはすでに情報源です。

以下は、ebtablesとnftablesの例です。


ebtablesで

インターフェイスがあり、eth0それを使用したいとしましょう。ebtablesIPは192.0.2.2/24です。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

見ているARPオプションebtables追加のフィルタリングを実行します。上記のように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

生成などの他のバリエーションがあります。ワイズペアの場合は、一方の端にIPを配置し、もう一方の端をブリッジポートに設定して、ブリッジにIPがないことを確認します(チェーンを使用して、トラフィックがFORWARDどのインターフェイスから来るかをフィルタリングしますINPUT)。


nftableで

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

おすすめ記事