第12回 NETMARKとiproute2でトラフィックを完全掌握

面 和毅
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ
2006/11/21

 前回では例を挙げて「NETMARK」を説明しました。今回は、NETMARKと「iptables/iproute2」を組み合わせて、より面白い環境を構築してみましょう。

 今回も説明のためにVMwareイメージを用いて解説を行いますので、実際に手元で設定ファイルを確認したい場合には、以下のURLから今回のVMwareイメージを含むファイル「atmarkit_part12.tar.gz」をダウンロードしてください。

【atmarkIT VMware Images】
http://www.selinux.gr.jp/LIDS-JP/atmarkit.html

 ルーティングをコントロールするiproute2

 iproute2は、パケットのルーティングテーブルを操作するパッケージです。Linuxに通常入っているrouteコマンドやifconfigコマンドよりも複雑な条件を使ってルーティングテーブルを作成することができます。例えば、tcコマンドを組み合わせてトラフィック制御を行ったり、前回説明したiptablesをNETMARKと組み合わせてMARK値によるルーティングを行うことができます。図1はiptablesと組み合わせた場合です。

図1 iptablesとiproute2を組み合わせたルーティングの例

 iproute2は、DebianやRed Hat、Fedora Coreなどで「iproute」パッケージとして提供されています。iproute2に関しての詳しい説明は、下記のリンクを参考にするとよいでしょう。

【Linux Advanced Routing & Traffic Control HOWTO iproute2入門】
http://www.linux.or.jp/JF/JFdocs/Adv-Routing-HOWTO/lartc.iproute2.html
【@IT:iptablesによる負荷分散とDoS対策(1/4)】
http://www.atmarkit.co.jp/flinux/rensai/iptables03/iptables03a.html

 iproute2でMARK値を使う場合にはipコマンドを用います。ipコマンドのオプションrule、routeを用い、

# ip rule add fwmark [MARK値] table [テーブル値]

にてMARK値が設定されていた場合に参照するルーティングテーブルを指定します。さらに、

# ip route add [ルーティング] table [テーブル値]

とし、そのテーブル値が参照先として指定された場合に参照するルーティングを設定します。

 iptables/iproute2とLIDSを組み合わせるメリット

 iptablesとiproute2の組み合わせはそれだけでさまざまなコントロールが可能ですが、LIDSを組み合わせることによりさらに細かい条件での設定ができます。例えば以下のようなメリットがあります。

  • プログラムごとのルーティングの変更が可能
  • ローカル/リモートユーザーでのルーティングの変更が可能
  • 通信を行うプログラムの詐称防止が可能

●プログラムごとのルーティングの変更

 例えば、あるマシンからWeb(ポート番号80番)にアクセスする際には常にプロキシを通すようにするとしましょう。図2のような構成となります。図2の場合には、あて先ポート番号が80番のものをすべてプロキシに飛ばすようにしているため、その通信を行うプログラムの方を判別しません。そのため、FirefoxでWebサイトを見に行った場合にも(あるいはtelnetプログラムでポート80番を直接たたいても)、Debianのaptでパッケージをアップデートした場合にも、すべて同じプロキシを通して通信を行います。

図2 LIDSを利用しない場合、すべてのプログラムで共通のルーティングとなる

 しかし、LIDSを組み合わせることにより、さらに細かくプログラム単位でルーティングを個別に行うことが可能になります。例えば、図3のようにFirefoxでWebサイトを見に行った場合にはプロキシA、Debianのaptでパッケージをアップデートする場合にはプロキシBといった具合に、同じポート番号80番あての通信でも、通信を行うプログラム単位でルーティングを分けて負荷分散を行うことができます。

図3 LIDSとiproute2によりプログラム単位のルーティングが指定できる

●ローカル/リモートユーザーでのルーティングの変更

 LIDSでのプログラムのMARK値はすべて親プロセスから継承するという特徴を用いて、前回説明したようにSSH経由でログインしたユーザーに対してiptablesと組み合わせて送信できるパケットをコントロールしたり、iproute2を用いて通信のルーティングを変更するということもできます。

図4 LIDSによりローカルユーザーとリモートユーザーのルーティングを変更する

●通信を行うプログラムの詐称防止

 また、LIDSとiproute2を組み合わせることにより、通信を行うプログラムの詐称を防止することができます。例えば、図5のようにクライアントPC上にLIDSを導入し、Thunderbirdが生成するソケットのみがメールサーバに接続できるようなルーティングを持つというように設定することができます。クライアントPC上でThunderbird以外の、例えばtelnetクライアントを用いてPOPサーバに接続を試みた場合には、メールサーバへのルーティングがありませんので接続することができません。これにより、例えばウイルスに感染して不正なプログラム上からメールをダウンロードするような行為を防ぐことができます。

図5 メールサーバへのtelnet接続を禁止する

1/3

Index
NETMARKとiproute2でトラフィックを完全掌握
Page1
ルーティングをコントロールするiproute2
iptables/iproute2とLIDSを組み合わせるメリット
  Page2
iproute2で「syslogd以外接続禁止」を実現する
  Page3
syslogdの動作を確認


Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間