最近、複数のモジュールがそれぞれパケットを転送しているサイトに遭遇した。最悪の場合、約2秒に1回のペースだった。 「大したことない」と思われるかもしれませんが、1日には86,400秒あります。つまり、1日でそのモジュールは「安全な」サーバーからネットワーク外へ63メガバイト(86,400 ÷ 2 × 1472)¹のデータを送出したり、あるいは63メガバイトのハッキングツールを安全なネットワーク内に転送したりする可能性があるのです。
ただし、ほとんどの場合、パケットの転送はセキュリティ侵害ではなく設定上の問題を示しています。例えば、あるモジュールが2つのIPインターフェースを持つ場合を考えてみましょう。
enet1 10.1.1.1 255.255.0.0
enet2 192.168.1.1 255.255.255.0
デフォルトルーターが192.168.1.254であると仮定しましょう
最初のネットワーク上のすべてのホストは、サブネットマスク255.255.0.0で10.1.X.Y形式のIPアドレスを持つべきです。しかし、IPアドレス10.1.1.17のserver_17が、より多くのビット数(例えば255.255.255.0)のサブネットマスクを使用するように設定されている場合はどうなるでしょうか? それでも10.1.1.X形式のIPアドレスを持つホストとは通信できるため、問題に気付かない可能性があります。しかし、IPブロードキャストパケットを送信する際、そのIPパケットの宛先を10.1.255.255ではなく10.1.1.255に設定してしまいます。 このパケットをカプセル化するイーサネットフレームは宛先としてイーサネットブロードキャストアドレスを持つため、モジュールのイーサネットドライバがフレームを読み取り、パケットをIPドライバに渡します。IPドライバはIPアドレスを確認し、宛先がenet1またはenet2ではなく、ブロードキャストアドレスである10.1.255.255でもないことを判断します。 転送が有効な場合、IPドライバは10.1.1.255のIPアドレスを持つホストへパケットを転送しようと試みます。モジュールのARPキャッシュに10.1.1.255のエントリがない場合、ARPリクエストを送信します。 応答が返ってきた場合(または既にエントリが存在する場合)、パケットは10.1.1.255へ転送されます。応答が得られない場合、フレームは破棄されます。モジュールはまた、ホストのIPアドレスが「ルータ」であることを示すICMPルーティングリダイレクトメッセージを送信する場合があります。
サーバー_17がより少ないビット数のサブネットマスク(例えば255.0.0.0)を使用した場合、どうなるでしょうか?この場合、使用するIPブロードキャストアドレスは10.255.255.255となります。 IPドライバは、このアドレスが自身が接続しているネットワーク上のものではないと判断し、パケットをデフォルトルーター192.168.1.254に転送します。これによりモジュールのリソースが無駄になるだけでなく、ルーターのリソースも浪費されます。同じブロードキャストドメイン内に2つのサブネットが存在する場合にも、同様の現象が発生します。
最後に、セキュリティ問題について再考しましょう。セキュアなサーバーSのIPアドレスが10.1.1.100で、正しいサブネットマスクが255.255.0.0であると仮定します。 10.1.0.0ネットワークにはルーターが存在しないため、産業スパイであるイブがサーバー_Sからインターネット上の雇用主である5.6.7.8へデータを送信するにはどうすればよいでしょうか?簡単です。サーバー_Sにホストルートを設定するだけで、5.6.7.8宛てのパケットはすべて10.1.1.1へ送信されます。これだけで十分です。 モジュールはパケットをデフォルトルーターに転送し、デフォルトルーターでIPアドレスフィルタリングが行われていない限り、パケットは次のルーターへ転送され、5.6.7.8に到達するまでこの処理が続く。5.6.7.8が10.1.1.100に返信する方法はないが、イブにとっては問題ない。データが雇用主に届いていることを確認する別の手段を持っているからだ。
モジュールがパケットを転送しているか、少なくともパケット転送用に設定されているかどうかの確認方法は?「
netstat -statistics必要なものはすべてお見せします。
netstat -statistics . . .ip: . . . 1 ipforwarding (ON) . . . 3117 ipForwDatagrams . . . |
モジュールがパケットを転送するように設定されている場合、
ipforwarding 変数は1となり、ラベルには(ON)が付加されます。モジュールが実際にパケットを転送している場合、 ipForwDatagrams カウンタはインクリメントされます。ARPキャッシュエントリが存在しないため、パケットが実際に送信されなくてもカウンタはインクリメントされることに注意してください。
IP転送を無効にするには、次のコマンドを実行してください:
>system>stcp>command_library>IP_forwarding offはい、IPは大文字です。この時点で、`netstat -statistics` コマンドを実行すると、
ipforwarding 変数の値を2に設定し、ラベルの末尾に(OFF)を付加します。なお、 ipForwDatagrams 変数はリセットされません。依然として正の値を表示します。残念ながら、その値をクリアする方法はありません。
netstat -statistics . . .ip: . . . 2 ipforwarding (OFF) . . . 3117 ipForwDatagrams . . . |
最後に注意点として、転送機能が有効な状態でこれを無効にすると、Eve以外の誰かが実際にこのモジュールをルーターとして使用している場合、その動作を中断させてしまいます。個人的にはこれは悪いことではないと考えます。STCPはルーターとして設計されたものではありませんが、苦情が出る可能性はあると覚悟しておいてください。
————-
注記
1 1472は 、イーサネット経由で送信されるICMPエコーパケットに格納できる最大バイト数です。
