はじめに
ICMPリダイレクトは「ネットワーク機器がパケットの送信元ホストに特定の宛先ネットワークに対する適切な ゲートウェイを通知する機能」です。
本記事ではそもそもICMPリダイレクトとは何なのか?について解説し、RHELサーバを例に同通知を受け取らない設定ができているか否かを確認する場所についても記載しました。
環境情報
- Red Hat Enterprise Linux Server 7.5
ICMPリダイレクトとは?
Windowsパソコンで言うところのroute print
を打つと表示されるルーティングテーブルに沿って各コンピュータはパケットを送付します。
例えばネットワーク機器を追加して新たな宛先が増えた場合やデフォルトゲートウェイの機器を更改した際は、各サーバに対して静的経路を書き換えていく作業が必要です。
しかし、これを省力化する仕組みがネットワーク機器にあって、それがICMPリダイレクトと呼ばれるもの。
例えばデフォルトゲートウェイのルータに同設定を入れると、受信したパケットを同じインターフェースに向けて再送する場合に「ICMP Redirect」というパケットをパケット送信元のサーバに送ることで静的経路を書き換えてくれます。よって次回以降はその宛先に関してはデフォルトゲートウェイではなくそのネットワーク機器に送付されます。
同設定が危険な理由
サーバ側が保持している静的テーブルが一時的とは言えネットワーク機器側の権限で書き換わってしまうからです。デフォルトでは同設定は数十分で破棄されてしまいますが、サーバ管理者以外が同情報を編集してしまうことはトラブルの原因に繋がります。故にエンタープライズで利用しているサーバでは同設定を受信する部分でオフにしています。
例えばLinux(RHEL)では以下のコマンドでCMPリダイレクトを受け取らないように設定ができていることを確認できます。
# sysctl net.ip4.conf.all.accept_redirects net.ip4.conf.all.accept_redirects = 0
ちなみに同設定は以下で管理されており/etc/sysctl.conf
、以下はセキュリティ観点で設定が推奨されています。
net.ipv4.ip_forward = 1 net.ipv4.tcp_syncookies=1 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.conf.all.accept_redirects=0
終わりに
ルータ等のネットワーク機器が受信したパケットを同じインターフェースに向けて再送しなければならない場合にパケットの発信元に正しい通知先を教える同機能ですが、セキュリティ上問題があるのでサーバ側で受信を拒否しておくことが一般的です。
以上、ご参考になれば幸いです。