11.26. TTLターゲット

Caution

このターゲットを使用するには http://www.netfilter.org/ から patch-o-matic を手に入れて、そのツリーの base ディレクトリにある TTL パッチを適用する必要がある。

TTL ターゲットは IP ヘッダの Time To Live フィールドを変更するのに用いる。便利な活用法としては、すべての送出パケットの Time To Live 値の統一がある。これを行うのは、あなたの ISP が意地悪で、ひとつのインターネット接続には 1台しかマシンをつながせたがらず、しかも、それを強制してくる場合だ。 TTL 値を揃えれば、多少ではあるが、うまい具合に検知を邪魔できる。その際には、全送出パケットの TTL を、 Linux カーネルの標準である 64 など、しかるべき値に統一してやればいい。

Linux のデフォルト値を変更する方法について詳しく知りたければ、付録 その他の資料とリンク にある ip-sysctl.txt を読むといいだろう。

TTL ターゲットは mangle テーブルでのみ有効で、それ以外では使えない。採れるオプションは、執筆時点では 3つ。下の表で述べているのがそのすべてだ。

Table 11-20. TTLターゲットオプション

オプション--ttl-set
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64
説明--ttl-set オプションは、 TTL ターゲットに対して、当該のパケットに設定すべき TTL 値を指示する。妥当な値は 64 前後。これなら長からず短からずといったところだ。ネットワークに悪影響を与えるので、あまり高い値を設定してはいけない。また、この値を高くすることは、モラルを犯す面もある。そうしたパケットは設定のいい加減なふたつのルータの間を行ったり来たりするからで、 TTL が高ければ高いほど、多くの帯域幅が無用に食いつぶされる。このターゲットは、関わりを持つクライアントとの距離を制限するという使い方が想定できる。あまり遠くにクライアントを持ちたくない典型といえば DNS サーバが挙げられる。
オプション--ttl-dec
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 1
説明--ttl-dec オプションは、 TTL ターゲットに対して、Time To Live の値を --ttl-dec オプションに指定した分だけ減らすよう指示する。つまり、入ってくるパケットの TTL53 である時、 --ttl-dec 3 を指定していると、そのパケットはこちらのホストを 49 という TTL 値をまとって出ていく。なぜそうなるのかといえば、ネットワーキングコードが常に自動的に TTL1 ずつ減らすからで、結果として 4ステップ減ることととなり、パケットの TTL53 から 49 へと変わるのだ。このオプションは、例えば、どこまで離れた人々にサーバのサービスを提供するか制限したい時に利用される。例えば、ユーザは一番近くにある DNS を使用するのが当たり前なので、こちらの DNS サーバから出ていこうとするすべてのパケットをマッチさせて、数ステップ分減少させるという使い方ができる。もちろん、この用途なら --set-ttl を使うほうがベターかもしれない。
オプション--ttl-inc
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 1
説明--ttl-inc オプションは、 TTL ターゲットに対して、Time To Live の値を --ttl-inc オプションで指定した分だけ増加させるよう指示する。つまり、 --ttl-inc オプションに指定した数だけ TTL を増やす効果が得られるわけで、もし --ttl-inc 4 を指定すれば、TTL 53 で入ってきたパケットはこのホストを TTL 56 で離脱する。 --ttl-dec オプションと同じことが起こっているのはお気づきだろう。ネットワークコードがいつものように TTL を自動的にひとつ減らしているのだ。とりわけ面白いのは、ファイヤーウォールを trace-route に対して少しだけステルスにできることだ。入ってくるパケットの TTL をもれなく 1つ上げてやることによって、ファイヤーウォールを trace-route から効果的に隠すことができる。trace-route は両刃の剣だ。コネクションの問題点やその発生箇所などの有効な情報を与えてくれる一方、ハッカー/クラッカーの手でそれがあなたに向けられれば、こちらの上流に関するおいしい情報を与えてしまうのだ。典型的な用例が Ttl-inc.txt スクリプトにあるので見ていただきたい。

Note

Linux カーネル 2.3, 2.4, 2.5, 2.6 で機能する。