ICMPリダイレクトを受け入れる方法は?

ICMPリダイレクトを受け入れる方法は?

tcpdump私のネットワーク(KVM仮想マシン、ブリッジネットワーク)にいくつかのICMPリダイレクトがあることを示しています。私はそれらと私のシステムがどのように機能し、見えるかを詳しく見てみることにしました。期待どおりに動作しないことがわかりました。

私がそうだと仮定しましょう1.1.1.1そして私ping 2.2.2.2

# ping 2.2.2.2
PING 2.2.2.2 (2.2.2.2) 56(84) bytes of data.
64 bytes from 2.2.2.2: icmp_seq=1 ttl=63 time=0.569 ms
From 4.4.4.4: icmp_seq=2 Redirect Host(New nexthop: 3.3.3.3)
64 bytes from 2.2.2.2: icmp_seq=2 ttl=63 time=0.690 ms
From 4.4.4.4: icmp_seq=3 Redirect Host(New nexthop: 3.3.3.3)

ご覧のとおり、複数のリダイレクトが受信されています。3.3.3.3よさそうだが、なんだかご主人様(1.1.1.1)無視してください。

# sysctl -a|grep accept_redirects
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.default.accept_redirects = 1
net.ipv4.conf.eth0.accept_redirects = 1
net.ipv4.conf.lo.accept_redirects = 1

その新しいパスのエントリはなく、空ですip route listip route list cache

カーネルバージョンは次のとおりです。

# uname -a
Linux foo.bar 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux

/proc/sys/net/ipv4/conf/*/accept_redirects値を変更しても効果は0|1ありません。networking restartreboot

私は希望受け入れるICMPリダイレクト - どんなアイデアがありますか?

修正する:

# ip -d route

unicast default via 4.4.4.4 dev eth0  proto boot  scope global 
unicast 1.1.1.0/24 dev eth0  proto kernel  scope link  src 1.1.1.1
unicast 4.4.4.4 dev eth0  proto boot  scope link 

答え1

宛先までのより良いパス/ゲートウェイを定義するために、ICMPリダイレクトが送信されます。

ルートのゲートウェイ/アウトレットと同じネットワークにIPアドレスが必要であるため、ルートは次の条件がすべて満たされている場合にのみルーティングテーブルに挿入されます。

  • accept_redirects1に設定
  • 問題のマシンには、アドレスがゲートウェイネットワークに属するインターフェイスがあります。
  • 宛先パスと同じネットワークにIPアドレスがありません。

それ以外の場合はパスが削除されます。

なりすましICMPリダイレクトには既知のセキュリティリスクがあるため、盲目的にリダイレクトを許可しません。 ICMPリダイレクトは、一時的なネットワークエラーまたはネットワーク設計エラーを隠すこともできます。

ICMPリダイレクトとは何ですか?ブロックする必要がありますか?

答え2

Rui F Ribeiroの回答に追加:

secure_redirects は、デフォルト値が 1 で、既存のゲートウェイの 1 つに属していないリダイレクト ターゲットを拒否するため、無効にする必要があります。

または、ターゲットIPを同じインターフェイスの2番目のデフォルトゲートウェイ(おそらくより低いメトリックを使用)として追加できる場合にも機能します。もしどうするのかご存知の方は、コメントを残してください。

関連情報