2008年9月22日月曜日

auditを使用してみる。

結局は http://paranoid.dip.jp/kaworu/2007-06-04-2.html の情報の焼き直しかな。
あと、sunのページのauditの情報を見るのも役になったです。

auditを有効にするには、/etc/rc.conf で、auditd_enable="YES" を設定してやる。
/var/audit/も作成してあげないとダメだったかも(ディレクトリはaudit_controlで設定される)。

設定ファイルは、/etc/security/ 配下にある。

= auditとして監視するクラス(?)の記述ファイル
audit_class
audit_event

= audit対象の設定ファイル
audit_control
audit_user

= audit(デーモン?)に問題があった場合のログ出力先
audit_warn

多分、audit_eventにイベント一覧があって、各行の最後のコロン(:)以降にクラスを設定する。クラスは、audit_classに記載のある物でないとNG。

で、このクラスに対して、audit_controlやaudit_userで、監視する内容を設定する。
audit_controlはデフォルトの監視クラスや、auditとしての振舞を設定。audit_userには、各ユーザ毎の監視クラスを個別に設定。
ここで指定した監視クラスに引っかかった内容が、audit_controlのdirディレクトリ(デフォルト /var/audit/)配下のログファイルに出力される。
/var/audit/日付.not_terminatedが多分開かれているファイルで、auditを停止したり、ログがローテートされる(タイミングは不明。auditの停止だったっけ?)と、not_terminatedが削除されたファイルが作成される。

audit_warnは、よくわからないけど/var/auditのあるストレージがあふれたりしたら、この内容にそってログが出力されるのだと思われる。

で、ログを見るコマンドが、 praudit。 引数にファイルを指定してあげれば、監視によってログされた内容を見ることが出来る。
praudit /var/audit/20080921200406.not_terminated

zfsが遅かった問題

今回 buildworldをし直したらな、問題無いようす。
多分/usr/obj/配下を削除して、buildし直したからだと思われる。

もしかしたら、OSのソースの変更があったかもしれないけど、以前のOSのソースを残していないので、今と昔のソースの違いがわからない。時刻を手掛かりにcvswebなどを見ての変更されていないので、ビルドのしかたの問題なのでしょう。

現在のuname -a の内容は以下。

7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #0: Mon Sep 22 04:14:43 JST 2008 root@:/usr/obj/usr/src/sys/GENERIC i386

2008年8月31日日曜日

FreeBSD-stable 20080830 でzfsが遅い

本日 2008/08/30 にFreeBSD 7-stableに挙げたら、システムがえらい遅くなった。
# DTraceを使ってみたくて、アップデートしたのです。

ZFS(IO)が遅いみたい。

自分の環境は/がUFS。/usr,/var,/homeがZFSという環境なのです。
ちょっと大きなファイルをコピーしたりすると、CPUが100%になって、loadaverageがえらく(8ぐらいまで)上昇する。もとに戻そうか検討中です。

2008年8月27日水曜日

jail下準備用のzfs環境作成

jail配置用filesystemの作成

zfs create -o mountpoint=/jail zfspool/jail
zfs create zfspool/jail/0

jailのおおもとの環境を/jail/0に作成

cd /usr/src
make installworld DESTDIR=/jail/0
cd etc
make distribution DESTDIR=/jail/0


/jail/0は保存しておいて、/jail/1に実環境を構築
その為に/jail/0から/jail/1にsend/receive。
ちなみに、installworldでインストールされるファイルは、ハードリンクを使用している為、
普通にcpコマンドでファイルをコピーすると、使用容量はかなり大きくなります。
なので、zfsのsend/receiveを使用しています。

zfs snapshot /jail/0@today
zfs send /jail/0@today | zfs receive /jail/1
zfs destroy /jail/1@today
diff -qr /jail/0 /jail/1

zfs

zfsなんか便利なんだけど、いまひとつ用語がわからない。。。

(1) zfsのvolumeとfilesystemの違いが良くわからないので、manを確認。

どうもzfsのvolumeは、ブロックデバイスで管理された領域みたい。デバイスとして使いたいときに使うのかな? create -V で作成する。

普通にzfs createで作成されるのは、filesystemのようだ。

(2) snapshotやclone
jail用に環境を複製しようと思いcloneを使用してみた。cloneで作成される領域はsnapshotに引っついている為、snapshotを消そうとするとcloneも消してと言われる。で、勝手に誤解してpromoteで独立した領域になるのかなと思ったら、違う結果になった。manにそのまま書いてあるけど、promoteは、snapshotととったfilesystemとの交換とのこと。
同じ内容の領域を作成するには、send/receiveが必要みたい。

http://docs.sun.com/app/docs/doc/819-6260 に日本語の情報が一杯あった。

2008年5月17日土曜日

別のブログから移行

2008-05-08 17:24 | MEMとHDDでzfs mirror 続き

今日は調子が悪いのでお休み。でも、こんなことしてます。ダメダメです。
さて、昨日はmdをmallocで作成していた。
= zfsはカーネルのメモリ(kva)を大量し使用する。
= md(malloc)も同様に(kva)を大量に使用。
なので、OSが落ちていた様子。
ということは、mdをmallocからswapに変更したら良いのか?
で試してみると、それなりに落ちない感じだけど、コピーを繰り返したら落る。
/boot/loader.conf.localに以下を設定すれば、なんとか持つか。
vm.kmem_size="512M"
vm.kmem_size_max="512M"
1回目
(1) zfs(HDD+HDD)
# time cp -r /usr/ports /diskpool/
0.543u 18.535s 1:01.88 30.8% 20+1108k 24720+0io 103582pf+0w
(2) zfs(swap+HDD)
# time cp -r /usr/ports /memdiskpool/
0.631u 18.596s 0:53.67 35.8% 20+1104k 19918+0io 101320pf+0w
(3) gjournal
# time cp -r /usr/ports /mnt/
0.483u 11.308s 1:13.91 15.9% 20+1104k 29243+2816io 103993pf+0w
(4) ufs2(softupdate)
# time cp -r /usr/ports /usr/hoge
0.418u 12.266s 1:44.38 12.1% 20+1073k 25893+2796io 101317pf+0w
2回目(上書き)
(1) zfs(HDD+HDD)
# time cp -r /usr/ports /diskpool/
0.477u 18.171s 1:25.07 21.9% 21+1118k 25128+0io 101317pf+0w
(2) zfs(swap+HDD)
# time cp -r /usr/ports /memdiskpool/
0.501u 18.316s 1:13.16 25.7% 20+1099k 19317+0io 101317pf+0w
(3) gjournal
# time cp -r /usr/ports /mnt/
0.493u 11.273s 1:42.91 11.4% 20+1066k 52441+857io 101317pf+0w
(4) ufs2(softupdate)
time cp -r /usr/ports /usr/hoge/
0.408u 12.550s 1:47.66 12.0% 21+1122k 25893+2800io 101317pf+0w
おお。希望通り、zfs mirrorで、md(swap)を使うとちょっと速い感じですね。


でも、冷静に分析すると。。。。
これ全部ディスク1つで実施しているから、それが影響あるだけのような気がする。
HDD + HDD なら、同じディスク上に、2箇所書き込みが必要だけど、
md(swap) + HDD なら、同じディスクに1箇所書き込みで終り。
なので、残念ながら、その分が速いだけと思われる。。。
ディスク2個でテストしたいけど、持ってないです。はい。
再起動後、mdの無いDEGREDED状態で実施だと以下。
1回目
# time cp -r /usr/ports /memdiskpool/
0.523u 18.812s 0:54.05 35.7% 20+1102k 18314+0io 101317pf+0w
2回目
# time cp -r /usr/ports /memdiskpool/
0.459u 17.598s 1:20.53 22.4% 20+1089k 29174+0io 103997pf+0w
やっぱりそういうことのようです。
あと、一緒にtopも見ていたのだけど、zfs>gjournal>ufs2の順でCPU使用率が高い。
また、gjournal自体もkvmを使用する感じ(未確認)で、最初の確認での、zfs/gjournal/md(malloc)の共存は、かなりkvmが足りなかったと思われる。。。

2008-05-07 04:13 | MEMとHDDでzfs mirror

今日はZFSの評価。
以下についてIOを確認。
(1) ZFS(HDD+HDD ミラー)
(2) ZFS(md + HDD ミラー)
(3) gjournal
(4) UFS2
というのも、md + HDDのミラーでI/Oが速いけど、永続性のあるストレージが作れないかなぁなんて考えてます。
それぞれ以下の結果
(1) ZFS(HDD+HDD) 「/test1ディレクトリ」
# dd if=/dev/zero of=/test1/hoge bs=1m count=400
400+0 records in
400+0 records out
419430400 bytes transferred in 12.030584 secs (34863678 bytes/sec)
(2) ZFS(md + HDD) 「/test2ディレクトリ」
# dd if=/dev/zero of=/test2/hoge bs=1m count=400
400+0 records in
400+0 records out
419430400 bytes transferred in 7.029625 secs (59666112 bytes/sec)
(3) gjournal 「/mntディレクトリ」
# dd if=/dev/zero of=/mnt/hoge bs=1m count=400
400+0 records in
400+0 records out
419430400 bytes transferred in 8.402085 secs (49919799 bytes/sec)
(4) UFS2(+softupdate) 「/usrディレクトリ」
# dd if=/dev/zero of=/usr/hoge bs=1m count=400
400+0 records in
400+0 records out
419430400 bytes transferred in 6.453544 secs (64992260 bytes/sec)
お!! ZFS(HDD+HDD)はZFS(md+HDD)より速い。
でも、一番速いのはUFS2だ。
http://gihyo.jp/admin/feature/02/freebsd-7/0005?page=5
によると、UFS2よりZFSやgjournalの方が速いのだけど。
大きな1ファイルだとそうなるのかな?
なので、/usr/portsをコピーする時間を計測。
# time cp -r /usr/ports /test1/
0.640u 18.707s 1:10.15 27.5% 24+1271k 14330+0io 104210pf+0w
# time cp -r /usr/ports /test2/
あっ、落ちた。
ZFS(md+HDD)を色々試してみても、すぐ落ちる。
色々調べたら、カーネルメモリーの設定を追加した方が安定するみたい。
今日はここまで。

2008-05-06 01:40 |パーティションの切り直し

bsdlabelで実施するらしい。
100Gのスライスを2つを遊び用(ZFSやgjournal)に用意していたので、そちらをgjournal用にパーティションを切り直してみる。
最初/usr/sbin/sysinstallで可能かと思ったけど、思ったようには行かない。
なので、色々調べなかがらbsdlabelで実施。
スライス作成がfdisk、パーティション作成がbsdlabelといった感じですね。
bsdlabel -e /dev/スライス名
とやれば、viが起動して編集モードに入れる。
どうも、パーティション番号(アルファベット)は命名規則があるようす。
= aパーティションがブート用
= bパーティションがswap用
= cパーティションが全体の管理用
しらなんだ。
なんで、遊び用のパーティションは、d以降で適当に付ければ良いのかな?
bsdlabel -e /dev/ad10s3
----- vi 中 ------------------
# /dev/ad10s3:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 204796620 0 unused 0 0 # "raw" part, don't edit
d: 1500M * 4.2BSD 4096 16384 64
e: 1500M * 4.2BSD 4096 16384 64
f: * * 4.2BSD 4096 16384 64
-------------------------------
てな感じで指定。
"*"は自動計算。"fsize","bsize","bps/cpg"はmanからデフォルトの値を入力。
# よくわからんが、"fsize","bsize","bps/cpg"は0でも良い感じ。そっちで動かしてみよう。

08:20 | FreeBSD/M2V-MX/powerd つづき2

なんとか出来たみたい。
結局の所、CPUの周波数の変更が、powernowを使用せずにacpi_throttleを使用していたのが原因のようだ。
# sysctl dev.powernow => エラー
# sysctl dev.acpi_throttle => 表示
という状態で、これが不正。
無理矢理acpi_throttleを無効にする為、/boot/loader.conf.localに以下の項目を追加。
hint.acpi_throttle.0.disabled="1"
これで、powerdも問題無く起動出来ました。ホッ。
。。。でも、1GHzまでしか落ちない。。まあ、良いけどね。
この内容は、ここにありました。
http://monkey.org/freebsd/archive/freebsd-amd64/200705/msg00077.html

2008-05-05 05:44 | FreeBSD/M2V-MX/powerd つづき

FreeBSD-7 stable(amd64)をインストールしてみた。
同様に、OSが落ちる。
デフォルトだと、以下になっていたので、
kern.timecounter.hardware: ACPI-fast
よくわからないが、ACPI-fastをi8254にしてみてもダメ。(i386/adm64共)
ダメなのかなぁ。
BIOSの設定によって上手く行くかもしれないけど、正直どう設定すれば良いのか。。。
ちなみにBIOS設定は、今ほぼDEFAULTの状態

09:41 | FreeBSD/M2V-MX/powerd

ASUSのM2V-MXというマザボにAthlonX2 BE2300を装着し、FreeBSD-7 stable(i386)をインストール。
その状態で、powerdを起動すると落ちる。なぜだ。
powerd -vで起動すると、順調にCPUの周波数を落していくのは見えるのだけど、その後OSが固まる感じ。エラーが出るのも気になるし。
# powerd -v
powerd: using APM for AC line status
idle time > 90%, decreasing clock speed from 1899 MHz to 1780 MHz
powerd: error setting CPU frequency 1780: Invalid argument
idle time > 90%, decreasing clock speed from 1780 MHz to 1661 MHz
powerd: error setting CPU frequency 1661: Invalid argument
idle time > 90%, decreasing clock speed from 1661 MHz to 1542 MHz
powerd: error setting CPU frequency 1542: Invalid argument
idle time > 90%, decreasing clock speed from 1542 MHz to 1424 MHz
powerd: error setting CPU frequency 1424: Invalid
他のエントリーも捜したけど、7からは苦労している様子は無い。BIOSを最新にしてもダメだった。この現象はオレだけなのかなぁ。
ちなみに、FreeBSD-7からcpufreqはGENERICのKernelに埋め込みされているから、特にkldloadは必要無いみたい。

2008-04-19 11:29 | LDAP

LDAPは参照を行なうサーバの可能な限り近い所にコピーして、使うのが吉。
特にPAM等でOS認証等を行なう場合、かなりの数のアクセスが発生するので、通信経路による障害を防ぐ為にも、その方が良い。

2008年5月13日火曜日

メールサーバはqmailを使用。
spamは、antibadmailと、bsfilterで除去で実施。
bsfilterは誤検知しても後で確認出来るように、サーバ側で処理をして、spam用のmaildirに配信とする。

参考:下記サイトのqmailと連動の部分。
http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/mail/bsfilter-j.html

外部からのメール送信が必要な場合には、smtp_authを使用する。
メーラはimapを使用してメールをチェック。

cd /usr/ports/qmail
make install
# この時に、smtp_authを有効にする。
/var/qmail/scripts/enable-qmail
これで、/etc/mail/mailer.confが変更されると同時に、/etc/rc.dにsendmail_enable="NONE"が設定される。

cd /usr/ports/mail/courier-imap/
make install clean
この時に、userdbを有効にする為、AUTH_USERDBを有効にする。

cram-md5に対応するパスワードを設定する。
userdb set home= mail= uid= gid=
userdbpw -hmac-md5 | userdb set hmac-md5pw
makeuserdb


tar xvf antibadmail-1.38
make
インストール先は、/var/antibadmailとする。antibadmailは相対パスでqmailのコンフィグを見に行く為、/var/qmail配下にあるqmail設定ファイルの、control/localsやusers/assignのチェックをしてくれない。
symlinkを貼って対処。
cd /var/antibadmail
ln -s /var/qmail/users .
cd /var/antibadmail/control
ln -s /var/qmail/control/locals

antibadmailをtcp-envで使用するには、少々プログラムの改善が必要そう。
元々tcpserverで使用する予定でしたが、tcpserverでは同一IPからの接続回数を制限出来ないので、inetd経由で起動することにする。
/etc/hosts.allowに以下を追加
tcp-env: XXX.XXX.XXX., 127.0.0.1 : setenv = RELAYCLIENT
tcp-env: ALL : setenv = REJECTNODOTHELO

antibadmailのログを出力する為、/etc/syslog.confに以下のエントリーを追加
local1.info /var/log/antibadmail.log

/etc/inetd.confに以下の行を追加
smtp stream tcp nowait/10/2 qmaild /var/qmail/bin/tcp-env tcp-env -R /var/antibadmail/bin/antibadmail /usr/local/sbin/courierpasswd /bin/true