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

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

 iproute2で「syslogd以外接続禁止」を実現する

 それでは、iproute2とLIDSを組み合わせた例を実際に適用してみましょう。図6のようなネットワークを考えてみます。

図6 iproute2とLIDSにより、syslogd以外の接続を禁止する

 今回は引き続きVMwareを用いてテストを行いたいと思いますので、図6の環境をそれぞれホストOS、ゲストOSとして割り当てたものを図7に示します。図7ではIPアドレスが入っていますが、これはあくまでも筆者の環境の設定ですので、VMwareイメージをダウンロードしてテストされる際には別途、対応するIPアドレスに変換してください。

図7 今回設定する環境

●ホストOSの設定

 今回はホストOSをルータとして使用するため、ホストOSの設定を一部修正する必要があります。

a)ホストOSがLinuxの場合

 i)rootユーザーで
  # echo "1" > /proc/sys/net/ipv4/ip_forward
 とします。
 ii)rootユーザーでiptablesにより図8のようなipマスカレードの設定をします。

/sbin/iptables -F
/sbin/iptables -F FORWARD
/sbin/iptables -A INPUT -i vmnet1 -s 192.168.164.0/24 -d 0/0 -j ACCEPT
/sbin/iptables -A FORWARD -i vmnet1 -o ath0 -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o ath0 -s 192.168.164.0/24 -j MASQUERADE
図8 ipマスカレードの設定

 実際には、ホストOSを再起動するたびにi)、ii)で設定した値は変わってしまいますので、rc.localなどのファイルでi)、ii)のコマンドが実行されるようにしておきます。

b)ホストOSがWindowsの場合
 Windows系でipルーティングを有効にするには、サーバ系OS以外ではレジストリを修正する必要があります。

【@IT:IPルーティングを有効にする方法(レジストリ設定編)】
http://www.atmarkit.co.jp/fwin2k/win2ktips/450ipforw/ipforw.html

 Windows環境でレジストリを修正する際には、あくまでご自分のリスクで設定を行ってください。また、以降の説明では基本的にホストOSの説明はLinuxを前提に行っていますので、ホストOSがWindowsの場合には、適宜Windows用の設定に読み替えてください。

●ゲストOS1の設定

 ゲストOS1では、

  1. デフォルトゲートウェイの設定
  2. LIDSでsyslogdにマークを付ける設定
  3. iptablesでデフォルトのマーク値を設定
  4. iproute2でマーク値によりsyslogサーバへのルーティングを行う設定

を行います。

1.デフォルトゲートウェイの設定

# /sbin/route add -net 0.0.0.0 gw 192.168.164.2

として、デフォルトゲートウェイとして192.168.164.2を指定します。

【注】
iproute2でfwmarkを使ってルーティングを制御する場合には、デフォルトゲートウェイが設定されていないとfwmarkのテーブルを見に行く前に「Network Unreachable」として処理してしまうようですので注意が必要です。

2.LIDSでsyslogd/klogdにマークをつける設定

 syslogd/klogdにLIDSでマークを付けることにより、syslogd/klogdの子プロセスが生成したソケットには、すべてマーク値(この例では20番を指定)を付けることができます。

# /sbin/lidsconf -A -s /sbin/syslogd -o LIDS_SOCKET_NF_MARK 20 -j DISABLE
# /sbin/lidsconf -A -s /sbin/klogd -o LIDS_SOCKET_NF_MARK 20 -j DISABLE

3.iptablesでデフォルトのマーク値を設定

 LIDSのNF_MARKとiptables/iproute2でのマーク値を連動させるためには、iptablesでデフォルト(特にLIDSなどでマーク値を指定しなかった場合に、ソケットを生成する際に付与されるもの)のマーク値を指定する必要があります。これには、前回で説明した「mangle」テーブルを用います。下記の例では、デフォルトのマーク値を「10」にしています。

# /sbin/iptables -t mangle -P OUTPUT ACCEPT
# /sbin/iptables -t mangle -A OUTPUT -j MARK --set-mark 10

4.iproute2でマーク値によりsyslogサーバへのルーティングを行う設定

 iproute2で以下のようなルーティングを追加します。

# /sbin/ip rule add fwmark 20 table 20
# /sbin/ip route add default via 192.168.164.1 table 20

 これら1〜4の手順を行うことにより、LIDSが導入されているシステム上のsyslogd(および、その子プロセス)のみがsyslogサーバへ接続できますが、そのほかのプロセスはsyslogサーバに接続できない(pingも通らない)という環境を作成することができます。

●ゲストOS2(syslogサーバ)の設定

 ゲストOS2ではsyslogdを、ネットワーク経由で飛ばされてきたログも取り込むように、起動時のオプションで“-r”を付けるだけです。

2/3

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


Security&Trust記事一覧


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間