晩酌しながらサーバ管理。 こんな「てきとー管理者」にサーバ預けて、大丈夫?
Search
Powered by
Movable Type 4.23-ja
■■■■■免 責■■■■■
このサイトを参考にしたために発生した一切の損害に「てきとー管理者」は一切関知しませんし、補償もしません。 また、本サイトの記述が正しいことも保証しません。
自己責任にてお願いします。
-------------------------
京都の鍵トラブルなら鍵レスキュー 鍵師が、家・金庫・バイク・車等の解錠を始め鍵に関する全般、また防犯設備士からみた防犯診断の上の工事等、安心しておまかせ下さい。24時間対応致します。
岩塩ならクリスタルキンガ 野菜、肉、魚など素材本来の味を引き出します。上質でクセがなく西洋料理はもちろん中華、日本料理にも幅広くお使い頂けます。
いつの間にか3.35にUPしているし。。。
そろそろUPDATEしてみようかな~
・・・って、GWの昼間に何やってるんだ?
やっと我が家の玄箱にもMTAが入った。
不正relayが気になるところ。
念のためチェックしておこう!
http://www.rbl.jp/svcheck.php
や
http://www.abuse.net/relay.html
でチェックできる。
ログを見てみると
====================================================================
postfix/smtpd[5297]: fatal: open database /etc/postfix/virtual.db: No such file or directory
postfix/master[2287]: warning: process /usr/libexec/postfix/smtpd pid 5297 exit status 1
postfix/master[2287]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
・
・
・
・
・
====================================================================
もちろんOKだった。
あれ? ログの時間が1時間ズレてるぞ?
システム時間がいつの間にかズレてるし。。。
先日構築したMTAの経験を基にpostfix+qpopper+dracに挑戦することにした。
postfixはパッケージにてインストール済みなので「/etc/postfix/main.cf」を先日設定した内容に基づき設定した。
portmapが必要になるので、インストールする
# yum install portmap
また、dumpも必要らしい。
# yum install dump
関連のパッケージもインストールされた。
dracのインストールも先日と同様に作業。
# cd /usr/local/src
# wget ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z
# tar xvzf drac.tar.Z
Makefileを以下の個所を修正
================================
INSTALL = install
DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
CC = gcc
CFLAGS = $(DEFS) -g
LDLIBS = -ldb
RPCGENFLAGS = -C -I
MANLIB = 3
MANADM = 8
================================
# make
# make install
# mkdir /usr/local/man/man3 (事前にない場合にだけ)
# mkdir /usr/local/man/man8 (事前にない場合にだけ)
# make install-man
# cp libdrac.a /usr/local/lib
dracd-setup.linuxの以下の個所を編集して起動スクリプトを用意します。
daemon /usr/local/sbin/rpc.dracd -i -e 15 &
※このあとは先日の内容と同じなので略。
dracを起動。
# /etc/rc.d/init.d/dracd start
dracの動作確認
# cd /usr/local/src/drac
# ./testing localhost 1.3.5.7
# strings /etc/mail/dracd.db
または # db_dump -p /etc/mail/dracd.db
# strings /etc/mail/dracd.db
の場合は
1177658454
1.3.5.7
これだけ!
# db_dump -p /etc/mail/dracd.db
を行うと
-bash: db_dump: command not found
えら~
必要なパッケージをインストール
# yum install db4-utils
もう一回
# db_dump -p /etc/mail/dracd.db
VERSION=3
format=print
type=btree
db_pagesize=512
HEADER=END
1.3.5.7
1177658454
DATA=END
正常にでた!
「Maildir/」に対応したqpopperを使いたいが、後日対応と言うことで・・・・
今回は「/var/spool/mail」で行ってみよう!
作業領域に移動
# cd /usr/local/src
# wget http://www.ring.gr.jp/pub/net/mail/qpopper/qpopper4.0.9.tar.gz
Maildirに対応させる場合はパッチを取ってくる
# wget http://www.asteroid-b612.org/software/qpopper-mysql/qpopper-mysql-0.15-test.patch
その前にimapにも対応させたい
dovecotをインストールしてみた。
# yum install dovecot
# /etc/rc.d/init.d/dovecot start
では、qpopper~
# tar zxfv qpopper4.0.9.tar.gz
# cd qpopper4.0.9
Maildirを使う場合は次のパッチを当てる
# patch -p1 < ../qpopper-mysql-0.15-test.patch
オプションを指定。
# ./configure --with-drac=/usr/local/src/drac
※一行で記述
次に
# make
何もやっていないが、念のため綺麗にして
# make clean
# make install
xinet.dで起動させるので、/etc/xinetd.d/にpopperを作成して次の内容を記述
※そのままコピペ
======================================
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/popper
server_args = -s -R
}
======================================
引数に意味で -s は受信時の詳細なログを記録するため。
-R はホスト名の逆引きを行わない。受信時間短縮させる場合。
# /etc/rc.d/init.d/xinetd restart
コレで下準備OK?
では実際にメールクライアントで送受信の確認して、完了っす。
次は「Maildir」対応と「apop」対応
ウィルス対策も必要だね。
客先からの依頼を受けてPostfixのインストールを行った。
今回のMTA要件としては次の通り。
POPbeforeSMTPに対応
Virtualdomainに対応
この条件を満たす一番簡単な方法をググってみた。
構成としてはこんな感じ・・・・
1.Postfix = ディストリビューションで提供されるRPMを利用
2.dovecot = ディストリビューションで提供されるRPMを利用
3.qpopper = 4.0.9
4.dtac
5.portmap
この内容で作業してみた。
■Postfix
先ずはPostfixの設定から
/etc/postfix/main.cf の編集を行う。
修正する箇所は次の通り
====================================================================
myhostname = sv.hogehoge.jp ホスト名
mydomain = hogehoge.jp ドメイン名
inet_interfaces = all すべて受信
local_recipient_maps = proxy:unix:passwd.byname $alias_maps ローカルユーザの存在をチェックし、不明なユーザは受信を拒否
mydestination = $myhostname, localhost.$mydomain, $mydomain メールの宛先として受け入れるホスト名の設定
mynetworks_style = subnet IP空間の設定
mynetworks = 127.0.0.0/8 POPbeforeSMTPに対応させるので、基本は自分のみ
smtpd_banner = $myhostname ESMTP $mail_name メールヘッダに記載されるMTAの表示の設定
relay_domains = $mydestination 信頼されない(mynetworks)のクライアント以外のメールは$mydestinationの範囲内しか配送しない。
home_mailbox = Maildir/ 各ユーザのホームディレクトリ内にMaildirをおく Maildirとは1メッセージ=1ファイルの形式にさせる。
====================================================================
設定が終わったら、postfixの再起動
# /etc/rc.d/init.d/postfix restart
参考までに25番portが開いているかを確認
# nmap localhost
が~
nmapがインストールされてないっす。
問題は無いと思うが、セオリー通りチェックしたいのでyumにてインストール
# yum install nmap
改めて確認してみる
# nmap localhost
25/tcp open smtp
↑これが出てくればOK。
次にtelnetで正常に通信できるかを確認
※内部配送確認するためテスト用のアカウントをあらかじめ作成しておく必要が有ります。
test1
test2
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 hogehoge.jp ESMTP Postfix
HELO localhost --->開始メッセージ
250 hogehoge.jp
MAIL FROM: test1@localhost --->送信者
250 Ok
RCPT TO: test2@localhost --->受信者
250 Ok
DATA --->ボディ入力
354 End data with
Send Test.
. --->メッセージ終了
250 Ok: queued as 2852DFE005
QUIT --->抜ける
ここで実際に配送されているかを確認してみる
test2のホームディレクトリの覗くとMaildirが作成され、その中ににnewが有る
ここにメールが貯まる。
また、/var/log/maillogにもログが残っているかも確認しておこう!!
■drac
POPbeforeSMTPに対応させるためには「drac」が必要
先ず作業ディレクトリまで移動
# cd /usr/local/src
# wget ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z
# mkdir drac
# cd drac
# tar xzvf ../drac.tar.Z
Makefileの修正
====================================================================
INSTALL = install
EBIN = /usr/local/sbin
MAN = /usr/local/man/man
DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
CC = gcc
RANLIB = :
CFLAGS = $(DEFS) -g
LDLIBS = -ldb
TSTLIBS = -L. -ldrac -lnsl
RPCGENFLAGS = -C -I
MANLIB = 3
MANADM = 8
====================================================================
終わったら
# make
# make install
# make install-man
# cp libdrac.a /usr/local/lib
# cp dracd-setup.linux /etc/init.d/dracd
dracdを修正する
daemon rpc.dracd&
↓
daemon /usr/local/sbin/rpc.dracd -i -e 15&
※-iは起動時にdatabaseを初期化。 -eは承認の有効期限を15分に設定
chkconfigにてOS起動時に自動起動させたいが、そのままでは無理!
# vi /etc/init.d/dracd
====================================================================
#!/bin/bash
#
# dracd Startup script for the dracd
#
# chkconfig: - 87 15
# description: dracd
# processname: dracd
#
# Put this file into /etc/rc.d/init.d/dracd
# and link it intot he run levels you want to use it
# by doing "ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc.
#
# dracd-setup
====================================================================
に書き換える必要が有るらしい
# chkconfig --add dracd
# chkconfig --level 345 dracd on
これで、自動起動OKっす
次にdracd.allowを編集
# cp dracd.allow-sample /etc/mail/dracd.allow
# emacs /etc/mail/dracd.allow
====================================================================
#255.255.255.255 192.168.16.8 #<--コメントアウトしておく
255.255.255.255 127.0.0.1
====================================================================
起動してみる
# /etc/init.d/dracd start
# ps ax | grep dracd
7004 ? S 0:00 /usr/local/sbin/rpc.dracd
こんな感じの内容が出れば動いています。
動作テストを行う
# cd /usr/local/src/drac
# ./testing localhost 1.3.5.7 ← 適当なIPを打ち込む
# strings /etc/mail/dracd.db
または # db_dump -p /etc/mail/dracd.db
VERSION=3
format=print
type=btree
HEADER=END
1.3.5.7
1072008984
DATA=END
と出ればOK。15分後にアドレスと時間が消えていればバッチリです。
drac.dbのパーミッションを設定します。
# chmod 600 /etc/mail/dracd.db
■dovecot
標準でdovecotが入っている
そのままだとpopも有効になっているので、一部修正を行う。
/etc/dovecot.confを
protocols = imap imaps → pop3 が付いていたら削除
んで、再起動
# /etc/init.d/dovecot restart
※Imap のみ使えるように dovecotを残しておく。
■qpopper
次にqpopperを設定してみる
作業ディレクトリまでおりる
#cd /usr/local/src/qpopper
# wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.9.tar.gz
# tar xvzf qpopper4.0.9.tar.gz
# cd qpopper4.0.9
# ./configure --enable-drac
# make
# make install
xinetd起動用ファイルの編集
/etc/xinetd.d/popper(qpopper)を作成して下記の内容を記述する
====================================================================
service pop-3
{
disable = no
socket_type =stream
wait = no
user = root
server = /usr/sbin/popper
server_args = -s
}
====================================================================
んで、xinetdを再起動
# /etc/rc.d/init.d/xinetd restart
念のため /etc/hosts.allowにpopper : ALLを記述。
動作テストを行ってみる
# telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Qpopper (version 4.0.9) at pacific starting.
と出ればOK。
quitで抜けます。
この状態でメールクライアントにアカウントを設定して送受信テストを行う。
test1からtest2に送ってみる。
正常に送信確認できた。
次に受信。
test1からtest1(自分から自分に)へ送ってみる。
送信はOK
ん?
受信が出来ないっす。
サーバ内部にはメールは有る
しかし、何度やっても受信できない。
各種Logを確認しても問題ない。
でも、受信だけが出来ない。
多分qpopperの問題だと思うので、ググってみる。
発見! qpopperは標準ではMaildir方式に対応していないらしい。
パッチを当てることでMaildirに対応するらしい。
しかし、簡単に済ませたいのでpostfix側を修正して対応する。
変更はmain.cfを変更
mail_spool_directory = Maildir/
↓
mail_spool_directory = /var/spool/mail
postfixを再起動して、改めてtest1からtest1(自分から自分に)へ送ってみる。
送信はOK
/var/spool/mailにtest1が作成されている
次に受信
OK。
■バーチャルドメイン対応
バーチャルに対応させるためには、Postfixの編集とPortmapの起動が必要。
Portmapは既存の環境でインストール済みだったので、serviceを起動するのみ。
# /etc/rc.d/init.d/portmap start
postfixを編集する
/etc/postfix/main.cf に一行足す。
====================================================================
virtual_alias_maps = hash:/etc/postfix/virtual
====================================================================
/etc/postfix/virtual の編集
hogehoge.com anything
hogehoge.com anything
コレで対応OKっす。
あとは、ユーザー作ってマッピングさせればOKかな?
自分のサーバではMaildir方式に対応させたいっすね~
※qpopper4.0.9の場合、qpopper-mysql-0.15-test.patchが必要らしい。
PCMCIAが死ぬと再起動するようになった。
また、PCMCIA再起動前にalertメールも飛んでくる。
しかし、監視している「/var/log/messages」ログローテーションのタイミングで動作がおかしくなるようだ。
古いログを監視し続け、最新のログは見ていない感じ。
※ログローテーションのタイミングで監視が止まってしまう。
このとき、messages.1を見ていた。
この仕組みでは、MAX1日しか動かない(゜ε゜;)
ログローテーションの時間を調べ、ローテーションが終わった時を見計らって「swatch」を再起動。
しかし、この内容では100%安心できない。
たまたまログのローテーション時間が遅れた場合、1日は監視出来ない事になってしまう。
監視していないときにPCMCIAが死んでしまったら・・・・・
では、どんな方法が有るのだろうか?
ログローテーションのタイミング直後のswatch再起動が好ましい。
っとすると、ローテーションを管理している所で何とかするしかない・・・・
ローテーションを管理しているのは「/etc/logrotate.d/syslog」
このFileの
===================================================
/var/log/messages {
daily
rotate 31
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
===================================================
を
===================================================
/var/log/messages {
daily
rotate 31
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/etc/rc.d/init.d/swatch restart ← ここに追加
endscript
}
===================================================
に追加記述
これで、ローテーション直後にswatchを再起動
これで行けるかな?
様子を見てみよう・・・・・・。
会社で使っている監視サーバは、相当古いノートPCで行っている。
※SHARP Mebius PC-PJ1(CPU:MMX233)
2年前程まえにこの監視サーバ(Nagios)を作成したが、監視する必要が無くなったため、お蔵入りになっていたが、最近サーバ関連の監視が必要になった為、引っ張り出してきた。
2年前に使っていたときも、NICに負荷が掛かると「PCMCIA」が死んでしまう現象が出ていたが、これと言って対策は行っていなかった。
しかし、現在監視しているサーバの特性を考えると24時間365日の監視が必要になる。
監視サーバが死んでしまっては何にもならない・・・・。
っと言うことで、対策を行ってみた。
PCMCIAの死んでしまう原因は「負荷」に有るようで、NICを流れるトラフィックを制限することで回避出来そう。
CBQ(Class-based Queueing)を利用し、トラフィック制限を行ったが一向に改善されない。
通過するトラフィックは制限出来ても、負荷が掛かった状態のようだ。
そこで、負荷により死んでしまったNICを検知し、PCMCIAを再起動させる仕組みを取り入れる。
ググってみると「Swatch」と言うserviceが良いらしい。
最新のswatch-3.2.1.tar.gzをGETし「make」&「make install」するが、テンプレートが無い・・・。
テンプレートが無くても、問題は無いが何となく気持ちが悪い。
※インストール方法はココを参照
再度、swatch-3.1.1.tar.gzをGETし「make」&「make install」
テンプレートも出来ている。
出来たテンプレートを cp -pf swatchrc.personal /root/.swatchrc としてコピー
これで、準備OK
コピーした「.swatchrc」に必要な記述を行えば監視が出来るのだが、どのLogをどの様に関しすれば良いのだろうか?
NICが死んでしまうLogを探してみる。
色々探していると「/var/log/messages」のLogに書き込みされている
書き込み内容はこんな感じ・・・・
============================================
kernel: eth0: next frame inconsistency, 0xaa
last message repeated 26 times
kernel: eth0: Too much work at interrupt, status 0x54
============================================
過去のログを見ても同様の書き込みが有る。
ここでは「kernel: eth0: next frame inconsistency」の書き込みが有ったらアクションを起こさせよう。
watchfor /kernel: eth0: next frame inconsistency/
echo
mail=hogehoge1@hogehoge.com:hogehoge@docomo.ne.jp,subject=pcmcia service reboot
exec /etc/rc.d/init.d/pcmcia restart
監視内容は次の通りです。
「kernel: eth0: next frame inconsistency」がmessageLogに書き込まれたら、アクションを起こす。
今回は1つの内容でアクションを起こさせるが、複数を監視し何れかが該当した場合でも対応可能。
※ /ログ1 | ログ2/
今回指定するアクションは2つ。
メールを送って、コマンド実行。
メールの配送先は、PCを携帯電話へ通知した。
複数有る場合には「:」で区切ることで対応可能。
送るメールにsubjectを付けることも可能。
次にコマンド実行。
今回の現象はPCMCIAが死んでしまう現象。
PCMCIAを再起動すれば復帰する。
そこで「exec /etc/rc.d/init.d/pcmcia restart」を指定して強制的に復帰させる。
このほか、ベルを鳴らしたりすることも可能らしい・・・・
これで、大枠は完了した。
次に、OS再起動の際に自動的にswatchを起動する方法を検討。
方法は2つ。
1,/etc/rc.d/rc.local にswatch -c /root/.swatchrc -t /var/log/messages &を記述する
2,/etc/rc.d/init.d/にswatchを作成して、次の内容を過去込む。
============================================================
#! /bin/sh
#
# chkconfig: 2345 99 99
# description: tcpserver
# Source function library.
. /etc/rc.d/init.d/functions
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n "Starting Swatch: "
/usr/bin/swatch -c /root/.swatchrc -t /var/log/messages >/dev/null 2>&1 &
RETVAL=$?
echo
;;
stop)
echo -n "Stopping Swatch: "
killproc tail
RETVAL=$?
echo
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: swatch {start|stop|restart}"
exit 1
esac
exit $RETVAL
============================================================
そして、chkconfig swatch on
この何れかで行けるはず。
任意にstop&startを行いたいので、今回は「2」の方法を選択した。
では、serviceを起動して様子を見てみよう。。。
/etc/rc.d/init.d/swatch start
これで、NICが死ぬまで待ってみよう・・・(笑