メイン

CENTOS アーカイブ

2006年11月12日

ふつうのLinuxマシンでの姫野ベンチマークの利用方法

CPUやOSなどの違いにより性能がどう違うのかを知るための
一つの手段がベンチマークだ。
クラスタ環境でなくても利用する価値はあると思う。

姫野ベンチマークは以下のURLからプログラムをダウンロード

http://accc.riken.jp/HPC/HimenoBMT/index.html

Windows用のソースファイルの「C, static allocate version」をダウンロード。
サイズはSかMでいいでしょう。

取ってきたファイルは圧縮されているので解凍する。

$ lha -e ./cc_himenoBMTxp_m.lzh

TurboLinux10の場合lhaコマンドがないのでredhat9用のlhaパッケージがそのまま使えるので取ってくる。

解凍したらhimenobmtxps.cというファイルが出来るが小文字に変換されてしまうので、
himenoBMTxps.cと名前を変える。

$ mv himenobmtxps.c himenoBMTxps.c

あとはmakeして出来たbmtファイルを実行する。

$ make
$./bmt

結果が表示されるからいろいろなマシン上で試してみるといいかも。

以下私のTurboLinux10マシン上でのテスト結果。
pentium3 600MHzの1.5倍となっているのはなかなかぴったりです。

---
Loop executed for 54 times
Gosa : 1.471492e-03
MFLOPS measured : 125.128854 cpu : 59.168426
Score based on Pentium III 600MHz : 1.525962
---

同じマシンでOSをredhat9,CentOS4,CentOS3,FedoraCore5と試したがCentOS4が一番早かった。
Fedora5の遅さにはびっくりした。

2006年11月18日

CentOS4でプリンタの設定

EPSON LP-8100はドライバがあったので設定を行った。

まずはドライバをダウンロード。

http://avasys.jp/

次にインストール方法の説明があるのでそのとおりに行う。

eplaser-cups-ppd-3.4.1.tgzとEpson-LP-8100-eplaser-jp.ppdをダウンロードしてインストール。
/usr/share/cups/model/ に必要なファイルをコピーすればいい。

その後CUPSを再起動

# service cups restart

ここまでできたら http://localhost:631 にアクセスしてプリンタの設定に取りかかる。

途中ではまったのがプロトコルのところ。
はじめLPDで設定していたがなかなかうまくいかず
プリンタにtelnetで接続したらIPPというプロトコルがあることを発見!
「View IPP Configuration」のところに書いてあるIPP URL を使えばいいことがわかった。

なのでLPDを使わずIPPを使う。
Device URI には telnet で調べたURIを入力してあとはちょちょっと設定。

テスト印刷が出てきたら無事終了。

印刷の設定は慣れていないのでとても難しい。

ドライバがないときどうすればいいのだろう・・・

2006年11月19日

rshの設定

CentOS4でrshサーバを構築するにはrsh-serverパッケージが必要。
xinetd配下で管理されるので以下のようにファイルを書き換える。

# vi /etc/xinetd.d/rsh
---
disable = no
---

そして再起動。

# service xinetd restart

rshを使えるリモートホストを記述する。

# vi /etc/hosts.equiv
---
111.111.111.111
---

これでIPアドレス111.111.111.111からのrshコマンドを受け付けるようになる。
うまくいかない場合は /etc/hosts.allow と /etc/hosts.deny の設定に問題があるかもしれない。

$ rsh ホスト名 date

上のコマンドの結果が正常に表示されたらOK。
ただしこのままではrootでrshが使えない。

rshサーバのrootのホームディレクトリに以下のようにファイルを作成する。

# vi ~/.rhosts
---
111.111.111.111
---

さらに、以下のようにpamの認証設定の一部をコメント化する。

# vi /etc/pam.d/rsh
---
#auth required pam_securetty.so
---

これで許可したリモートホストからroot権限でパスワードなしにコマンドを打つことが出来るようになる。
しかしifconfigコマンドなど一部のコマンドパスが通っていないのでパスを通しておく必要がある。
bashを利用する場合は以下の要領でパスを追加記述しておく。

# vi /etc/bashrc
---
PATH=$PATH:/sbin:/usr/sbin
---

これで許可したリモートホストからroot権限でパスワードなしでコマンドが打てるようになる。
セキュリティレベルがかなり低下するので注意が必要。

許可されたCentOS4マシンからrshコマンドを打ってみたら /usr/kerberos/bin/rsh が実行される。
これではうまくいかないので以下のコマンドで待避する。ほかにいい方法もあると思うが・・・

# mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.nouse

これでログインし直すと /usr/bin/rsh が使われるようになる。

LAMを使った並列プログラミング環境の構築

MPI(Message Passing Interface)ライブラリとしてLAMを使って並列プログラミング環境を構築する。

ノードとホストの設定がある。
ホストはプログラムを投入するマシンでノードは計算するマシン。
今回はホストにも計算をさせるのですべてに同じ設定をすればいい。

↓公式HPはこちら
http://www.lam-mpi.org/

OSはCentOS4。
候補としてredhat9,turbolinux8,fedoracore5,centos3など考えたが
姫野ベンチでテストした結果が一番よかったのがCentOS4だった。

公式HPから lam-7.1.2.tar.gz をダウンロードして作業を進める。

# tar zxvf lam-7.1.2.tar.gz -C /usr/local/src/ (-C:解凍先の指定)
# cd /usr/local/src/lam-7.1.2/
# ./configure --prefix=/usr/local/lam (--prefix:インストール先の指定)
# make
# make install

LAMをrshで利用するのでrshサーバの設定をする必要がある。
詳細はhttp://max01.skr.jp/blog/2006/11/rsh.htmlに書いた。
ただ、パスは以下のように /usr/local/lam/bin を追加する。

# vi /etc/bashrc
---
PATH=/usr/local/lam/bin:$PATH
---

一般ユーザhogeで利用する場合hogeのホームディレクトリに以下のファイルを作成。
LAMが利用可能なIPを記述するんです。
$ vi ~/lamhosts
---
xxx.xxx.xxx.xxx
xxx.xxx.xxx.yyy
---

LAMが使えるようになったか確認する。

$ recon -v ~/lamhosts

Woo hoo! というメッセージがでたらOK。

さっそくLAMを軌道しよう。

$ lamboot -v ~/lamhosts
---
LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University

n-1<4780> ssi:boot:base:linear: booting n0 (xxx.xxx.xxx.xxx)
n-1<4780> ssi:boot:base:linear: booting n1 (xxx.xxx.xxx.yyy)
n-1<4780> ssi:boot:base:linear: booting n2 (xxx.xxx.xxx.zzz)
n-1<4780> ssi:boot:base:linear: finished
---
このようなメッセージが表示されればOK。
念のため確認のコマンドを打つ。

$ lamnodes
---
n0 hostname1:1:origin,this_node
n1 hostname2:1:
n2 hostname3:1:
---

今回3つのノードで試してみた。
あとはMPIプログラムを投入するだけだ。

$ mpirun -np 3 -s n0 program
(-np 3:3つのノードで処理する, -s n0:ノード番号0の実行プログラムを各ノードにコピー)

これでprogramが3台のマシンで実行されているはず!

-s オプションがあるおかげでNIS,NFS環境を構築しなくていいのでLAMは便利です。

プログラムの実行が終わったら以下のコマンドを実行してLAMを終了させる。

$ lamclean
$ wipe -v ~/lamhosts

2006年11月20日

システムの文字コードをEUCに変更する

他のサーバの文字コードがEUCでCentOS4からsshなどで接続した場合
文字化けを起こすのが面倒な場合CentOS4のシステムの文字コードをUTF-8からEUCにしましょう。

# vi /etc/sysconfig/i18n
---
LANG="ja_JP.eucJP"
---

これでシステムの文字コードがEUCになる。

# vi /etc/man.config
---
PAGER /usr/bin/more
---

これでmanコマンドが文字化けせずに表示される。

しかしいくつかのGUIアプリケーションの文字が化けてしまうが、
文字コードを元に戻してから操作するか、CUIで操作すれば特に問題はない。

2006年11月26日

NTFSへのアクセス

CentOS4は標準でWindowsXPのファイルシステムNTFSをマウント出来ない。
普通カーネルの再構築を行なうがrpmファイルを下記URLからダウンロードしてインストールすればアクセス出来るようになる。

http://www.linux-ntfs.org/

ダウンロードの際カーネルのバージョンを確認しておく必要がある。

$ uname -r
---
2.6.9-42.0.3.EL
---

RedHat Enterprise Linux 4 用のrpmパッケージがあるのでバージョンを確認してインストール。

# rpm -Uvh kernel-module-ntfs-2.6.9-42.0.3.EL-2.1.20-0.rr.10.0.i686.rpm

私の場合このようになる。
あとはWindowsXPパーティションをマウントする。

# mount -t ntfs /dev/hda1 /winnt

などと自分の環境にあわせて入力すればOK

2006年11月29日

MPICH2を使った並列プログラミング環境の構築

MPI(Message Passing Interface)ライブラリとしてMPICH2を使って並列プログラミング環境を構築する。HPC(High Performance Computing)クラスタの構築でもある。

↓MPICH2のHPから最新版をダウンロードしてくる。
http://www-unix.mcs.anl.gov/mpi/mpich/

現時点では mpich2-1.0.4p1.tar.gz になる。

早速ダウンロードしてインストールをすませる。

# tar zxvf mpich2-1.0.4p1.tar.gz -C /usr/local/src/
# cd /usr/local/src/mpich2-1.0.4p1/
# ./configure --prefix=/usr/local/mpich2

(prefix: 好みに応じてインストール場所を指定)
いろんなオプションがあるので確認してみるといいかと思う。

# make
# make install

インストールが終わったら環境の整理です。
今回mpich2の実行にrshを使うので計算マシンから各ノードマシンへrshが正常に機能するように設定しておく。rshクライアントを実行ホストに、rshサーバを計算ホストに構築する。
詳細は↓に記述した。

http://max01.skr.jp/blog/2006/11/rsh.html


次にmpich2用のコマンドが使えるようにパスを通しておきます。

# vi /etc/bashrc
---
PATH=/usr/local/mpich2/bin:$PATH
---

これで全ユーザのパスに追加出来ます。
もし自分だけでいい場合はホームディレクトリ直下にある .bash_profile を編集する。

$ vi ~/.bash_profile
---
PATH=/usr/local/mpich2/bin:$PATH
export PATH
---

次にホームディレクトリ直下に.mpd.hostsを以下のように記述する。

# vi ~/.mpd.conf
---
MPD_SECRETWORD=password
---

パスワードは任意。ただし全ノードで同じパスワードを指定しておく必要がある。
パーミッションの設定もしないとおこられる。

# chmod 600 ~/.mpd.conf

rootでもmpich2を使いたい場合は/etc/mpd.confを作る必要がある。

次はmpd.hostsに計算をさせるノードのIPアドレスを記入する。

# vi ~/mpd.hosts
---
xxx.xxx.xxx.11
xxx.xxx.xxx.12
---

念のため/etc/hostsファイルを見直す。エラーの原因になることが多い。
私は "failed to ping mpd on ..." というようなエラーに苦しめられた。
あと、無線LANではうまくいかないようで有線でやるとうまくいった。

# more /etc/hosts
---
127.0.0.1 localhost
192.168.0.x myhost.domain myhost
192.168.0.y remotehost1
---

127.0.0.1のところはlocalhostにしてホスト名は行を追加してIPアドレスといっしょに書きましょう。
これで準備OK。今回は2つのマシンで起動してみよう。

$ mpdboot (-v) -r rsh -n 2 (-f ~/mpd.hosts)

(-v:詳細表示 -n:ノード数)

確認は以下のコマンドを入力。

$ mpdtrace (-l)
---
hostname1
hostname2
---

確認できたらmpiプログラムを実行させてもいいしシェルコマンドを打ってもいい。

$ mpirun (-l) -n 2 hostname (-l:詳細表示 -n:実行ノード数)
---
hostname1
hostname2
---

rootだったらshutdownコマンドが打てて便利。
プログラムの実行が終わったら終了コマンドを入力。

$ mpdallexit

確認は ps aux | grep mpd などと打ってmpdプログラムが残っていないかみることが出来る。

2006年11月30日

MBR(Master Boot Record)がおかしくなった時の対処方法

ブートローダにgrubを使っている時の場合はgrub起動ディスクが必要。
あらかじめ作っておく必要があるのだがない場合は
他のLinux環境で作るなどの作業が必要。

CentOS4の場合フロッピードライブにフロッピーディスクを入れて以下のコマンドを入力。

# dd if=/usr/share/grub/i386-redhat/stage1 of=/dev/fd0 count=1
---
読み込んだブロック数は 1+0
書き込んだブロック数は 1+0
---

# dd if=/usr/share/grub/i386-redhat/stage2 of=/dev/fd0 seek=1
---
読み込んだブロック数は 202+1
書き込んだブロック数は 202+1
---

これで完成。
実際の使い方は、ちょっとめんどくさいが、/boot/grub/grub.confにかかれている内容そのまま。
だからCDブートLinuxなどで起動してCentOS4のパーティションをマウントしてgrub.confをみてみよう。

出来たフロッピーでMBRを新たに書き換える場合はフロッピーからブートしてプロンプトが出たところで次のコマンドを順に打つ。
適宜環境にあわせて値を変更してください。

grub> root (hd0,1) <--- ハードディスク1番目の2つ目のパーティションの場合
grub> kernel /boot/vmlinuz-2.6.9-42.0.3.EL ro root=/dev/hda2 rhgb quiet
grub> initrd /boot/initrd-2.6.9-42.0.3.EL.img
grub> boot

これで起動する。
起動したら/boot/grub/grub.confを確認した後MBRを書き換えましょう。

# grub-install /dev/hda <--- ハードディスクの先頭領域にMBRを書き込み

2006年12月04日

syslogサーバを構築してログの一元管理

複数台のUNIXマシンを管理しているとログを見ることを怠りがちです。
こんなときはログを一元管理するマシンを作りましょう。

CentOS4マシンをsyslogサーバに仕立てるのはとても簡単。
以下のように-rオプションを追加してsyslogデーモンを再起動するだけ。

# vi /etc/sysconfig/syslog
---
SYSLOGD_OPTIONS="-m 0 -r"
---

# service syslog restart

ここではsshとtelnetとrshのログをsyslogサーバに転送することを考えます。
ここからはログを転送したいマシン上での操作になります。
sshのログ出力設定は/etc/ssh/ssh_configで行っています。

# more /etc/ssh/sshd_config
---
SyslogFacility AUTHPRIV
---

CentOS4のデフォルトはこのようになっていると思います。
rshのログはファシリティauthに、telnetのログはどうもファシリティauthとauthprivに出るようです。
標準のログ出力設定では/var/log/secureと/var/log/messagesの両方にログが出てしまうので
/var/log/secureだけにログが出るよう以下のファイルを書き換えます。

# vi /etc/syslog.conf
---
*.info;mail.none;authpriv.none;auth.none;cron.none /var/log/messages
authpriv.*;auth.* /var/log/secure
---

# service syslog restart

次に/var/log/secureに書かれるログをsyslogサーバに転送する設定をしてみましょう。

# vi /etc/syslog.conf
---
authpriv.*;auth.* @192.168.0.x
---

# service syslog restart

 上ではsyslogサーバのIPアドレスを指定したがホスト名でもかまわない。
 これでsyslogサーバへの転送設定完了。syslogサーバの/var/log/secureに出力されているので確認してみましょう。
 致命的なエラーをsyslogサーバで一元管理することやルータやスイッチのログをsyslogサーバで一元管理など使い方はさまざまあるかと思います。


●参考

syslog.confでのログ出力の詳細

ファシリティ(facility)

auth セキュリティや認証関連
authpriv セキュリティや認証関連(プライベート)
cron cron
daemon facility 値を持たないデーモン
kern カーネルメッセージ
lpr プリンタ関連
mail メール
news ネットニュース
syslog syslogdの内部メッセージ
user ユーザレベルメッセージ
uucp UUCP
local0~7 予約、アプリケーションに依存


プライオリティ(priority)

debug デバッグ情報
info 情報
notice 通知
warn 警告
err 一般的なエラー
crit 致命的なエラー
alert 緊急に対処すべきエラー
emerg システムが落ちるような状態

※指定したpriority以上のログが出力されます。
 例えばuucp.alertと指定すればuucp.emergのログも出力されます。

2006年12月05日

yumコマンドの使い方

yumはrpmコマンドと違い依存関係を考慮して関係するパッケージも更新・削除してくれる。
rpmに慣れている人もyumに慣れておいて損はないでしょう。

yumコマンドを使うと公開鍵のインポートを促すメッセージが表示される。
これが嫌な人は先にインストールしておく。以下はCentOS4の場合。

#rpm --import /usr/share/doc/centos-release-4/RPM-GPG-KEY
#rpm --import /usr/share/doc/centos-release-4/RPM-GPG-KEY-CentOS-4

プロキシサーバ経由の場合は以下の変数を設定しておく。
yumコマンドを実行するたび設定する必要がないように~/.bash_profileなどに記述しておくと便利でしょう。

export http_proxy="http://プロキシサーバ:ポート番号"


●システム全体

アップデート及び新規インストール可能な全パッケージを表示

# yum list

アップデート可能な全パッケージを表示

# yum check-update

システム全体のパッケージのアップデートをします。

# yum update

インストールされている全パッケージを表示

# yum list installed


●個別パッケージ関係

パッケージの検索

# yum search パッケージ名(検索ワード)

パッケージを個別にインストール

# yum install パッケージ名

ファイルがどのパッケージに含まれているのか調べる

# yum provides ファイル名

パッケージの削除

# yum remove パッケージ名

パッケージ情報の表示

# yum info パッケージ名

2006年12月07日

chkconfigコマンドの使い方

このコマンドでサービスの自動起動の設定を操作します。
CentOS4の場合 /etc/init.d/ 配下の起動スクリプト、例えばsshdの中を見るとはじめのほうにコメントアウトして、
---
# chkconfig: 2345 55 25
# description: OpenSSH server daemon
---
とかかれています。これをchkconfigは見ています。

書式は以下
---
chkconfig: サービス開始ランレベル 起動する順番 停止する順番
description: サービスの説明
---
ランレベル2,3,4,5で起動順番55で開始され停止順番は25番、という意味になります。
rpmでインストールした場合は既に登録されていますがもし自分で起動スクリプトを作った場合は以下のコマンドで登録しておきます。

# chkconfig --add sshd

削除

# chkconfig --del sshd

確認

# chkconfig --list sshd

全てのサービスを確認

# chkconfig --list

特定のランレベル、たとえば2をoffにしたい場合

# chkconfig --level 2 sshd off

onにしたい場合

# chkconfig --level 2 sshd on


現在のランレベルでonにしたい場合

# chkconfig sshd on

以上でほぼ使いこなせると思います。

squid(プロキシサーバ)の設定 - その1

 squidは定番のWebプロキシサーバです。回線の遅かった時代にはキャッシュを利用することで同サイト閲覧者が現れたときにキャッシュを見せるという合理的な手段として利用することが多かったのですが、現在はクライアントの代理としてWEBサイトを見に行く機能(安全対策)の意味合いが強いと思われます。
 今回はCentOS4上でソースから導入を行い必要な設定全てを書こうと思います。役立つと思うのでアクセス制御やサイト制限の設定も書こうと思います。


なぜソースから導入するの?
rpmで入れればいいんじゃないの?

 と私も考えていたんですが出来る限りソースから導入しています。メリットは、最新のバージョンが使えることと,自分のマシンに最適化されて性能が向上し、より安定する、と思うからです。rpmはi386で作っていることが多く、ほぼ全てのインテルCPUで動作するようになっています。自分のマシンはPentium4だ!なんて思っても最適化されていません。当然自分のマシンに最適化したい、と思うようになってくると思います。
 しかしソースから入れると設定することが増えてしまいどうしても時間がかかります。当然設定ミスをする可能性が高くなります。
 業務で使うならソースからのほうがいいでしょうか。安定動作が最優先ですから。


始めにsquidをrpmで導入しておきます。一部のファイルを利用するからです。

インストールされているか確認

# rpm -qa|grep squid

インストール

# yum install squid

rpmで導入したsquidが自動起動しないように設定。
コマンドの使い方はカテゴリ「コマンド」に書いておきます。

# chkconfig --list squid
# chkconfig --level 35 squid off

めんどくさい時は削除しちゃってもいいです。

# chkconfig --del squid

上のコマンドを入力してもパッケージファイルが削除されるわけではないので安心を。
事前準備が整ったのでsquid公式サイトから最新安定バージョンをダウンロード。
以下現時点の最新バージョンで記入。

# wget http://www.meisei-u.ac.jp/mirror/squid/Versions/v2/2.6/squid-2.6.STABLE5.tar.bz2

さっそく解凍

# tar jxvf squid-2.6.STABLE5.tar.bz2 -C /usr/local/src/
(-C: 指定した場所に解凍)

解凍先に移動

# cd /usr/local/src/squid-2.6.STABLE5

READMEとINSTALLに目を通す。INSTALLに書かれているとおりに実行でよさそう。
configure --help でさまざまなオプションを見ることができる。
今回はprefixだけつけました。ちなみにこれはデフォルトのようなのでなくてもいい。

# ./configure --prefix=/usr/local/squid
(--prefix:インストール先の指定)

これで関数やライブラリなどの有無をチェックしコンパイルに使うMakefileを生成します。
実際にコンパイルするのは以下のコマンドです。

# make all

これで必要なファイルが出来ました。後はファイルの配置処理(インストール)です。

# make install

これでインストールが完了しました。
後からバージョンが分からなくなるのが心配な方は--prefix=/usr/local/squid-2.6.STABLE5と指定しておいてシンボリックリンクでも作成しておくとよいかと思います。
# ln -s /usr/local/squid-2.6.STABLE5 /usr/local/squid

設定ファイルは/usr/local/squid/etc/squid.confです。
追加・変更した所だけ抜粋しておきます。

http_port 8080
  クライアントからの受付ポート
ftp_user
  FTPサイトでanonymousでログインする時のパスワード(メールアドレス)
cache_mgr name@domain.com
  このサーバ管理者のメールアドレス
acl my_network src 192.168.0.0/255.255.255.0
  アクセスグループの作成
http_access allow my_network
  アクセスグループからの接続許可
cache_effective_user squid
  squidを起動するユーザをsquidに変更
ache_effective_group squid
  squidを起動するグループをsquidに変更
visible_hostname hostname.domain.jp
  これを設定しないとエラーが出ます

特に変更しませんでしたが設定したほうがいいと思うところを下にあげておきます。

cache_mem
  キャッシュに使用するメモリ容量の指定
cache_dir ufs /usr/local/squid/var/cache 100 16 256
  デフォルトでは100Mしかキャッシュしない


※http_access の記述は http_access deny all の前に書きましょう。
※http_access allow の記述はアクセス制限なので十分注意しましょう。
※cache_effective_userとache_effective_groupをsquidに設定しましたがそれぞれ/etc/passwd,/etc/groupに存在するか確認しておきましょう。

ここで作業ユーザ(rootですよね)の環境変数PATHにsquidの実行ファイルをディレクトリを入れておきましょう。squidのrpmパッケージが入っているのでそちらのコマンドとダブっているのでPATHの先頭に追加するのが無難です。

# vi ~/.bash_profile
---
export PATH=/usr/local/squid/bin:/usr/local/squid/sbin:$PATH:$HOME/bin
---
# source =/.bash_profile

確認の為以下のコマンドを入力

# which squid
---
/usr/local/squid/sbin/squid
---

上のように表示されたらOK。


設定が済んだら今度はsquid.confで指定したキャッシュディレクトリを用意して初期化しましょう。
squid付属のコマンドを絶対指定していますがPATHを通しているので省略も可能です。

# mkdir /usr/local/squid/var/cache
# chown squid.squid /usr/local/squid/var/cache
# /usr/local/squid/sbin/squid -z

起動前にログ出力先にアクセス権がないのでchownコマンドを使って権限を与える。

# chown squid.squid /usr/local/squid/var/logs

ようやく準備完了なのでさっそく起動

# /usr/local/squid/bin/RunCache &

なんらかのエラーが出る場合は /usr/local/squid/var/squid.out に出力されているので確認・修正を行います。

あとは確認です。ログを確認するのとアクセス制限がかからないマシンにプロキシの設定をしてWEBブラウズしてみましょう。あまり役にたたないかもしれませんがsquid付属のsquidclientコマンドでも確認出来ます。

# squidclient -p 8080 http://www.google.com/

ここまでで起動は出来ました。ちょっと休憩といったところでしょうか。

次はマシン起動時に自動で起動してほしいのでシステムサービスへの登録を行うのですが長くなってしまったので次回にしたいと思います。

2006年12月14日

squid(プロキシサーバ)の設定 - その2

その1ではRunCacheスクリプトを使って起動するところまで書きました。
このスクリプトのいいところはなにかの都合でsquidがダウンしてしまってもダウンしたことを検知して自動で起動してくれます。しかし停止したい時通常以下のコマンドを使いますがしばらくするとsquidが起動しているのです。

# squid -k shutdown

なので先にRunCacheを落としてからsquidを停止するという順番で停止させます。

# skill RunCache
# squid -k shutdown

RunCacheスクリプトをのぞいて不思議に思ったことがあるので書いておきます。
---
echo "Running: squid -sY $conf >> $logdir/squid.out 2>&1"
---
の最後の数字ですが2はエラー出力、1は標準出力、>&はエラー出力を扱うときのリダイレクト方法のようです。

次にシステムの起動時に自動起動するスクリプトを用意します。
rpmでsquidがインストールされた状態なので/etc/init.d/squidをカスタマイズするか新たに作るかのどちらかです。私は新たに作りました。

# vi /etc/init.d/squid
---
#!/bin/bash
#
# Startup script for the squid-2.6.STABLE5
#
# chkconfig: 35 99 1
# description: squid is Internet Object Cache.

export PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"

RUNCACHE=/usr/local/squid/bin/RunCache
LOCKFILE=/var/lock/subsys/squid
SQUID=/usr/local/squid/sbin/squid

case "$1" in
start)
if [ -x $RUNCACHE ]; then
if [ -f $LOCKFILE ]; then
echo "squid-2.6.STABLE5 already started!!"
else
touch $LOCKFILE
echo "Starting squid-2.6.STABLE5 Please wait......"
$RUNCACHE &
sleep 5
fi
else
echo "squid-2.6.STABLE5 program Not Found"
fi
;;
stop)
if [ -x $SQUID ]; then
if [ -f $LOCKFILE ]; then
echo "Shutting down squid-2.6.STABLE5: "
skill RunCache >/dev/null
$SQUID -k shutdown
rm -f $LOCKFILE
else
echo "squid-2.6.STABLE5 already Stopped!!"
fi
else
echo "squid-2.6.STABLE5 program Not Found"
fi
;;
*)
echo "Usage: httpd {start|stop}" 1>&2
exit 1
esac
exit 0
---
その後以下のコマンドでパーミッションを変更

# chmod 755 /etc/init.d/squid

chkconfigを使ってシステムにこの自動起動スクリプトを登録するので chkconfig の行と description の行を書きましょう。そしてシステムへの登録コマンドをを入力します。

# chkconfig --add squid

確認は以下

# chkconfig --list squid
---
squid 0:off 1:off 2:off 3:on 4:off 5:on 6:off
---

起動スクリプトのはじめの方に
# chkconfig: 35 99 1
と書きましたが35はランレベル3と5で起動し起動する順番は99番目、停止する順番は1番目、という意味になります。私はランレベル5で動かしているので自動起動するようになりました。

serviceコマンドも使えるようになっているのでsquidを起動してみましょう。

# service squid start

ここまででほぼ完成で、やり残しているのはログの管理です。
またまた長くなったので次回書くことにします。

2006年12月21日

squid(プロキシサーバ)の設定 - その3

ログ関係、その他役立ちそうな機能をいくつか書こうと思います。

squidのaccess.logを見ていると先頭は日時のようだけど1970/01/01から始まるUNIX時間で書いている。
わかりにくいのでsquid.confの設定を少し変更しました。

# vi /usr/local/squid/etc/squid.conf
---
access_log /usr/local/squid/var/logs/access.log common
---

ログの場所は階層が深いのでシンボリックリンクでアクセスしやすくしましょう。

# mv /var/log/squid /var/log/squid.old

↑のsquidフォルダはrpmでインストールしてある場合存在するので削除か移動する。

# ln -s /usr/local/squid/var/logs /var/log/squid


●ログのローテーション

以下のコマンドを叩くとsquidの出す3つのログファイルが「元のファイル名.番号インクリメント」という名前に変わってくれる。

# squid -k rotate

あとはcronにこのコマンドを登録して週1や月1など好みで動かしてやればいい。
ログの削除もcronに登録することでローテーションの完成。
簡単にローテーションさせたいならこれでOKと思います。

もうひとつはlogrotateがせっかくあるのでこれを使う方法。
以下の変更はログ全般の設定なので慎重に考えた上で変更しましょう。

# vi /etc/logrotate.conf
---
monthly
rotate 3
---
私のマシンはテスト用なので混雑していません。なのでログは1ヶ月単位でローテーションさせても十分です。
3ヶ月分はログを見たいのでログを残す設定を3にしました。
もし圧縮してログを置いていく場合はcompress行のコメントをはずしましょう。

次はsquid用個別の設定です。
以下のファイルを記述しましょう。rpmでsquidをインストールしてあれば既に存在しているので変更すると楽に作ることが出来ます。

vi /etc/logrotate.d/squid
---
/usr/local/squid/var/logs/access.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
}
/usr/local/squid/var/logs/cache.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
}

/usr/local/squid/var/logs/store.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
postrotate
/usr/local/squid/sbin/squid -k rotate
endscript
}
---
missingokはローテーションに失敗しても気にせず処理を続行するという意味。
notifemptyはからのファイルはローテーションしないという意味。
copytruncateはログを切りつめるという意味。よくわかりませんが作業中のログは残らないようなのでコメントアウトしました。

これでcrondが起動していれば機能します。一応確認しておきましょう。
# ps aux|grep cron
---
root 2704 0.0 0.2 6400 916 ? Ss Dec15 0:00 crond
root 29875 0.0 0.2 5528 724 pts/3 S+ 14:44 0:00 grep cron
---
起動していれば上のように表示されると思います。


●直接アクセスさせたい

ローカル内のページや確実に最新のページが見たいページなどはプロキシを通っても直接アクセスしたい。
そのような時は squid.conf に always_direct の設定をしましょう。
例としてヤフーとローカルネットワークを直接アクセスするようにしてみました。

# vi /usr/local/squid/etc/squid.conf
---
acl yahoo dstdomain .yahoo.co.jp
acl my_network src 192.168.1.0/255.255.255.0
always_direct allow yahoo
always_direct allow my_network
---

●特定のサイトの閲覧を禁止したい

aclの設定をします。例えばgoogleとyahooのアクセスを禁止したい場合は以下のようにします。

# vi /usr/local/squid/etc/squid.conf
---
acl deny_domain dstdomain "/usr/local/squid/etc/deny_domain"
http_access deny deny_domain
---

# vi /usr/local/squid/etc/deny_domain
---
www.google.co.jp
www.yahoo.co.jp
---
しかしこの設定だとauctions.yahoo.co.jpには行けるなどお粗末な設定です。あくまで例としてなので。。。

●上位プロキシサーバの設定

# vi squid.conf
--
cache_peer 上位プロキシIPアドレス parent 上位プロキシポート番号 3130 no-query
never_direct allow all
---

3130 はICPポート番号です。私は使っていないのでデフォルトのまま記述しました。
never_directを設定しないと上位プロキシだけじゃなくて自分で見に行ってしまいます。

●cachemgrの設定

squidにはcachemgr.cgiというプログラムがついてきます。どうもWEBブラウザから統計情報が見えるようなのですがなかなかうまく起動させることが出来ませんでした。
わかり次第書きたいと思います。

2007年01月06日

テープの規格

サーバのバックアップにはまだまだテープが利用されると思います。
そこで規格を表にして見やすいようにしておきます。

TapeKikaku.jpg

2007年01月20日

nkfのインストール

CentOS4にはnkfがないようなので以下から最新のnkfをダウンロードしてきます。
当然ですがUTF-8対応のnkfをインストールします。

http://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/

ダウンロードしたファイルnkf205.tar.gzを解凍してインストールしましょう。

# tar zxvf nkf205.tar.gz
# cd nkf205
# make
# make test

エラーが出なければ出来た実行ファイルとマニュアルをコピーします。

# cp nkf /usr/local/bin
# cp nkf.1 /usr/share/man/man1/

これでOK。

CentOS4でw3mを使えるようにする

CentOS4ではrpmパッケージがないようなのでソースからインストールします。
もちろんUTF-8対応にします。

以下のURLから最新版を検索しましょう。

http://sourceforge.net/

現在の最新版は w3m-0.5.1.tar.gz でした。
w3mのインストールの前にGC library 6.1 以上のものが必要なので以下のURLからダウンロードしてインストールしましょう。

http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/

最新版は gc6.8.tar.gz でした。
README.QUICKを読んでその通りインストールを済ませましょう。

# tar zxvf gc6.8.tar.gz
# cd gc6.8
# make test
# ./configure
# make
# make check
# make install

次にw3mのインストールです。

# tar zxvf w3m-0.5.1.tar.gz
# ./configure

ここで「cannot compute sizeof (long long), 77」なるエラーが出るので
/etc/ld.so.conf に /usr/local/lib を追加して ldconfig を実行します。

# make
# make install

これでw3mを起動出来るようになりました。
セグメンテーション違反というエラーが起こる場合がありますが起動時に -no-mouse を指定してやると出なくなります。いちいち指定するのが面倒なときは ~/.bash_profile などに alias w3m='w3m -no-mouse' と書いておきましょう。
私の場合さらにターミナルの設定も問題でした。
普段 poderosa を使っていて何も考えず VT100 を指定して実行していたんですが xterm や kterm に変更することでこの問題が出なくなりました。

あとw3mを起動してオプション設定をいじって環境を整える必要があります。

2007年01月21日

viの微調整

CentOSでvi(vim)を使用するとカラーモードでこれが見にくい。
なのでホームディレクトリに .vimrc を作ってカスタマイズしましょう。

$ vi ~/.vimrc
---
syntax off
---

これでカラーオフモードになる。

日本語が文字化けすることがあるので設定を追加しておきましょう。
$ vi ~/.vimrc
---
set fileencoding=japan
set fileencodings=iso-2022-jp,utf-8,euc-jp,ucs-2le,ucs-2,cp932
---

その他使いそうなものを書いておく。

set laststatus=2
 常にステータス行を表示

set autoindent
 改行時に上の行と同じく自動インデントする

set number
 行番号を表示する

set ruler
 ルーラー(右下に表示される行・列の番号)を表示する

set tabstop=数値
 タブの大きさを半角スペース数で指定

set nowrap
 折り返し表示しない

set history=数値
 コマンド履歴の保存数

set backup
 ファイルを保存する時にバックアップファイルを作成する

set nobackup
 バックアップファイルを作成しない

2007年01月24日

CentOS4でLDAPクライアント

環境によってパスワードを一元管理できるようにLDAPなどのディレクトリサーバがある場合があります。
そんな時はCentOS4マシンのパスワードをLDAPサーバにまかせる設定をしましょう。

以下のコマンドで設定します。

# authconfig

「LDAP認証を使用」にチェックを入れます。
LDAPサーバがposixAccount, posixGroup に対応していたら「LDAP を使用」にもチェックをいれましょう。
次の画面でLDAPサーバの設定をします。

これで完了。PAMを利用しているようなのでPAMを使ったアプリケーションがLDAP対応になります。
以下のファイルが書き変わります。

/etc/ldap.conf
/etc/openldap/ldap.conf
/etc/nsswitch.conf
/etc/pam.d/system-auth
/etc/sysconfig/authconfig

これでLDAPサーバからパスワードを引いてくるようになっているはずです。
ちなみにこの設定では /etc/passwd も見るようで ldap のパスワードと2つ使えます。
ややこしいのでpasswdファイルのパスワードはロックしちゃいましょう。

# passwd -l username

これでLDAPのパスワードしか使えなくなります。

2007年01月25日

ソフトウェアRAIDに障害が発生した時の確認方法

CentOS4インストール時にソフトウェアRAIDの機能を使ってRAID1を構成している場合の確認方法と障害が発生した場合の確認方法をみていきます。mdmonitorサービスが起動している必要があると思います。

# chkconfig --list mdmonitor
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off

基本的には/proc/mdstatをみることで確認できます。
詳細な確認コマンドは以下。

# mdadm --detail /dev/md0

RAIDになんらかの障害が発生した場合,メールが送られるになっています。
仮想的に異常を発生させてメールが届くことを確認しましょう。

# mdadm /dev/md1 --fail /dev/hda1

/proc/mdstatを確認することで異常かどうかを確認することができます。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb2[2](F) hda2[0]
522048 blocks [2/1] [U_]

md2 : active raid1 hdb3[1] hda3[0]
29455104 blocks [2/2] [UU]

md0 : active raid1 hdb1[1] hda1[0]
48064 blocks [2/2] [UU]

unused devices:

md1に(F)マークが付き,[2/1] [U_]に表示が変わりました。
このとき/etc/mdadm.confのMAILADDRに指定したユーザにメールが届いています。
デフォルトでrootに届くはずです。内容は以下のよう。

---
Subject: Fail event on /dev/md1:yourhostname

This is an automatically generated mail message from mdadm
running on yourhostname

A Fail event had been detected on md device /dev/md1.

Faithfully yours, etc.
---

確認ができたので仮想的な異常を元に戻しましょう。

# mdadm /dev/md1 --remove /dev/hdb2
mdadm: hot removed /dev/hdb2

# mdadm /dev/md1 --add /dev/hdb2
mdadm: hot added /dev/hdb2

確認をしましょう。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb2[2] hda2[0]
522048 blocks [2/1] [U_]
[===>.................] recovery = 16.8% (88960/522048) finish=0.6min speed=11120K/sec
md2 : active raid1 hdb3[1] hda3[0]
29455104 blocks [2/2] [UU]

md0 : active raid1 hdb1[1] hda1[0]
48064 blocks [2/2] [UU]

unused devices:

元に戻してすぐ確認すると上のようにリカバリー状態をみることができます。
リカバリーがすむと下のような表示になっています。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb2[1] hda2[0]
522048 blocks [2/2] [UU]

md2 : active raid1 hdb3[1] hda3[0]
29455104 blocks [2/2] [UU]

md0 : active raid1 hdb1[1] hda1[0]
48064 blocks [2/2] [UU]

unused devices:

くれぐれも慎重に行いましょう。

CentOS4でopenLDAPを使ったユーザ情報の管理その1

CentOS4でディレクトリサービスをする場合openldapを利用しましょう。
パッケージopenldap-serversが入っていない場合があるので確認を。
今回はユーザ名とパスワード、それに電子メールアドレスを登録していきます。

始めにツリー構造を考えます。

---
dn 識別名
objectClass オブジェクトクラス
dc ドメイン構成要素
o 組織名
ou 組織単位,組織の部局
cn 一般名称,人名
---

構成の例
---
dc=com
dc=mydomain

ou=jinji,ou=eigyo,ou=gijyutsu
---
この場合は人事,営業,技術という3つのツリー構造(入れ物?)にそれぞれのデータを入れていくことになります。設定は以下。

# vi /etc/openldap/slapd.conf
---
suffix "dc=mydomain,dc=com"
rootdn "cn=Manager,dc=mydomain,dc=com"
---

suffixでベースDN(Directory Name)名を指定します。インターネットの世界でもユニークになるようにDNSと同じ設定をしておきましょう。
rootdnはこのLDAP管理者です。
パスワードを設定する必要があるんですが暗号化して記述したいので slappasswd コマンドで
出力された暗号化パスワードを記述しましょう。

# vi /etc/openldap/slapd.conf
---
rootpw {SSHA}KOwKieVxsDtLQVBwC0t10aX3YAoFKUZL
---

次はアクセス制御を施しましょう。

# /etc/openldap/slapd.conf
---
access to attr=userPassword
by self write
by dn="cn=Manager,dc=anan-nct,dc=ac,dc=jp" write
by anonymous auth
by * none

access to *
by self write
by dn="cn=Manager,dc=anan-nct,dc=ac,dc=jp" write
by * read
---
上の設定の意味は,
パスワードについてはopenLDAP管理者と本人は書換も可,
匿名ユーザでも認証すればパスワードの利用を許可。

パスワード以外についてはopenLDAP管理者と本人は書換OK,
その他の人は読込OK。

アクセス制御は /etc/host.allow /etc/hosts.deny でも可能です。
端末制御はこちらで行いましょう。


次は検索の際の高速化設定です。
デフォルトの設定でも問題ありませんがやはりきちんと設定したいところ。
今回はsn,cn(ユーザ名)とuidとメールアドレスの高速化を図りましょう。

# vi /etc/openldap/slapd.conf
---
index sn,cn,uid,mail eq,pres,sub
---


ログの設定もしておきましょう。
openLDAPのログはデフォルトでlocal4に出力し,レベルは256です。
openLDAPのログを指定したファイルに出力する場合は以下の設定をしましょう。

# vi /etc/openldap/slapd.conf
---
loglevel 256
---
この記述は新規追加になります。

# vi /etc/syslog.conf
---
local4.* /var/log/ldap.log
---

# touch /var/log/ldap.log
# chown ldap.ldap /var/log/ldap.log

ログのローテーション設定もしておきましょう。
以下のファイルに /var/log/ldap.log を追加します。
おそらく見ればどこに追加すればよいか分かると思います。

/etc/logrotate.d/syslog


どのようなログを出力させたいかは以下を参考に。

1
(0x1 trace) 関数呼出しのトレース
2
(0x2 packet) パケット処理のデバッグ
4
(0x4 args) (関数の引数も含めた)詳細なデバッグトレース
8
(0x8 conns) 接続管理
16
(0x10 BER) パケット送受信の印字
32
(0x20 filter) 検索フィルタの処理
64
(0x40 config) 設定ファイルの処理
128
(0x80 ACL) アクセス制御リストの処理
256
(0x100 stats) 接続/操作/結果の統計ログ
512
(0x200 stats2) エントリ送信の統計ログ
1024
(0x400 shell) shell バックエンドとの通信の印字
2048
(0x800 parse) エントリの解析
4096
(0x1000 cache) データのキャッシュ処理(未使用)
8192
(0x2000 index) データの索引処理(未使用)
16384
(0x4000 sync) LDAPSync 複製
32768
(0x8000 none) ログレベルの設定にかかわらずログを取るメッセージのみ

any指定で全ログを取ります。0は全く取らない。
接続管理ログも取りたければ8+256で264という風に指定します。


ここまでで設定が終了です。確認のコマンドを打ってみます。

# slaptest
config file testing succeeded

上のように表示されたらうまく設定できていますので起動してみましょう。

# service ldap start

システム起動時にopenldapを起動したい場合は以下のコマンドを打っておきます。

# chkconfig ldap on

2007年02月03日

sshでアクセス出来るユーザを制限する

CentOS4でsshポートを空けておきつつ,アクセス出来るユーザを制限する場合は以下の行を追加する。

# vi /etc/ssh/sshd_config
---
AllowUsers hoge1 hoge2
---

追加が終わったら再起動して出来上がり。

# service sshd restart

2007年02月04日

vsftpdの設定

vsftpdはCentOS4ではパッケージインストール出来ます。
anonymousサービスは受け付けずシステムユーザだけ使えるようにします。
標準ではlastコマンドで接続履歴が見れないので見えるように設定します。
FTP接続ユーザは自身のディレクトリ以外移動出来ない設定しようと思ったのですが
RedhatES4のリファレンスを見ると chroot_local_user を使うのは危険とあったので今回は見送ることにします。

今回はパッケージを使ってインストールし,実運用するまでを書きます。
まずシステムにインストールされていない場合は以下のコマンドでインストールしましょう。

# yum install vsftpd

設定ファイルはvsftpd.confだけでいけるようです。
注意点としてイコールの前後にスペースが入ってはいけないようです。

# vi /etc/vsftpd/vsftpd.conf

設定は以下。
---
anonymous_enable=NO # anonymousサービスはしない
local_enable=YES # ローカルユーザは利用可能
write_enable=YES # 書き込み可能
local_umask=022 # マスクの設定
dirmessage_enable=NO # ディレクトリ移動の際,.message(デフォルト)ファイルの内容を表示しない
vsftpd_log_file=/var/log/vsftpd.log # ログファイルの指定
xferlog_enable=YES # 接続とファイル転送情報のログを取る
xferlog_std_format=NO # wu-ftpd互換のログファイルにしない
connect_from_port_20=YES
ascii_upload_enable=YES # Asciiモードによる転送を許可
ascii_download_enable=YES
banner_file=/etc/vsftpd/welcome.msg # ウェルカムメッセージ。接続した時点で表示される内容を書くファイル
ls_recurse_enable=YES # 再帰的アップロード,ダウンロードの許可
pam_service_name=vsftpd # PAMを利用する時の名前
listen=YES # スタンドアロンモードで実行
max_clients=50 # スタンドアロンモードの時の最大接続数
tcp_wrappers=YES # hosts.allow hosts.deny によるアクセスを可能に
use_localtime=YES # コンピュータのローカル時間を使う
session_support=YES # ログインセッションの保全(lastコマンドで表示されるようにする)
---

これでOK。
後はシステムに自動起動登録をして起動して様子を見ます。

# chkconfig --level 35 vsftpd on
# chkconfig --list vsftpd
# service vsftpd start

一度接続してみてファイルをアップロードなりダウンロードなりしてみましょう。
そして/var/log/vsftpd.logを見てみます。
接続情報とファイル情報が書かれていればきちんとログがとれています。
lastコマンドも確認しておきましょう。
vsftpdのログが表示されていればOK。

2007年02月05日

quotaでディスクの使用制限をかける

●事前準備

# vi /etc/fstab
---
/dev/md2 /home ext3 defaults,usrquota,grpquota 1 1
---

# mount -o remount /home (再マウント)
or
# reboot

確認コマンド
# mount
---
/dev/sda2 on /home type ext3 (rw,usrquota,grpquota)
---
このような表示がされたらquota機能が使える状態です。

次は実際にユーザ使用量を確認します。

# quotacheck -faugv
# quotacheck -faugvm

a: /etc/mtab にある NFS 以外の全てのファイルシステムをチェックする
f: quota が有効にされているファイルシステムに対して quota ファイルをチェック
u: ユーザクオータのチェック
g: グループクオータのチェック
v: 画面に進行状況を表示
m: ファイルシステムをリードオンリーで再マウントしない(強制的なチェック)

quotacheckコマンドはファイルシステムを読み出し専用で再マウントし,チェックします。
(mオプションをつけるとこの動作はしない)
終わったら元のモードに戻します。

もし/(ルート)ファイルシステムをチェックする場合は -m オプションもつけます。
これでファイルシステムのルート(/home)に aquota.usesr と aquota.group が作成されています。

次のコマンドでquota機能をonにします。

# quotaon -augv


●実際に制限をかける

ユーザhoge1に対して1Mしか許可しない設定の場合はブロック単位でのハード制限を設定する。
edquotaコマンドを実行するとデフォルトでviが起動します。

# edquota hoge1
---
Disk quotas for user hoge1 (uid 502):
Filesystem blocks soft hard inodes soft hard
/dev/sda2 40 0 1024 11 0 0
---
それぞれの意味は順番に,
 ファイルシステム名
 使用中のブロック数
 ブロック単位でのソフト制限
 使用中のノード数
 ノード数でのソフト制限
 ノード数でのハード制限
となります。

●運用時の注意点

マシン再起動時に自動的にクオータのチェックが行われますが,24時間起動のマシンだとcronで定期的にquotacheckコマンドをかけてquota.userとquota.groupを更新してやる必要があります。

●確認コマンド

# repquota -augv

PERLモジュールのダウンロード

コマンドラインから簡単にPERLのモジュールをインストールする方法としてCPANモジュールと対話するシェルがある。

# perl -MCPAN -e shell

いろいろ聞いてくるが基本的にそのままOKでよさそう。

ncftpget,ncftpがシステムになかったので以下からダウンロードしてインストールした。

http://www.ncftp.com/download/

ftp は /usr/bin/ftp を指定した。

設定が終わったらプロンプトが現れるので必要なモジュールをダウンロードする。

cpan> install Net::SSLeay.pm
CPAN: Storable loaded ok
Fetching with LWP:
ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/authors/01mailrc.txt.gz
 ・ ・・・

cpan> bye

help と打てばコマンドが分かる。
rootパスワードを聞いてくることもあるようだ。

どのようなモジュールがインストールされているかは以下のコマンドで確認出来る。

# rpm -qa | grep perl
or
# find `perl -e 'print "@INC"'` -name '*.pm' -print

2007年02月17日

postfixによるSMTPサーバの構築その1

●プロセス概要

postfixは内部的に処理が分割されていてそれぞれが自分の仕事をこなすことで成り立っています。
主なものは以下。

master
postfix全体の管理する。

sendmail
ローカルからの送信処理を担当。

smtpd
メールの受信処理を担当。その後cleanupプロセスに渡す。

cleanup
メールをincomingキューに保管するプロセス

qmgr
incomingキューを監視し,メール配送の準備をするプロセス

active
qmgrが配送中のメールを管理するプロセス

local
届いたメールをローカルスプールに格納するプロセス

incoming
受信したメールを保存し,配送プロセスに渡す。

pickup
maildropキューを監視するプロセス。メールを検知するとcleanupプロセスに渡す。


メール送受信の流れの概要は,
外部からメールを受信した場合のプロセスは,
smtpd -> cleanup --> incoming --> qmgr --> active --> local

内部からメールを送信する場合のプロセスは,
sendmail --> postdrop --> maildrop --> pickup --> cleanup --> incoming --> qmgr --> active --> smtp


●インストール

実際にpostfixによるメールサーバの構築をします。
CentOS4ではsendmailとpostfix関連のパッケージが入っていると思うのでアンインストールしてソースからインストールします。
依存関係で必要なパッケージをおいておきたい場合は --nodeps をつけてアンインストールします。

例えばこんな感じ。

# rpm -e --nodeps sendmail

postfix ユーザと postfix, postdrop グループがなければ作成しておきます。

オプションの設定によってはpcre-develが必要になるかもしれません。

ソースの入手先は http://www.postfix.org
現時点での最新バージョンは postfix-2.3.7.tar.gz でした。
ではさっそくダウンロードしてインストール準備をしましょう。

# tar zxvf postfix-2.3.7.tar.gz -C /usr/local/src
# cd /usr/local/src/postfix-2.3.7

以前のコンパイル情報を初期化する場合は以下のコマンドを打ちます。

# make tidy

コンパイルオプションは必要に応じて適宜設定してください。
CCARGSにコンパイルオプション,AUXLIBSにライブラリを指定します。
特に拡張機能を有効にする必要がない場合は make とシンプルに入力です。

# make makefiles 'CCARGS=-DHAS_LDAP -DHAS_PCRE -I/usr/include/pcre -DUSE_SASL_AUT\H -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS -DDEF_MANPAGE_DIR=\"/usr/share/m\an\"' AUXLIBS="-ldb -lldap -llber -lz -lm -lpcre -lsasl2 -lssl -l crypto"

# make install

以下のようなことを聞いてきますがいろいろ聞いてくるが基本的にはデフォルトでOKです。
私は好みでcommand_directoryを /usr/local/sbin にしました。

install_root: [/]
tempdir: [/usr/local/src/postfix-2.3.7]
config_directory: [/etc/postfix]
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [no]
manpage_directory: [/usr/share/man]
readme_directory: [no]

これでインストールは終了です。
設定は次回書きます。

2007年02月18日

postfixによるSMTPサーバの構築その2

前回でインストールまで済んだので今度は起動スクリプトを書いてシステム起動時にpostfixが起動するように設定しましょう。

スタートストップスクリプトを書きましょう。

# vi /etc/init.d/postfix
---
#!/bin/bash
#
# Startup script for the Postfix-2.3.7
#
# chkconfig: 35 99 1
# description: MTA Server program

export PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"

LOCKFILE=/var/lock/subsys/postfix
POSTFIX=/usr/local/sbin/postfix


# ネットワークが利用可能かチェック
. /etc/sysconfig/network

if [ ${NETWORKING} = "no" ]; then
exit 0
fi


case "$1" in
start)
if [ -x $POSTFIX ]; then
if [ -f $LOCKFILE ]; then
echo "postfix already started!!"
else
touch $LOCKFILE
echo "Starting Postfix-2.3.7 Please wait : "
$POSTFIX start
sleep 5
fi
else
echo "postfix program Not Found"
fi
;;
stop)
if [ -x $POSTFIX ]; then
if [ -f $LOCKFILE ]; then
echo "Shutting down postfix: "
$POSTFIX stop
rm -f $LOCKFILE
sleep 5
else
echo "postfix already Stopped!!"
fi
else
echo "postfix program Not Found"
fi
;;
*)
echo "Usage: postfix {start|stop}" 1>&2
exit 1
esac
exit 0
---

スクリプトを書いたらシステムに登録します。

# chmod 755 /etc/init.d/postfix
# chkconfig --add postfix

これでランレベル3と5で起動するようになりました。

●基本設定

設定は/etc/postfix/main.cf で行います。
とりあえず基本的な設定をしましょう。

# vi /etc/postfix/main.cf
---
# ホスト名をFQDNで
myhostname = hostname.domain.com

# ドメイン名
mydomain = domain.com

# メール送信時に付けるドメイン名(@のうしろ)
myorigin = $myhostname

# 受信するインターフェイスの設定
inet_interfaces = all

# 受け取るドメイン
mydestination = $myhostname, $mydomain, localhost, localhost.$mydomain

# 中継を許可するネットワーク
mynetworks = 127.0.0.0/8, 192.168.1.0/24
---

それではpostfixを起動してみましょう。

# service postfix start

他のメールサーバからメールを送ってみてから/var/log/maillogを見るとエラーが出ています。
/etc/aliases.db がないと言われているのでnewaliases コマンドを打っておきます。

# newaliases

また,warning: dict_nis_init: NIS domain name not set というエラーが出たので
main.cfに以下を追加しました。

---
alias_maps = hash:/etc/aliases
---

postfixの設定ファイルの再読込みをします。

# postfix reload


これでエラーもなくなり基本的な動きが可能になりました。

postfixによるSMTPサーバの構築その3

前回でmain.cfへの基本設定がすんだのでいろいろなスパム対策をしましょう。

●送信元ホストによるアクセス制御

スパム対策など不必要なメールの受信をしないためにアクセス制御をしましょう。
アクセス制御には smtpd_client_restrictions を使います。

---
smtpd_client_restrictions =
        permit_mynetworks,
        check_client_access regexp:/etc/postfix/client_access,
        reject_unknown_client,
        permit
---

reject_unknown_clientのレスポンスコードはデフォルトで450ですがこれでは再送されてしまうため気になる人は550などにしましょう。
---
unknown_client_reject_code = 550
---

上の例では mynetworks で指定したネットワークを受信し,/etc/postfix/client_access ファイルによるアクセス制御を行い,reject_unknown_client でDNS逆引きができないサーバからの接続を拒否し,permitでそれ以外のデフォルト動作は接続を許可するという意味になります。
reject_unknown_client を指定すると結構メールをはじきますので注意が必要です。

regexp はそれ以降に指定したファイルの記述に正規表現を使うという意味です。書式は以下のような感じ。

---
/^223-123-45-67\.example\.net$/           OK
/\.domain\.com$/                                OK
/^223\.123\.45\.67$/                            REJECT
/^[^\.]*[0-9][^0-9\.]+[0-9]/                   450 may not be MX
---

/パターン/ 制御パラメータ
といった形式になります。
制御パラメータには,OK, REJECT, 4xx コメント, 5xx コメント, DISCARD コメント,などがあります。
4xxを指定した場合はエラーメッセージを返しメールは再送されますが,5xxを指定した場合はエラーメッセージをすぐに返し,メールは再送されません。


●送信元ドメインによるアクセス制御

ドメインによるアクセス制御は以下のようにします。

---
smtpd_sender_restrictions =
        permit_mynetworks,
        # 送信者のドメインがMX,Aレコードいずれでもない場合拒否
        reject_unknown_sender_domain,
        check_sender_access hash:/etc/postfix/sender_access,
        permit
---

reject_unknown_sender_domainもデフォルトレスポンスコードが450なので550にします。
---
unknown_address_reject_code = 550
---

sender_accessの書式はhashにしています。hashはいたって簡単。ただ,hashはpostmapコマンドでdbファイル形式に変換する必要があります。

# postmap /etc/postfix/sender_access

---
spammer@domain.com REJECT
domain.jp OK
spam.com REJECT
---


●RBLの利用

オープンリレー(第三者中継を許してしまっているサーバ)の情報を集め,データベースにしているサイトを利用して受信を拒否する設定が可能です。もし,データベースに登録されていれば受信を拒否出来ます。
設定は smtpd_client_restrictions に記述します。

---
reject_rbl_client list.dsbl.org
reject_rbl_client all.rbl.jp
---

RBL提供サイト一覧は以下のサイトで調べることが出来ます。

http://www.sdsc.edu/~jeff/spam/cbc.html

RBLサイトの中には精度に問題があるところもあるので慎重に選びましょう。


●メッセージ内容による制御

ヘッダー情報による制御を行うには以下の記述のコメントをはずし/etc/postfix/header_checksに制御したい内容を記述する。

header_checks = regexp:/etc/postfix/header_checks

# vi /etc/postfix/header_checks
---
/^X-Mailer:.*Emacs/ REJECT header_check RULE1
---

このように記述するとX-MailerにEmacsという文字を含んでいるとはじきます。またログには header_check RULE1 のコメントが書き込まれます。

同様にメッセージ内容による制御を行うには body_checks を使う。main.cfには以下のように記述する。

body_checks = regexp:/etc/postfix/body_checks

# vi /etc/postfix/body_checks

body_checksに制御したい内容を書きましょう。


●存在しないユーザ宛のメール

でたらめなユーザ宛によくきます。レスポンスコードは550になっていることを確認しましょう。

---
unknown_local_recipient_reject_code = 550
---

2007年02月21日

postfixによるSMTPサーバの構築その4

その他設定しておきたい項目をいくつか上げておきます。

●メールの配送関係の設定

何度配送しても配送できないメールの保存期間(デフォルト5日)

maximal_queue_lifetime = 1d

配送できないエラーメールの保存期間(デフォルト5日)

bounce_queue_lifetime = 1d

●メールサイズに関する設定

1つのメールで指定できる宛先の数

smtpd_recipient_limit = 50

1通のメールサイズ制限を行う

message_size_limit = 5120000 (5M)

メールボックスの最大容量

mailbox_size_limit = 51200000 (50M)

2007年02月22日

CentOS4でopenLDAPを使ったユーザ情報の管理その2

openLDAPなどのディレクトリサービスは冗長構成をとるのが一般的です。なので前回でマスターサーバの設定が済んだので今回は複製サーバを構築しましょう。
複製側サーバもCentOS4を前提にしています。同じバージョンのldapを使っていればきれいに動くと思います。


●マスターサーバ側の作業

複製サーバ側のslapd.confの設定はマスター側とほとんど同じなので複製サーバにslap.confをコピーして利用すると便利です。以下はマスター側のslapd.confへの追加です。

修正情報を記録するログファイルを指定
---
replogfile /var/lib/ldap/openldap-master-replog
---

複製サーバ情報を指定

---
replica host=replica.domain.com:389
suffix="dc=domain,dc=com"
binddn="cn=Manager,dc=domain,dc=com"
credentials=Password
bindmethod=simple
tls=yes
---

binddnにManagerを指定しましたが書き込み権限のあるユーザなら誰でもOKでcredentialsでパスワードを指定します。
tlsをyesに設定したのでサーバ間のデータは暗号化通信を行います。

はじめは複製サーバ側へデータを手動で入力する必要があります。
ということで現在の登録データをファイルに書き出します。

# slapcat -l /etc/openldap/export.ldif

できたexport.ldifファイルを複製サーバ側にコピーしておきます。


●複製サーバ側の設定(slapd.conf)

基本的に設定はマスター側と同じです。以下複製サーバ特有の設定だけ記入します。
マスター側からコピーしてきたslapd.confを使います。

マスターから送られてくる複製情報を書き込むユーザの指定。当然書き込み権限のある
ユーザを指定する必要があります。
---
updatedn "cn=Manager,dc=anan-nct,dc=ac,dc=jp"
---

マスターのアドレスを記述する必要があります。
---
updateref ldap://ldap.domain.com
---

次にマスターサーバから持ってきたデータをインポートします。

# slapadd -l /directory/export.ldif

データベースに既にデータが入っている場合はいろいろエラーがでますがログなどを見
て適宜データを削除するなどして対処してください。データの削除にはWindowsで動作するldap browserが便利だと思います。Javaで作成されていてちょっとしたデータの修正などに大いに役立ちます。

↓ldap browser
http://www-unix.mcs.anl.gov/~gawor/ldap/

●起動

設定がすんだら次は起動です。複製サーバ,マスターサーバの順に起動していきます。
うまく起動できたら正常に複製されているかログを確認しましょう。

2007年03月22日

LDAPのパスワードをWEBブラウザから変更する

今回はuserminを使ってWEBブラウザからパスワードを変更出来るようにします。
openldapのパスワードを変更することを前提としています。
もちろんopenldapが設定されており稼働していることも前提です。

userminのダウンロードは以下

http://www.webmin.com/

現在の最新版は usermin-1.260.tar.gz でした。
これを解凍してインストールします。

# tar zxvf usermin-1.260.tar.gz -C /usr/local/src/
# cd /usr/local/src/usermin-1.260
# ./setup.sh

Config file directory [/etc/usermin]:
Log file directory [/var/usermin]:/var/log/usermin
Full path to perl (default /usr/bin/perl):
Web server port (default 20000):

ログファイルは/var/log配下がいいので変更しましたが
それ以外はデフォルトにしました。

次に日本語表示に対応させます。

# vi /etc/usermin/config
---
lang=ja_JP.euc
---

以下のファイルも関係しますので適宜修正しましょう。

/usr/local/src/usermin-1.260/changepass/lang/ja_JP.euc
/usr/local/src/usermin-1.260/changepass/lang/en
/usr/local/src/usermin-1.250/ulang/ja_JP.euc


使う機能をパスワードだけにする場合は以下のファイルを編集します。

# vi /etc/usermin/webmin.acl
---
user: changepass
---

また,rootで認証できないように設定します。

# vi /etc/usermin/miniserv.conf
---
denyusers=root
---

pamを利用してldapのパスワードで認証し,変更出来るようにします。
まずはpamの設定ファイルを以下のように作ります。

# vi /etc/pam.d/usermin
---
#%PAM-1.0
auth required pam_nologin.so
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
---

プログラムの修正も必要です。
以下のファイルを修正します。

# /usr/local/src/usermin-1.260/changepass/changepass.cgi
---
### if ($msg =~ /old|current/i) {
if ($msg =~ /login/) {
---

上記箇所をコメントアウトして書き直します。
cgiファイルの下から15行目あたりかと思います。

さらにPERLのモジュールが必要です。
モジュールはNet::SSLeay.pmとAuthen::PAMです。
このモジュールをインストールするにはPERLのシェルを動かします。
しかしCentOS4にはncftpgetコマンドが入っていないのであらかじめ
インストールしておきます。

http://www.ncftp.com/download/

そして以下のコマンドを入力します。

# perl -MCPAN -e shell

はじめはいろいろ聞いてくるがデフォルトでよさそうです。
ftpの指定は/usr/bin/ftpにしました。

cpan> install Net::SSLeay
cpan> install Authen::PAM

userminのページからldapパスワードを変更するには
以下のファイルを編集する必要があります。

# vi /etc/usermin/changepass/config
---
passwd_cmd=
###smbpasswd=smbpasswd
---
sambaは使っていないのでコメントアウトしました。


自動起動の設定も行っておきましょう。
スクリプトファイルがあるのでそれをコピーします。

# cp /usr/local/src/usermin-1.260/usermin-init /etc/init.d/usermin

次にシステムに認識させます。

# chkconfig --add usermin
# chkconfig --list usermin
usermin 0:off 1:off 2:off 3:on 4:off 5:on 6:off

ランレベル3と5で自動起動するようになりました。
私は2を削ったので3と5だけです。

2007年05月17日

perlのMCPANシェルの初期設定を変更する

perlのモジュールをインストールする時,

# perl -MCPAN -e shell

とコマンドラインを使っている方も多いと思います。
初めて実行すると初期設定を聞いてきますが,この初期設定を変えたい場合はどうするのでしょうか。

それは以下のファイルを別名で待避するなどしてどかしてやります。

/usr/lib/perl5/5.8.5/CPAN/Config.pm

バージョンやOSによって多少違うかもしれません。

2007年06月12日

apacheのベーシック認証をLDAP対応にする。

組織にLDAPサーバある場合はベーシック認証よりもLDAPサーバで認証したほうがよい。
redhat9にてapacheをLDAP対応にし,ベーシック認証をLDAPで行うことにした。
apacheをソースから入れる場合,バージョン2.2系列はうまくいかなかったので2.0系列で行った。
ちなみにRHEL3でもうまくいった。


1.db-4.5.20のインストール

まず初めにBerkeleyDBのインストールを行う。
これは,OpenLDAPのデータベースとして機能するので必要。

以下のサイトからダウンロードしましょう。
http://www.oracle.com/database/berkeley-db/index.html

今回は現時点で最新のBerkeleyDB-4.5.20を使うことにした。

# tar zxvf db-4.5.20.tar.gz -C /usr/local/src
# cd /usr/local/src/db-4.5.20/build_unix
# ../dist/configure --prefix=/usr/local/BerkeleyDB-4.5.20
# make
# make install

わかりやすくシンボリックリンクを作成しましょう。

# ln -s /usr/local/BerkeleyDB-4.5.20 /usr/local/bdb


2.OpenLDAPのインストール

以下のサイトからダウンロードしましょう。
http://www.openldap.org/

今回はopenldap-2.2.30を使いました。
これはLDAPサーバとして2.2系列を使っているので念のためバージョンを合わせておいた。

はじめにBerkeleyDBのインストール先を環境変数を設定して教えてあげます。

# export LDFLAGS="-L/usr/local/bdb/lib"
# export CPPFLAGS="-I/usr/local/bdb/include"
# export LD_LIBRARY_PATH=/usr/local/bdb/lib:$LD_LIBRARY_PATH

インストール作業の開始です。

# ./configure --prefix /usr/local/openldap-2.2.30 \
--enable-crypt --enable-ldbm --enable-wrappers --with-cyrus-sasl=no
# make depend
# make
# make install

わかりやすくシンボリックリンクを作成しましょう。

# ln -s /usr/local/openldap-2.2.30 /usr/local/openldap


3.apacheのインストール

apacheを以下のサイトからダウンロードしましょう。
http://httpd.apache.org/

# tar jxvf httpd-2.0.59.tar.bz2 -C /usr/local/src
# cd /usr/local/src/httpd-2.0.59

aprとapr-utilはapache添付のものを使います。

# cd srclib/apr
# ./configure --prefix=/usr/local/apr-httpd
# make
# make install

# cd ../apr-util
# ./configure --prefix=/usr/local/apr-util-httpd --with-apr=/usr/local/apr-httpd \
--with-ldap-include=/usr/local/openldap/include --with-ldap-lib=/usr/local/openldap/lib --with-ldap
# make
# make install

ようやくapacheのインストールです。

# cd /usr/local/src/httpd-2.0.59
# ./configure --prefix=/usr/local/apache-2.0.59 --enable-so --enable-ldap --enable-auth-ldap \
--with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd
# make
# make install

かわりやすくシンボリックリンクを作成しましょう。

# ln -s /usr/local/apache-2.0.59 /usr/local/apache2


以上でインストールが終了しました。
後は起動スクリプトを用意し,httpd.confなどコンフィグファイルを調整して起動。

httpd.confに以下のような記述をするとLDAPサーバで認証してくれます。

#-------------
# LDAP認証例
#-------------

AuthType Basic
AuthName "Secret Page"
AuthLDAPURL ldap://host.domain.com:389/ou=people,dc=domain,dc=com?uid
require valid-user
Order deny,allow
Deny from all
Allow from 192.168.0.0/255.255.255.0

2007年09月05日

spamassassinでスパムメール対策

 スパムメールがこのところやたら目につく。有料のアプライアンス製品と遜色ないレベルで駆除をおこなってくれそうなOSSもいくつかあるようだ。目をつけたのは spamassassin と bsfilter。日本語のスパム対策で有利なのはbsfilterのようだが我が組織の環境では日本語圏外からのスパムの方が多い。またspamassassinも工夫次第で日本語スパムにも十分な処理をするようだったので今回はこの手のソフトウェアでのデファクトスタンダードであるspamassassinを選択した。
 特徴は以下。

●メールのヘッダと本文のパターンマッチング
●ベイジアンフィルタ
●DNSBL, URIBL
●共同型フィルタリングネットワーク

SPAMメールをSPAMメールと判定する精度:約95%
正常メールを正常メールと判定する精度:約99%

学習機能があるので精度は徐々に上がると思います。

今回OSはCentOS4,RHEL4で確認した。どちらも同じ設定だった。RHEL4での作業記録をとっている。

まずはspamassassinのインストールから。

# up2date --configure
# up2date --install spamassassin

spamassassin-3.1.9-1.el4にバージョンアップした。これでインストール完了。
サイトポリシー設定ファイルは以下のファイルです。このコンフィグファイルで全体の制御にかかわる設定を行います。
/etc/mail/spamassasin/local.cf

個別ユーザ設定ファイルは以下です。ユーザごとの設定です。
~/.spamassassin/user_prefs

ルールのアップデートを必ず行いましょう。
# sa-update
※/var/lib/spamassassin配下にダウンロードされます
※perl-Archive-Tarのrpmと
 perl-IO-Zlibのrpmをインストールしないとエラーが出る。


procmailを利用してspamassassinは機能します。


spamassassinを利用するユーザには~/.procmailrc ファイルを作成します。

$ vi ~/.procmailrc
---
# ログ
LOGFILE=$HOME/procmail.log

# spamassassinによるスパムチェックを行う
:0fw:$HOME/.procmail.lock
|/usr/bin/spamc

# スパムメールをユーザ届かなくする設定
:0
* ^X-Spam-Status: Yes
/path/file
---

ネットで調べると$HOME/.procmail.lockは書かなくてもいいようだったけど書かないとprocmail.logにエラーが出た。
/path/file は /dev/null でもいいけどちょっと怖い。


postfixを使っている場合は以下のように設定を変更します。

# vi /etc/postfix/main.cf
---
mailbox_command = /usr/bin/procmail
---


最後に各種サービスの起動,再起動などをします。

# chkconfig --level 35 spamassasin on
# service spamassassin start
# service postfix reload

これでOK。意外と簡単でした。あとはspamassassinの判定精度を上げるために学習させます。


スパムメールを学習させる

# sa-learn --progress --spam /path/directory

正常なメールを学習させる

# sa-learn --progress --ham /path/directory

それぞれ200通学習しなければベイジアンフィルタが有効になりません。
この数値は以下の設定で変更することができます。

# vi /etc/mail/spamassassin/local.cf
---
bays_min_ham_num 100
bays_min_spam_num 100
---
など。

2007年09月06日

userminでWEBメール

 今回WEBメールを利用できるようにしようと思ったのは,spamassassinでスパムメールをサーバ上に隔離した為,そのメールをユーザ自身で管理出来るようにしたかったからです。ユーザ自身でスパムメールを見て削除していただく。これだけでいいのです。
 フリーのWEBメールで有名なのはsquirrelmailですが残念ながら私のやりたいことができませんでした。そこでuseiminでWEBメールが出来るようにと考えて調べていたら見事にやりたいことが出来ました。

今回使ったバージョンはusermin-1.270.tar.gzで構築まではすでにこのブログで書きましたので機能の追加だけ記述します。

まずWEBメールを使えるように以下のファイルを変更します。
# vi /etc/usermin/webmin.acl
--
user: changepass mailbox
--
これでパスワード変更とWEBメールが使えます。

次に隔離したメールが集まる場所を指定します。
# vi /etc/usermin/mailbox/config
--
mail_dir=/path/spam
--

今回はユーザがスパムメールを見ることができ,サーバから削除できるだけでいいのでそのように設定します。タイトルを以下のように変更しました。
# vi /etc/usermin/module.infos.cache
--
mailbox desc=Read SPAM Mail
mailbox realdesc=Read SPAM Mail
--

文字化け対策は以下。
# vi /usr/local/usermin-1.270/mailbox/view_mail.cgi
--
$charset = "EUC-JP";
--

削除時の確認メッセージを日本語に直しました。
# vi /usr/local/usermin-1.270/mailbox/lang/en
--
confirm_warn4=
confirm_warn=選択した $1 通のメッセージを消去してよろしいですか?
--

あとの機能はいらないのでいろいろコメントアウトしました。
# vi /usr/local/usermin-1.270/mailbox/index.cgi
# vi /usr/local/usermin-1.270/mailbox/view_mail.cgi
# vi /usr/local/usermin-1.270/mailbox/mailbox-lib.pl

これらのファイルを編集することで必要な機能を限定させることが出来ます。

2007年09月11日

spamassassinで日本語スパムメール対策

headerやbodyにある単語でスパム判定を行う設定をする。

たとえばSubjectに「出会い系」という文字列が入っていたら判定ポイントをプラス1する場合

vi /etc/mail/spamassassin/local.cf
---
header H_SPAM_WORD1 Subject =~ /=P2q\$\$7O/
describe H_SPAM_WORD1 Deaikei
score H_SPAM_WORD1 1.00
---

と記入する。
単に出会い系と記入してはいけない。文字コードの問題である。またPERL言語なのでエスケープしてやる必要もある。

# echo "出会い系" | nkf -j|awk '{gsub(/\x1B[$(]B/,"");print}'
=P2q$$7O

※エスケープの必要のあるメタキャラ
.`*+/?^$#{}()[]

よって「出会い系」は「=P2q\$\$7O」という文字列になる。
bodyにある文字列で判定ポイントを上げるには以下のように書く。

---
body B_SPAM_WORD /=P2q\$\$7O/
describe B_SPAM_WORD Deaikei
score B_SPAM_WORD 1.00
---

bodyの文字列を指定する場合はよく考えてからにしましょう。

2007年09月13日

pflogsummによるpostfixのログ集計

 いったいpostfixはどうなっているのか?きちんと動いているのか?とてもきになるところです。特にmain.cfの設定を変更した時なんか。そんなときはpostfixのログを集計して見てみましょう。一番簡単にできそうなのは postfix-pflogsumm パッケージを使うことでした。

# yum install postfix-pflogsumm

あとはpflogsummコマンドを利用するだけです。

# pflogsumm -e -d yesterday /var/log/maillog | more
(-e: 詳細表示 -d yesterday: 昨日分だけを集計)

思ったよりも詳細な集計結果が得られると思います。

2007年10月03日

spamassassinでベイジアンフィルタを有効にする

 以前書いたspamassassinの設定だけではベイジアンフィルタが結局有効になりませんでした。メールサーバを使っている利用者でspamassassinの機能を有効にしている人全員にベイジアンフィルタをかけたかったんだけどなかなかうまく行かなかった。
 いろいろ調べた結果以下の設定も必要ということが分かった。

# mkdir /path/to/directory
# chmod 777 /path/to/directory
# mkdir /path/to/directory/byes
# chmod 777 /path/to/directory/byes

# vi /etc/mail/spamassassin/local.cf
---
bayes_path /path/to/directory/bayes/bayes
bayes_file_mode 0666
auto_whitelist_path /path/to/directory/auto_whitelist
auto_whitelist_file_mode 0666
---

最後に以下のコマンドで間違いがないか確認しましょう。
# spamassassin --lint


これでいけるようです。

2007年10月16日

SMTP応答コード

SMTP応答コードを書いておきます。

200台と300台は正常コードです。

また,2桁目の意味は以下の通り。
x0x 文法エラー
x1x 付加メッセージ
x2x SMTP接続関連
x5x クライアント側の問題


211 System status, or system help reply
214 ヘルプメッセージ
220 準備完了
221 接続を閉じる
250 要求された処理は実行可能 完了
251 受信者が存在しないので[forward-path]に転送する
354 メールの入力開始 入力終了は「.」のみの行を送信
421 サービスは利用不能 接続を閉じる
450 メールボックスが利用できないため、要求された処理は実行不能
451 処理中にエラーが発生 要求された処理は失敗
452 記憶装置の空き領域が不十分なため、要求された処理は実行不能
500 文法に間違いがあるため、コマンドが理解できない
501 引数の文法に間違いがある
502 指示されたコマンドはこのシステムには実装されていない
503 コマンドの発行順序が間違っている
504 コマンドの引数が未定義
550 メールボックスが利用できないため、要求された処理は実行不能
551 受信者が存在しない
552 ディスク不足のため、要求された処理は実行不能
553 メールボックスの名前が不適切なため、要求された処理は実行不能
554 処理失敗

2007年10月22日

xoopsでサイトを構築その1

HPの更新がめんどくさく感じ始めた。
そこで興味を持ったのがxoopsである。
本来はコミュニティサイトを構築するソフトのようだが,
私の場合,静的コンテンツを簡単に誰でも作れるようにと考えてインストールすることにした。

まずはじめにサーバを準備する必要がある。
今回はRHEL4とCentOS4で構築した。
必要なパッケージは以下(apache,php,mysql)

●apache
●mysql-server
●php
●php-mysql

これらをyumやup2dateコマンドでインストールする。
関連するパッケージもいくつかインストールされた。

インストールが完了したらhttpd(apache)とmysqld(mysql-server)の設定をして起動する。


サーバの構築において参考になるサイト
http://centossrv.com/apache.shtml
http://centossrv.com/mysql.shtml

2007年10月30日

PostgreSQLのインストール

PostgreSQLのインストール

↓ダウンロード
http://www.postgresql.org/

現在のバージョンは8.2.5でした。

●インストール

postgresユーザを作成します。
# groupadd postgres
# useradd -g postgres postgres

パスワードはロックしておきました。
# passwd -l postgres

ディレクトリを作成します。
# mkdir /usr/local/pgsql
# chown postgres.postgres /usr/local/pgsql

作業ディレクトリの設定
# chmod 777 /usr/local/src

postgresユーザにスイッチします。
# su - postgres

インストールします。
$ tar zxvf postgres-8.2.5.tar.gz -C /usr/local/src/
$ cd /usr/local/src/postgres-8.2.5
$ ./configure
$ make
$ make check
$ make install

PostgreSQL installation complete. と表示されたらOKです。


●postgresユーザの環境設定

$ vi ~/.bash_profile
---
export PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin
export PGHOME=/usr/local/pgsql
export PGDATA=/usr/local/data
export PGLIB=/usr/local/lib
---

最後に以下のコマンドを打って設定を反映させましょう。
$ source ~/.bash_profile


●データベースの初期化

$ initdb -E EUC_JP --no-local -D /usr/local/pgsql/data
(-E,--no-local:日本語対応にしています -D: データ保存先)

以下のような表示がされたらOK
---
Success. You can now start the database server using:

postgres -D /usr/local/pgsql/data
or
pg_ctl -D /usr/local/pgsql/data -l logfile start
---


●アクセス制御

許可するIPを書きましょう。

$ vi /usr/local/pgsql/data/pg_hba.conf
--
host all all 123.123.123.123/32 trust
--

$ vi /usr/local/pgsql/data/postgresql.conf
--
listen_addresses = 'localhost,123.123.123.123'
port = 5432
--


●起動スクリプトの設定

マシン起動,停止時に自動起動,停止する起動スクリプトを設定しましょう。
起動スクリプトはソースの中に既にありますのでコピーして使いましょう。

# cp /usr/local/src/postgresql-8.2.5/contrib/start-scripts/linux /etc/init.d/postgres
# chmod 755 /etc/init.d/postgres
# chkconfig --add postgres

以上で完了です。
あとは起動してpostgresqlを使いましょう。

2007年11月04日

mysqlサーバの構築

xoopsサイトを構築したいのでmysqlをインストールすることにしました。
今回RHEL3上で構築した。CentOS3でもいけると思われる。
↓ダウンロードサイト
http://dev.mysql.com/downloads/

Red Hat Enterprise Linux 3 RPM (x86)用のrpmがあったのでそれをいただく。
MySQL-client-standard-4.1.22-0.rhel3.i386.rpm
MySQL-devel-standard-4.1.22-0.rhel3.i386.rpm
MySQL-server-standard-4.1.22-0.rhel3.i386.rpm
MySQL-shared-compat-4.1.22-0.rhel3.i386.rpm
MySQL-shared-standard-4.1.22-0.rhel3.i386.rpm

今回はserver,client,develを入れました。

マシンにmysql関係のパッケージがあるとややこしいので,
削除します。

インストール作業を行います。

# rpm -Uvh MySQL-server-standard-4.1.22-0.rhel3.i386.rpm
# rpm -Uvh MySQL-client-standard-4.1.22-0.rhel3.i386.rpm

正常に起動するようならうまくいっている。

●初期設定

起動している場合は停止しておきましょう。

# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf
--
# [mysqld]のところに追加
language = /usr/share/mysql/japanese/
# コメントアウトをはずした(トランザクション)
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
--

mysqlのrootパスワードを必ず設定しましょう。
また空のユーザ名があるので削除。
testテーブルも削除しましょう。

# mysql -u root
>set password for root@localhost=password('rootパスワード');
>set password for root@'host.domain.com'=password('rootパスワード');
>delete from mysql.user where user='';
>drop database test;
>select user,host,password from mysql.user;
+------+--------------------+-------------------------------------------+
| user | host | password |
+------+--------------------+-------------------------------------------+
| root | localhost | *96563F1FC8709D906B779BCE47E8904F007C6783 |
| root | host.domain.com | *96563F1FC8709D906B779BCE47E8904F007C6783 |
+------+--------------------+-------------------------------------------+
2 rows in set (0.00 sec)
>show databases;
+----------+
| Database |
+----------+
| mysql |
+----------+
1 row in set (0.00 sec)
>exit
#

以上。

2007年11月06日

phpをソースからインストール

CentOS3,RHEL3はphpのバージョンが古いのでソースからインストールすることにした。
xoops構築が主な目的。

CentOS3,RHEL3の場合はlibxml2のバージョンが低いので別途インストールする必要がある。

↓ダウンロード
http://xmlsoft.org/sources/

普通にインストールしていいようです。

# ./configure
# make
# make install

準備が整ったのでさっそくphpのダウンロードから。

http://www.php.net/downloads.php

現時点の最新版であるphp-5.2.4をインストールすることにした。

# tar zxvf php-5.2.4.tar.gz -C /usr/local/src
# cd /usr/local/src/php-5.2.4
# ./configure --enable-mbstring --enable-mbregex --with-gd --with-zlib --with-ldap
--with-apxs2=/usr/local/apache/bin/apxs --with-mysql --with-pdo-pgsql

apacheと連携する場合--with-apxs2は必須。その他ldapなどもあるが必要なければはずせばいい。

# make
# make test

テストすると以下のようなエラーが出たが特に問題はないと判断した。
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped : 51
Exts tested : 28
---------------------------------------------------------------------

Number of tests : 4020 2600
Tests skipped : 1420 ( 35.3%) --------
Tests warned : 1 ( 0.0%) ( 0.0%)
Tests failed : 5 ( 0.1%) ( 0.2%)
Tests passed : 2594 ( 64.5%) ( 99.8%)
---------------------------------------------------------------------
Time taken : 168 seconds
=====================================================================

=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
libgd #106 (imagerectangle 1x1 draws 1x3) [ext/gd/tests/libgd00106.phpt]
Bug #16069 (ICONV transliteration failure) [ext/iconv/tests/bug16069.phpt]
iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt]
htmlentities() test 2 (setlocale / fr_FR.ISO-8859-15) [ext/standard/tests/strings/htmlentities02.phpt] (warn: possibly braindead libc)
htmlentities() test 4 (setlocale / ja_JP.EUC-JP) [ext/standard/tests/strings/htmlentities04.phpt]
htmlentities() test 15 (setlocale / KOI8-R) [ext/standard/tests/strings/htmlentities15.phpt]
=====================================================================

# make install

これでインストールは終了。設定ファイルphp.iniを適切な位置にコピーしましょう。そして必要に応じて設定を変更しましょう。

# cp /usr/local/src/php-5.2.4/php.ini-dist /usr/local/lib/php.ini

apacheで利用するにはhttpd.confに以下の記述が必要である。

--
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
--

あとは以下のような記述したファイルをtest.phpなどで保存してWEBアクセスしてみましょう。

<? phpinfo(); ?>

インストール情報がいろいろ書いているので参考になるでしょう。

2007年12月04日

xoopsサイトの構築その2

その1の続きです。まずはデータベースの設定から。サーバによっていろいろあると思いますが自サーバの場合は以下のようになると思います。

mysqlにrootでログイン

$ mysql -u root -p
Enter password:

データベースを作成

mysql> create database DatabaseName;
Query OK, 1 row affected (0.00 sec)

作成したデータベースにアクセス権限のあるユーザを作成

mysql> grant all privileges on DatabaseName.* to UserName@localhost identified by 'Password';
mysql> exit

あとはxoops本体を取ってくる。
以下のサイトにある。

http://www.xugj.org/

xoops-2.0.16a-JP.zipを利用した。
解凍した中のhtmlフォルダ内のすべてのファイルをサーバにアップロードする。
/home/username/pulic_html/xoops 内に入れた場合は

http://host.domain.com/~username/xoops

にアクセスする。
するといろいろ聞いてくるのでセッティングすればOK。
とくに難しくはないと思います。

2007年12月10日

apacheをsslに対応させる

apacheをssl通信出来るようにします。
CentOS3にソースからインストールを行いました。
現在の最新バージョンはhttpd-2.0.61でした。
場所はhttp://www.apache.org です。

ssl通信を行うにはmod_sslが必要ですがソースファイルの中に入っています。

また,opensslがインストールされている必要があります。
rpmの場合,opensslとopenssl-develがインストールされていればOK。
私の環境には入っていましたのでそのまま使うことにしました。

ではさっそくapacheのインストールを行いましょう。

# tar zxvf httpd-2.0.61.tar.gz -C /usr/local/src
# cd /usr/local/src/httpd-2.0.61
# ./configure --enable-ssl

--enable-ssl オプションでsslによる暗号化通信が可能になります。
その他必要なオプションは任意に指定してください。

# make
# make install

これで終了。

あとはコンフィグファイルの編集です。
/usr/local/apache2/conf/httpd.conf と /usr/local/apache2/conf/ssl.conf です。
今回はhttpd.confの設定は省略します。

# vi /usr/local/apache2/conf/ssl.conf
---
DocumentRoot "/usr/local/apache2/htdocs"
ServerName host.domain.com:443
ServerAdmin mail@address.com
SSLCertificateFile /usr/local/apache2/certs/server.crt
SSLCertificateKeyFile /usr/local/apache2/certs/server.key
---
証明書関係を作成する必要があります。
自己証明書,もしくはベリサインなどの有料の証明書の利用などが考えられます。
自宅サーバなどでは自己証明書でいいですが企業などの場合はきちんとした証明書を利用することになると思います。
作成した証明書とキーはSSLCertificateFileとSSLCertificateKeyFileに設定します。
証明書関係は後日記入します。

ここまでできたら後は自動起動ファイルの編集です。

# vi /etc/init.d/httpd
---
#!/bin/bash
#
# Start Stop script for the Apache
#
# chkconfig: 35 99 1
# description: Apache is a WWW server

export PATH="/usr/local/apache/bin:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"

LOCKFILE=/var/lock/subsys/httpd
APACHECTL=/usr/local/apache2/bin/apachectl

#---------------------------------
# ネットワークが利用可能かチェック
#---------------------------------
. /etc/sysconfig/network

if [ ${NETWORKING} = "no" ]; then
exit 0
fi

case "$1" in
start)
if [ -x $APACHECTL ]; then
if [ -f $LOCKFILE ]; then
echo "apache already started !!"
else
touch $LOCKFILE
echo "Starting Apache Please wait : "
$APACHECTL startssl
sleep 3
fi
else
echo "apachectl Not Found"
fi
;;
stop)
if [ -x $APACHECTL ]; then
if [ -f $LOCKFILE ]; then
echo "Shutting down Apache: "
$APACHECTL stop
rm -f $LOCKFILE
sleep 3
else
echo "apache already Stopped!!"
fi
else
echo "apachectl Not Found"
fi
;;
*)
echo "Usage: httpd {start|stop}" 1>&2
exit 1
esac
exit 0
---

ここで注意すべきは,通常の起動の場合とapachectlのオプションが違うことです。
$APACHECTL startssl
になっていることに注意してください。

2008年01月14日

CentOS5でxenを使った仮想OS環境の構築

●仮想OSのインストール

CentOS5はxenが利用可能です。インストール時に「仮想化」を選択するとxenがインストールされます。
構築するマシンはxenカーネルで起動している必要があります。

それと /etc/modprobe.conf に以下の1行が必要なようです。
alias scsi_hostadapter xenblk

準備が出来たら仮想OSをインストールします。
今回はCentOS5をインストールしてみました。

# virt-install --nographics
What is the name of your virtual machine?
ホスト名を入力

How much RAM should be allocated (in megabytes)?
仮想OSに割り当てる物理メモリ容量(MB)

What would you like to use as the disk (path)?
イメージファイル名をフルパスで記入(例 /var/lib/xen/images/u1.img)

How large would you like the disk (/var/lib/xen/images/CentOS5.img) to be (in gigabytes)?
16Gbyteまで

What is the install location?
ネットワークインストール先指定(例 http://ftp.riken.jp/Linux/centos/5/os/i386/)

これでインストールが始まります。

インストールが終わったら自動起動設定をしておきましょう。

# ln -s /etc/xen/仮想OSホスト名 /etc/xen/auto/仮想OSホスト名


●仮想OSの操作

起動方法

# xm create 仮想OSホスト名

停止方法

まずはID番号を調べます。


# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 490 2 r----- 10561.3
u1 1 255 1 -b---- 2715.8
u2 3 255 1 -b---- 17.4

u2を停止する場合は以下

# xm shutdown 3

※停止はsshで外部からログインして通常のコマンド(shutdownなど)でもちろん可能です。

ドメイン0からコンソールにはいる方法

# xm console 仮想OSホスト名

CTRL+] でぬけることが出来ます。


●ゲストOSの複製

1.インストールイメージファイルの複製

デフォルトでは /var/lib/xen/images 配下にある。

# cp -a /var/lib/xen/images/image.img /var/lib/xen/images/newimage.img

2.設定ファイルの複製

/etc/xen にある。

# cp image newimage

コピーした newimage は適宜変更します。
このときMACアドレス,uuidも変更しましょう。

起動後,ホスト名,IPアドレス,適宜変更し,MACアドレスも確認しておきましょう。

2008年06月11日

apacheのソースからのインストール

httpd-2.0.63.tar.gz

●httpd.confの設定

User apache
Group apache
ServerAdmin name@domain.com
ServerName host.domain.com:80
LanguagePriority ja en ca cs da ... zh-TW


●起動スクリプト

#!/bin/bash
#
# Start Stop script for the Apache-2.0.59
#
# chkconfig: 35 99 1
# description: Apache is a WWW server

export PATH="/usr/local/apache2/bin:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbi
n:/usr/local/sbin"

LOCKFILE=/var/lock/subsys/httpd
APACHECTL=/usr/local/apache2/bin/apachectl

#---------------------------------
# ネットワークが利用可能かチェック
#---------------------------------
. /etc/sysconfig/network

if [ ${NETWORKING} = "no" ]; then
exit 0
fi

case "$1" in
start)
if [ -x $APACHECTL ]; then
if [ -f $LOCKFILE ]; then
echo "apache-2.0.63 already started !!"
else
touch $LOCKFILE
echo "Starting Apache-2.0.63 Please wait : "
$APACHECTL start
sleep 3
fi
else
echo "apachectl Not Found"
fi
;;
stop)
if [ -x $APACHECTL ]; then
if [ -f $LOCKFILE ]; then
echo "Shutting down Apache-2.0.63: "
$APACHECTL stop
rm -f $LOCKFILE
sleep 3
else
echo "apache already Stopped!!"
fi
else
echo "apachectl Not Found"
fi
;;
*)
echo "Usage: httpd {start|stop}" 1>&2
exit 1
esac
exit 0

このスクリプトを /etc/init.d/httpd として保存して以下のコマンド

# chmod 755 /etc/init.d/httpd
# chkconfig --add httpd

これでOK

2008年07月17日

mysqlデータベースのバックアップ

全データのバックアップ

$ mysqldump -u root -p -x --all-databases > /hoge/fuga.sql

リストア

$ mysql -u root -p < fuga.sql

2008年08月21日

rsyncでバックアップ

ここではrsyncによるバックアップの説明を行う。
セキュリティを考えるとsshでアクセスするのがいいのだろうが実用的に考えて盗聴されるような経路でバックアップはしないと思われるのでrshを利用することにした。rshの設定は以前書いたので参考にしてください。

今回はホストwwwからホストbackupにrsyncによるバックアップをしようと思う。といってもすこぶる簡単。

# rsync -avz -e rsh /home/hoge/public_html backup:/backup/

a: シンボリックリンク・パーミッション・オーナ・タイムスタンプを保持したままバックアップ
v: バックアップ時にファイル名を表示
z: データを圧縮して転送

これでpublic_html配下のデータをbackupの/backup配下にデータをコピーしているのである。

cronを使って定期的に実行するのがいいでしょう。

2011年09月15日

docomoへメールを送ってエラー

宛先不明の場合

The mail system

<*******@docomo.ne.jp>: host mfsmax.docomo.ne.jp[123.456.123.456] said: 550
Unknown user *****@docomo.ne.jp (in reply to RCPT TO command)

となる。
ドメイン指定拒否の場合

The mail system

<*******@docomo.ne.jp>: host mfsmax.docomo.ne.jp[123.456.123.456] said: 550
Unknown user *****@docomo.ne.jp (in reply to end of DATA command)

となる。

2012年03月09日

CentOS5をLDAPサーバで認証させる

CentOS5をLDAPサーバで認証させるには以下のコマンド

# authconfig-tui

ldap関連の項目にチェックを入れて必要事項を記入したらOK。
しかしこのままではLDAPにあるユーザがssh等でアクセスした場合,
ホームディレクトリがないため作る必要があります。
/etc/pam.d/system-auth に以下を追加すると自動でホームディレクトリを作ります。

session required pam_mkhomedir.so skel=/etc/skel umask=0022

2017年01月05日

centosをルータにする

NICを2枚挿していればルータとして機能させることができる.
もちろんファイアウォールとして細かな設定も可能である.

ローカル側NICからグローバルNICに対してNATさせ通信可能にする設定は以下
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

これでローカルの端末はすべてグローバルにアクセスできる.ファイアウォールの設定はiptablesで行う.

ログを取る設定は以下
# iptables -A INPUT -j LOG --log-prefix "[iptables]" --log-level=error

プレフィックスに[iptables]を付けて後で見やすくしている.

リアルタイムで通信を確認する方法としてiptstateがある.yumで簡単にインストールできる.
# iptstate -l -S 192.168.1.10

この場合192.168.1.10の通信だけを表示させている.いろんなオプションがあるので試してみるといいだろう.

Natural Rhythm ナチュラルリズム

カテゴリー

About CENTOS

ブログ「偉大なるOSS」のカテゴリ「CENTOS」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

次のカテゴリはLinuxです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。