Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.4.3. ソースルーティングの無効化

ソースルーティングは、IP パケットが情報 (アドレスのリスト) を伝送できるようにするインターネットプロトコルメカニズムであり、パケットがたどる必要のあるパスをルーターに通知します。ルートが通過するときにホップを記録するオプションもあります。取得されたホップのリストである "route record" は、宛先に送信元へのリターンパスを提供します。これにより、送信元 (送信ホスト) は、一部またはすべてのルーターのルーティングテーブルを無視して、大まかにまたは厳密にルートを指定できます。これにより、ユーザーは悪意のある目的でネットワークトラフィックをリダイレクトできます。このため、ソースベースのルーティングは無効にする必要があります。
accept_source_route オプションを使用すると、ネットワークインターフェイスが Strict Source Routing (SSR) または Loose Source Routing (LSR) のオプションが設定されたパケットを受け入れます。ソースルーティングされたパケットの受け入れは、sysctl の設定によって制御されます。SSR または LSR オプションが設定されたパケットをドロップするために、root で次のコマンドを発行します。
~]# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
パケットの転送を無効にすることも、可能な限り上記と合わせて行ってください (転送を無効にすると、仮想化に支障をきたす場合があります)。以下のコマンドを root で発行します。
これらのコマンドは、すべてのインターフェイスで IPv4 および IPv6 パケットの転送を無効化します。
~]# /sbin/sysctl -w net.ipv4.conf.all.forwarding=0
~]# /sbin/sysctl -w net.ipv6.conf.all.forwarding=0
これらのコマンドは、すべてのインターフェイスですべてのマルチキャストパケットの転送を無効にします。
~]# /sbin/sysctl -w net.ipv4.conf.all.mc_forwarding=0
~]# /sbin/sysctl -w net.ipv6.conf.all.mc_forwarding=0
ICMP リダイレクトの受け入れには、正当な用途はほとんどありません。特に必要な場合を除き、ICMP リダイレクトパケットの受け入れと送信を無効にしてください。
これらのコマンドは、すべてのインターフェイスですべての ICMP リダイレクトパケットの受け入れを無効にします。
~]# /sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0
~]# /sbin/sysctl -w net.ipv6.conf.all.accept_redirects=0
このコマンドは、すべてのインターフェイスでセキュアな ICMP リダイレクトパケットの受け入れを無効にします。
~]# /sbin/sysctl -w net.ipv4.conf.all.secure_redirects=0
このコマンドは、すべてのインターフェイスで IPv4 ICMP リダイレクトパケットの受け入れを無効にします。
~]# /sbin/sysctl -w net.ipv4.conf.all.send_redirects=0
重要
少なくとも、net.ipv4.conf.all.send_redirects オプションまたは net.ipv4.conf.interface.send_redirects オプションのいずれか一方が有効になっていると、ICMP リダイレクトの送信はアクティブなままとなります。net.ipv4.conf.interface.send_redirects オプションは、すべての インターフェイス0 に設定されていることを確認してください。新しいインターフェイスを追加するたびに ICMP リクエストの送信を自動的に無効にするには、次のコマンドを入力します。
~]# /sbin/sysctl -w net.ipv4.conf.default.send_redirects=0
IPv4 リダイレクトパケットの送信を無効にするディレクティブは 1 つのみです。このようなIPv4とIPv6の違いを生んだIPv6 Node Requirementsについては、RFC4294を参照してください。
注記
これらの設定を再起動しても保持するには、/etc/sysctl.conf ファイルを変更します。たとえば、すべてのインターフェイスですべての IPv4 ICMP リダイレクトパケットの受け入れを無効にするには、 root ユーザーとして実行しているエディターで /etc/sysctl.conf ファイルを開き、以下の行を追加します:
net.ipv4.conf.all.send_redirects=0
詳しくは、sysctlの man ページであるsysctl(8)を参照してください。ソースベースのルーティングとそのバリアントに関連するインターネットオプションの説明については、RFC791 を参照してください。
警告
イーサネットネットワークは、ARP または MAC アドレスのスプーフィング、承認されていない DHCP サーバー、IPv6 ルーターまたはネイバーアドバタイズメントなど、トラフィックをリダイレクトする方法をさらに提供します。また、ユニキャストトラフィックがブロードキャストされることもあり、情報漏えいの原因となります。これらの弱点は、ネットワークオペレーターが実装する具体的な対策によってのみ対処することができます。ホストベースの対策は十分に効果的ではありません。

4.4.3.1. 逆方向パス転送

逆方向パス転送は、あるインターフェースを介して到達したパケットが、別のインターフェイスを介して出ることを防ぐために使用されます。発信経路と着信経路が異なる場合、非対称ルーティングと呼ばれることがあります。ルーターは多くの場合、この方法でパケットをルーティングしますが、ほとんどのホストはこれを行う必要はありません。ただし、あるリンクでトラフィックを送信し、別のリンクで別のサービスプロバイダーからトラフィックを受信するようなアプリケーションは例外となります。たとえば、専用回線と xDSL の組み合わせや、衛星回線と 3G モデムの併用などです。このようなシナリオに該当する場合は、受信インターフェースで逆方向パス転送をオフにする必要があります。つまり、ユーザーがローカルサブネットから IP アドレスをスプーフィングすることを防ぎ、DDoS 攻撃の機会を減らすことから、必要であることが分かっている場合を除き、有効にしておくことが最適と言えます。
注記
Red Hat Enterprise Linux 7 はデフォルトで Strict Reverse Path Forwarding を使用します。これは、RFC 3704, Ingress Filtering for Multihomed Networks の厳密な逆方向パスに関する推奨事項に準拠します。
警告
転送が有効な場合、逆方向パス転送は、送信元アドレス検証のための他の手段 (たとえば iptables ルールなど) がある場合にのみ、無効化する必要があります。
rp_filter
逆方向パス転送は、rp_filterディレクティブによって有効になります。sysctl ユーティリティーを使用すると、実行中のシステムに変更を加えることができます。また、/etc/sysctl.conf ファイルに行を追加することで、永続的な変更を行うことができます。rp_filter オプションは、カーネルに 3 つのモードのうち 1 つを選択するよう指示するために使用されます。
一時的なグローバルな変更を行うには、root で以下のコマンドを入力します。
sysctl -w  net.ipv4.conf.default.rp_filter=integer
sysctl -w net.ipv4.conf.all.rp_filter=integer
ここで、integer は、以下のいずれかになります。
  • 0 — ソースの検証はありません。
  • 1 — RFC 3704 で定義された厳密なモード。
  • 2 — RFC 3704 で定義された緩慢なモード。
この設定は、
sysctl -w net.ipv4.conf.interface.rp_filter=integer
のように、net.ipv4.conf.interface.rp_filterコマンドを使用して、ネットワークインターフェイスごとに上書きできます。
注記
これらの設定を再起動しても保持するには、/etc/sysctl.conf ファイルを変更します。たとえば、すべてのインターフェイスのモードを変更するには、root ユーザーとして実行しているエディターで /etc/sysctl.conf ファイルを開き、以下の行を追加します:
net.ipv4.conf.all.rp_filter=2
IPv6_rpfilter
IPv6プロトコルの場合、firewalldデーモンはデフォルトで逆方向パス転送を適用します。設定は、/etc/firewalld/firewalld.conf ファイルで確認することができます。IPv6_rpfilter オプションを設定することにより、 firewalld の動作を変更することができます。
逆方向パス転送のカスタム設定が必要な場合は、
ip6tables -t raw -I PREROUTING -m rpfilter --invert -j DROP
のように、ip6tables コマンドを使用することで、firewalld デーモン なしで これを実行することができます。このルールは、すべてのトラフィックに適用されるように、raw/PREROUTING チェーンの先頭付近に挿入する必要があり、特に、ステートフル一致ルールの前に挿入する必要があります。iptables サービスと ip6tables サービスの詳細については、iptables を使用した IP セットの設定および制御」 を参照してください。
パケット転送の有効化
システム外部から到着したパケットを別の外部ホストに転送できるようにするには、カーネルで IP フォワーディングを有効にする必要があります。root でログインし、/etc/sysctl.conf ファイルの net.ipv4.ip_forward = 0 を読み取る行を以下のように変更します。
net.ipv4.ip_forward = 1
/etc/sysctl.conf ファイルから変更を読み込むには、以下のコマンドを入力します。
/sbin/sysctl -p
IP 転送が有効になっているのを確認するには、root で以下のコマンドを実行します。
/sbin/sysctl net.ipv4.ip_forward
上記のコマンドが 1 を返すと、IP 転送が有効になります。0 を返す場合は、以下のコマンドを使用して手動でオンにすることができます。
/sbin/sysctl -w net.ipv4.ip_forward=1