(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【入門】ICMPリダイレクトの受信設定をなぜオフにしておく必要があるのか?

スポンサーリンク

はじめに

ICMPリダイレクトは「ネットワーク機器がパケットの送信元ホストに特定の宛先ネットワークに対する適切な ゲートウェイを通知する機能」です。

本記事ではそもそもICMPリダイレクトとは何なのか?について解説し、RHELサーバを例に同通知を受け取らない設定ができているか否かを確認する場所についても記載しました。

環境情報
  • Red Hat Enterprise Linux Server 7.5

ICMPリダイレクトとは?

コンピュータは宛先IPアドレスに応じた送信先を管理するためにルーティングテーブルという表を保持しており、Windowsパソコンではroute printを打つと確認が可能です。

そのため、環境の中で新たな宛先が増えた場合やデフォルトゲートウェイの機器を更改してIPアドレスが変更された際は、各サーバに対して静的経路を書き換えていく作業が必要となります。

しかし、これを省力化する仕組みがネットワーク機器にあって、それがICMPリダイレクトと呼ばれるもの。
例えばデフォルトゲートウェイのルータに同設定を入れると、受信したパケットを同じインターフェースに向けて再送する場合に「ICMP Redirect」というパケットをパケット送信元のサーバに送ることで静的経路を書き換えてくれます。要は、より最適な経路を教えてあげることで次回以降はその宛先に関してはデフォルトゲートウェイではなくそのネットワーク機器に送付させることができます。

実際にルーティングが切られていないが別の系路を持つサーバにpingコマンドを押下すると以下のようにICMPリダイレクトを受信し、次回以降は新たな経路でパケットが送付されます。

From gateway (X.X.X.X) icmp_seq=1 Redirect Host(New nexthop: xx (Y.Y.Y.Y))

同設定が危険な理由

サーバ側が保持している静的テーブルが一時的とは言えネットワーク機器側の権限で書き換わってしまうからです。

このルーティング情報はデフォルトでは数十分で破棄されてしまいますが、サーバ管理者以外が同情報を編集してしまうことはトラブルの原因に繋がります。故にエンタープライズで利用しているサーバでは同設定を受信する部分でオフにしています。

例えばLinux(RHEL)では以下のコマンドでICMPリダイレクトを受け取らないように設定ができていることを確認できます。

# sysctl net.ip4.conf.all.accept_redirects
net.ip4.conf.all.accept_redirects = 0

終わりに

ルータ等のネットワーク機器が受信したパケットを同じインターフェースに向けて再送しなければならない場合にパケットの発信元に正しい通知先を教える同機能ですが、セキュリティ上問題があるのでサーバ側で受信を拒否しておくことが一般的です。

以上、ご参考になれば幸いです。