2006年5月アーカイブ

Perlのオプション

|

-e 'コマンド'

-Mモジュール モジュールを使う
$ perl -MCPAN -e shell

-c hoge.pl 構文をチェックするだけで実行しない
-T 汚染チェック 5.004以降は#!行では使えなくなった

■デバッグモード
http://fleur.hio.jp/perldoc/mix/pod/perldebug.html

-w 警告を出力する。まず最初にためす。

-d hoge.pl デバッグモード

nで進み、以降、[Enter]で進み続ける
Nでもどる。
qで終了する。

iptableのルールを削除、復旧させる

|

■Chainがまるごと吹っ飛んでしまった場合。

# iptables -F RH-Firewall-1-INPUT
-Fオプションは"Flush Chain"であり、チェイン内のルールをすべて吹っ飛ばす設定です。

# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT) num target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references) num target prot opt source destination

でも、大丈夫。
# iptables-restore
の出番です。
# iptables-restore < iptables
# iptables -L RH-Firewall-1-INPUT -n --line-number
Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source   destination
1    ACCEPT     all  --  0.0.0.0/0  0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0  0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0 0.0.0.0/0 icmp type 255
4    ACCEPT     esp  --  0.0.0.0/0 0.0.0.0/0
5    ACCEPT     ah   --  0.0.0.0/0  0.0.0.0/0
6    ACCEPT     udp  --  0.0.0.0/0  224.0.0.251 udp dpt:5353
7    ACCEPT     udp  --  0.0.0.0/0  0.0.0.0/0   udp dpt:631
8    ACCEPT     all  --  0.0.0.0/0   0.0.0.0/0  state RELATED,ESTABLISHED
9    ACCEPT     tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:53
10   ACCEPT     tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:22
11   ACCEPT     tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:25
12   ACCEPT     tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:80
13   ACCEPT     tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:443
14   REJECT     all  --  0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
■ルールを一本間違えて消してしまった場合。 ※ルールを一本だけ消すには、-Dオプションを使います。
# iptables -D RH-Firewall-1-INPUT 12
これも
# iptables-restore < /etc/sysconfig/iptables
で元通りです。

iptableのルールを追加する

|
■まずは設定を見る。
# iptables -L RH-Firewall-1-INPUT -n --line-number
Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source    destination
1    ACCEPT     all  --  0.0.0.0/0 0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0 0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0 0.0.0.0/0 icmp type 255
4    ACCEPT     esp  --  0.0.0.0/0 0.0.0.0/0
5    ACCEPT     ah   --  0.0.0.0/0 0.0.0.0/0
6    ACCEPT     udp  --  0.0.0.0/0 224.0.0.251         udp dpt:5353
7    ACCEPT     udp  --  0.0.0.0/0 0.0.0.0/0 udp dpt:631
8    ACCEPT     all  --  0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9    ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:53
10   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
11   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
12   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
13   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
14   REJECT     all  --  0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
■RH-Firewall-1-INPUTの9と10の間にUDP53はACCEPTとしてやりたい。
# iptables -I RH-Firewall-1-INPUT 9 -p udp --dport 53 -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
※ちなみに順番を無視して設定を後ろに追加するなら、-Iオプションでな、-Aオプションでよいです。
# iptables -A RH-Firewall-1-INPUT -p udp ...
 しかしRH-Firewall-1-INPUTでは一番最後の行はall Rejectになっているので、途中の行に足さなければなりません。 ※また、すでにある行を編集するには、
# iptables -R RH-Firewall-1-INPUT 9 ...
とします。 そして、また設定をみてみよう。
# iptables -L RH-Firewall-1-INPUT -n --line-number
Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source    destination
1    ACCEPT     all  --  0.0.0.0/0 0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0 0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0 0.0.0.0/0 icmp type 255
4    ACCEPT     esp  --  0.0.0.0/0 0.0.0.0/0
5    ACCEPT     ah   --  0.0.0.0/0 0.0.0.0/0
6    ACCEPT     udp  --  0.0.0.0/0 224.0.0.251         udp dpt:5353
7    ACCEPT     udp  --  0.0.0.0/0 0.0.0.0/0 udp dpt:631
8    ACCEPT     all  --  0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9    ACCEPT     udp  --  0.0.0.0/0 0.0.0.0/0 udp dpt:53
10   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:53
11   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
12   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
13   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
14   ACCEPT     tcp  --  0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
15   REJECT     all  --  0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
しかし、設定ファイルのほうはまだ反映されていない。
# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
■設定ファイルに保存する。
# iptables-save > /etc/sysconfig/iptables
となります。

iptablesのChainとTarget

|

■"Chain"とはルールをグループ化したものです。

■最初から組み込んであるChain
INPUT・・・interfaceから、ローカルプロセスにパケットが流れるときに適用される
OUTPUT・・・ローカルプロセスから、interfaceにパケットが流れるときに適用される
FORWARD・・・interfaceから、パケットを転送するときに適用される
の3種類があります。
そのほか、IPマスカレードに使う"POSTROUTING"があります。

■ユーザー定義でもChainは作れます。 RedHat系のOSの場合、インストールのときにファイアウォールを構成すると、 RH-Firewall-1-INPUT というChainが作られます。 そして、組み込みのINPUTとFORWARDのChainに、TargetとしてRH-Firewall-1-INPUTを適用しています。 そのほかに自分でchainを新しく作るには
# iptables -N mychain
とします。


■"Target"とはルールにマッチしたときのファイアウォールの動作です。
基本的にはACCEPTとREJECT(か、DROP)を使います。

ACCEPT   パケットを通過させる
DROP   パケットを破棄し、相手にはなにも返答しない
REJECT  パケットを破棄し、相手にはICMPを使って破棄したことを通知する
REDIRECT port   パケットを指定したポートにリダイレクトする
RETURN  チェイン内のルール評価を終了させる
そのほか、POSTROUTINGチェインで使う、"SNAT"や"MASQUERADE"があります。


■RH-Firewall-1-INPUTがある場合
RH-Firewall-1-INPUTがある場合は、
あまりINPUT、OUTPUT、FORWARDに手を加えると混乱の元になるので、

・デフォルトの設定を活用して、Chain"RH-Firewall-1-INPUT"にルールを足し引きする
 CUIの# setupコマンドからはいる「ファイアウォールの設定」から設定すると自然とこうなります。

# iptables -F RH-Firewall-1-INPUT
# iptables -X RH-Firewall-1-INPUT
とやって、RH-Firewall-1-INPUTを削除してから新しいチェインやルールを足していく

という方針がいいでしょう。

iptablesの設定を確認する

|
# iptables -L -n --line-numbers
を使います。 -nオプションをつけると名前解決せずにアドレスで表示します。 --line-numbersオプションをつけると、ルール番号を表示してくれます。

# iptables -L -n --line-numbers
# INPUTのChain
# interfaceからローカルプロセスにパケットが流れるときに適用される
Chain INPUT (policy ACCEPT)
num  target            prot opt source  destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0 0.0.0.0/0

# ForwardのChain # interfaceから渡されたパケットを転送するときに適用されます Chain FORWARD (policy ACCEPT) num target prot opt source  destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0

# OUTPUTのChain # ローカルプロセスからinterfaceにパケットを送信するときに適用されます。 # 下記の場合、とくに何も設定されていません。 Chain OUTPUT (policy ACCEPT) num target prot opt source destination

# Chain RH-Firewall-1-INPUT # RedHatが最初にこしらえてくれるChain # 名前"RH-Firewall-1-INPUT"のとおり、 # INPUT時に適用することを想定してあります。 # 一通り、サービスを提供するためのACCEPTを設定したあと、 # 一番最後の行の"REJECT"で、それ以外を撥ねてます。 Chain RH-Firewall-1-INPUT (2 references) num target prot opt source  destination 1 ACCEPT all -- 0.0.0.0/0  0.0.0.0/0 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353 6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631 7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21 11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25 12 REJECT all -- 0.0.0.0/0 0.0.0.0/0  reject-with icmp-host-prohibited

■設定ファイルで確認したい場合。 RedHatの場合は ○/etc/sysconfig/iptables   ルールやチェインの設定が書かれている ○/etc/sysconfig/iptables-config   なんかよくわからない大人の設定が書いてある。
IPTABLES_MODULES=""
IPTABLES_MODULES_UNLOAD="yes"
IPTABLES_SAVE_ON_STOP="no"
IPTABLES_SAVE_ON_RESTART="no"
IPTABLES_SAVE_COUNTER="no"
IPTABLES_STATUS_NUMERIC="yes"

○Debianの場合はさらにたちが悪い。 まず、なにもない。

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT) target prot opt source destination

Chain OUTPUT (policy ACCEPT) target prot opt source destination

○しょうがないから起動スクリプトを作った。

# cd /usr/share/doc/iptables/examples/
# zcat oldinitdscript.gz > /etc/init.d/iptables
# cd /etc/init.d
# chmod 755 iptables
# update-rc.d iptables defaults
 Adding system startup for /etc/init.d/iptables ...
   /etc/rc0.d/K20iptables -> ../init.d/iptables
   /etc/rc1.d/K20iptables -> ../init.d/iptables
   /etc/rc6.d/K20iptables -> ../init.d/iptables
   /etc/rc2.d/S20iptables -> ../init.d/iptables
   /etc/rc3.d/S20iptables -> ../init.d/iptables
   /etc/rc4.d/S20iptables -> ../init.d/iptables
   /etc/rc5.d/S20iptables -> ../init.d/iptables
# /etc/init.d/iptables start
Aborting iptables load: unknown ruleset, "active".

/etc/init.d/iptables options: start|restart|reload|force-reload load the "active" ruleset save save the current ruleset load load a ruleset stop load the "inactive" ruleset clear remove all rules and user-defined chains, set default policy to ACCEPT halt remove all rules and user-defined chains, set default policy to DROP

Saved ruleset locations: /var/lib/iptables/ and /var/lib/ip6tables/

Please read: /etc/init.d/iptables

どうやら設定ファイルは/var/lib/iptables/の中にあるらしい。 しかし、そんなとこにはなにもなかった。 しょうがないので、自分でiptablesというディレクトリを作って、iptablesというファイルをおいた。 中身はRedHatの丸写しだ。
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
のだが、動かなかった。 (以下、続く)

(続き)
というのは、上記の方法でdebianの/etc/init.d/iptablesをつくると、
/var/lib/iptables/にあるactiveとinactiveのファイルしかよみこまなくなる。

そこで、まずはこのデフォルトの何も書いていない奴を

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT) target prot opt source destination

Chain OUTPUT (policy ACCEPT) target prot opt source destination

inactiveに登録しよう。

最初にまずは/var/lib/iptables/active と inactive をtouchコマンドでつくっておく
# cd /var/lib/iptables
# touch active
# touch inactive
そしたら現在のルールをinactiveに登録する
# /etc/init.d/iptables save inactive

avtiveのほうには、RedHatなどで動いている生きのいいフィルターを
そのままactiveに書き写して、手直しすればよいだろう。

そして、
# /etc/init.d/iptables start
# /etc/init.d/iptables stop
が正しく動作するようになる。

Exchange ServerでSMART_HOSTの設定をする

|

SMTP仮想サーバーのプロパティ
 「配信」タブ
  「詳細設定」ボタンに設定箇所があります。
smarthost.JPG


■ルーティンググループのSMTPコネクタをつかう方法もあります。

【全般】タブ
ルーティンググループの中にスマートホストにしたいやつがいるなら、ブリッジヘッドサーバーをその人にしてあげましょう。
smarthost2.JPG

【アドレススペース】タブ
オープンリレーサーバーの設定にしないように気をつけてください。
smarthost3.JPG

■Exchange 2000 Server でストア データベースの最大キャッシュ サイズを変更する方法
http://support.microsoft.com/?kbid=266768
 こちらを参照して、最大キャッシュサイズ(6400)25.6MB、最小(640)2.56MBにしてみたのですが、あまりかわりありませんでした。

 というのは普段のテスト環境ではstore.exeの使用メモリ量は12MBくらいだったからです。
むしろIISのメモリ使用量を抑える方法はないのか・・・・

パブリックフォルダの複製

|

同じパブリックフォルダツリー内に、複数のExchangeサーバーのパブリックストアが関連付けられている場合、互いのパブリックストア間でフォルダの複製を行うことができます。

パブリックフォルダツリーのプロパティを表示し、「レプリケーション」タブで複製先のExchangeサーバーのパブリックストアを追加します。
public_replica_1.JPG

パブリックフォルダツリーの上の階層のほうから「設定の適用」をすると、その下層のパブリックフォルダにも複製設定が継承されます。
public_replica_2.JPG
public_replica_3.JPG

複製がうまくいかない場合はこちらを参照
■Exchange 2000 Server および Exchange Server 2003 におけるパブリック フォルダのレプリケーションの問題をトラブルシューティングする方法
http://support.microsoft.com/kb/842273/ja


複製のしくみは単なるSMTPのようです。

たとえば、exchange_1(マスタ)とexchange_2(レプリカ)でパブリックフォルダを複製する場合、
exchange_1から、"exchange_2-IS@example.local"というメールアドレスへ複製メッセージが発信され、
exchange_2からは、"exchange_1-IS@example.local"とうメールアドレスへ返されます。
※メッセージのやりとりの内容はよくわかりません。

これらのアドレスは上記URLにも書いてありますが、ADSIEditで、
[Configuration Container [computername.contoso.com]]、
 [CN=Configuration,DC=contoso,DC=com]、
  [CN=Services]、
   [CN=Microsoft Exchange]、
    [CN=OrganizationName]、
     [CN=Administrative Groups]、
      [CN=AdministrativeGroupName]、
       [CN=Servers]、
        [CN=ExchangeServerName]、
         [CN=InformationStore]
          [CN=最初のストレージ グループ] 
           [CN=パブリック フォルダ ストア (EXCHANGESERVERNAME)]
            の[プロパティ] [proxyAddresses]
で設定されています。

複製がうまくいかない場合、片元のExchangeサーバーにOutlookで接続し、 複製先のこのアドレスにメールを出してみましょう。 うまく届くようなら、このようなエラーメッセージがすぐに返って来ます。

このメールは、受信者全員または一部に届きませんでした。

件名: test 送信日時: 2006/05/29 19:01

以下の受信者にメールが配信できませんでした:

パブリック フォルダ ストア (EXCHANGE_1) 2006/05/29 19:01 このメッセージは受信者側の電子メール システムに到達しました。ただし、メッセージの配信は拒否されました。配信できない状態が続く場合は、システム管理者に連絡してください。

というか、こういう場合、となりのExchange Serverにメールボックスを持っている人に普通にメールが届かなくなっていると思います。

つまり、ルーティンググループ内でのSMTPルーティングが正しく行われていないわけです。

各Exchange Serverで、smtp仮想サーバーでスマートホストを設定しており、さらにそのスマートホストがただのメールの踏み台だったりするとルーティンググループ内でのルーティングがうまくいかなくなります。

パブリック フォルダ ツリーの種類

|

【MAPIクライアント】
public_folder_tree.JPG


Outlook などのクライアントからアクセスできる。

つまり、このパブリックフォルダツリーと関連付けられているパブリックストアは、
メールボックスストアの「規定のパブリックストア」に指定することができる。

アプリケーション、Web ブラウザ、IFS 共有でもアクセスできる。

【全般】
public_tree_all.JPG
MAPI クライアント(Outlook)ではこのパブリックフォルダツリーにはアクセスできない。

なぜなら、このパブリックフォルダツリーと関連付けられているパブリックストアは、
メールボックスストアの「規定のパブリックストア」に指定することができないから。

アプリケーション、Web ブラウザ、IFS 共有では、このパブリック フォルダ階層にアクセスできる。

tcpdumpのオプション

|

○基本

-n
IPアドレスやポート番号などを名前に変換しません。

-N
ホスト名のうち、ドメイン名の表示をしません。

-i eth1など
インタフェースを指定できます。
指定しない場合はeth0です。

-F file
フィルタをfileから読み込みます。
コマンドラインで指定された追加表現は、無視されます。


○簡素にパケットの内容を出力する。

-q
高速に省略した出力を行ないます。

-t
各ダンプ行のタイムスタンプを出力しません。


○詳細にパケットの内容を表示する。

-e MACアドレスと、ethertypeとフレーム長が付加されて出力されます。
00:80:99:06:1d:70 > 00:80:99:06:1d:97, ethertype IPv4 (0x0800), length 74:
-v IPパ ケット中の TTLや、サービス型の情報を付加して出力します。
(tos 0x0, ttl 128, id 41870, offset 0, flags [none], length: 60)
-X パケットの情報を16進数と、ASCII文字で表示します。
02:25:12.199614 IP 192.168.101.254 > 192.168.101.252: icmp 40: echo request seq 12032
        0x0000:  4500 003c b211 0000 8001 3b64 c0a8 65fe  E..<......;d..e.
        0x0010:  c0a8 65fc 0800 1c5c 0200 2f00 6162 6364  ..e....\../.abcd
        0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
        0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi


○キャプチャをファイルに保存する。

-l 標準出力をバッファリングします。 こういう使い方が賢いでしょう。
# tcpdump -n -l 'filter' > file & tail -f file
# tcpdump -n -l > file と # tcpdump -n >> file と同じなのではないか? という感じもしますが。。。

-w file
受信した生パケットを、fileに出 力します。
※viなどでファイルは見ないほうがよいです。

-r file
-wオプションでキャプチャを保存したファイルの内容を表示させます。

共通鍵暗号方式

|

■暗号データと暗号鍵

○鍵
 何bitかでできている数列
 鍵は定期的に作り直して交換されるものなのだ。

○ブロック暗号
 bitデータを何bitかずつに区切りそれを鍵を使って暗号化したもの。


■暗号鍵を秘密にする

 通信で使う暗号のほとんどは暗号化のルールは公開されている。
 つまり、暗号の解き方は誰でも知ることができる。
 なので、秘密にするべきは暗号鍵である。


■共通鍵暗号方式

【メリット】
 暗号化や復号の処理が早い

【デメリット】
 そもそも鍵をどうやって相手に渡すのか。
 通信する相手が多い場合、どんどん鍵が多くなる。

DES
 Data Encryption Standard
 ブロック暗号:64bit
 鍵長:56bit
 安全性が低下したので最近はあまり使われていない。
 しかし処理回路の「ファイステル構造」は暗号技術の基本。


3DES
 Data Encryption Standard
 ブロック暗号:64bit
 鍵長:168bit(112bitもあり)
 SSL3.0/TLS1.0で使われている。

AES
 Advanced Encryption Standard
 ブロック暗号:128bit
 鍵長:128bit、192bit、256bit
 DESが心配になってきたので新しく開発された。
 Rijndeal(ラインダール)という暗号技術を使う。
 これは色々な環境でも平均的な速度で処理できる。
 NESSIE推奨

Camellia
 ブロック暗号:128bit
 鍵長:128bit、192bit、256bit
 NTTと三菱電機が開発した。
 NESSIE推奨

128-bitRC4
 ストリーム暗号:128bit
 鍵長:128bit(40bitもあり)
 RSAセキュリティ社が開発した。

RedHat系のRPMでインストールしたApacheなら
# /usr/sbin/httpd -S
とします。 DebianのパッケージのApacheだったら
# /usr/sbin/apache -S
です。 ※比較的最近のApacheじゃないとありません。
# /usr/sbin/httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443          www.example.local (/etc/httpd/conf.d/ssl.conf:88)
*:80                   is a NameVirtualHost
         default server www.example.local (/etc/httpd/conf/httpd.conf:1032)
         port 80 namevhost www.hoge.local (/etc/httpd/conf/httpd.conf:1032)
         port 80 namevhost www.domain.local (/etc/httpd/conf/httpd.conf:1039)
Syntax OK

名前ベースのバーチャルホスト

|
1.NameVirtualHostや<VirtualHost >の引数の部分のIPアドレスとポート
2.ServerName "バーチャルホスト名"
の組み合わせで応答が決定します。

ブラウザが、「1」で設定されているIPアドレス、「2」で設定されているバーチャルホスト名でアクセスしたときに、Apache側は該当するServerNameが書かれている<VirtualHost >ディレクティブの設定で動作します。

 NameVirtualHostや<VirtualHost >ディレクティブの引数の部分の「*:80」は、「サーバーの持っているすべてのIPアドレス:ポート番号」を意味します。
 
 ここの引数の部分ですが、「*」のほかにもサーバーが持っている具体的なIPアドレスを指定してもいいし、本当のホスト名やバーチャルホスト名を指定しても大丈夫ですが、「*」か、IPアドレスをお勧めします

 また、ポート番号の部分「:80」も、httpd.confの上の方でListen 80を指定してあるので省略可能な場合がありますが、やはり明示的にポート番号を指定したほうがよいでしょう。※理由は後述

■プライマリ仮想サーバー
定義しているバーチャルホスト以外へのリクエストは、設定ファイル内で最初に定義してあるバーチャルホストに送られます。

 なので、一番最初の<VirtualHost *:80>は、http://"IPアドレス"や、http://"本当のサーバー名"などでアクセスされた場合を想定して記述しておくことになります。

※アドレスベースのバーチャルホストで、<VirtualHost _default_:80>を設定してしまうのも有効です。

NameVirtualHost *:80

<VirtualHost *:80> ServerAdmin webmaster@example.local ServerName www.example.local DocumentRoot /var/www/html DirectoryIndex index.html </VirtualHost>

<VirtualHost *:80> ServerAdmin webmaster@hoge.local ServerName www.hoge.local DocumentRoot /home/www.hoge.local/htdocs DirectoryIndex index.html ErrorLog /home/www.hoge.local/logs/error_log CustomLog /home/www.hoge.local/logs/access_log common </VirtualHost>

<VirtualHost *:80> ServerAdmin webmaster@domain.local ServerName www.domain.local DocumentRoot /home/www.domain.local/htdocs DirectoryIndex index.html ErrorLog /home/www.domain.local/logs/error_log CustomLog /home/www.domain.local/logs/access_log common </VirtualHost>

■NameVirtualHostや<VirtualHost >ディレクティブでサーバー名を指定しないほうがよい理由

下記のような書き方もできます。
わかりやすいといえばわかりやすいです。

しかし、サーバー名に依存した記述をすると、DNSに依存することになります。
サーバーの起動時にバーチャルホスト名の名前引きができなかった場合、その名前ベースバーチャルホスト設定は効き目がなくなって、一番上のバーチャルホストの設定で応答することになります。

NameVirtualHost www.example.local:80

<VirtualHost www.example.local:80> ServerAdmin webmaster@example.local ServerName www.example.local DocumentRoot /var/www/html DirectoryIndex index.html </VirtualHost>

<VirtualHost www.hoge.local:80> ServerAdmin webmaster@hoge.local ServerName www.hoge.local DocumentRoot /home/www.hoge.local/htdocs DirectoryIndex index.html ErrorLog /home/www.hoge.local/logs/error_log CustomLog /home/www.hoge.local/logs/access_log common </VirtualHost>

<VirtualHost www.domain.local:80> ServerAdmin webmaster@domain.local ServerName www.domain.local DocumentRoot /home/www.domain.local/htdocs DirectoryIndex index.html ErrorLog /home/www.domain.local/logs/error_log CustomLog /home/www.domain.local/logs/access_log common </VirtualHost>


■NameVirtualHostや<VirtualHost >ディレクティブで、ポート番号を明示的に指定したほうがよい理由

 RedHat系のLinuxなどでmod_sslをインストールしている場合、/etc/httpd/conf.d/ssl.confにdefaultのIPアドレスベースのバーチャルホストで、ポート443で待ち受ける設定があるので、通常のhttpアクセスのバーチャルホスト設定のほうでも80番を明示的に指定しないとapacheの起動時に警告を受けます。

○/etc/httpd/conf.d/ssl.confのdefault設定

LoadModule ssl_module modules/mod_ssl.so
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
  ErrorLog logs/ssl_error_log
  TransferLog logs/ssl_access_log
  LogLevel warn

SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key

<Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory>

SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>

bindのバージョンを見る

|
# /usr/sbin/named -v
BIND 9.3.2

ちなみにこういうやり方もある。

# dig version.bind. txt chaos

; <<>> DiG 9.2.4 <<>> version.bind. txt chaos ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6775 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION: ;version.bind. CH TXT

;; ANSWER SECTION: version.bind. 0 CH TXT "9.3.2"

;; AUTHORITY SECTION: version.bind. 0 CH NS version.bind.

;; Query time: 6 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue May 23 17:34:47 2006 ;; MSG SIZE rcvd: 62


  

フォワーダを利用する

|

■フォワーディングサーバ

フォワーダを利用するネームサーバ

クライアントからの名前解決依頼を受けるが、
自分で名前解決をせずに、フォワーダに名前解決を丸投げする。
 
しかし、クライアントへの回答は自分でする


■フォワーディングサーバの設定(bind9)

例1.ほとんどすべての名前解決をフォワーダに依頼する場合

自分が権威を持っているゾーンデータからも、自分の保持しているキャッシュからもqueryに対する回答が得られなかった場合、フォワーダに名前解決を依頼します。

○/etc/named.conf
options {
	-- 省略 --
	forwarders { 192.168.0.1; };
};
ちなみに複数のフォワーダを指定すると、bind9ではそのフォワーダ達のなかで反応が最速だったサーバーに最初の問い合わせをします。

さて、フォワーダから(デフォルトで60秒間)応答が無かった場合ですが、2つのパターンに分けられます。

A:フォワーディングサーバー自身が自分で名前解決に挑む。  (デフォルトの挙動) ○/etc/named.conf
options {
	-- 省略 --
	forward first;
	forwarders { 192.168.0.1; };
};
B:名前解決失敗をクライアントに告げる ○/etc/named.conf
options {
	-- 省略 --
	forward only;
	forwarders { 192.168.0.1; };
};


例2.特定のゾーンに対するqueryに関してはフォワーダを利用する。

zoneステートメントの中に記述します。

○/etc/named.conf
zone "example.local" {
	type	forward;
	forwarders { 192.168.0.1; };
};


例3.特定のゾーンに対するqueryに関してだけは、フォワーダを利用しない。
  (null forwarders リスト)

○/etc/named.conf

options {
	-- 省略 --
	forwarders { 192.168.0.1; };
};

zone "example.local" { type master; file "db.example.local"; forwarders {}; };

null forwardersが設定していない場合(例1の場合)
 "www.hoge.example.local"という名前解決は、192.168.0.1にフォワードする。

null forwardersが設定してある場合
 "www.hoge.example.local"という名前解決は、フォワーディングしない。

■MicrosoftのDNSサーバー

Windows 2000のDNSサーバーは、例1しかできなかったが、
Windows Server 2003のDNSサーバーは、
例2、つまりゾーンごとにフォワーダを分けることが可能になった。

■フォワーダ

名前解決を丸投げで請け負うネームサーバ
といっても、特にフォワーダとしての設定項目はない。

ゾーンを保持しているネームサーバの設定でもよいし、
ただのキャッシュサーバーでもよい。

自分がフォワーディングサーバとなって、
さらに他のフォワーダに名前解決を依頼することもできるが、
そのときはやはりフォワーディングの設定をする。

【クライアント(PCなど)】
↓            ↑
↓Query        ↑回答
↓            ↑
【DNSサーバ(フォワーディングサーバ)】
↓            ↑
↓Forward       ↑回答
↓            ↑
【DNSサーバ(フォワーダ)】
<<< 名前解決 >>>


  

bindのオプション

|
■bindのオプション
named [-d debuglevel] [-p port#] [-(b|c) config_file] [-f -q -r -v] [-u user_name]
     [-g group_name] [-t directory] [-w directory] [config_file]
-d debuglevel
 デバッグ情報を出力します。(基本)1~10,20,90(最高)
 /etc/sysconfig/namedなどに、OPTIONS="-d 1"と追加してください。

 起動中にデバッグレベルを変更するには、
 # rndc trace 10
 で始まり、
 # rndc notrace
 で終了します。

-c config_file
 代わりの config_file を使用します。
 デフォルトの値は/etc/namedb/named.conf です。

-v
 バージョンを報告し、終了します。

-u user_name
 ユーザを指定すると、初期化後のサーバがこのユーザで動作します。
 値はユーザ名または数字のユーザ ID どちらでも構いません。

-g group_name
 グループを指定すると、初期化後のサーバがこのグループで動作します。
 値はグループ名または数字のグループ ID どちらでも構いません。

-t directory
 chroot() するべきディレクトリを指定します。

■RedHat系でRPMインストールの場合 /etc/sysconfig/named に記述を追加しますが、普通は特に何も手を加える必要はありません。 bind-chrootパッケージもインストールされていれば、
ROOTDIR=/var/named/chroot
との記述があります。 ここでの指定が、/etc/init.d/named スクリプトで、-tオプションに渡されます。 また、-uオプションも/etc/init.d/named スクリプト内に記述してあるので、普通に起動すると、
# ps auxw | grep named
named     1049  0.0  3.0 37172 3852 ?        Ssl  May18   0:50 /usr/sbin/named -u named -t /var/named/chroot
となるはずです。 ■debian3.1(sarge)の場合 /etc/default/bind9
OPTIONS="-u bind"
の記述があり、起動オプションはそこに追加します。 このオプションが、/etc/init.d/bind9 スクリプトに渡され、
# ps aux | grep bind
bind     10915  0.8  6.0 11196 2788 ?        Ss   17:41   0:00 /usr/sbin/named -u bind
のように起動します。

  

■Exchange Serverの論理格納域
混乱してきた・・・

●1サーバーにつき、ストレージグループが作れる。

●1ストレージグループにつき、ストア(メールボックスストア、パブリックストア)が作れる。

●ストア(メールボックスストア、パブリックストア)の中に、複数のメールボックス、パブリックフォルダが格納される。

tree_1.JPG


●メールボックスストアは、必ず「規定のパブリックストア」で、接続するパブリックストアが指定されてなければならない。
mailbox_store.JPG


●パブリックストアは、必ず「パブリックフォルダツリー」に関連付けられてなくてはならない。
public_folder_store.JPG
 さらに、パブリックフォルダツリーに関連付けることのできるパブリックストアは、1サーバーにつき、1つのパブリックストアに限られる。
 逆に言えば、1つのパブリックフォルダツリーに、複数のサーバーのパブリックストアを関連付けることならば可能である。既存のExchange組織に、Exchange Serverを追加したときに何も考えないでやってるとこのような構成になるはずだと思います。


●パブリックフォルダツリーには、「MAPI クライアント」と「全般」の2種類があり、メールボックスストアで「規定のパブリックストア」に指定できるパブリックストアは、「MAPI クライアント」のフォルダツリーに関連付けられていなければならない
public_folder_tree.JPG


●結局、こんな感じになります。
色の付いた線が関連付けしてある部分です。
tree_2.JPG

Cacti グラフの作り方(基本)

|

1.adminでログオンします。
  このとき、グラフ閲覧専用のアカウントを左のメニューの「User Management」からつくっておくとよいでしょう。

2.左のメニューから「Device」をクリックし、データを取りたいホストを作成します。

3.ホストを作成したら「Create Graphs for this Host」をクリックして、グラフを作成します。

4.ホストとグラフを作成したら、左のメニューから「Graph Trees」をクリックし、表示させたい場所にホストやグラフを配置させます。

5.基本的には、これの繰り返しです。


■画面写真付き

1.adminでログオンします。
  このとき、グラフ閲覧専用のアカウントを左のメニューの「User Management」からつくっておくとよいでしょう。

cacti_0.JPG


2.左のメニューから「Device」をクリックし、データを取りたいホストを作成します。

cacti_7.JPG


3.ホストを作成完了。

cacti_8.JPG


4.「Create Graphs for this Host」をクリックして、グラフを作成します。

cacti_9.JPG


5.グラフの色などが決められます。けど、そのままでもいいでしょう。

cacti_10.JPG


6.ホストとグラフを作成したら、左のメニューから「Graph Trees」をクリックし、表示させたい場所にホストやグラフを配置させます。

cacti_12.JPG

           ↓

cacti_13.JPG

           ↓

cacti_14.JPG

           ↓

cacti_15.JPG

           ↓

cacti_16.JPG

           ↓
treeにグラフを追加したい場合
cacti_17.JPG

           ↓
treeにホストを追加したい場合
cacti_18.JPG


7.完成

cacti_19.JPG

Cactiのインストール

|

■インストール方法
cacti - グラフツールcactiとは?
cacti - UNIXでのインストール手順
を参考にしてください。
そんなに難しくないはずです。
http://dag.wieers.com/packages/cacti/
ここにいくとRedHat系のRPMがたくさん集まってます。

Apache、PHP、MySQL、RRDTool、Net-SNMPも全部RPMでいいでしょう。
up2dateやyumやapt-getを使うとあっという間です。
順番としては、Apache+PHP、MySQL、RRDTool、Net-SNMP、Cactiという順番ですかね。

インストールが終了したら、こちらをみて、adminやユーザーのパスワードを決定してください。
cacti - ユーザ管理


CentOS release 4.3 (Final)
Kernel 2.6.9-34.EL on an i686
の環境でインストールします。

■apacheとphpはすでにインストールしてありました。

# rpm -qa | grep httpd
system-config-httpd-1.3.1-1
httpd-manual-2.0.52-22.ent.centos4
httpd-2.0.52-22.ent.centos4
httpd-devel-2.0.52-22.ent.centos4
httpd-suexec-2.0.52-22.ent.centos4

# rpm -qa | grep php php-imap-4.3.9-3.12 php-pear-4.3.9-3.12 php-gd-4.3.9-3.12 php-mbstring-4.3.9-3.12 php-4.3.9-3.12 php-ldap-4.3.9-3.12

■MySQLのインストール
# apt-get install mysql-server
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  perl-DBD-MySQL
The following NEW packages will be installed:
  mysql-server perl-DBD-MySQL
0 upgraded, 2 newly installed, 0 removed and 0 not upgraded.
Need to get 7112kB of archives.
After unpacking 15.0MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ftp.yz.yamagata-u.ac.jp pub/linux/centos/4.3/apt/i386/os perl-DBD-MySQL 2.9004-3.1 [113kB]
Get:2 http://ftp.yz.yamagata-u.ac.jp pub/linux/centos/4.3/apt/i386/os mysql-server 4.1.12-3.RHEL4.1 [6999kB]
Fetched 7112kB in 11s (594kB/s)
Committing changes...
Preparing...                ########################################### [100%]
   1:perl-DBD-MySQL         ########################################### [ 50%]
   2:mysql-server           ########################################### [100%]
Done.
ついでにこんなのもインストールしておきましょう
# apt-get install php-mysql
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  php-mysql
0 upgraded, 1 newly installed, 0 removed and 0 not upgraded.
Need to get 35.2kB of archives.
After unpacking 41.1kB of additional disk space will be used.
Get:1 http://ftp.yz.yamagata-u.ac.jp pub/linux/centos/4.3/apt/i386/updates php-mysql 4.3.9-3.12 [35.2kB]
Fetched 35.2kB in 3s (10.7kB/s)
Committing changes...
Preparing...                ########################################### [100%]
   1:php-mysql              ########################################### [100%]
Done.
こんな風になっていればOKでしょう。
# rpm -qa | grep mysql
mysql-server-4.1.12-3.RHEL4.1
php-mysql-4.3.9-3.12
mysql-4.1.12-3.RHEL4.1
mysql-devel-4.1.12-3.RHEL4.1

■RRDToolのインストール apt-getではむりでした。  本家はここです。http://oss.oetiker.ch/rrdtool/ ただ、日本語版のRPMが@ひろPさんから公開されています。 これを使いましょう。

# wget http://www.bigfield.com/~hiroshi/software/RPMS/i386/rrdtool-1.0.40
-1.7.3j.i386.rpm
--10:41:04--  http://www.bigfield.com/~hiroshi/software/RPMS/i386/rrdtool-1.0.40-1.7.3j.i386.rpm
           => `rrdtool-1.0.40-1.7.3j.i386.rpm'
www.bigfield.com をDNSに問いあわせています... 210.162.161.254
www.bigfield.com|210.162.161.254|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1,278,200 (1.2M) [application/x-rpm]

100%[==============================================>] 1,278,200 326.08K/s ETA 00:00

10:41:09 (321.53 KB/s) - `rrdtool-1.0.40-1.7.3j.i386.rpm' を保存しました [1278200/1278200]

# rpm -ivh rrdtool-1.0.40-1.7.3j.i386.rpm Preparing... ########################################### [100%] 1:rrdtool ########################################### [100%]

■NET-SNMPのインストール NET-SNMPはもう入ってました。
# rpm -qa | grep net-snmp
net-snmp-libs-5.1.2-11.EL4.6
net-snmp-utils-5.1.2-11.EL4.6
net-snmp-5.1.2-11.EL4.6
net-snmp-devel-5.1.2-11.EL4.6

■cactiのインストール apt-getではむりなので、本家サイトから Fedora3用の落としてきます。

# wget http://www.cacti.net/downloads/packages/Fedora/3/cacti-0.8.6h.fc3.
i386.rpm
--10:51:43--  http://www.cacti.net/downloads/packages/Fedora/3/cacti-0.8.6h.fc3.i386.rpm
           => `cacti-0.8.6h.fc3.i386.rpm'
www.cacti.net をDNSに問いあわせています... 66.59.109.191
www.cacti.net|66.59.109.191|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1,112,777 (1.1M) [application/x-redhat-package-manager]

100%[==============================================>] 1,112,777 142.78K/s ETA 00:00

10:51:52 (131.42 KB/s) - `cacti-0.8.6h.fc3.i386.rpm' を保存しました [1112777/1112777]

# rpm -ivh cacti-0.8.6h.fc3.i386.rpm エラー: Failed dependencies: php-snmp is needed by cacti-0.8.6h-1.i386 Suggested resolutions: /home/buildcentos/CENTOS/en/4.0/i386/CentOS/RPMS/php-snmp-4.3.9-3.9.i386.rpm
あれ?php-snmpが必要なんだそうです。しきりなおし。
# apt-get install php-snmp
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  php-snmp
0 upgraded, 1 newly installed, 0 removed and 0 not upgraded.
Need to get 27.2kB of archives.
After unpacking 20.6kB of additional disk space will be used.
Get:1 http://ftp.yz.yamagata-u.ac.jp pub/linux/centos/4.3/apt/i386/updates php-snmp 4.3.9-3.12 [27.2kB]
Fetched 27.2kB in 0s (107kB/s)
Committing changes...
Preparing...                ########################################### [100%]
   1:php-snmp               ########################################### [100%]
Done.
[root@kuwa-srv ~]# rpm -ivh cacti-0.8.6h.fc3.i386.rpm
Preparing...                ########################################### [100%]
   1:cacti                  ########################################### [100%]
Be sure to follow steps 2 through 5 in the install guide for new Cacti installations.
でけた。 ■cacti用UNIXアカウント作成 RPMでcactiをインストールすると、自動的にユーザーもしてくれるところが便利です。
# cat /etc/passwd | grep cacti
cactiuser:x:501:501::/var/www/html/cacti:/bin/bash

■cacti用mysqlデータベースの作成
さすがにこれは手動でやらないといけないでしょう。

○mysqlの起動設定
# /etc/init.d/mysqld start
MySQL データベースを初期化中: [ OK ]
MySQL を起動中: [ OK ]

# chkconfig --list | grep mysql
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off

# chkconfig --level 35 mysqld on

# chkconfig --list | grep mysqld
mysqld 0:off 1:off 2:off 3:on 4:off 5:on 6:off

○データベースの作成
# mysqladmin --user=root create cacti
○テーブル等をインポート
# mysql cacti < /var/www/html/cacti/cacti.sql

○データベースアカウントを作成

# mysql --user=root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25 to server version: 4.1.12

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant all on cacti.* to cacti@localhost identified by 'パスワード'; Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

mysql> exit Bye

■cacti動作環境の設定 ○/var/www/html/cacti/include/config.phpの編集
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";		# mysql内のcacti用DBの名前
$database_hostname = "localhost";	# DBのホスト名
$database_username = "cacti";		# cacti用DBに権限があるDBユーザーを設定と
$database_password = "パスワード";		# そのパスワード(Linuxユーザーのことではない)
$database_port = "3306";
○パーミッションの変更 RPMだと自動的にやってくれているので何もする必要はないです。
# ls -l | grep rra
drwxr-xr-x  2 cactiuser cactiuser   4096  5月 20 10:53 rra
○データ収集用cronの設定 これもRPMだと自動的にやってくれているので何もする必要はないです。
# cd /etc/cron.d
# ls
cacti  mrtg
# cat cacti
*/5 * * * *     cactiuser       php /var/www/html/cacti/poller.php > /dev/null 2>&1
○データ収集スクリプトの動作確認 ここは一旦、ユーザーcactiuserになって、テストしてみます。
[root]# su - cactiuser
[cactiuser]$ php poller.php
$ php poller.php
sh: -: command not found
こんなふうになって、ぼぉ~っとしているようだったら成功です。 Ctrl+Cを押して終了させてください。

○httpdの設定
これまたRPMだと自動的にやってくれているので何もする必要はないです。
というか、/var/www/html/cacti/がディレクトリなので、、、

■確認 では、httpdを再起動したあと、
# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

http://servername/cacti/ を開いてみます。
cacti_1.JPG
ここで「NEXT」をクリックします。

cacti_2.JPG

cacti_5.JPG
※RPMでのインストールなのでほとんどおまかせですが、
 ログの場所くらいは変えてもいいかも知れません。

cacti_6.JPG
※初回は[admin/admin]でログオンします。

大変紛らわしい、
・「アカウントログオンイベントの監査」
・「ログオン イベントの監査」
ですが、以下の違いがあります。


【アカウントログオンイベントの監査】 Active DirectoryのKerberos認証におけるTGTその他のチケットの発行を監査します。  ログオン時にはチケットの発行のためにクライアントはドメインコントローラと通信し、 チケットを発行してもらう必要がありますので、監査の対象になります。 チケットの発行が成功すれば、ドメインコントローラのセキュリティログに672で記録されます。
May 19 18:14:17 dc101 security[success] 672 NT AUTHORITY\SYSTEM  認証チケットの要求:    ユーザー名:  DomainCtrl$    提供された領域名: EXAMPLE.LOCAL    ユーザー ID:  %{S-1-5-21-82319771-177121436-2465514707-1000}    サービス名:  krbtgt    サービス ID:  %{S-1-5-21-82319771-177121436-2465514707-502}    チケット オプション:  0x40810010    結果コード:  -    チケット暗号化の種類: 0x17    事前認証の種類: 2    クライアント アドレス:  127.0.0.1    証明書発行者名:     証明書シリアル番号:     証明書拇印:
 しかし、ログオフ時にはクライアントはチケットを単に自分で破棄するだけで監査はされません。

【ログオンイベントの監査】  サーバに対するセッションの確立、切断を監査しています。 例えばサーバ上の共有ディレクトリに接続したり、ターミナルサービスに接続したりすると、ログオンとみなされます。  このとき、イベントログに「ユーザのログオン」(ID: 540)が記録されます。  しかし、セッションは明示的に処理が行われたり、デフォルトで15分無通信状態が続いたりした場合に切断され、イベントログには「ユーザのログオフ」(ID: 538)が記録されます。これは対話的なログオン、ログオフとは無関係に行われます。  なので、このログをたよりに対話的なログオンの監査を試みても支離滅裂な結果が待ち受けてます。

#
# どのログオフが、どのログオンと対応しているかは
# ログオン ID:  (0x0,0xFABA4EF)
# でわかります。

May 19 17:56:49 TS001 security[success] 540 EXAMPLE\user01 ネットワーク ログオンの成功: ユーザー名: user01 ドメイン: EXAMPLE ログオン ID: (0x0,0xFABA4EF) ログオンの種類: 3 ログオン プロセス: Advapi 認証パッケージ: Negotiate ワークステーション名: TS001 ログオン GUID: - 呼び出し側ユーザー名: TS001$ 呼び出し側ドメイン: EXAMPLE 呼び出し側ログオン ID: (0x0,0x3E7) 呼び出し側プロセス ID: 2716 移行されたサービス: - ソース ネットワーク アドレス: - ソース ポート: - May 19 17:56:49 TS001 security[success] 538 EXAMPLE\user01 ユーザーのログオフ: ユーザー名: user01 ドメイン: EXAMPLE ログオン ID: (0x0,0xFABA4EF) ログオンの種類: 3

May 19 17:56:50 TS001 security[success] 540 EXAMPLE\user01 ネットワーク ログオンの成功: ユーザー名: user01 ドメイン: EXAMPLE ログオン ID: (0x0,0xFABA6C4) ログオンの種類: 3 ログオン プロセス: Advapi 認証パッケージ: Negotiate ワークステーション名: TS001 ログオン GUID: - 呼び出し側ユーザー名: TS001$ 呼び出し側ドメイン: EXAMPLE 呼び出し側ログオン ID: (0x0,0x3E7) 呼び出し側プロセス ID: 2716 移行されたサービス: - ソース ネットワーク アドレス: - ソース ポート: - May 19 17:56:50 TS001 security[success] 538 EXAMPLE\user01 ユーザーのログオフ: ユーザー名: user01 ドメイン: EXAMPLE ログオン ID: (0x0,0xFABA6C4) ログオンの種類: 3

じつにわけのわからないログですね。
しかもWindows2000では「ログオフが記録されない」という現象もあったようです。
■Logoff event messages are not logged in the security log when you use the Audit Logon Events feature in Windows 2000

ユーザーがドメイン(や、特にターミナルサーバー、MetaFrameサーバー)にログオンしたか、
ログオフしたかを正しく監査するには、ログオン/ログオフスクリプトをつかって
イベントビューアに書き込んだ方がいいでしょう。
参考:Active Directory ドメインで、ユーザのログオン/ログオフの状況を監査したい

また、監査全般についてはこちらの記事を参考にしてください。
イベントログ説明
マイクロソフトの Securing Windows 2000 Server ソリューション
第 9 章 ‐ 監査と侵入検出

ntsyslog日本語版syslog-ngを組み合わせてみようと思い立ったわけです。

以前は、VBScriptで作ったツールで毎日のタスクでcsvファイルにして保存してました。
その手間(手間じゃないけど)がなくなるのはうれしいことです。

ただ、Windowsのログは手ごわかったです。
以下のログ中の文字列を$HOSTとして認識してしまうのです。
例:ese、microsoft、msexchangeis、ntds、removable、rpc、secure、server、service、symantec、web
これはNTSyslogの仕様なのか、Windowsのイベントログの仕様なのかはわかりませんが、
このままじゃどうしようもないので、Windowsのログはlocal0.debugなどにそれぞれ割り振りました。
その結果、このようなsyslog-ngの設定ファイルになりました。

options {
        sync (0);
        time_reopen (10);
        log_fifo_size (1000);
        long_hostnames (off);
        use_dns (yes);
        use_fqdn (no);
        create_dirs (yes);
        keep_hostname (yes);
        stats(86400);
        dir_perm(0750);
        perm(0640);
        owner(root);
        group(root);
};

# # configuration file for syslog-ng, customized for remote logging #

source s_internal { internal(); }; destination d_syslognglog { file("/var/log/syslog-ng.log"); }; log { source(s_internal); destination(d_syslognglog); };

# Local sources, filters and destinations are commented out # If you want to replace sysklogd simply uncomment the following # parts and disable sysklogd # # Local sources # source s_local { unix-stream ("/dev/log"); pipe ("/proc/kmsg" log_prefix ("kernel:")); }; # # Local filters # filter f_messages { level(info..emerg); }; filter f_secure { facility(authpriv); }; filter f_maillog { facility(mail); }; filter f_cron { facility(cron); }; filter f_emerg { level(emerg); }; filter f_spooler { level(crit..emerg) and facility(uucp, news); }; filter f_local7 { facility(local7); }; # # Local destinations # destination d_messages { file("/var/log/messages"); }; destination d_secure { file("/var/log/secure"); }; destination d_maillog { file("/var/log/maillog"); }; destination d_cron { file("/var/log/cron"); }; destination d_console { usertty("root"); }; destination d_spooler { file("/var/log/spooler"); }; destination d_bootlog { file("/var/log/boot.log"); }; # # Local logs - order DOES matter ! # log { source(s_local); filter(f_emerg); destination(d_console); }; log { source(s_local); filter(f_secure); destination(d_secure); flags(final); }; log { source(s_local); filter(f_maillog); destination(d_maillog); flags(final); }; log { source(s_local); filter(f_cron); destination(d_cron); flags(final); }; log { source(s_local); filter(f_spooler); destination(d_spooler); }; log { source(s_local); filter(f_local7); destination(d_bootlog); }; log { source(s_local); filter(f_messages); destination(d_messages); };

# # Remote logging # source s_remote { tcp(ip(0.0.0.0) port(514)); udp(ip(0.0.0.0) port(514)); };

# # ネットワーク機器のフィルタ # filter f_internet-gw { host("internet-gw"); }; filter f_firewall { host("firewall"); }; filter f_L3Switch { host("L3Switch"); }; filter f_pppoe-router { host("pppoe-router"); }; filter f_subnet-gw { host("subnet-gw"); };

# # Windows Serverのフィルタ # ネットワーク機器のログとかぶらないようにしています。 # filter f_domain_controler_1_application { facility(local0) and level(debug) and not host("firewall"); }; filter f_domain_controler_1_directory { facility(local0) and level(info) and not host("firewall"); }; filter f_domain_controler_1_dns { facility(local0) and level(notice) and not host("firewall"); }; filter f_domain_controler_1_file_replication { facility(local0) and level(warning) and not host("firewall"); }; filter f_domain_controler_1_security { facility(local0) and level(error) and not host("firewall"); }; filter f_domain_controler_1_system { facility(local0) and level(crit) and not host("firewall"); };

filter f_domain_controler_2_application { facility(local1) and level(emerg) and not host("internet-gw"); }; filter f_domain_controler_2_directory { facility(local1) and level(info) and not host("internet-gw"); }; filter f_domain_controler_2_dns { facility(local1) and level(notice) and not host("internet-gw"); }; filter f_domain_controler_2_file_replication { facility(local1) and level(warning) and not host("internet-gw"); }; filter f_domain_controler_2_security { facility(local1) and level(error) and not host("internet-gw"); }; filter f_domain_controler_2_system { facility(local1) and level(crit) and not host("internet-gw"); };

filter f_exchange_1_application { facility(local2) and level(debug) and not host("subnet-gw"); }; filter f_exchange_1_security { facility(local2) and level(info) and not host("subnet-gw"); }; filter f_exchange_1_system { facility(local2) and level(notice) and not host("subnet-gw"); };

filter f_exchange_2_application { facility(local2) and level(warning) and not host("subnet-gw"); }; filter f_exchange_2_security { facility(local2) and level(error) and not host("subnet-gw"); }; filter f_exchange_2_system { facility(local2) and level(crit) and not host("subnet-gw"); };

filter f_Citrix_1_application { facility(local4) and level(debug) and not host("pppoe-router"); }; filter f_Citrix_1_security { facility(local4) and level(info) and not host("pppoe-router"); }; filter f_Citrix_1_system { facility(local4) and level(notice) and not host("pppoe-router"); };

filter f_Citrix_2_application { facility(local4) and level(warning) and not host("pppoe-router"); }; filter f_Citrix_2_security { facility(local4) and level(error) and not host("pppoe-router"); }; filter f_Citrix_2_system { facility(local4) and level(crit) and not host("pppoe-router"); };

filter f_exchange_front_application { facility(local5) and level(debug); }; filter f_exchange_front_security { facility(local5) and level(error); }; filter f_exchange_front_system { facility(local5) and level(crit); }; filter f_exchange_front_virtual { facility(local5) and level(alert); };

filter f_isa2004_application { facility(local6) and level(debug); }; filter f_isa2004_security { facility(local6) and level(info); }; filter f_isa2004_system { facility(local6) and level(notice); };

filter f_citrix_gateway_application { facility(local6) and level(warning); }; filter f_citrix_gateway_security { facility(local6) and level(error); }; filter f_citrix_gateway_system { facility(local6) and level(crit); }; filter f_citrix_gateway_secure_gateway { facility(local6) and level(alert); };

# # ネットワーク機器のログの出力先 #

destination d_internet-gw { file("/var/log/syslog-ng/internet-gw/$YEAR$MONTH$DAY.log"); }; destination d_firewall { file("/var/log/syslog-ng/firewall/$YEAR$MONTH$DAY.log"); }; destination d_L3Switch { file("/var/log/syslog-ng/L3Switch/$YEAR$MONTH$DAY.log"); }; destination d_pppoe-router { file("/var/log/syslog-ng/PPPoE-router/$YEAR$MONTH$DAY.log"); }; destination d_subnet-gw { file("/var/log/syslog-ng/subnet-gw/$YEAR$MONTH$DAY.log"); };

# # Windows Serverのログの出力先 # destination d_domain_controler_1_application { file("/var/log/syslog-ng/domain_controler_1/application/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_1_directory { file("/var/log/syslog-ng/domain_controler_1/directory/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_1_dns { file("/var/log/syslog-ng/domain_controler_1/dns/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_1_file_replication { file("/var/log/syslog-ng/domain_controler_1/file_replication/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_1_security { file("/var/log/syslog-ng/domain_controler_1/security/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_1_system { file("/var/log/syslog-ng/domain_controler_1/system/$YEAR$MONTH$DAY.log"); };

destination d_domain_controler_2_application { file("/var/log/syslog-ng/domain_controler_2/application/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_2_directory { file("/var/log/syslog-ng/domain_controler_2/directory/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_2_dns { file("/var/log/syslog-ng/domain_controler_2/dns/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_2_file_replication { file("/var/log/syslog-ng/domain_controler_2/file_replication/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_2_security { file("/var/log/syslog-ng/domain_controler_2/security/$YEAR$MONTH$DAY.log"); }; destination d_domain_controler_2_system { file("/var/log/syslog-ng/domain_controler_2/system/$YEAR$MONTH$DAY.log"); };

destination d_exchange_1_application { file("/var/log/syslog-ng/exchange_1/application/$YEAR$MONTH$DAY.log"); }; destination d_exchange_1_security { file("/var/log/syslog-ng/exchange_1/security/$YEAR$MONTH$DAY.log"); }; destination d_exchange_1_system { file("/var/log/syslog-ng/exchange_1/system/$YEAR$MONTH$DAY.log"); };

destination d_exchange_2_application { file("/var/log/syslog-ng/exchange_2/application/$YEAR$MONTH$DAY.log"); }; destination d_exchange_2_security { file("/var/log/syslog-ng/exchange_2/security/$YEAR$MONTH$DAY.log"); }; destination d_exchange_2_system { file("/var/log/syslog-ng/exchange_2/system/$YEAR$MONTH$DAY.log"); };

destination d_Citrix_1_application { file("/var/log/syslog-ng/Citrix_1/application/$YEAR$MONTH$DAY.log"); }; destination d_Citrix_1_security { file("/var/log/syslog-ng/Citrix_1/security/$YEAR$MONTH$DAY.log"); }; destination d_Citrix_1_system { file("/var/log/syslog-ng/Citrix_1/system/$YEAR$MONTH$DAY.log"); };

destination d_Citrix_2_application { file("/var/log/syslog-ng/Citrix_2/application/$YEAR$MONTH$DAY.log"); }; destination d_Citrix_2_security { file("/var/log/syslog-ng/Citrix_2/security/$YEAR$MONTH$DAY.log"); }; destination d_Citrix_2_system { file("/var/log/syslog-ng/Citrix_2/system/$YEAR$MONTH$DAY.log"); };

destination d_exchange_front_application { file("/var/log/syslog-ng/exchange_front/application/$YEAR$MONTH$DAY.log"); }; destination d_exchange_front_security { file("/var/log/syslog-ng/exchange_front/security/$YEAR$MONTH$DAY.log"); }; destination d_exchange_front_system { file("/var/log/syslog-ng/exchange_front/system/$YEAR$MONTH$DAY.log"); }; destination d_exchange_front_virtual { file("/var/log/syslog-ng/exchange_front/virtual/$YEAR$MONTH$DAY.log"); };

destination d_isa2004_application { file("/var/log/syslog-ng/isa2004/application/$YEAR$MONTH$DAY.log"); }; destination d_isa2004_security { file("/var/log/syslog-ng/isa2004/security/$YEAR$MONTH$DAY.log"); }; destination d_isa2004_system { file("/var/log/syslog-ng/isa2004/system/$YEAR$MONTH$DAY.log"); };

destination d_citrix_gateway_application { file("/var/log/syslog-ng/citrix_gateway/application/$YEAR$MONTH$DAY.log"); }; destination d_citrix_gateway_security { file("/var/log/syslog-ng/citrix_gateway/security/$YEAR$MONTH$DAY.log"); }; destination d_citrix_gateway_system { file("/var/log/syslog-ng/citrix_gateway/system/$YEAR$MONTH$DAY.log"); }; destination d_citrix_gateway_secure_gateway { file("/var/log/syslog-ng/citrix_gateway/secure_gateway/$YEAR$MONTH$DAY.log"); };

# # ネットワーク機器のログの設定 # log { source(s_remote); filter(f_internet-gw); destination(d_internet-gw); }; log { source(s_remote); filter(f_firewall); destination(d_firewall); }; log { source(s_remote); filter(f_L3Switch); destination(d_L3Switch); }; log { source(s_remote); filter(f_pppoe-router); destination(d_pppoe-router); }; log { source(s_remote); filter(f_subnet-gw); destination(d_subnet-gw); };

# # Windows Serverのログの設定 # log { source(s_remote); filter(f_domain_controler_1_application); destination(d_domain_controler_1_application); }; log { source(s_remote); filter(f_domain_controler_1_directory); destination(d_domain_controler_1_directory); }; log { source(s_remote); filter(f_domain_controler_1_dns); destination(d_domain_controler_1_dns); }; log { source(s_remote); filter(f_domain_controler_1_file_replication); destination(d_domain_controler_1_file_replication); }; log { source(s_remote); filter(f_domain_controler_1_security); destination(d_domain_controler_1_security); }; log { source(s_remote); filter(f_domain_controler_1_system); destination(d_domain_controler_1_system); };

log { source(s_remote); filter(f_domain_controler_2_application); destination(d_domain_controler_2_application); }; log { source(s_remote); filter(f_domain_controler_2_directory); destination(d_domain_controler_2_directory); }; log { source(s_remote); filter(f_domain_controler_2_dns); destination(d_domain_controler_2_dns); }; log { source(s_remote); filter(f_domain_controler_2_file_replication); destination(d_domain_controler_2_file_replication); }; log { source(s_remote); filter(f_domain_controler_2_security); destination(d_domain_controler_2_security); }; log { source(s_remote); filter(f_domain_controler_2_system); destination(d_domain_controler_2_system); };

log { source(s_remote); filter(f_exchange_1_application); destination(d_exchange_1_application); }; log { source(s_remote); filter(f_exchange_1_security); destination(d_exchange_1_security); }; log { source(s_remote); filter(f_exchange_1_system); destination(d_exchange_1_system); };

log { source(s_remote); filter(f_exchange_2_application); destination(d_exchange_2_application); }; log { source(s_remote); filter(f_exchange_2_security); destination(d_exchange_2_security); }; log { source(s_remote); filter(f_exchange_2_system); destination(d_exchange_2_system); };

log { source(s_remote); filter(f_Citrix_1_application); destination(d_Citrix_1_application); }; log { source(s_remote); filter(f_Citrix_1_security); destination(d_Citrix_1_security); }; log { source(s_remote); filter(f_Citrix_1_system); destination(d_Citrix_1_system); };

log { source(s_remote); filter(f_Citrix_2_application); destination(d_Citrix_2_application); }; log { source(s_remote); filter(f_Citrix_2_security); destination(d_Citrix_2_security); }; log { source(s_remote); filter(f_Citrix_2_system); destination(d_Citrix_2_system); };

log { source(s_remote); filter(f_exchange_front_application); destination(d_exchange_front_application); }; log { source(s_remote); filter(f_exchange_front_security); destination(d_exchange_front_security); }; log { source(s_remote); filter(f_exchange_front_system); destination(d_exchange_front_system); }; log { source(s_remote); filter(f_exchange_front_virtual); destination(d_exchange_front_virtual); };

log { source(s_remote); filter(f_isa2004_application); destination(d_isa2004_application); }; log { source(s_remote); filter(f_isa2004_security); destination(d_isa2004_security); }; log { source(s_remote); filter(f_isa2004_system); destination(d_isa2004_system); };

log { source(s_remote); filter(f_citrix_gateway_application); destination(d_citrix_gateway_application); }; log { source(s_remote); filter(f_citrix_gateway_security); destination(d_citrix_gateway_security); }; log { source(s_remote); filter(f_citrix_gateway_system); destination(d_citrix_gateway_system); }; log { source(s_remote); filter(f_citrix_gateway_secure_gateway); destination(d_citrix_gateway_secure_gateway); };

# # とりあえず捕まえたログはtestディレクトリに入れておいて設定を確かめるためのおまけの行。 # destination d_separatedbyhosts { file("/var/log/syslog-ng/test/$HOST-$YEAR$MONTH$DAY.log"); };

log { source(s_remote); destination(d_separatedbyhosts); };

単一ホスト宛へのStatic Route の記述

|
/etc/sysconfig/static-routes に記述することはみなさん常識だと思われるのですが、 先日、
any net 172.16.1.1 netmask 255.255.255.255 gw 10.0.1.254 eth1
とかかいて、/etc/init.d/network restartってやったら 書き方がまずかったみたいで、static routeが全部なくなっちゃいました。 正しくは、
any host 172.16.1.1 gw 10.0.1.254 eth1
です。 routeコマンドと理屈は同じなんですけどね。

MRTGでLoad Averageのグラフをつくる

|

Cacti
これだけ便利なグラフツールがあるというのに、
いまさらMRTGを使うのはなぜか。道楽だからでしょうか?

いや、ちがいます。
うちのマシンはIBM ThinkPad 760ED(Pentium133MHz, 48MB RAM, HDD 1.2GB)という
超貧弱マシンにDebian(Sarge)を入れて無理やりサーバーにしているのです。
これにMySQLを入れて、Cactiを動かすと必ず固まってしまうのです。

業務ではCactiを使ってますよ。はい。
そのうちCactiのことも書きます。


設定はこうなりました。参考にしたのは、 ITmedia ●ロードアベレージと空きメモリ容量を取得するには です。はい。

###  >> Descr: 'Load Average ' | Name: 'Load Average' ###

Target[localhost_3]: .1.3.6.1.4.1.2021.10.1.5.1&1.3.6.1.4.1.2021.10.1.5.2:public@localhost : MaxBytes[localhost_3]: 2000 Title[localhost_3]: Load Average -- hoge eth0 192.168.0.252 PageTop[localhost_3]: <H1>Load Average 1 minute -- hoge eth0 192.168.0.252</H1> Options[localhost_3]: growright,nopercent,gauge,absolute,unknaszero,withzeroes YLegend[localhost_3]: Load Avalage ShortLegend[localhost_3]: percent Legend1[localhost_3]: 1 min localhost_3 Load Avalage Legend2[localhost_3]: 5 min localhost_3 Load Avalage LegendI[localhost_3]: 1min LegendO[localhost_3]: 5min <TABLE> <TR><TD>System:</TD> <TD>hoge in Unknown (configure /etc/snmp/snmpd.local.conf)</TD></TR> <TR><TD>Maintainer:</TD> <TD>Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)</TD></TR> <TR><TD>Description:</TD><TD>Load Average 1min </TD></TR> <TR><TD>Name:</TD> <TD>Load Average</TD></TR> </TABLE>

ここのページにWindowsのCPUやプロセス数のOIDが出てました。 http://www.syslog.gr/content/view/10/2/
CPU Load Monitoring:.1.3.6.1.2.1.25.3.3.1.2.3&.1.3.6.1.2.1.25.3.3.1.2.3(うちのは最後の数が3だったんだよなぁ。。。)
System Processes Info:.1.3.6.1.2.1.25.1.6.0&.1.3.6.1.2.1.25.1.6.0
User Sessions Info:.1.3.6.1.2.1.25.1.5.0&.1.3.6.1.2.1.25.1.5.0

indexmakerのhelp

|
大体こんなところで。
# indexmaker \
>--output="/var/www/mrtg/index.html" \
>--columns=1 \
>mrtg.cfg

以下、http://www.mrtg.jp/doc/indexmaker.htmlの抜粋です。

indexmaker [options] mrtg.cfg [other.cfg ...] 

オプション

--output=filename 出力ファイル名を指定 (デフォルト: 標準出力)

--filter title=~regexp タイトルに対して正規表現を使用してターゲットを選択 --filter pagetop=~regexp PageTopに対して正規表現を使用してターゲットを選択 --filter name=~regexp 名前に対して正規表現を使用してターゲットを選択

--title=text 生成されたインデックスファイルのタイトルを設定 --bodyopt=text BODYタグのオプションを設定 --pagetop=text ここで指定したテキストをと

...

の間に挿入

--columns=number カラム数x(デフォルトは2)のテーブルでグラフを表示

--sort=title グラフをタイトルでソート --sort=name グラフを名前でソート --sort=descr グラフをそのdescriptionでソート --sort=original そのまま(これがデフォルト)

--enumerate それぞれのグラフのタイトルにシーケンス番号を付ける

--width=number グラフの幅を指定 (デフォルト: 指定なし) --height=number グラフの高さを指定 (デフォルト: 指定なし)

--show=XXX インデックスにどのグラフを表示するかを選ぶ (デフォルトはXXX=day) --show=day --show=week --show=month --show=year --show=none

--section=h1 セクションのヘディングとしてPageTopにh1タグを使用(デフォルト) --section=title グラフのセクションヘディングとしてTitleを使用 --section=name セクションヘディングとしてグラフ名を使用 --section=descr セクションヘディングとしてグラフdescriptionを使用 --section=portname セクションヘディングとしてPageTopにport名のエントリーを使用

--rrdviewer=path rrdviewerのパス (デフォルト: /cgi-bin/14all.cgi) --prefix=path index.htmlの場所からグラフへのパス

機能説明

--output filename 出力のファイル名を指定します(デフォルトは標準出力です)。

--columns number numberカラムのテーブルでグラフを表示します。デフォルトは2です。

--sort title|name|descr|original ページ中のグラフをtitle、name、インタフェースのdescriptionで ソートするか、もしくはそのままかを選びます。

--enumerate それぞれのグラフのタイトルにシーケンス番号を付けます。

--width number グラフの幅を設定します。

--height number グラフの高さを設定します。

--prefix path デフォルトでは、indexmakerによって生成されるファイルはWorkDirに置かれます。 別のところに置きたい場合には、 インデックスが置かれる場所からWorkDirにどうやって届くかを指定します。 ディレクトリセパレータはURLに使われるように「/」を使わなければならないことに注意してください。 つまり、URL全体を入れることも可能です。

cfgmakerのhelp

|
ネットワークのトラフィックをとるだけなら、
# cfgmaker \
>--output=mrtg.cfg \
>--global="WorkDir:/var/www/mrtg" \
>--global="Language:eucjp" \
>--global="Options[_]: growright, bits" \
>public@www.example.local
で事足りるのではないだろうか。

以下、http://www.mrtg.jp/doc/cfgmaker.html
から抜粋させていただきました。

cfgmaker [オプション] [コミュニティ名@]ルータ名 [オプション] [コミュニティ名@]ルータ名

※長く打ち込むときは途中で「 \」で改行する。

【オプション】 --output=file 出力ファイル名(デフォルトはSTDOUT)

--ifref=nr インタフェースをインタフェース番号で参照する(デフォルト) --ifref=ip ... IPアドレスで参照する --ifref=eth ... Ethernet番号で参照する --ifref=descr ... インタフェースの記述で参照する --ifref=name ... インタフェース名で参照する --ifref=type ... インタフェースのタイプで参照する

--ifdesc=nr インタフェースをインタフェース番号で記述する(デフォルト) --ifdesc=ip ... IPアドレスで記述する --ifdesc=eth ... Ethernet番号で記述する --ifdesc=descr ... descrを使って記述する --ifdesc=name ... インタフェース名で記述する --ifdesc=alias ... インタフェースの別名で記述する --ifdesc=type ... インタフェースのタイプで記述する

--global "x: a" グローバルな設定エントリを追加します

--no-down インタフェースのadminあるいはoprステータスを無視します

--show-op-down 停止してあるインタフェースも表示します

--descint 'Traffic Analysis for'(だけ)以外の方法でインタフェースを 記述します

--subdirs=format ルータ毎にサブディレクトリを分けて使うようにします。 "format"にしたがってディレクトリ名がつけられ、HOSTNAMEと SNMPNAMEはそれらの項目の持つ値と置き換わります。例えば --subdirs=HOSTNAME or --subdirs="HOSTNAME (SNMPNAME)" のように指定します。

--noreversedns IPアドレスの逆引きを行わないようにします

【設定】 --outputと--globalを除いて、 すべてのオプションはコマンドラインで指定したすぐ後のルータにだけ有効です。 コマンドラインの最初のほうで指示したオプションが、 後から別の値を使って指定し直された場合、 残りのルータに関しては新しく指定した方の値が有効になります。 この方法を使えば複数のルータをまとめて扱うことも、 個別に扱うことも容易になります。

--output file cfgmakerの出力をファイルfileに書き出します。 デフォルトの出力先は STDOUTです。 --outputコマンドライン中で使われるのは一回だけです。 複数回指定したときは最後の--outputで指定したファイルが使われます。

--ifref nr|ip|eth|descr|name インタフェースの認識方法を指定します。 デフォルトはnrで、ルータのインタフェース番号で認識されます。 残念ながらSNMPツリーでのインタフェースの番号付けの方法は変化する可能性があります。 インタフェースが追加されたときに番号付けを変えてしまうルータもあれば、 正午になると決まって番号付けを変えてしまうようなお茶目なルータもあるのです。

インタフェースをIPアドレスで識別するにはipを、 Ethernetアドレスで 識別するにはethを、 インタフェースのdescriptionで識別するには descrを、 インタフェース名で識別するにはnameを使います。

選んだ方法でインタフェースがユニークに識別できない場合は、 cfgmakerが その旨知らせてくれます。

--ifdesc nr|ip|eth|descr|name|type|alias インタフェースのdescriptionに何を使うかを指定します。 description はターゲットのTitle[]プロパティと HTMLコードで定義したテキストヘッダにPageTopとして現れます。 デフォルトでは単なるインタフェース番号のnrを使うようになっていますが、 これはグラフを見る側にはあまり便利とは言えません。 その他に使えるプロパティは6つあります。 インタフェースのIPアドレスを使うにはipを、 Ethernetアドレスならeth、 もっと記述性のよいものを使いたいならばdescr、name、aliasがいいでしょう。 機器によってこれらは異なっているので、試行錯誤が必要になるかも知れません。 例えばIOSを使っているCiscoルータではnameを使うと "S0"がインタフェースのdescription として返され、 descrを使うと"Serial0"が、 aliasには"Link to HQ" (ルータの設定でインタフェースのdescriptionにこのように入力してあるとして) のような応答が返って来ます。

--global "bla: abc" 生成した設定ファイルにグローバルなオプションを追加したいときに使用します。 複数のオプションを追加するために--globalを何回か使ってもかまいません。 この行はコマンドライン中で次のルータの設定部分の直前に現れます。

--global "workdir: /home/mrtg" デフォルトのオプションが必要なときは次のようにします。

--global "options[_]: growright,bits" コマンドラインの最後のルータの後ろに--globalを指定すると、 設定ファイルの最後のルータの設定部分の後ろにこの行が現れます。

--noreversedns IPアドレスの逆引きを行わないようにします。 DNSを使わない環境では必須です。

--no-down 通常cfgmakerは固定的にUPにしてあるインタフェース 及び実際にUPであるインタフェース以外は無視しますが、 このスイッチを使ってすべてを対象にすることができます。

--show-op-down 運用上はdown状態になっているインタフェースも含めます。

HOST-RESOURCES-V2-MIB

|

■HOST-RESOURCES-V2-MIB
http://www.oidview.com/mibs/0/HOST-RESOURCES-V2-MIB.html

Cactiで、 Windowsの「Logged in Users」というグラフがつくれて、 それのOIDが「.1.3.6.1.2.1.25.1.5.0」だったので調べてみました。
 hrSystemNumUsers 1.3.6.1.2.1.25.1.5 OBJECT 
たぶんシステムモニタでいうと、 「Server」オブジェクトの「Logon Total」の値だと思うんですよね。

・・・何がログオンしてるんだろう。。。

ipsecの設定

|

■必要なこと
・SAのポリシーの定義 (policy_id、1..255、かぎ交換のポリシーのこと)
・セキュリティゲートウェイの番号 (gateway_id、1.30、接続する相手先のこと)

■トンネルモード

①セキュリティゲートウェイを設定する(gateway_id) 相手先のセキュリティゲートウェイのIPアドレスの設定
# ipsec ike remote address (gateway_id) (相手先のWAN側アドレス)
事前共有鍵の登録
# ipsec ike pre-shared-key (gateway_id) text (仮共有キー)
②SAのポリシーを設定する(policy_id)
# ipsec sa policy (policy_id) (gateway_id) (ah/esp) (esp_algo) (ah_algo)
例:# ipsec sa policy 06 24 esp des-cbc sha-hmac
③トンネルの設定
# tunnel select 2
# ipsec tunnel (policy_id)
# tunnel enable 2

IPの設定

|
○インターフェースにipアドレスを設定する
# ip [interface] address [ipaddress/mask] 
# ip [interface] address dhcp 
# ip pp address [ipaddress/mask]
# ip [interface] secondary address [ipaddress/mask] 
# ip [interface] secondary address dhcp
○ルーティングの設定
# ip route default gateway [address/pp/dhcp/tunnel] [metric/hide/weight] 
# ip route [net/mask] gateway [address/pp/dhcp/tunnel]

NATの設定

|
①NATディスクリプタの動作タイプの設定
# nat descriptor type [nat_descriptor 1..21474836] [nat/masquerade/nat-masquerade/none]
※IPアドレスの変換だけを「NAT」、ポートの変換も合わせて「masquerade」としている ②NAT処理のIPアドレスの設定
# nat descriptor address outer [nat_descriptor] [outer_ipaddress/ipcp/primary] 
# nat descriptor address inner [nat_descriptor] [inner_ipaddress/auto] 
③静的NATの登録
# nat descriptor static [nat_descriptor] [id] [outer]=[inner] [count]
④静的IPマスカレードの登録
# nat descriptor masquerade static [nat_descriptor] [id] [inner_ip] [protocol] [[outer_port=]inner_port]
⑤インターフェースへNATディスクリプタを適用する
# ip [interface] nat descriptor [nat_dewscriptor_list 16こまで]
# ip pp nat descriptor [nat_dewscriptor_list 16こまで]
# ip tunnel nat descriptor [nat_dewscriptor_list 16こまで]

設定の保存とリストア

|
RTXの場合は、自分自身がTFTPサーバーとして振舞う (考えようによってはいい奴である) ■RTXでのTFTPホストの設定
これはRTXの画面
> administrator
Password:******
# tftp host 172.16.0.32
# show tftp
アクセス許可:172.16.0.32
# save

以下、RTXは172.16.0.1、UNIXは172.16.0.32という設定で。

■TFTPホスト(UNIX)に、RTXの設定を保存する操作 最初に設定を保存するファイルをUNIX上に作っといてね。
これはUNIXのシェルの画面
$ tftp
tftp> connect 172.16.0.1 (←RTX)
tftp> mode ascii
tftp> get config/(administratorのpassword) ファイル名称
Received 768 bytes in o.1 seconds
tftp> quit
$
■TFTPホスト(UNIX)から、RTXに設定を書き込む操作
これはUNIXのシェルの画面
$ tftp
tftp> connect 172.16.0.1 (←RTX)
tftp> mode ascii
tftp> put ファイル名称 config/(administratorのpassword)
Sent 799 bytes in 0.1 seconds
tftp> quit
$

基本コマンド

|
○管理者モードに入るには?
 > administrator
○ヘルプ
# show command
○設定の表示
# show config
# show config pp [number]
# show environment
○状態の表示
# show arp
# show status [interface]
# show status pp [pp_num]
# show ip route
# show status pptp
○設定の保存
# save
○設定ファイルの一覧
# show config list
○設定の初期化
# cold start
○動的情報の初期化
# clear arp
# clear ip dynamic routing
# clear bridge learning
# clear log
# clear account pp [number]
# clear account [interface]
# clear dns cache
○ログインパスワードの設定
# login password
○管理者パスワードの設定
# administrator password
○ログインタイマの設定
# login timer 30..21474836
または
# login time clear 
(telnetで入ったときはこれは有効にならない)
○タイムゾーンの設定
# timezone jst (これで日本時間)
○現在の日付と時刻の設定
# date yyyy-mm-dd
# time hh:mm:ss
# ntpdate [ntp-server]

○仮想インターフェースの操作

# pp enable [all / number]
# tunnel enable [all / number]
逆は # disable

# connect [pp_number] # disconnect [pp_number]

○再起動
# restart
○インターフェースの再起動
# interface reset [interface]
# interface reset pp [number]

メールのルーティング

|

メールルーティング用メールサーバーのSendmailの設定。

■あるドメイン宛のメールは全部、担当ホストにリレーしてしまう。(mailertable)
例:xxx@hogehoge.local宛のメールはすべてhogemail.hogehoge.localに中継する。

○/etc/mail/sendmail.mc
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
○/etc/mail/mailertable
sapporo.hogehoge.local	smtp:mail.sapporo.hogehoge.local


■ドメインにとどまらず、メールアドレスによって振る舞いを決める(virtusertable)

○/etc/mail/sendmail.mc
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl

○/etc/mail/virtusertable

# postmaster, admin宛てのメールは
# メールゲートウェイサーバーのrootが受け取るようにしている。
postmaster@hogehoge.local	root
admin@hogehoge.local		root

# imap.hogehoge.local 公用のアドレスはimapサーバーに届かせる。 info@hogehoge.local hoge-staff@imap.hogehoge.local sales@hogehoge.local sales@imap.hogehoge.local recruit@hogehoge.local recruit@imap.hogehoge.local

# 上から順番にマッピングしていき、 # 最後の行の@の前の部分は、すべて%1に代入される。 # 一般ユーザー用のメールはpopサーバーに配送されるイメージ。 @hogehoge.local %1@pop.hogehoge.local

# support.hogehoge.localというサブドメイン用のマッピングも # 同じくvirtusertableに記述できる。 postmaster@support.hogehoge.local root user01@support.hogehoge.local user01@imap.hogehoge.local user02@support.hogehoge.local user02@imap.hogehoge.local

# 「そんなユーザーは存在しない」というえらーメッセージを返信するなら # error:~~と書けばよい。「~~」の部分がえらーメールのbodyとなる。 @support.hogehoge.local error:nouser No such user here

# もちろん違うドメインのメールをリレーすることも可能である。 postmaster@example.local root @example.local %1@example.hogehoge.local

   

sendmail.mcからsendmail.cfを作成するには

|
最近のRedHat系(RHEL、FedoraCore、CentOSなど)は /etc/mail/の中にMakefileがあるので、
# make
とやるだけでいい。とても楽々。 しかも virtusertable access domaintable mailertable をhashdbにするのも
# make
でおわり。
しかし、基本的には、${CFDIR}/cf/にsendmail.mcを置き(おかなくてもいいけどさ)、
# m4 ../cf/m4/cf.m4 sendmail.mc > /etc/sendmail.cf
とする。 ※${CFDIR}はhttp://www.kuwazou.net/blog/tcpip/mail/sendmail/m4/を参照

RedHatの場合はsendmail.mcの1行目に
include(`/usr/share/sendmail-cf/m4/cf.m4')
という文があるためにcf.m4を指定しなくてよいのだ。

もしくは、
# cd ${CFDIR}/cf
# ./Build sendmail.cf
とする。実はこのスクリプト、非常に簡単であり、
#!/bin/sh

SMROOT=${SMROOT-../..}
BUILDTOOLS=${BUILDTOOLS-$SMROOT/devtools}

M4=/usr/bin/m4
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
echo "Using M4=$M4"

eval exec ${MAKE-make} M4=$M4 $*


これだけである。
しかし、Solaris8には存在しない。

   

RedHat風/bin/bashプロンプトにしたい

|

ただそれだけ。

/bin/shだろうが、/bin/cshだろうが、やっぱり慣れている/bin/bashにしたい。
そして、RedHatのようにしたい。

○ログインshellを /bin/bash にする。
$ chsh -s /bin/bash
または、vipw または、# vi /etc/passwdで、シェルの部分を手直しする。
root:x:0:0:root:/root:/bin/bash
シェルのパスを間違えると、悲惨なことになる。気をつけたし。 (シングルユーザーモードなら/etc/passwdを書き換えて復帰させられたかな?) ○ホームディレクトリの.bash_profileやら、.bashrcなどに書き込む とにかく、ログインするときに読み込むやつならよし。
PS1='[\u@\h \W]\$ '
export PS1
○もう一回ログインしなおすか、下記のコマンドで有効になる。
$ source .bash_profile

RHEL4やFC3などで日本語をeuc-jpにする

|

Xの話ではありません。
telnetやsshなどで管理する場合の話です。

UTF-8のままでもいいんだけど、
今まで管理してきたものがeuc-jpばっかりだから、
やっぱりeuc-jpの方が便利なんですよね。

○/etc/sysconfig/i18n
LANG="ja_JP.euc-jp"
SUPPORTED="ja_JP.euc-jp:ja_JP:ja"
SYSFONT="latarcyrheb-sun16"
○/etc/man.config
#PAGER          /usr/bin/less -iRs
PAGER           /usr/bin/less -irs

もっとも、本物の管理者は日本語などに頼らない。。。。

なんかど忘れするので、書いておきます。

このコマンド、グループポリシーを適用させるってよくいわれるけど、ドメインコントローラセキュリティポリシーとか、ドメインセキュリティポリシーにも効きますよ。
って、根本は同じものなのかしら?

■Windows Server 2003
 gpupdate

■Windows 2000 Server
 secedit /refreshpolicy machine_policy
 secedit /refreshpolicy user_policy


C:\>gpupdate /?
Microsoft(R) Windows(R) Operating System Group Policy Refresh Utility v5.2
(C) Microsoft Corporation. All rights reserved.

説明: グループ ポリシーの設定を最新の情報に更新します。

文法: GPUpdate [/Target:{Computer | User}] [/Force] [/Wait:<値>] [/Logoff] [/Boot] [/Sync]

パラメータ:

値 説明 /Target:{Computer | User} ユーザーのみまたはコンピュータのみの ポリシー設定を更新するかを指定します。 既定では、どちらのポリシー設定も更新 されます。

/Force すべてのポリシー設定を適用し直します。 既定では、設定が変更されたポリシーの みが適用し直されます。

/Wait:{値} ポリシー処理の完了を待つ時間 (秒) を 設定します。既定は 600 秒です。 '0' は完了を待たないことを意味します。 '-1' は完了するまで待つことを意味します。 指定された時間が経過すると、コマンド プロンプトが返されますが、ポリシーの 処理は続行されます。

/Logoff グループ ポリシーの設定の更新完了後にログ オフします。これは、バックグラウンド更新 サイクルではポリシーを処理しないが、ユーザー のログオン時にポリシーを処理するクライアント 側の拡張に必要です。例としては、ユーザーを ターゲットとした "ソフトウェアのインストール" や "フォルダ リダイレクト" があげられます。 ログオフを必要とする拡張が呼び出されない 場合は、このオプションは影響しません。

/Boot グループ ポリシーの設定の更新完了後に再 起動します。これは、バックグラウンド更新 サイクルではポリシーを処理しないが、コン ピュータの起動時にポリシーを処理するクラ イアント側の拡張に必要です。例としては、 コンピュータをターゲットとした "ソフトウェ アのインストール" があげられます。再起動を 必要とする拡張が呼び出されない場合は、この オプションは影響しません。

/Sync 次のフォアグラウンド ポリシー アプリケー ションを同時に実行します。フォアグラウンド ポリシー アプリケーションはコンピュータの 起動時およびユーザーのログオン時に実行され ます。/Target パラメータを使うと、これを ユーザー、コンピュータ、または両方に指定する ことができます。指定された場合 /Force および /Wait パラメータは無視されます。

secedit /refreshpolicy

セキュリティ設定を最新の情報に更新する secedit /refreshpolicy このコマンドは、グループ ポリシー オブジェクトにセキュリティ設定を再適用して、 システム セキュリティを最新の情報に更新します。

構文 secedit /refreshpolicy {machine_policy | user_policy}[/enforce]

パラメータ

machine_policy ローカル コンピュータのセキュリティ設定を最新の情報に更新します。

user_policy 現在、コンピュータにログオンしているローカル ユーザー アカウントの セキュリティ設定を最新の情報に更新します。

/enforce グループ ポリシー オブジェクトの設定に変更がない場合でも、 セキュリティ設定を最新の情報に更新します。

いつも忘れるので書いておこう。
ある場所からは認証なしでページ閲覧できて、
他の場所からは認証が必要になるというパターンの.htaccessの書き方。
もちろん、httpd.confなどに直接書いてもOKです。

【条件】
mod_access モジュールが有効になっていること
mod_auth モジュールが有効になっていること

○httpd.conf
AllowOverride Limit AuthConfig 

○.htaccess

# "Limit"ルール
#
# この書き方に違和感を覚える人もいるかもしれませんが、
# (特にルーターの設定をする人)
# ルーターのACLは上から評価していって、
# 適合するものがあったらその時点で評価は終了しますが、
# Apacheのこれは、Orderの順番で必ず両方を評価していき、
# 下位のACLが上位のACLを上書きしていきます。
# つまり、172.16.0.1の場合、"Deny from all"で拒絶対象となりますが
# 次の"Allow from 172.16."で救済されるわけです。
# 
Order Deny,Allow
Deny from all
Allow from 10.0.0.32/27 172.16. 192.168.0.1 .example.local

# # "AuthConfig"ルール # AuthUserFile /var/www/htpasswd AuthName "Secret Area" AuthType Basic require valid-user

# # Sastisfy any だと"Limit"と"AuthConfig"どちらかにパスすればOKです。 # これを Satisfy all とすると、 # "Limit"と"AuthConfig"両方の条件を満たさないとOKとなりません。 Satisfy any

GetifをつかってMIBからOIDを調べる

|

実際、OID(オブジェクト識別子)の図を思い出したり(.1.3.6.1までは覚えてるけど)
snmpwalkでちまちまと探すのも結構面倒だということで、
Windows上でGetifというsnmpツールを使うのが楽です。
http://www.wtcs.org/snmp4tpc/getif.htm
※こちらが本家のようですね。

こんな風につかえます。
getif_2.JPG

※ベンダーが配布しているMIBファイルはインストールしたディレクトリの"Mibs"の中に入れて使います。
ちなみに「MIB」っていうのはhostsファイルみたいなもので、オブジェクト識別子(OID:.1.3.6.)とオブジェクト記述子(System.Descr)の対応付けを記述してあるファイルです。
 
例:)D:\Program Files\Getif 2.3.1\Mibs\xxx.mib.txt
 そしたら、"Mibs"のなかのIndexファイルを削除して、Getifを再起動します。
 Indexファイルは起動するたびに新しく作られるのです。

このようにして、MIBを使ってOIDを取得し、
そのOIDをもとにMRTGやCactiを使ってグラフを作ります。

たとえば、Fortinet社のファイアウォールFortiGateだと、
CPU利用率(%):.1.3.6.1.4.1.12356.1.8
メモリ利用率(%):.1.3.6.1.4.1.12356.1.9
セッション数(%):.1.3.6.1.4.1.12356.1.10
とわかります。

同じことをNET SNMPのツールでやろうとすると、こんな感じです。

■システムのOIDを見たい場合
$ snmpgetnext -v 1 10.0.16.254 -c public -On .1.0
.1.3.6.1.2.1.1.1.0 = RTX1000 Rev.7.01.41 (Tue Sep 28 17:02:18 2004)
■システムのオブジェクト記述子を見たい場合
$ snmpgetnext -v 1 10.0.16.254 -c public .1.0
system.sysDescr.0 = RTX1000 Rev.7.01.41 (Tue Sep 28 17:02:18 2004)

この「.1.3.6.1.2.1.1.1.0」という文字列だとか、
「ssytem.sysObjectID.0」だとかを引き出すのが面倒なんです。
たまにしか使わないものにとっては。

■ちなみにsnmpwalkでどうやってCPUの利用率とかメモリ利用率までたどり着くかというと、 まず、上の情報を頼りに、「.1.3.6.1.2.1.1.1.0」から、「.1.0」を削ってみて、 ※末尾の.0は、ただのオフセットで終了印みたいなものです。
$ snmpwalk -v 1 10.0.16.254 -c public -On .1.3.6.1.2.1.1
.1.3.6.1.2.1.1.1.0 = RTX1000 Rev.7.01.41 (Tue Sep 28 17:02:18 2004)
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.1182.1.23
.1.3.6.1.2.1.1.3.0 = Timeticks: (1638801895) 189 days, 16:13:38.95
.1.3.6.1.2.1.1.4.0 =
.1.3.6.1.2.1.1.5.0 = cc-gw
.1.3.6.1.2.1.1.6.0 =
.1.3.6.1.2.1.1.7.0 = 12
■オブジェクト記述子だと「.sysDescr.0」を削ってこんな感じ
$ snmpwalk -v 1 10.0.16.254 -c public system
system.sysDescr.0 = RTX1000 Rev.7.01.41 (Tue Sep 28 17:02:18 2004)
system.sysObjectID.0 = OID: enterprises.1182.1.23
system.sysUpTime.0 = Timeticks: (1638956372) 189 days, 16:39:23.72
system.sysContact.0 =
system.sysName.0 = cc-gw
system.sysLocation.0 =
system.sysServices.0 = 12
ここらへんで、この機械(YAMAHA RTX1000)のEnterprise OIDは「.1.3.6.1.4.1.1182」なんだなあ、とくらいに思ってください。 得られたOID「 .1.3.6.1.4.1.1182」に対してsnmpwalkをやってみます。
$ snmpwalk -v 1 10.0.16.254 -c public .1.3.6.1.4.1.1182
enterprises.1182.2.1.1.0 = 5
enterprises.1182.2.1.2.0 = 16777216
enterprises.1182.2.1.3.0 = 4194304
enterprises.1182.2.1.4.0 = Gauge32: 42
enterprises.1182.2.1.5.0 = Gauge32: 1
enterprises.1182.2.1.6.0 = Gauge32: 1
enterprises.1182.2.1.7.0 = Gauge32: 3
enterprises.1182.2.1.8.0 = Gauge32: 0
enterprises.1182.2.1.9.0 = Gauge32: 0
enterprises.1182.2.1.10.0 = Gauge32: 0
enterprises.1182.2.1.11.0 = Gauge32: 0
enterprises.1182.2.2.1.0 = "internal"
enterprises.1182.2.2.2.0 = "0" Hex: 30
enterprises.1182.2.2.3.0 = "RTX1000 Rev.7.01.41 (Tue Sep 28 17:02:18 2004)"
enterprises.1182.2.2.4.0 = Timeticks: (1638967882) 189 days, 16:41:18.82
enterprises.1182.2.2.5.0 = 1
enterprises.1182.2.2.6.0 = 1
enterprises.1182.2.2.7.0 = IpAddress: 0.0.0.0
enterprises.1182.2.2.8.0 = 1
enterprises.1182.2.2.9.0 = 2
enterprises.1182.2.2.10.1.1.1 = 1
enterprises.1182.2.2.10.1.1.2 = 2
長いので、以下略

とか何とかやってるのもかったるいでしょう。
ということで、
1.MIBを持ってくること。(メーカーのサポートサイトや、マニュアルCDなんかについてます。)
2.MIBをGetifにかけて、OIDを調べること
というのがよいパターンだと思います。

※一応、snmptranslateというコマンドでコンソール上に木構造を表現できるのですが、  どうも自ホストにしか効かないコマンドのようです。
$ snmptranslate -Tp -OS system
+--system(1)
   |
   +-- -R-- String    sysDescr(1)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -R-- ObjID     sysObjectID(2)
   +-- -R-- TimeTicks sysUpTime(3)
   +-- -RW- String    sysContact(4)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -RW- String    sysName(5)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -RW- String    sysLocation(6)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -R-- INTEGER   sysServices(7)
   |        Range: 0..127
   +-- -R-- TimeTicks sysORLastChange(8)
   |        Textual Convention: TimeStamp
   |
   +--sysORTable(9)
      |
      +--sysOREntry(1)
         |  Index: sysORIndex
         |
         +-- ---- INTEGER   sysORIndex(1)
         |        Range: 1..2147483647
         +-- -R-- ObjID     sysORID(2)
         +-- -R-- String    sysORDescr(3)
         |        Textual Convention: DisplayString
         |        Size: 0..255
         +-- -R-- TimeTicks sysORUpTime(4)
                  Textual Convention: TimeStamp

nagiosからスクリプトを発動させる

|

使い方としては、ルーターなどの機器がハングアップしてしまった時に、そのルーターがつながっているリモート遠隔操作できる電源装置にtelnetなどでログインしてリブート操作を行うような場合に使えます。

設定はこんな感じです。 event_handler を使うのがポイントです。
define service {
       use                             generic-service
       service_description             PING
       host_name                       router
       max_check_attempts              1
       normal_check_interval           1
       retry_check_interval            1
       contact_groups                  admins
       check_command                   check_ping!1000.0,60%!1000.0,100%
       event_handler                   REBOOT-ROUTER
}
この設定は1分おきにに"router"にpingを打ち、 反応がない場合や復旧したときのような「状態変化」が起きたときに、 「REBOOT-ROUTER」というスクリプトをCallします。 ■「REBOOT-ROUTER」はどこに定義されているか
event_handler                   REBOOT-ROUTER
の部分ですが、checkcommands.cfg内で定義します。
#
# 'restart-router' command definition
#
define command{
	command_name    REBOOT-ROUTER
	command_line    /usr/lib/nagios/plugins/eventhandlers/reboot-router $SERVICESTATE$ $STATETYPE$ $SERVICEATTEMPT$
}

/usr/lib/nagios/plugins/eventhandlers/reboot-routerというスクリプトを動かしているのはわかるとして、
$SERVICESTATE$
$STATETYPE$
$SERVICEATTEMPT$
という3つの引数はなんでしょうか?

■nagiosの「状態変化」とは何か 実際に監視しているrouterから反応がなくなったときのnagiosのログはこのようになります。
[02-08-2006 10:46:52] HOST ALERT: router;DOWN;SOFT;1;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:02] HOST ALERT: router;DOWN;SOFT;2;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:12] HOST ALERT: router;DOWN;SOFT;3;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:22] HOST ALERT: router;DOWN;SOFT;4;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:32] HOST ALERT: router;DOWN;SOFT;5;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:42] HOST ALERT: router;DOWN;SOFT;6;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:52] HOST ALERT: router;DOWN;SOFT;7;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:02] HOST ALERT: router;DOWN;SOFT;8;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:12] HOST ALERT: router;DOWN;SOFT;9;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] HOST ALERT: router;DOWN;HARD;10;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] SERVICE ALERT: router;PING;CRITICAL;HARD;1;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] SERVICE EVENT HANDLER: router;PING;CRITICAL;HARD;1;REBOOT-ROUTER
最後から3行目から2行目にかけての
[02-08-2006 10:48:22] HOST ALERT: router;DOWN;HARD;10;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] SERVICE ALERT: router;PING;CRITICAL;HARD;1;CRITICAL - Plugin timed out after 10 seconds
が「状態変化」です。 「状態変化」がおきると、EVENT HANDLERのREBOOT-ROUTERがCallされます。
[02-08-2006 10:48:22] SERVICE EVENT HANDLER: router;PING;CRITICAL;HARD;1;REBOOT-ROUTER
このとき、 $SERVICESTATE$ に、CRITICAL $STATETYPE$ に、HARD $SERVICEATTEMPT$ に、1 が渡されます。

■スクリプト"REBOOT-ROUTER"ではどうなっているか では、/usr/lib/nagios/plugins/eventhandlers/reboot-routerを見てます。

#!/bin/sh

# # reboot-router $SERVICESTATE$,$STATETYPE$,$SERVICEATTEMPT$ #

# What state is the ROUTER ? case "$1" in OK) ;; WARNING) ;; UNKNOWN) ;; CRITICAL) # $SERVICESTATE$が"CRITICAL"だった場合 case "$2" in SOFT) ;; HARD) # $STATETYPE$が"HARD"だった場合 case "$3" in 1) # $SERVICEATTEMPT$が"1"だった場合 echo -n "hard" /var/log/nagios/Router_Reboot/hoge.sh # このスクリプトが発動する ;; esac ;; esac ;; esac exit 0

このように、
$SERVICESTATE$ に、CRITICAL、かつ、
$STATETYPE$ に、HARD、かつ、
$SERVICEATTEMPT$ に、1
の条件がすべてそろったときにだけ、リモート電源操作スクリプトの
"/var/log/nagios/Router_Reboot/hoge.sh"をCallするようになっています。

■なぜ引数によって条件分岐するようにしているのか これはなぜかというと、"router"が復旧したときのログに関係があります。
[02-08-2006 10:50:02] HOST ALERT: router;UP;HARD;1;PING OK - Packet loss = 0%, RTA = 0.72 ms
[02-08-2006 10:50:10] SERVICE ALERT: router;PING;OK;HARD;1;PING OK - Packet loss = 20%, RTA = 4.21 ms
[02-08-2006 10:50:10] SERVICE EVENT HANDLER: router;PING;OK;HARD;1;REBOOT-ROUTER
復旧したときも「状態変化」なので、EVENT HANDLERでREBOOT-ROUTERがCallされます。 ただし、このときの引数は $SERVICESTATE$ に、OK $STATETYPE$ に、HARD $SERVICEATTEMPT$ に、1 であり、shスクリプトの条件分岐によって、 リモート電源操作スクリプト"/var/log/nagios/Router_Reboot/hoge.sh" はCallしないようになっています。 復旧したときに、また電源をon/offされたらエンドレスになってしまいますので。

 

windowsのログをsyslogで収集する

|

■Windowsのログをリモートのsyslogに吐き出す

NTSyslogをダウンロードしてインストールします。

オリジナルはきっとここですね。
http://www.balabit.com/products/syslog_ng/

日本語Windowsだとでんかさんのつくられた日本語版がいいと思います。
http://www.hi-ho.ne.jp/denkas/library/
日本語のメッセージをeucに変換してくれます。
インストール方法はReadmeに書いてあります。とても簡単。
設定もGUIで全部できます。

フォワーディングDB

|

■フォワーディングDBの概要

各ポートで受信したすべてのMACアドレスを、データベースとして保管しています。
このデータベース内の情報を基に、フレームを送信するかフィルタリングするかが決定されています。

■フォワーディングDBとarpテーブルはどのような関係があるのか

ARPテーブルは、IPアドレスとMACアドレスの対応表に過ぎません。 もっとも、L3スイッチなので、それにポート番号とVLANの識別も加わります。
hoge-sw1:6 # show iparp
Destination     Mac                Age Static  VLAN    [VID]   Port
172.16.128.1    00:09:0F:06:FF:00    8   NO  dmz       [4087]  7

fdb

hoge-sw1:3 # show fdb
Index              Mac              Vlan       Age  Use  Flags Port List
------------------------------------------------------------------------
01290-006 00:09:0F:06:FF:00        dmz(4087)  0000 4802 d i      7

(「00:09:0F:06:FF:00は、ダイナミックエントリでIP」の意味です) Flags : d - Dynamic, s - Static, p - Permanent, m - MAC, i - IP, M - Mirror, B - Egress Blackhole, b - Ingress Blackhole. Total: 383 Static: 42 Perm: 0 Dyn: 341 Dropped: 0 FDB Aging time: 300 seconds

ipfdb
hoge-sw1:1 # show ipfdb
  Dest IP Addr  TblIdx MacIdx Flag FlowInfo   MAC Address     VLAN Port
--------------- ------ ------ ---- -------- ----------------- ---- ----
172.16.128.1    02E0.0 0129.0          0000 00:09:0F:06:FF:00 4087 7
結局、よくわからないので、通信ができなくなった場合、 (他のL3スイッチのVLANにぶら下がっているノードから、SummitのVLANにぶら下がっているノードに対して通信できなくなる場合が多い。SummitのVLANのIPアドレスまではpingが通り、Summit自身からは両ノードに対してpingが通る。)
# clear fdb
として、フォワーディングDBのダイナミックエントリをクリアしてしまうのが一番です。

これが効かなかったら、通信できないノードをリブートさせるか、物理的配線を疑った方がよいと思います。

■ライセンスサービスのインストール

・エンタープライズ ライセンスサーバー
 LSと同じサイト内のTSから自動的に発見できる。

・ドメイン/ワークグループ ライセンスサーバー
 LSと同じドメイン内のTSから自動的に発見できる。

2000ではドメインコントローラに、2003では任意のサーバーにインストールする。

ただし2003で、非ドメインコントローラがLSになった場合には、
ドメインライセンスサーバーは自動的に発見できない。

■ライセンスサービスの発見

ターミナルサーバーサービスが起動されたときに開始される。
環境によって発見プロセスは異なる。


■ワークグループ/NTドメインの場合

1.LicenseServersレジストリキーに指定されている任意のLSへの接続

2.mailslotブロードキャストを実行して、サブネット内のLSを見つける


■Active Directoryドメインの場合

1.LicenseServersレジストリキーに指定されている任意のLSへの接続

2.LDAPクエリでエンタープライズライセンスサーバーを探す
  LDAP://CN=TS-Enterprise-License-Server,CN=site-name,CN=sites,CN=configuration,DC=domain,DC=com

3.サイト内のすべてのドメインコントローラにクエリを出す。

4.ドメイン内のすべてのドメインコントローラにクエリを出す。

--

発見されるとレジストリにライセンスサーバーの名前をキャッシュする。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Parameters

2003:キャッシュされたLSがすべて使用できなくなるまでは再検出は行われない。
2000:2時間ごとにLSにpingを打ってチェックしている。

2003:再検出の間隔は1時間に1回。
2000:15分おきに再検出をおこなう。


■特定のライセンスサーバーを優先にする。(検出プロセスを使わない)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters
で、DefaultLicenseServer(REG_SZ)にLSのホスト名(IPアドレス)を記述する。

  

ライセンスプロセス

|

■2003 PerDeviceでのクライアントライセンスの配布

※TSクライアントとLSが直接通信することはない。

※2003の場合、猶予期間120日、一時ライセンス90日である。
 これらは別物である。
 猶予期間とは「LSがなくても接続できる」期間。
 一時ライセンスは「LSが一時的に接続を許可した、トークンがなくても接続できる」ライセンスである。


1.【クライアントの所持しているCALの確認】
  デバイスからTSへの最初の接続。
  TSはTSクライアントデバイスが
  ライセンストークンを所持しているかどうかを確認。
  (初回の接続だからクライアントはトークンを所持していないはず)
  HKLM\Software\Microsoft\MSLicensing

2.【ライセンスサーバー発見プロセス】
  TSはLSへの接続を試みる。(発見プロセス)
  LSがなかった場合、猶予期間内(120日)のみTSへの接続が可能。

3.【初回接続デバイスのための一時トークンの発行】
  TSはLSにこのデバイスのための一時的なトークンを要求する。
  TSクライアントがTSにログオンを成功すると、
  TSは、このデバイスのための一時的なトークンを確認した旨を、LSに指示。
  (90日間一時ライセンスの発行)

4.【ライセンストークンの発行】
  デバイスからTSへの2回目の接続。
  TSは、このデバイスのためのトークンをLSに要求。
  LSのプールにデバイスCALの在庫があれば、
  このデバイスのためにデバイスCALトークンを発行する。
  (恒久ライセンスの発行)
  デバイス名、デバイスのユーザー名、発行日付をログに記録。

5.【ライセンストークンの自動更新手続き】
  TSデバイスCALは永続的なライセンスではあるが、
  発行された日付から52~89日で期限が切れるように設定されている。
  TSはこの期限が切れる7日前からライセンス更新作業を行う。
  恒久ライセンスのはずなのに有効期限があるのはこのためである。
  
  ※一時的なトークンでは90日間しか接続できない。


■2003 PerUserでのクライアントライセンスの配布

基本的にはPerDeviceと同じプロセス。

猶予期間が切れた後、TSが確実にLSの場所を見つけられなくてはならない。

TSユーザーCALトークンを特定のユーザーアカウントに1対1で割り当てる方法はない。


■2000 クライアントライセンスの配布

猶予期間が90日です。

時刻を設定する

|
■NTPサーバーと同期するには
(config)# ntp server 10.0.1.4
(config)# clock timezone JST 9
などとする。 ■時刻を確認するには?
cc-gw#show clock
.09:39:36.843 JST Mon Feb 10 2003
■LOGに時刻を残すには
#conf t
service timestamps log datetime localtime show-timezone
■syslogサーバーにlogを出力するには
#conf t
logging [syslogサーバーのIPアドレス]

コンフィギュレーションレジスタ

|

■ブートシーケンス
1.ルータがPOST(電源投入時自己診断)を実行する。
2.ブートストラップがIOSを探して(フラッシュメモリから)ロードする。
3.IOSがNVRAMからコンフィギュレーションファイルを探す。
  このファイルはstartup-configという
4.startup-configがある場合はそれをロードし、ない場合はセットアップコンフィギュレーションに入る。

パスワードの復旧

|

1.ルーターをブートした後、ブレイクを実行してブートシーケンスを中断する   ブート中に[Ctrl] + [Break]を押せばよい (TeraTermはAlt+B)

2514>
System Bootstrap, Version 5.2(8a), RELEASE SOFTWARE Copyright (c) 1986-1995 by cisco Systems 2500 processor with 2048 Kbytes of main memory

Abort at 0x10205AC (PC) >

パスワードの設定

|
■ユーザーモードのパスワードを設定する
G002253(config)#line ?
First Line number
aux Auxiliary line
console Primary terminal line
vty Virtual terminal
【コンソールの場合】
G002253(config)#line con 0
G002253(config-line)#password ************* G002253(config-line)#^Z
【telnetの場合】
G002253(config)#line vty 0
G002253(config-line)#password ************* G002253(config-line)#^Z
■イネーブルシークレットパスワードの設定
2514#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2514(config)#enable secret ***********
2514(config)#^Z

※enable password コマンドでは設定ファイルに平文で保存されてしまうので注意

工場出荷時に設定を戻す

|
■コンフィギュレーションを消去する
# erase startup-config


IOSのバージョンの見方

|

■IOSのバージョンの見方

例:12.0(7a)とある場合
・12.0はメジャーリリースを指す
・7は保守レベル
・aは7においてバグフィックスが行われたことを示す
・保守レベルが7.2とかだったら暫定ビルド版
・初期配布リリースにはナンバーに大文字がつく

IOSのバックアップ

|

IOSのバックアップ

■TFTPサーバーの設定

1./tftpboot は 707 か 777 がよい。

2.あらかじめファイルを作っておく
  例:ios-11.2.bak

■バックアップ 0.iosのファイル名を確認する

yourname#show flash
-#- --length-- -----date/time------ path
1     16882452 May 10 2006 23:10:42 +00:00 c181x-advipservicesk9-mz.124-6.T.bin
2         2202 May 10 2006 23:11:54 +00:00 sdmconfig-1811-1812.cfg
3      4052480 May 10 2006 23:12:24 +00:00 sdm.tar
4       812032 May 10 2006 23:12:44 +00:00 es.tar
5      1007616 May 10 2006 23:13:06 +00:00 common.tar
6         1038 May 10 2006 23:13:22 +00:00 home.shtml
7       113152 May 10 2006 23:13:38 +00:00 home.tar
8       511939 May 10 2006 23:13:58 +00:00 128MB.sdf

8540160 bytes available (23396352 bytes used)

1.copy flash tftp コマンドを実行する

G002253#copy flash tftp

System flash directory: File Length Name/status 1 4181132 c2500-i-l.112-7a.bin [4181196 bytes used, 4207412 available, 8388608 total]

2.tftpサーバーのIPアドレスを指定する
Address or name of remote host [192.168.0.254]?
3.ソースファイルを指定する。
Source file name? c2500-i-l.112-7a.bin
4.サーバー側のファイル名を指定する
Destination file name [c2500-i-l.112-7a.bin]? ios-11.2.bak Verifying checksum for 'c2500-i-l.112-7a.bin' (file # 1)... OK
5.yes を選択する
Copy 'c2500-i-l.112-7a.bin' from Flash to server as 'ios-11.2.bak'? [yes/no]yes !!!!!!!!!!!!!!!!!!!!!!! (以下略)
Upload to server done
Flash copy took 00:00:49 [hh:mm:ss]

■IOSのリストアを行う

設定ファイルのバックアップ

|

■TFTPサーバーの設定

1./tftpboot は 707 か 777 がよい。

2.あらかじめファイルを作っておく
  例:G002253.bak

■設定ファイルのバックアップ

1.copy startup-config tftp または copy running-config tftp を実行する

#copy running-config tftp

2.TFTPサーバーの場所を指定する

Remote host []? 192.168.0.254

3.TFTPサーバーの方のファイル名を指定する

Name of configuration file to write [g002253-confg]? G002253.bak

4.yes でバックアップを始める

Write file G002253.bak on host 192.168.0.254? [confirm]y Building configuration...

Writing G002253.bak !! [OK]

■設定ファイルのリストア
#copy tftp running-config
#copy running-config startup-config

送信添付ファイルの最大値の設定

|

送信する添付ファイルの最大値はphpの設定に依存する。

50MBまで許可する設定だと下記のようにphpのファイルを編集してapacheをリロードする。

■/etc/httpd/conf.d/php.conf
	LimitRequestBody 52428800
	# (512Byte * 1024 = 524288) * 100
■/etc/php.ini
	memory_limit = 64M
	post_max_size = 50M
	upload_max_filesize = 50M

/etc/php.ini の memory_limit = 8M を64Mくらいにして、apacheを再起動する。

メール件数などが大変多いフォルダを開く際に、
ここの値を大きくしていないと、エラーが出てしまう。

特に制限を強化したくないのであれば、権限を委譲するユーザー、グループを
Builtin/Account Operatorsグループに所属させるだけでよいのですが、
このままでは、ユーザー、グループの作成、削除、プロパティの変更など、
すべての権限が可能となっています。

そこで、一旦、Account Operatorsグループに所属させた後、
各コンテナのセキュリティタブで
Account Operatorsの危険な権限を無効(削除してしまう)にしてしまうのがよいです。

無効化する権限の例としては、

【ユーザー、グループ格納用としたOU】
・ユーザーオブジェクトの削除 (不用意な削除を防ぐ場合)
・グループオブジェクトの削除 (不用意な削除を防ぐ場合)
・コンピュータの作成、削除 (クライアントがすべてターミナルサーバーの場合)
・OU作成、削除権限の付与 (場合によっては)

【Usersコンテナ】
作成はともかく、重要なユーザーを削除されてはたまらない。
・ユーザーオブジェクトの削除
・グループオブジェクトの削除

【Computersコンテナ】
クライアントがすべてターミナルサーバーの場合は全権削除

【コンピューター格納用としたOU】
クライアントがすべてターミナルサーバーの場合は全権削除

もしくは、最初からAccount Operatorsグループをあてにせず、
「オブジェクト制御の委任ウィザード」などをつかって、
一般のグループやユーザーに権限を委譲するほうがよいです。

というのは、Builtinの中の特権グループには色々と秘密があり、
■委任されたアクセス許可を利用できず継承が自動的に無効になる
簡単にいうと下記の保護グループに属しているオブジェクトのACLは
ActiveDirectoryによって決め打ちされるため(セキュリティ保持のためらしい)
実際に属しているOUのACLはあえて継承しないようになっているそうな。
・Administrators
* Account Operators
* Server Operators
* Print Operators
* Backup Operators
* Domain Admins
* Schema Admins
* Enterprise Admins
* Cert Publishers
だったら、最初から「上からのアクセス許可を継承する」に
チェックなんか入れさせないようにすればよさそうなもんですが、
そういう仕組みではなくて、1時間に1回操作マスタがACLを書きもどすそうです。
んだから、かってに権限を剥奪されてしまうわけでした。

あと、Account Operatorsに属していると、
Exchange Serverの管理権限を与えても、「ActiveDirectory ユーザーとコンピュータ」ツールから
「電子メールアドレス」タブの編集ができなくなってしまう
こともありました。
※後述のExchangeアカウントの作成も参照。

まあ、そんなわけで、Builtinグループを使うのは細かい制御をしたい場合にはお勧めしません。


■最終的にはOUのプロパティで「セキュリティ」タブ->「詳細」をみると、このような権限になる。
※セキュリティタブを見るにはMMCの「表示」ツールバーから「拡張機能」を選ぶ

例:OU=HOGE内のオブジェクトに対し、accountグループに下記の権限を付与した。  ・ユーザーの作成、削除、編集  ・グループの作成、削除、編集  ・連絡先の作成、削除、編集
種類	名前	アクセス許可		継承元			適用先
--------------------------------------------------------------------------------------------------------
許可	account	フルコントロール	<継承なし>		グループオブジェクト
許可	account	フルコントロール	<継承なし>		ユーザーオブジェクト
許可	account	フルコントロール	<継承なし>		連絡先オブジェクト
許可	account	グループオブジェクト	OU=ue,DC=my,DC=local	このオブジェクトとすべての子オブジェクト
許可	account	ユーザーオブジェクト	OU=ue,DC=my,DC=local	このオブジェクトとすべての子オブジェクト
許可	account	連絡先オブジェクト	OU=ue,DC=my,DC=local	このオブジェクトとすべての子オブジェクト


■Exchange Server とActiveDirecotryが連携している場合は、
メールボックスを作成する権限を付与する必要がある。

まず、管理者がExchangeシステムマネージャの
「管理グループ」=>「最初の管理グループ」を右クリックし、
「制御の委任」を選択すると、Exchange管理委任ウィザードが始まる。
しかし、このウィザードでは
 「Exchange管理者」
 「Exchange管理者(完全)」
 「Exchange管理者(参照のみ可)」
の3パターンしか選べない。
とりあえず、 「Exchange管理者」以上の権限を与えなければ
メールボックスの作成もできないので、
この権限をAccount Operatorsではなく、一般のユーザー、グループに付与する。
※というのはなぜかというと、Account Operatorsに権限を付与すると、「電子メールアドレス」タブにおいて、メールアドレスの追加、削除、編集ができなくなってしまうのであった。
この環境はWindows Server 2003(SPなし)+Exchange Server 2003 Enterprise Edition(SPなし)

さて、メールボックスをつくったり、メールアドレスを設定したりする操作は
Exchangeサーバーのシステムマネージャがインストールされている状態の
「Active Directory ユーザーとコンピュータ」で行うが、
ここでExchangeシステムマネージャも操作されて、
Exchangeサーバー内のオブジェクトを自由に操作されてしまうのも危険である。

そこで、Account Operatorsにしたユーザーの所属するOUのグループポリシーで制御する。 グループポリシーの「ユーザーの構成」の方で、

「管理用テンプレート」
 ->「Windows コンポーネント」
  ->「Microsoft管理コンソール」   
   ※「明示的に許可されているスナップインだけに制限する」を有効

   ->「制限および許可するスナップイン」     ※「Active Directory ユーザーとコンピュータ」だけ有効

これで、Exchangeシステムマネージャを操作されることはない。


■さらに、Windows Server 2003 SP1 + Exchange Server 2003 SP2の組み合わせだと、
下記の障害が起きる可能性があります。

a "何も番号: c10308a2 " Active Directory ユーザーを使用し、そしてコンピュータがコンピュータ Exchange Server 2003 でのメールが有効なユーザーの電子メール アドレスをリモート追加する、またはコンピュータ リモート編集するとき、スナップインする場合、エラー メッセージ受信します。
http://support.microsoft.com/kb/905809/ja

   

syslogの仕組み

|

PD思考法の基礎と情報収集(その2) (1/3)

・Linuxのロギングはklogdとsyslogdというデーモンによって行われている。

・カーネルから上がるメッセージはリングバッファに格納される。

・klogdはリングバッファにマップされている仮想ファイルである
 /proc/kmsg経由でカーネルメッセージを抽出する。

・klogdが抽出したメッセージはsyslogdに渡される。

・syslogdはメッセージが持つログレベルと自身の設定によってログに記録する。

そのほか、プログラムの関数openlog(), syslog(), closelog()からはsyslogdにメッセージを送れる。
また、スクリプトからはloggerコマンドでsyslogdにメッセージを送れる。

klogdが動く前のリングバッファ内のメッセージを見るコマンドが $ dmesg である。

OSはRedHat9です。
RPMはlibolとsyslog-ngのソースから、RedHat9上でBuildしたRPMを使用します。

■RPMからのインストール

# ls
libol-0.3.18-1.i386.rpm            
readme_RH9
libol-debuginfo-0.3.18-1.i386.rpm  
syslog-ng-1.6.10-1.i386.rpm
libol-devel-0.3.18-1.i386.rpm      
syslog-ng-debuginfo-1.6.10-1.i386.rpm

# rpm -ivh libol-0.3.18-1.i386.rpm Preparing... ########################################### [100%] 1:libol ########################################### [100%]

# rpm -ivh syslog-ng-1.6.10-1.i386.rpm Preparing... ########################################### [100%] 1:syslog-ng ########################################### [100%] Starting syslog-ng: [ OK ]

○ここで、syslog-ngがすぐに起動してしまうので、いったん止めることにする。

# ps aux | grep syslog
root     29273  0.0  0.0  1452  240 ?        S    May04   0:01 syslogd -r -x -m 0
root     32629  0.0  0.3  1820  836 ?        S    15:59   0:00 /sbin/syslog-ng
root     32641  0.0  0.2  4576  664 pts/0    S    16:00   0:00 grep syslog

# /etc/init.d/syslog-ng stop Shutting down syslog-ng: [ OK ]

○OS起動時にsyslog-ngが自動で起動し、syslogdが起動しないようにする。

# chkconfig --list | grep syslog
syslog          0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ
syslog-ng       0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ

# chkconfig --level 2345 syslog off

# chkconfig --list | grep syslog syslog 0:オフ 1:オフ 2:オフ 3:オフ 4:オフ 5:オフ 6:オフ syslog-ng 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ

■RedHatの通常のsyslogと同等の働きをするような設定ファイルを作る。 この場合だと、/etc/syslog-ng/syslog-ng.confが設定ファイルになる。

# cd /etc/syslog-ng/

# ls syslog-ng.conf

念のため、defaultの設定ファイルは保存しておく。
# cp syslog-ng.conf syslog-ng.conf.default


■syslog-ng.confの編集

○リモートからのsyslogを受け付ける。

# Remote logging
source s_remote {
        tcp(ip(0.0.0.0) port(514));
        udp(ip(0.0.0.0) port(514));
};

destination d_separatedbyhosts { file("/var/log/syslog-ng/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };

log { source(s_remote); destination(d_separatedbyhosts); };

このままでも動くが、destinationの部分をちょっと工夫をすると 日付ごとにログファイルを自動的に変更できる
destination d_separatedbyhosts {
        file("/var/log/syslog-ng/$HOST/$HOST-$YEAR$MONTH$DAY.log");
};
○optionsを設定する
options {
        sync (0);
        time_reopen (10);
        log_fifo_size (1000);
        long_hostnames (off);
        use_dns (yes);
        use_fqdn (no);
        create_dirs (yes);
        keep_hostname (yes);
        stats(86400);
        dir_perm(0750);
        perm(0640);
        owner(root);
        group(root);
};

■とりあえず動くsyslog-ng.confはこうなる。

#
# configuration file for syslog-ng, customized for remote logging
#

source s_internal { internal(); }; destination d_syslognglog { file("/var/log/syslog-ng.log"); }; log { source(s_internal); destination(d_syslognglog); };

# Local sources, filters and destinations are commented out # If you want to replace sysklogd simply uncomment the following # parts and disable sysklogd # # Local sources # source s_local { unix-stream ("/dev/log"); pipe ("/proc/kmsg" log_prefix ("kernel:")); }; # # Local filters # filter f_messages { level(info..emerg); }; filter f_secure { facility(authpriv); }; filter f_maillog { facility(mail); }; filter f_cron { facility(cron); }; filter f_emerg { level(emerg); }; filter f_spooler { level(crit..emerg) and facility(uucp, news); }; filter f_local7 { facility(local7); }; # # Local destinations # destination d_messages { file("/var/log/messages"); }; destination d_secure { file("/var/log/secure"); }; destination d_maillog { file("/var/log/maillog"); }; destination d_cron { file("/var/log/cron"); }; destination d_console { usertty("root"); }; destination d_spooler { file("/var/log/spooler"); }; destination d_bootlog { file("/var/log/boot.log"); }; # # Local logs - order DOES matter ! # log { source(s_local); filter(f_emerg); destination(d_console); }; log { source(s_local); filter(f_secure); destination(d_secure); flags(final); }; log { source(s_local); filter(f_maillog); destination(d_maillog); flags(final); }; log { source(s_local); filter(f_cron); destination(d_cron); flags(final); }; log { source(s_local); filter(f_spooler); destination(d_spooler); }; log { source(s_local); filter(f_local7); destination(d_bootlog); }; log { source(s_local); filter(f_messages); destination(d_messages); };

# Remote logging source s_remote { tcp(ip(0.0.0.0) port(514)); udp(ip(0.0.0.0) port(514)); };

destination d_separatedbyhosts { file("/var/log/syslog-ng/$HOST/$HOST-$YEAR$MONTH$DAY.log"); };

log { source(s_remote); destination(d_separatedbyhosts); };

options { sync (0); time_reopen (10); log_fifo_size (1000); long_hostnames (off); use_dns (yes); use_fqdn (no); create_dirs (yes); keep_hostname (yes); stats(86400); dir_perm(0750); perm(0640); owner(root); group(root); };

■設定ファイルのチェック syslog-ng.confが文法的に正しいかどうかは  syslog-ng -s [設定ファイル] コマンドで起動前にチェックできる
# syslog-ng -s ./syslog-ng.conf
#
なにも表示されなかったらOK

■syslogからsyslog-ngへの切り替え

# /etc/init.d/syslog stop
カーネルロガーを停止中:                                    [  OK  ]
システムロガーを停止中:                                    [  OK  ]

# /etc/init.d/syslog-ng start Starting syslog-ng: [ OK ]

# ps aux | grep syslog root 2405 0.0 0.3 1836 884 ? S 16:34 0:00 /sbin/syslog-ng root 2409 0.0 0.2 4572 660 pts/0 S 16:34 0:00 grep syslog

■syslog-ngの動作をログで確認する。

○/var/log/message
May  5 16:34:41 localhost kernel: Kernel logging (proc) stopped.
May  5 16:34:41 localhost kernel: Kernel log daemon terminating.
May  5 16:34:42 localhost  5月  5 16:34:42 syslog: klogd停止 succeeded
May  5 16:34:42 localhost exiting on signal 15
5月  5 16:34:49 localhost syslog-ng: syslog-ng起動 succeeded
○/var/log/syslog-ng.log
May  5 15:59:47 s_internal@localhost syslog-ng[32629]: syslog-ng version 1.6.10 starting
May  5 16:00:26 s_internal@localhost syslog-ng[32629]: syslog-ng version 1.6.10 goingdown
May  5 16:34:49 localhost syslog-ng[2405]: syslog-ng version 1.6.10 starting

○上記の設定だと、syslog-ngはsyslogパケットを受け取ったときに
ソースIPアドレスからホスト名を逆引きし、そのホスト名で
 /var/log/syslog-ng/[ホスト名]/[ホスト名]-年月日.log
という形式のログを記録しているはずなので、そこも確認する。


■ちまちまとした移行処理

○/etc/init.d/syslogはまぎらわしいので隠してしまう
# mv /etc/init.d/syslog /etc/init.d/.syslog
○/etc/syslog.confも、もう使わないので隠してしまう
# mv /etc/syslog.conf /etc/.syslog.conf
○/etc/logrotate.d/syslogの設定 syslog-ngファイルにいろいろ書き足すのはめんどくさいのでこれは使わない方針で。 むしろsyslogファイルの方をsyslog-ng用に書き換え、そのまま流用する。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron /var/log/syslog-ng.log {
	sharedscripts
	postrotate
		/etc/rc.d/init.d/syslog-ng reload > /dev/null 2>&1
		#/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
	endscript
}

○/etc/logrotate.d/syslog-ngは隠してしまう
これをしないと、cron.dailyが動くときにエラーが出る。

# mv /etc/logrotate.d/syslog-ng /etc/logrotate.d/.syslog-ng

syslog-ng RPMの作成

|

このRPMの作成はRedHat9で行いました。
他、CentOS4.3でbuildしたものがFedora Core 3で使用できることも確認しています。

こちら本家本元サイト
http://www.balabit.com/products/syslog_ng/

■ソースのダウンロード

「Upgrade source」からCurrent stable (version 1.6.x). をダウンロードする。
# wget http://www.balabit.com/downloads/syslog-ng/1.6/src/syslog-ng-1.6.10.tar.gz
--12:10:26--  http://www.balabit.com/downloads/syslog-ng/1.6/src/syslog-ng-1.6.10.tar.gz
           => `syslog-ng-1.6.10.tar.gz'
www.balabit.com をDNSに問いあわせています... 完了しました。
www.balabit.com[212.92.18.33]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [application/octet-stream]
    [ <=>                                           ] 711,822       10.29M/s
12:10:37 (10.29 MB/s) - `syslog-ng-1.6.10.tar.gz' を保存しました [711822]
同社のフリーソフトlibolも必要になる。 これもソースをダウンロードしておく。
# wget http://www.balabit.com/downloads/libol/0.3/libol-0.3.18.tar.gz
--12:12:48--  http://www.balabit.com/downloads/libol/0.3/libol-0.3.18.tar.gz
           => `libol-0.3.18.tar.gz'
www.balabit.com をDNSに問いあわせています... 完了しました。
www.balabit.com[212.92.18.33]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [application/octet-stream]
    [ <=>                                           ] 345,794       10.64M/s
12:13:03 (10.64 MB/s) - `libol-0.3.18.tar.gz' を保存しました [345794]
とりあえず解凍して、中のspec(.bb)ファイルを取り出す。 その後、解凍されたディレクトリは用がないので削除してよい。
# ls
libol-0.3.18.tar.gz  
syslog-ng-1.6.10.tar.gz
# tar xzf libol-0.3.18.tar.gz
# tar xzf syslog-ng-1.6.10.tar.gz
# mv libol-0.3.18/libol.spec ./
# mv syslog-ng-1.6.10/syslog-ng.spec.bb ./
# rm -fr libol-0.3.18
# rm -fr syslog-ng-1.6.10
■パッケージ作成
# ls
libol-0.3.18.tar.gz  
libol.spec  
syslog-ng-1.6.10.tar.gz  
syslog-ng.spec.bb
# mv *.spec* /usr/src/redhat/SPECS/
# mv *.gz /usr/src/redhat/SOURCES/
# cd /usr/src/redhat/SPECS/
■まずは、libolから。
[root@localhost SPECS]# rpmbuild -bb ./libol.spec
。。。省略。。。
[root@localhost SPECS]# ls ../RPMS/i386/
libol-0.3.18-1.i386.rpm  
libol-debuginfo-0.3.18-1.i386.rpm  
libol-devel-0.3.18-1.i386.rpm

■syslog-ngのbuild

このバージョンのsyslog-ng.spec.bbには少々記述を修正する場所がありました。  Source: syslog-ng_%{version}.tar.gz  ↓  Source: syslog-ng-%{version}.tar.gz
[root@localhost SPECS]# rpmbuild -bb ./syslog-ng.spec.bb
。。。省略。。。
Build完了。rpmが出来上がっている。
[root@localhost SOURCES]# ls ../RPMS/i386/
libol-0.3.18-1.i386.rpm
syslog-ng-1.6.10-1.i386.rpm
libol-debuginfo-0.3.18-1.i386.rpm
syslog-ng-debuginfo-1.6.10-1.i386.rpm
libol-devel-0.3.18-1.i386.rpm

このアーカイブについて

このページには、2006年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年4月です。

次のアーカイブは2006年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1