検索エンジンから直接お越しの方は是非、TOPへ



サーバの構築記録・日記編です
書き出しは、あくまで日記という事で記載していたので 構築手順などはあまり記載していませんでした。
どうやらあまり参考にならないという事で、核になる手順を詳細ページにまとめました。
途中から
(2002年5月中旬頃から)は手順をできるだけ記載する様にしています。
 


  
  
通信回線関係(ADSL、プロバイダ、ネットワーク、ドメイン、計画など)
 2001.12.__ ADSL  : 申込み
 2002. 3.__ プロバイダ  : biglobeからwakwakへ変更
 2002. 3.__ ドメイン  : MYドメインGET
 2002. 3.__ ネットワーク設計 : DNSの解決は・・・
 2002. 3.26 アドレスの固定  : 1つの固定アドレス確保
 2002. 4.14 Virtual HOST (バーチャルホスト)を起動させました--ayamizu.com公開

ルーター
 2001.12.19 ルーター : LANEED LDBBR4の導入 (←このルーターはサーバーには性能不十分なので、記事は参考になりません)
 2002. 5. 3 ルーター  : LDBBR4のDMZ設定を変更 (←このルーターはサーバーには性能不十分なので、記事は参考になりません)
 2002. 6. 1 ルータのログをサーバーで集める & そしてフィルタリングについて YAMAHA RTA54i
          LDBBR4は使用をやめてYAMAHA RTA54iに切替えています。

サーバー 、本体、OS
 2002. 3.__ サーバ  : サーバーマシンの準備 DELL Optiplex
 2002. 3.__ OS  : を決める。TurboLinuxServer6.5
 2002. 4.初旬よりインストール  : サーバOS Turbo Linux Server (6 と 7)のインストールを                        DNS(BIND), proftpd, telnet, qmail, apache まで一気に
 2002. 4. 4 公開  : MYサーバー公開
 2002.10. 6 フレッツで2つのプロバイダを同時に使う
 2003. 4.10 サーバーマシンの入れ換え交換 -> すなわちサーバーのIP変更

FTP (proftpd)
 2002. 4.初旬よりインストール  : サーバOS Turbo Linux Server (6 と 7)のインストールを                        DNS(BIND), proftpd, telnet, qmail, apache まで一気に
MTA ( qmail )
 2002. 4.初旬よりインストール  : サーバOS Turbo Linux Server (6 と 7)のインストールを                        DNS(BIND), proftpd, telnet, qmail, apache まで一気に
  qmailに関する詳しい説明とトラブルシュートを詳細ページにに記載しています  2002. 4.11 qmailの転送設定
 2002. 4.16 qmailもバーチャルホスト化
 2002. 6.16 qmail に APOPを使う
 2002. 8.26 qmailでも未承諾広告※をはじきたい
 2002.10.14 MTA(qmail)にウィルスチェッカーを導入する(試用)

DNS (BIND8 and BIND9)
 2002. 4.11 BIND9のslave DNSが出すエラーについて
  DNSサーバーとして、BINDの設定、セカンダリサーバーの事などは詳細ページに説明あります   HTTPD ( Apache)
 2002. 4.初旬よりインストール : サーバOS Turbo Linux Server (6 と 7)のインストールを                        DNS(BIND), proftpd, telnet, qmail, apache まで一気に

SQL Database (MySQL)
 2002. 6.10 データベースの仕込み - MySQL -

サーバー周辺強化
 2002. 5. 5 UPS  : 導入
 2002. 5.10 MYサーバーのバックアップ(ミラー)を組む
 2002. 5.12 バックアップの続き: rsyncのパスワードを無くす  2002.7.3追記
 2002. 9. 9 ktermをwindowsから使う為にjvimを導入してASTEC-Xを試す CGI、Perl、スクリプトなどなど
 2002. 6.14 サーバー稼動チェッカーの作成(Perl) チェックの受け付けもしています
 2002. 8. 8 真のアクセスカウンターをmysqlで作製
 2002. 8.26 Apacheのログからアクセス解析、referereの日本語を完全に表示させる
 2002. 9.12 時間によってインターネット接続に制限をかけるぞ (自動 Telnet)
 2004. 2.25 全文検索システムnamazuの導入
 2004. 2.26 メール投稿掲示板をqmailで実現することも・・できた



ADSL:申込み

【まずはNTTに申込み】
2001年12月、NTT交換局がようやくADSL対応になることになりました。と9月ごろ発表がありました。
早速プロバイダ経由で申しこんでおきました。で初日の開通です。この頃のプロバイダはbiglobeです。
申込みの時は、距離が4.5kmあるのでNTTからはやめたほうがいいと言われましたが、そのままあきらめるのは悔しいので「ぜひためしに工事して下さい」と、進めてもらいました。

【開通】
当日、NTTでは開通しているはずだというのにリンク出来ないので、ダメかとあきらめましたが、結局は単なる連絡ミスで工事がすんでいなかったという結末で、問題なく接続完了、無事リンクしました。連絡ミスで半日をつぶしてしまいました。

通信速度、下りで600〜800kbps くらいです。まあまあかな。でもはやいですね〜
LAN?と勘違いしてしまう快適さです。上りでも600kbpsくらいみたいです。

【切れる】
たまにですがモデムのリンクが切れます。支障があるというほどでは無いのですが、切れるときは連続します。
ちょっとサーバーには厳しいかな。あと、例によって、電話の着信があると切れます。
保安器が6PT初期バージョンなんでしょう恐らく。
あとで交換したので電話の着信でも切れなくなりました。

もどる


ルータ:LANEED LDBBR4の導入

最初はADSLが開通しないかもしれないのでルータは用意してなかったのですが、開通日にリンクすることが確認出来たので、条件反射的に買いにいきました。
安かったのでLANEED LDBBR4を買いました。8千円くらいでした。性能は・・・・特に気にせず買いました。
いつも職場で使っているYAMAHA RTA54iに比べるとちょっと物足りないかな。動作に支障はないですけどね。
ルータの設定は、まずはこの時点では標準通り。LAN内をDHCPで 10.0.0.200 - 10.0.0.250 くらいにセット、ルータは 10.0.0.8。あと勝手に10分で切断してしまい再接続にちょっとラグがあるので、タイムアウトのタイマーをゼロにして無効にしておきました。最初は10分が入っています。
あとは tcp,udp それぞれについて、LAN内のWindowsのNetBIOSに関するパケットが流出しない様に137,138,139 をフィルタリングしておきました。
とりあえず最初はこのくらいからはじめました。

追記:このルーターは自宅サーバーへの導入を見合わせた方が良いですよ。機能が足りません。

もどる


プロバイダの変更

これまではbiglobeを使ってましたが、IPやドメインの自由度が無いのでちょっとサーバにはNGと思い、NTT MEのWAKWAKに変えることにしました。月800円、固定IP月額2000円で破格だったこと、他にも数ヶ所のプロバイダに固定IPに関する質問をメールで送っておいたのですが、まともな応対をしてくれたのはここだけだったというのもあります。
中には無視されたプロバイダもあります。絶対に使いたくありませんね。

このように、サーバ構築に向けて準備が着々と進められているのでした。

もどる

 但し、後にbiglobeも併用する事になるのでした。

サーバ:サーバーマシンの準備DELL OptiPlex

そろそろサーバーにするマシンの準備をすすめます。選択肢として
  ・サーバを買う
  ・パーツで作る
  ・中古を買う
ただ買うほどの事でも無いし、パーツ組み立てでも今買うとCPUは最低でもセレロン900MHz、個人でLinuxを使うにはちょっとオーバースペックかな。こんなスペックはLinuxには(きっと)不要だ。家で電気を食ったりウルサソウダシ。
もし自作したら5万円くらいか。

中古・・・・中古なら2万円くらいで買えるかな?少し当たってみるか。

ラッキー。買いました。

Optiplex中古、3800円だった。

だから私のページはこの3800円のサーバです。

スペックは
 Pentium 133MHz,RAMは32MB。Optiplex Gn 5166L / 3Com-NIC内臓、ISA-SCSI(Adaptec製)も付いていた。
RAMが曲者で増設出来ません。スロットはあいていますが、この機種はRAMにはうるさく、手もとの何種類かあるDIMM、どれも認識できず増設できませんでした。
というわけで、サーバとしては超スペックなんですがそれでも、ためしにWin98を入れてみると結構快適に動くんですね。きっとLinuxなんて余裕さ。

余談ですがDELLのマシンっていいですよね。
このころの古いのはCPUにファンがなくて、代わりに大きなフィンがつけてあるだけ。静かですよ。静かだから選んだというのもあります。
もっと古いXL575(P-75MHz)というマシンをファイルサーバに使っていますが、数年間つけっぱなしにしても故障しません。これもそうあってほしい。

というわけでサーバマシンはこれでOKだ。きっと。

※念の為に付け加えておきますが、このあとLinuxを入れるまでに、しっかりと、長期運用に耐えられるかの試験をそれなりに実施し、動作に不安を残さない様チェックしてありますので安易な3800円ではありません。

 更に後日、バックアップ用のミラーマシンも備えていてバックアップには力を入れていますよ。

もどる


OS:を決める TurboLinuxServer6.5

Windows NTとか2000なんかが手慣れてていいんだけど、
アクセスライセンスなんかどうなっているのかな?よくわからない。確か公開用のNTなんて何十万もした様な気がする。
でも今回の一番の目的がメールサーバ。qmailを運用する事が自分の中では決まっているので、馴れてないけどLINUXでしか使えない。WEBはおまけで運用だな。

ということで、サーバーパッケージが出ているTurbo Linux Server 6.5で行きます。(というか手元にそのCDがあるので)

前準備の為、何度か繰り返してためしのインストールしてみました。
RAIDが使いたくて、PROMISE-IDE RAIDに対応している新しいOSのTurboLinuxServerなんぞも入れてみましたが、7だとどうもインストーラがハードウェアチェックで止まってしまいます。
6.5を入れてからアップグレードをしてみますが、アップグレードそのもの動作はOK。でも、あちこち不具合がみられますね。BIND9がアドレスをちゃんと引いてくれなかったり。(・・・・悲しいかな、テストと言ってもちゃんと普通にインストール作業ををしてるんですよぉ全部無駄になっている)。

まあMyServerは6.5で行くことに決めました。

また、同時に自分のマシンではないのですがメールサーバを1台作りますので、こちらはHDD-RAID1をベース使いたいのでTurboLinuxServer7で進めます。比較しながら進められます。

もどる


ドメイン:MYドメインGET

そろそろ確保しておかないといけません。
NTT PCの 名づけてねっと へ申し込みました。
これがホスト名になります。
xxxxxxxx.net 一部伏せます

画面そのまま、すべてオンラインで簡単確保。

もどる


ネットワーク:DNSの解決は

ネットワークのプランニングをきっちりとしておきます。
DNSにはDynamicDNSという手もあるけど、やはり固定IPを取ってDNSサーバを作りことにしました。
もちろん予算の関係でIPは1個だけです。
セカンダリDNSはどこかに依頼する前提ですが自分の設定には関係ないので記載しません。

ネットワークはこのような形態になります。

  Internet
   |
   | Globalアドレスxxx.xxx.xxx.xxx ・・・現在未定
  ルータ
   | ローカルアドレス (10.0.0.8)
   |
   |
 ------------
|        |
|      TLServer6.5 (10.0.0.100) これをルータのDMZ機能で表に出します

その他ホスト(ルータのDHCPを利用)
 ホストは現在6台
  WinNT (DELL XL575/P75MHz)・・・・LAN内ファイルサーバです。LAN向けにDNSも提供してます。
  Power Macintosh (7600/200)・・・・印刷業務用
  WinMe (M/B不明/P200MHz)・・・・・家族用
  Win98 & XP Multi (IIYAMA/GIGABITE VIAチップ型番不明/P3-677MHz)・・・あまり使ってない
  WinMe & 2000 Multi (VAIO FX55/i815E/P3-750MHz)・・・・Access97用
  Win98 (VAIO C1/?/P233MHz)・・・・モバイル用(会社の)

LANの方は取り立てて問題のあるところはありませんね。なれてるし。オーソドックスに設定してあります。

サーバは 10.0.0.100 とします。
設定はLAN内からローカルアドレスで行うこととして、すべて内部的に完結してしまいます。
サーバを含めルータの内側はすべてローカルアドレスがセットしてあります。
DNSの設定部分だけでグローバルなアドレスをすべて解決させます。
ただ、気をつけるのは、内部から xxxx.xxxx.com などと自分のアドレスを入れても、ルータの方が応答してしまうので要注意です。これはおいおい報告していきます。

********************

また余談ですが、一般的に10.0.0.0のローカルアドレスを使うのは珍しいですよね。
私はMicrosoft SmallBuisinessServerを長くいじっているので、そのデフォルトである10.0.0.0のローカルアドレスがとても見易い感じになってしまいました。

もどる


アドレス:固定1アドレス確保

WAKWAKのアドレスプラスに申し込みました。
申込みから7営業日以内での登録となるそうですが、オンラインで日曜に申込み月火の2営業日で登録完了です。
これでIPが固定化されました。
ただこのサービスでは、IPが固定されるだけでなく、逆引き可能なドメインもセットされてしまいます。
 xxxxxx.as.wakwak.co.jp
こんな感じです。このドメインを使ってこのままサーバを組み上げてしまえば
WEBなら www.xxxxxx.as.wakwak.co.jp
メールなら namae@xxxxxx.as.wakwak.co.jp
という運用ならどこにもドメインを登録しなくても運用が始められます。
楽かな?
ちょっと迷いましたが、独自ドメインで進めます。

****************

ドメインだけの運用ならホスティングが便利ですね。NTTのWebAreanaというサービスなんかもちょっと気になりました。ウィルスチェックつきです。独自サーバとの運用差額は1500円増。
ずいぶん悩みましたが、勉強の為、独自に行くことにします。

もどる


インストール

さて、実際にサーバのインストール作業を進める段階になりました。
前にも書きましたが、TurboLinuxServer6.5でMyServerを、もう一つ、メールサーバーを作ってみます。それはTurboLinux7Serverで。
手順について詳細はあまりココにはかかなかったのであとから追記してます。こちらです。

 
My TurboLinuxServer6.5
TurboLinux7Server 別に作ったメールサーバー
使用したマシン

DELL Pentium133
RAM 32M ・・・ 超低スペックっす

PLE133チップ、Celeron800MHz
RAM 128M ・・・ いまどき のスペックです
インストール こちらのPCはメモリ32Mしか無いので、インストーラはテキストモードでしか動きません。インストールには時間かかります。それ以外には支障はありません。

グラフィカルなモードのインストーラが「普通に」動作します。まぁ6.5でもこのマシンにインストールするなら普通に動きました。
以前にRedHatやTurbo4をセットアップしようと試したときはグラフィカルタイプのインストラーがなかなかうまく完了しなくて、キーボードの設定が変だったりビデオがおかしかったりと心配だったのですが最近のモノは問題が”比較的”少なく進むので楽です。

パーティション

3.5Gを自動で切らせました。自動の場合は
/swap
/boot
/
の3つだけになります。
あまり細かく考えないで進める事にします。

こちらは20Gを次のように切りました。

boot 62
swap 117
/ 1999
/home 7993
/usr 2996
/tmp 996
/var 4993

qmailを念頭に置いたので、メールデータを/homeに置きます。だから/homeを大きくしてあります。でも8Gなんて使わないでしょうけどネ!

あと、こちらのマシンは、安定性重視なのでM/B上にon bordで載っていたRAID-1を使っています。Promise-Fasttrak-liteとBIOSで表示されるものです。こちらにあらかじめBIOSレベルでRAID-1ミラーセットを作っておいてからインストール作業をすると何事もなく /dev/ataraid/d0 でマウントされました。liteというのは恐らくFasttrak-tx2相当なのかなと思います。(これはTLS6.5では認識できませんでした)
*パーティションは、上記のように切りましたが、あとから思ったのですが、切った意味はありません。同じドライブ内ならあまり細かくしないで、/のみの方が便利かもしれません。

NICの認識 NICを認識させるのはインストール時の最低限の条件です。後から認識させるとその過程でいろいろ大変です。
このマシンはローカルアドレスしか持たせないので、NICは一枚でOKです。
これにはRealtekのチップで自動認識されました。

こちらは、GrobalとLocalを分ける為にNICを2枚差す事にしてあります。(ルーティングする訳ではありません。たんに両側からアクセス出来るように!です)。
DigitalPC(Tulip)とRealtek(RTLxxxx)にしました。インストーラーが勝手に認識してくれてインストール時にそれぞれの指定が出来て便利です。

X Xは使わないけど一応入れておく。なにかの時に役立つかも。32Mでもちゃんと起動します。P133MHz-32Mなのでやっと動作しています。・・・・といいつつも稼働後には一度も使ってない。なぜなら、キーもマウスもモニタもつけてないから。使えっこない。

ここのネットワークの都合で、ルータの設定をする為に、ブラウザが必須です。だから、そのためだけにXを入れました。

インストールモード セキュリティを考えてみた。最初に最少オプションとかインターネットのオプションでインストールしておいて、あとから最低必要なパッケージを追加していく。そういう方式を試みたのですが、どうも必要に応じてちゃんと増えていってくれません。初期インストールの環境と追加するときの環境では微妙に異なる構成になります。特にコンパイラやデバッガがなかなか動く状態なってくれなくてqmailがコンパイルできません。一苦労しました。
だから情けないけど、改めて全部をインストールすることで落ち着きました。
こちらも、何度も何度も何度もインストールしてみたた結果、全部いれた方が生産性が高いという結果に至りました。
そうしないとあれが足りないこれが足りないと、その都度あれこれ探してインストールするのでストレスがたまります。
セキュリティレベル   TLS-7の方はインストールの最終段階でセキュリティレベルの指定をしなければなりません。これには最高にセットしました。
多分、余分なサービスは起動しない様にするのだと思います。でも立ち上げてからちゃんと netstat や chkconfigで不要なサービスが起動していないか、チェックしなければなりません。
これでまずはインストールは完了です。あとは基本設定とチューニングです。
まずはTelnetの設定 なにはともあれTelnetが必須です。そうしないと手も足も出ませんので。
Serverパッケージでは標準でTelnetは動作しませんので、inetd.conf と hosts.allowを修正してinetdから起動する様にしました。hosts.allowではクライアントを思いっきり絞ってしまいます。
IP指定でちゃんと動作するようにセットしておきます。
Turbo 7からはinetdではなくてxinetdで起動させます。当初、知らなかったので起動させられませんでした。
6と7の差を大きく感じた項目でした。
次はFTP
( proftpd)
proftpdは単体で動作するstandalone とinetdが制御する起動方法があります。
ちょっと不都合でどうしても inetd から起動させるようにできませんでした。一時的にあきらめて standaloneで起動させました。
これだとhosts.allowが使えないのでセキュリティが心配です。あとで検討します。

Turbo 7の方はxinetdで起動させる為にいくつかの手順を踏みます。
/etc/xinetd.d/以下のftpというファイルを開き、desable=noに書き換えます。
chkconfig xinetd on として、自動起動する様にセット。

hosts.allowでの制御が生きてきます。

DNS

インストール手順

BIND8です。
基本はBIND9も同じです。詳細ページに詳しく書きましたので参照下さい。

DNSを起動する状態にして、インターネットに接続しない環境で使うとtelnetやftpがめちゃくちゃ遅くなります。ちょっと上で書いたftpが遅くなる現象もDNS検索していた為というのが真相の様です。

これはBIND9でも同じ状況です。

ちゃんとセットして外界とつながるとすべてがスムーズに動作するようになります。

BIND9です。
こちらもセオリー通り。検証方法を含めて詳細ページに書いてあります。 

qmailの設定

インストール手順

メールソフト qmail
私は、SMTPのアクセス制御にPOP before SMTPを選択しました。
受信(POP)でパスワード認証して、OKになったクライアントからのSMTPリレーを許可するものです。
そして、そのPOPには、パスワードを暗号化するAPOPを使う事にしました。(後の記事にて追記)。
それらをまとめて、インストールする手順を詳細ページに書いてあります。

apache

まずは、/etc/httpd/conf/httpd.conf の編集です。
ホームディレクトリに関するオプションなどを書き換えて調整しておきます。
セキュリティ上での必須項目もあります。書き換えたところを抜き出します。

サーバーの管理者アドレスを書きます
ServerAdmin webmaster@ayamizu.com

ドキュメントルートは TurboLinuxのバージョン6.5と7ではデフォルトが変わっています。お好みで変えましょう。私は6.5なので、次のようになっていて、予備マシンもあわせています。
DocumentRoot "/home/httpd/html"

そのルートドキュメントに関するオプション指定を次のようにしたしました。複数行に渡っていますが、#で始まるコメントを無視するとこれだけが残ります。
<Directory "/home/httpd/html">
Options MultiViews ExecCGI Includes <---- Indexesを消す。
あとはお好みでCGIをこのディレクトリで使うなら
AllowOverride None
Order allow,deny
Allow from all
</Directory>
 Options にはIndexesがデフォルトで記載されています。この動作は、まずhttp://www.ayamizu.com とリクエストされた時には index.htmlが呼び出されます。しかしそのindex.htmが存在しない場合はディレクトリリストが表示されて中身がまる見えになります。それは情報漏洩のモトになるので必ずIndexesという文字を消しましょう。できたらファイル内全部を調べてすべて取り外してしまいましょう。

あとバーチャルホストを使う場合のディレクトリ指定です。普通は不要です。
<Directory "/home/httpd/別のディレクトリ">
Options MultiViews ExecCGI Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

ディレクトリのデフォルトファイルを指定します。私は index.html ではなくて index.htm を主に使います。htmlを使う場合は変更は不要です。両方を列挙することもできるようです。
<IfModule mod_dir.c>
  DirectoryIndex index.htm
</IfModule>

CGIとして使うファイルの拡張子指定です。これを指定しておかないとcgiファイルを開くとソースが見えます。
AddHandler cgi-script .cgi .pl

もしバーチャルホストを使う場合はこんな記載を
バーチャルホストアドレス指定
NameVirtualHost 10.0.0.100

<VirtualHost 10.0.0.100>
ServerAdmin webmaster@ayamizu.com
DocumentRoot /home/httpd/html/
ServerName www.ayamizu.com
ErrorLog logs/ayamizu.com--error_log
CustomLog logs/ayamizu.com-access_log
</VirtualHost>

<VirtualHost 10.0.0.100>
ServerAdmin postmaster@exampe2.xxx
DocumentRoot /home/httpd/バーチャルホスト用/
ServerName www.exampe2.xxx
ErrorLog logs/exampe2.xxx--error_log
CustomLog logs/exampe2.xxx-access_log
</VirtualHost>

以上が整ったら起動させます。
/etc/rc.d/init.d/httpd start
です。もし起動しているのなら
/etc/rc.d/init.d/httpd restrt
です。アクセスしてみてちゃんと表示されていればOKです。

自動に起動するようになってない場合は

chkconfig httpd on
これでOK。

その他  

更にこちらはUPSからシャットダウンが出来るようにしておきました。
APC-SU700に付属のコードで繋いで、APCのページからダウンロードしたLinux用rpmパッケージをインストールしてそのConfigを実施。説明も添付されていたのでその通りに実行してサービスとして運用中。

あまり詳しく書いておけなかったので質問がございましたらメールでもくださいませ。掲示板(雑記帳)でも結構です。
お応え出来る範囲でご説明させていただきます。web@ayamizu.comへ。間違っているところも連絡願います。


もどる


公開:MYサーバーの公開

DNSの設定などが完了しました。やっと「外に」出しました。晴れてデビューです。

サーバ設置に伴いちょっとだけトラブルが発生
ADSLモデムの横にサーバを置いたのですが、どうも
★モデムが頻繁に切れる!!
★速度は出ているのにもかかわらずWEBなどのレスポンスが異常に遅い。
しかたなく、モデムは1階、サーバは2階と場所を変たら直りました。
ノイズを発するんですね、PCは。

もどる


MTA:qmailの転送設定 

qmailでは受信したメールの配送先(保存ディレクトリ)を2通りの設定パラメータで指定します。
 1)ユーザー共通の設定 : 起動スクリプト/var/qmail/rc 内に記述します
 2)個々のユーザの設定 : $HOME/.qmail に記述します。

前者ではスクリプト中に
 qmail-start ./Maildir/ splogger qmail 
こういう記載をします。
./Maildir/はqmailの推奨なので、皆さんインストール時に恐らく書き換えてると思います。これが共通の配信先です。
個々のユーザごとに設定する場合は
 $HOME/.qmail
に書きますね。
ここに
./Maildir/
と書けば起動スクリプトに書いたのと同じ動作になりますね。$HOME/Maildir/new/ に配信されるようになります。

で、他のアドレスに転送をする場合はここ .qmail へ
 &転送先アドレス
と書き加えるだけで転送される様になります。このままだと転送して終わってしまうので、転送してから保存する場合には./Maildir/を含めて
 ./Maildir/
 &XXXX@XXXXX.XXX.XX
こんな順序で保存しつつ転送させることが出来ます。

さて、

バウンスも可能でbouncesayingという補助コマンドを起動させて
 |bouncesaying 'コメント' 条件判定コマンド
という書式で動作します。

ここで条件判定コマンドが出てきましたが、そう言えば転送をする場合、条件に基づいて制御するにはどうすれば良いのでしょうか?
私はメール転送にぜひ条件判定をしたいので、転送方法はかなり気になります。
条件判定に沿って転送させる場合でも .qmail の中に書きます。
補助コマンドであるcondredirectと引数としての判定コマンドで転送するかしないかを決める事ができます。
 |condredirect 転送先 条件判定コマンド
こんな書式です。

但し、条件判定コマンドにはメール送信者の情報が$SENDERだけしか渡せません。qmailの基本的なスタンスが着信のアドレスを調べるところに軸足があるみたいです。発信者によって転送するかどうか決めたいのに・・・・

私が一番使いたい機能は発信者によって、または発信ドメインによって転送を制御する(またはバウンスさせる)というものです。特に発信ドメインを切り分ける事が重要です。
環境変数がSENDERしか使えない以上、発信ドメインを判定するのはどうも一筋縄では行かないみたいです。
ではフルアドレス判定は使えるのか?
$SENDER="abcd@xxxxx.com" という条件式を使うもののどう書いてみても思い通りに動作してくれません。何が悪いのかもデバッグできないのでよくわかりません。デバッグもどきとしてバウンスの引数にこの辺の変数を持ってきてバウンスされたメールの表示をみたりして調べて見ましたがよくわからないのであちこちを調べてみました。
でも転送の条件設定についてあまり触れられていない(というか、見つけられないだけなのか?)みたいでした。とにかくここをなんとか実装させてみたいと思います。
基本は
 |condredirect
これでOKだと思うので条件の書き方をつめなくてはいけません。

さて、ここからが思案どころです。
Linuxでのプログラミングをした経験はありません。現状ではどうやれば良いのか全然わかりません。
Perlの解説書はありますが、書いたことはありません。さすがにqmailの判定文のところにPerlスクリプトを書くのはちょっと気が引けるかな。
そうするとCで書いてコンパイル・・・・Cで入出力関数のソースを書くくらいは簡単ですが、LinuxのCってライブラリなんかはどうやって使うのかな?よくわかりません。
シェルスクリプトならちゃんと動いてくれるのかな?

と悩んだ末、始めてですがシェルスクリプトをちょっとだけ書いてみました。基本的に考え方が違うよ!という方はぜひご指摘の上ご指導願います。
とりあえず /tmp/chkSender という名前で次のスクリプトを書いたとします。
引数は2つ、引数から括弧<>の中だけを抜き出してもう一つの引数と比較するだけのものです。

#!/bin/sh
filnename=$1
filename=${filename#\<}
filename=${filename%\<}
if test $file = $2
then
 exit 0
else
 exit 1
fi

chmod +x /tmp/chkSender
としてから

.qmailで
./Maildir/
|condredirect xxx@xxxxx.net /tmp/chkSender $SENDER yyyyy@yyyyyyy.yyy

と書いてみます。
受信して、yyyyy@yyyyyy.yyyが送信者の場合は0が帰るので、xxx@xxxxx.netへ転送するという動作になります。
condredirectは条件判定プログラムが0を返すと転送して終了、0以外または何も返さないと転送せず次の行へ進む仕様です。
http://mirror.nucba.ac.jp/mirror/qmail/man/man1/condredirect.html 参照
合致したら転送しない様にするにはスクリプトの判定を変えたりして調整しても良いが、条件結果を差し替えるexceptコマンドを借りて
 |condredirect xxx@xxxxx.net except /tmp/chkSender $SENDER yyyyy@yyyyyyy.yyy
と書けばスクリプトは上記のままで動作します。
とりあえずこれで試してみていますが、不具合もなく順調に動作しております。
Linuxでの自己流の調整は始めてですがこんな感じでいいのでしょうか。
ともあれ、結果オーライで上出来かなと自分では思っておりますが。
あと、条件判定を伴い転送する、またはバウンスさせると、そこで.qmailは終わってしまい、次の動作はキャンセルされます。condredirecto や bouncesayingを使う以上どうにもできません。

もどる


DNS:BIND9のSLAVE DNSが出すエラーについて

この項目は結局意味がなく終わるので読んでも無駄です、先に言っておきます。

Myserverでは無いのですがセカンダリDNSをBIND9で運用しています。
そのBINDが起動する時には特にエラーログは特に出て無いのですが、定期的に落ちているシステムログの中に転送をしている記録が残っていて
 refresh_callback: zone xxxxxxxx.net/IN: failure for 61.205.232.120#53: timed out
と、ときどきですが残っています。
似たような症例について、BIND9に近いバージョンから出ることがあるみたいなのでやってみました。
zone "yyyyy.net" {
 type slave;
 file "zzzzz.zzzzz.zz";
 masters { xxx.xxx.xxx.xxx };
} ;
と書いて、fileの置かれるディレクトリのオーナーとグループを named にすると回避できるとの事です。
やってみたけど変わらないなぁ・・・そういえば、time outというエラーだから原因が違うみたい。現在思案中。
!!!原因特定できず。zone転送はちゃんとできているので支障無いみたい。これはここで打ち切り

もどる


ドメイン:Virtual HOSTを起動させました。

この時点では、このサーバは普通にメインドメインで作成してそのままインターネットに載せてあります。まだ、アクセスされる状態ではありません。いまのうちにやっておきたいことがあります。
(余談ですが、ポートスキャン?アタック?はちらほらと見え始めました)。
実はWEBは別のドメインで行きたいと思っていたのですが、時間が無いのでサボってました。少し落ち着いたのでバーチャルドメインを載せる事にしました。

実は最初にもう一つのドメインをお名前.COMで取ってあったのでした。
ayamizu.com というドメイン。これをバーチャルで乗せることにしました。


設定した手順を説明します。
まず、
1)レジストラのWEBからDNS設定を変更してしまいます。
 お名前COMがレジストラです。管理者のところを一通り入力し、DNSのホスト名を登録します。
 数日でDNSの情報が順次書き換わって降りてくるでしょうから、それまでに作り替え作業を進めてしまいます。
2)まずBINDの設定を書き換えます。
 /etc/named.conf
 これに新しいドメインを追加します。設定は別のページをご覧ください。

options {
    directory "/var/named";
    allow-query {
    any;
    };
    allow-transfer {
    xxx.xxx.xxx.xxx;
    };
};

zone "." {
   type hint;
   file "named.ca";
};

zone "0.0.127.in-addr.arpa" {
   type master;
   file "named.local";
};

zone "xxxxxxxx.net" {
   type master;
   file "xxxxxxxx.net.zone";
};

zone "ayamizu.com" {
   type master;
   file "ayamizu.com.zone";
};

こんな感じです。黄色のところが追加した点です。これは簡単ですね。

そして追加したのは/var/named/ayamizu.com.zone です。

$TTL 86400
@ IN SOA  ns.ayamizu.com. postmaster.ayamizu.com. (
2002041409 ; Serial
10800     ; Refresh 3h
3600     ; Retry 1h
604800    ; Expire 1w
86400    ; TTL 1d
)
IN   NS        ns.ayamizu.com.
IN   MX  10     ns.ayamizu.com.
ns   IN  A      61.205.232.120
www IN  CNAME  ns
localhost IN  A    127.0.0.1

こんな感じです。
結局この普通の設定をして動作させるまではかなり迷いました。
それは、NSをこの様にバーチャルホストの名前にするのが良いのか、オリジナルドメインホストを入れるのか、またはオリジナルのホストに対して、CNAMEでセットするのか?いろいろな事例を見ながらセットしてもどうしてもnamedが起動しないのです。いろいろな書物資料にははっきりと記載されているところがあまりなく、CNAMEで登録する事例などが見られますが、やっぱり起動しません。
結局でもこのように普通に記載させれば良いというところで落ち着きました。


3)さて、Apacheの設定を/etc/httpd/conf/httpd.confここで
NameVirtualHost 10.0.0.100
<VirtualHost 10.0.0.100>
  ServerAdmin postmaster@xxxxxxxx.net
  DocumentRoot /home/httpd/html/
  ServerName www.ayamizu.com
  ErrorLog logs/ayamizu.com-error_log
  CustomLog logs/ayamizu.com-access_log common
</VirtualHost>

<VirtualHost 10.0.0.100>
  ServerAdmin postmaster@xxxxxxxx.net
  DocumentRoot /home/httpd/html2/
  ServerName www.xxxxxxxx.net
  ErrorLog logs/xxxxxxxx.net-error_log  
  CustomLog logs/xxxxxxxx.net-access_log common
</VirtualHost>

 

ドメインに関する設定はこのくらいですね。
あとバーチャルのディレクトリ /home.httod/html2/にもExecCGIなどを許可しておく設定をしてあります。

これにて普通に使えるようになりました。もちろん /etc/rc.d/init.d/httpd restartのあとです。

PS : 日曜に、レジストラへの変更手続きをしました。翌月曜にはすでにルートから引けるようになりました。
別の「名づけてねっと」で取った.netドメインのDNS設定を変更した時はルートから引けるようになるのに3日かかったので思ったより早かったです。



もどる


ドメイン:qmailもバーチャルホスト化

qmailではバーチャルホストのメールサービスも可能である。
バーチャルホストを前面に出すべくこちらMTAでもバーチャルサーバーを活用する。
当然、この前にDNSがきっちりバーチャルドメインを引いてくる事が前提であるがこれはもう起動済。
コントロールファイルの修正は2つ。
まず
/var/qmail/control/rcpthosts
に受信するべきvirtualのホスト名を登録した。
.xxxxxxx.net  <------これは元のドメイン
xxxxxxx.net  <------これは元のドメイン
ayamizu.com  <------追加
.ayamizu.com  <------追加
次に
/var/qmail/control/virtualdomains
を作り、
ayamizu.com:ayamizu
.ayamizu.com:ayamizu
と書いた。:の前がバーチャルドメイン名、後ろが、「オリジナルドメインのある一人のユーザ」で、バーチャルドメインを管理する人である。このバーチャルドメイン宛の全てのメールはこの人宛に届く。

振り分け先となるアドレス(ユーザホーム)は、元ドメインにおけるユーザアドレスである。
例えば
daresore@ayamizu.com
と書いてある場合、とりあえず、先程の、「ayamizu」というユーザーのメールディレクトリに配信する手配をはじめる。
ここでバーチャルホストのユーザーが登録されているかどうかが調べられる。
.qmail ファイルを使う
.qmail-daresore
.qmail-daresore2

と書いておいた場合前者の.qmail-daresoreの配送指示に従うわけだ。
.qmail-daresore
に受け取るメールボックスを書いておけばいい。
元のホストに「user_daresore」というユーザーがいてこの人が受け取るならば
&user_daresore
と転送の記載をする。この記載はごく普通にやればいい。
ちょっと複雑なので気が変になりそうだが、動作は確実簡単。
もちろん .qmail-default に記載があれば全てのメールを受けることが可能でありなければ不要なものは返送される。

これで 受信はOK。
で、送信はというと、そのドメインから何事もなく送信できる。

ちょっとあっけなく済んでしまった。

なんかこの項目だけですます調にならなかった。きっとそんな気分だったのだろう。
もどる


ルーター:LDBBR4のDMZ設定を変更

proftpへのランダムなアクセスが頻繁にあります。
FTPがrootでのログインは許可していないのと、内部アドレスしか許可していないので、ちゃんとrefuseされていて問題無いと思っているのですが、アクセス不正ログになぜか相手のメッセージが残される事が多くなってきました。
うっとおしいので、ルーターでDMZそのまま丸出しをやめてポート80,53,110,25,だけをバーチャルサーバとして出して、それ以外は引っ込めておくことにしました。

DMZは呼び名ではなくて、ルーターの機能としてのDMZです。全部のポートをNATマスカレードで前面に出します。

もどる


UPS:導入

どうも停電が気になってしかたがない。
最近でもかなり強烈な雷がときどき鳴るし、光ってる。これから天気の良い日は雷は避けられない。
ここはひとつ、今のうちにUPSを準備しておこう。
選択すべきUPSでこだわりたいのは正弦波出力と出力電圧を一定にする機能。
でもこれを揃えると、多分6万円くらい・・・・・ちょっと出せないな。
まずはツナギでいいか。
思いっきり妥協して OMRON BX35XF(250Wタイプ) を購入した。14800円。
とりあえず、RS232Cケーブルまで同梱されているので、電源を接続し、シリアルケーブルを繋いで、RPMパッケージをインストール。これは簡単。
ただしパッケージはTurboLinuxの4.0用とか6.0用とかかなり細かくOSごとに別れていて、我が6.5に合うものはまだパッケージにされていなかった。しかたないのでServer6.0用を気にせずにインストールした。
インストール後ACプラグを引っこ抜いてテストしたら別に問題なく動くのでまずは良しとしよう。インストール手順は説明書と一緒に紙が一枚入っているのでその通りに従う。
設定は、シャットダウンまでの待ち時間を180秒、シャットダウンに要する時間は60秒と入力しておいた。
さあ,これでいつでも雷が来ても大丈夫さ。

本当はAPCのSmartUPSシリーズが良かったのであります。
これならいろいろな情報をメールで送ってきたりできのだけれど。
いつまでだかわからないけど、まあつなぎということで。

追記:シャットダウンするところまではOK。
   でもその後、電源が回復した時にはサーバーの電源が勝手に入らない。落ちたらおしまい。
   APCのUPSだとちゃんと電源が投入されるのに・・・・・

もどる


バックアップ:MYサーバーのバックアップ

BBSなどでも話題が上がっていたので書いていますがバックアップについて真剣に考え始めました。
といっても、元来、HDDが消耗品だという確信を持っているので、故障はHDDがNo1、これは確実。
だから、例えばいつも使っているWindowsのさまざまなデータは、必ず、2箇所のマシンに保存していて、許されるなら3箇所への分散、さらに業務に関する場合は日ごとに分けて10日間の履歴バックアップと、1ヶ月前、2ヶ月前のデータはいつでも取り出せるように、保存しています。しかもテープでは取り出せない事があるのですべてをHDDで管理しています。WindowsではMS-DOSのバッチで行っております。

さて、MYサーバはというと、当初は作りなおせばいい、そう思っていました。
それは、FTPの送る元ファイルがあれば、ある程度は復活できる、と思っていたのですが、やっぱりBBSにて頂いた意見やメールデータなどのバックアップ、運用の連続性を重視しなくてはなりません。義務感というより、切断してはいけない、故障しても行けないそんな気がしてきます。
そろそろ本格的に対策を立てないとダメですね。とりあえずですが電源にはは簡易的にUPSをいれておき故障を防ぐ為の第一歩を踏み出しています。

さて、昨日までのバックアップはというと全くやってなかった訳ではありません。
スクリプトを

#!/bin/sh
rm /tmp/backup.home.tar.gz
tar cpzf /tmp/backup.home.tar.gz /home

こう書いて、WWWとメールスプールのある/homeだけは自動にcronで取っていました。朝6時に実行させて、これをFTPでWindows側に取り出していました。
あくまで簡易バックアップです。
これで、いざ、壊れた場合には、OSのインストールをして復帰作業を終えたら保存したものを解凍してあげなければなりません。ちょっと手間がかかりますね。

故障と言っても考えられる要因は、HDDの故障、PC本体の故障、いろいろありますので、対策を複雑にしてくれます。

ちょっと整理してみます。

重要度1 : HDDの故障
この場合、RAIDといってデータを分散して保存する方法が有効です。RAID-1か5が有効でデータを複数のHDDに分散させて、1台の故障には影響されないようにします。これがベストです。RAID-1はミラーといって2台のHDDに同じ内容のものが書込まれます。逆にRAID-0という似て非なるものがありますが、これはデータを単に2台に分散しているだけで内容が切り分けられて復帰の手助けにはなりませんのでお間違え無く。RAID-5は3台以上のHDDにデータが分散して書込まれますが、どのドライブのデータも他のものを寄せ集めると造り出せるという情報の分け方です。1台分のデータは常に別のHDDが持っているという安全性があり、1台分は保存データの為に消費されてしまいますが、復帰や再構築がとても楽です。
そのRAIDはハードウェアが管理してくれるものとソフト(OS)がやってくれるものがあります。OSのソフトレイドの場合は復旧作業は簡単ですが、HDDを入れ換えて再度RAIDを組みなおそうとすると、構成をよく考えてセットしなくてはならずまたOSもセットするのにちょっと手間取ります。こういう保守は忘れた頃にしかやらないので、できたら簡単な方が良いのです。だからあまり良いとは言えないかもしれません、また、当然CPUの資源を使います。
ハードレイドの場合は文字どおりハードがやってくれるので復旧と再構成がとっても楽です。(ただBIOSレベルでの復帰作業になるので英語の画面が多少読めなくてはいけません)。ときどき「同じ容量のドライブが必要なので調達が難しい」との意見も見られますが、その様な事はありません。大きいドライブを付けてあげれば大丈夫、小さい容量のものに合わせて復帰できます。できればこの方法を採用しておきたいところです、が、このカードをOSが対応しているかどうか?  Turbo Linux Server 6.5ではサポートされるRAIDカードが無いまたは少なく、それが手に入らない、又は非常に高価であります。MYサーバーはTurbo6.5までしか動作できない状態で結局RAIDは採用できません。
そうすると、あとは、HDD丸ごとコピーする方法、Symantec Norton Ghost などはFDDから起動させユーティリティでBOOTエリアごとクローンを作る方法がとれます。でもいったん停止させて、HDDを2台並べて(master & slaveなど)コピーするのを考えるとちょっと躊躇してしまいます。
という訳で、部分的に必要なところをコピーをとっておく方法しか選択できない様です。

重要度その次 : サーバーPCの故障
私も数年に渡る2桁の中盤になろうというPCの台数の管理経験でも、自然故障はあまり経験がありません。ただ、ほこりがたまってくると、湿度でやられます。
この場合ドライブの制御回路が故障したのでなければHDDは生きている事になります。ドライブを別のマシンに移すことで使える可能性、それが同じマシン構成の場合だけ。M/Bのチップ、LANカードのチップ、これらの違いをLinuxが吸収してドライバを差し替えられなければ動作できません。
余談ですがWindowsではXP以前はIntel以外のチップセット(CPUではありません、M/Bの主要回路で、今ではIntelかVIAがほとんどです)はデフォルトで動作してくれなかったのでM/Bの入れ換えは各種ドライバの調達が大変でした。でもXPからはVIAのチップセットにも対応していて比較的簡単にM/Bの入れ換えに対応してくれたりします。LinuxではPlug & Playでドライバが入れ代わらないはずですので、できるだけ全く同じPCを調達しておきたいところです。

以上の考えのもと、対策を考えました。

プラン
 その1 HDDが死んだ時を考えて、サーバーそのものの影武者を立てる。
      独立して動作させておくが、設定や情報はミラーリングとする
 その2 PCそのものが死んだ時は、影武者にが代行する。が、
     影武者も完全にデビュー体制でいられるかわからない。
     まずはもとのHDDを生かすために影武者は同じ構成のPCを準備しておく。
     ダメなら影武者が代行。
 その3 影武者も完璧に動作しないときは、作りなおす。
     データはオリジナルHDDまたは影武者のHDDから取得。
 補足 ミラーリング操作は手動。影武者は常時起動させない。節約のため。
     
では実際の手順です。

●対策その1
同じマシンを用意します。
現在、MYサーバは
 DELL OptiPlex Gn MMX133 430チップセット。NICは3Com。
同じ仕様のものを揃えれば良いのです。そこで購入したのは
 DELL OptiPlex Gx MMX 166 NICは3Comで同じ。
 チップは430かどうか今はまだ未チェックですが年代的に他のチップはありません。
これで本体の故障の場合にHDDの載せかえだけで動くはずという状態を確保しました。
実は今の時点で3台めを手配中です。

●対策その2
さて、今度はHDDの故障の為に、稼動可能なバックアップを作らなくてはなりません。
Linuxが稼動するマシンを作って、ミラーリングしてみることにします。

マシンは、先のDELL Gxでいきます。
そうすれば本体故障の時のHDD入れ換え用、及びHDD故障時の身代わりとして一石二鳥です。

では身代わりマシンの手配を長々と説明することにいたします。

(1)初代MYサーバーと同じ様にTurboLinuxServer6.5をインストールします。
(せっかくだから7を入れてみましたが、よく考えると、/etc以下をミラーした時に支障が出るので6.5に戻しました)
(2)インストール時に同じアドレスは使えません。転送できないからです。だから
   オリジナル 10.0.0.100
   影武者   10.0.0.101
   自宅サーバーは1IPの為ルータの設定だけで切替えられます。
(3) telnetが使えるユーザーを作成ました。のこりはミラーで実施するので大丈夫です。
(4)telnetを起動させます。手順はここを参照。
(5)telnetが使えたらあとはqmailをインストールさせます。
 qmaiは/varを転送させるだけで大丈夫だと思いますが、ユーティリティのrelay-ctrlなどはインストールする必要があります。従って、qmailだけは真面目に最初からインストールさせておきました。
 qmailのインストール全体はここをみながら実施しましたがちゃんと出来てます。
 手順の中に出てくるFTPなどでgetしてくる手順はすでに取り込んであるのでオリジナルからもってきます。
 持ってくる手順はミラーする手順をそのまま使います。
 フライングになりますがオリジナルの「MYサーバー」から転送する手順はこんな感じです。必要なものを/tmpあたりに置いておいて
  /tmpをコピーする場合
     rsync -avz -e ssh /tmp/ 10.0.0.101:/tmp
  あと起動スクリプトも
  /etc/rc.d/init.d/qmailの3つのスクリプトをコピー
     rsync -avz -e ssh /etc/rc.d/init.d/qmail* 10.0.0.101:/etc/rc.d/init.d/
  /etc/rc.d/init.d/qmailの3つのスクリプトのシンボリックをコピー(番号にあわせて)
     rsync -avz -e ssh /etc/rc.d/rc3.d/Sxxxx 10.0.0.101:/etc/rc.d/rc3.d/
  この -e ssh というオプションがsshを使って転送する設定です。が、、、、、このままでは実行できないのでした。
 sshは相手のホストに対するリモートシェルであり、ログインしなければなりません。ここで起動させるとパスワードを聞いてきますが、rootではログインできません。それはServerパッケージなのでデフォルトでrootのログインを制限しているからです。だからパスワードを入れると Permission denied, please try again.というエラーが出ます。影武者はLAN内でしかパケットを受信できないので安全であるという前提があります。だから
/etc/ssh/sshd_config で
 PermitRootLogin no

 PermitRootLogin yes
にして、/etc/rc.d/init.d/sshd restart
でrootのログインを可能にしてあげます。あくまで影武者だけです。影武者がデビューする時にはこれを止めておかないと危険過ぎるのでちゃんと覚えておくことにします。
(6)qmail用にtcpserverのインストール、pop before smtpのインストール、これも別紙よりインストールしておきます。
(7)インストールが終わるとサーバーはセット完了であります。通常に動作しています。
但し、この時点ではDNSが本稼動させるわけにはいきません。
だからメールの配信テストはローカルだけしか出来ません。


このあとのミラーリングは rsync を利用して行うことにします。結構便利なコマンドです。すでにqmailの関連ファイルを移すのに使いましたが、ほんとはここからがその手順です。
転送そのものはrshかsshを利用できる様ですがsshで転送させる事にします。
(8)rsh と rsyncの確認
 which rsh
 which rsync
の2つの確認でインストールされている事をみておきます。

「注意」

上のところで書いたことと繰返しになりますが、
いざrsync と sshで転送させようとすると、相手先(バックアップサーバー)へのログインパスワードを聞いてきます。これは当然です。ログインしようとするとルートでのログインがはねられますPermission denied, please try again.という表示。サーバー仕様なので(telmetなども同じで)rootでのログインが禁じられているのであります。
ではユーザーアカウントでコマンドを実行すると?これもダメ。ファイルの所有者がちゃんと移りません。
そこでrootでのログインの許可を付けてあげますが、影武者はこの時点ではinternetからのパケットを受信出来ない状態であるという限定の条件があるので、それを可能に出来ます

影武者の方の
/etc/ssh/sshd_config で
 PermitRootLogin no

 PermitRootLogin yes
にかえてから/etc/rc.d/init.d/sshd restartさせることでこれは大丈夫になります。危険なので影武者が本運用になったらこれを止めてあげるのを忘れない事にして、OKです。

これで rsyncが使える準備が整いました。次のスクリプトを作ってオリジナルサーバーから実施します。

#!/bin/sh
rsync -avz -e ssh --delete /tmp/ 10.0.0.101:/tmp
rsync -avz -e ssh --delete /home/ 10.0.0.101:/home
rsync -avz -e ssh --delete /var/ 10.0.0.101:/var
rsync -avz -e ssh --exclude ifcfg* --exclude sshd_config --delete /etc/ 10.0.0.101:/etc

-a : -rlptgoDという意味(r:サブディレクトリ対象、 l:シンボリックもそのまま、p:パーミッションをそのまま、t:タイムスタンプそのまま、g:グループ属性そのまま、o:所有者そのまま、D:デバイスファイルをそのまま)
-v : 同期中ファイル表示
-z : 圧縮をします
-e ssh: sshを指定
--delete : 元ファイルが消されていたら、先のファイルを消す
--exclude xxxx : xxxxの条件のものは対象外
最後の行の --exclude ifcfg* ですが、マシン特有のネットワーク情報 /etc/sysconfig/network-scripts/ifcfg-eth0 などなどが上書きされないようにしておます。上書きすると同じIPになって、メインとの競合によりアクセス不能になります。
で、もう一つ列挙して --exclude sshd_config と書いてあります。列挙していいのかどうか書いてありませんのでわからないのですが、ためしに列挙したらちゃんと両方読んでくれていますので使っています。この意味は/etc/sshd/sshd_confでrootログインがメインサーバーの情報で書き換えされてnoになってしまい、起動しなおすごとにログインできなくなるのを防ぐためです。

これはcronで自動実行することはしていません。それは、あくまで影武者であるPCはバックアップ以外には使うことが無いので常時稼動している必要が無いからです。
で、一行ごとにパスワードを聞いてきますが、今はその都度入れています。
事項目でこの対策をとりますが、いまはちょっとわずらわしいです。

本当は、日常的にバックアップを取るのは次の/homeだけで大丈夫です。
メールスプールとWEBのあるのは/homeなので。
rsync -avz -e ssh --delete /home/ 10.0.0.101:/home

せっかくなのでこのへんでサーバーの画像を公開しておきます。

上が 影武者 
下が MYサーバーです

いずれもモニタ、マウス、キーボードはついてません。

右となりにUPSが少し見えます。


これがそのサーバーのラックの全貌です。
これは部屋の隅にあって荷物が混み合っているので滅多に近づません。

Linuxサーバーの下にあるのはNTのファイルサーバーです。写真では側面しか見えません常時稼動しています。内部 LANから独自ドメインを引く時に10.0.0.に変換する内部用DNSサーバーも兼ねています。

その下に、iiyamaのPIIIのクライアントがあります。普段は使っていません。
ちなみにキーボードの先にあるのはMOドライブです。

足元にMacintoshが2台、置いてあります。
(左側に黒い背景が見えますが、これは立てかけてあるYAMAHA DXという初代FM音源のキーボード裏面の黒です)


このラックは2Fにあり、モデムやルーターは1Fにあります。

   
その後また予備の予備を用意したのでこんな感じになってます。

もどる


バックアップ:rsyncのパスワードを無くす

上のミラー項目でrsyncによるファイル転送を説明しましたが、そのコマンドが出てくるごとに相手先のログインパスワードを聞いてきます。これは非常にわずらわしい事です。
だからこれを解決します。
この件でいろいろなサイトの方の設定事例を参考にさせて頂こうと思ったのですが、みさなんいろいろな運用条件のもと、それぞれに合わせたアプローチで対策をたてていらっしゃいまして、正直なところどういう方法がベストというか王道なのか、ちょっとわかりませんでした。結果として自分の条件でうまく動作した手順を記載いたします。

***あくまで受けとり側がインターネットに公開されていない状態での接続許可ですので、公開サーバーではrootでのログイン許可は絶対にしないで下さい。***

最初にログインする方のサーバーで
ssh-keygen
を実行します。初めての場合は yes/no を聞いてくるので yesを返します。次からは以下の通り。
※但し、目的はrootでの設定です。が、すでにルートの設定は済ませてしまったのでログを取る為に再度実施したくありません。そこで例としてuser1というユーザーで実施する状況を書きます。
[user1@ns user1]$ssh-keygen
Generating RSA keys: Key generation complete.
Enter file in which to save the key (/home/user1/.ssh/identity): <----場所を指定するのでそのままenter
/home/user1/.ssh/identity already exists.
Enter passphrase (empty for no passphrase):<----パスフレーズはそのままenter。これにより入力操作を省く
Enter same passphrase again:<----そのままenter
Your identification has been saved in /home/user1/.ssh/identity.
Your public key has been saved in /home/user1/.ssh/identity.pub.
The key fingerprint is:
51:6e:bc:dc:1e:ac:53:63:a1:0d:f2:95:2c:b6:dd:17 user1@ns.ayamizu.com
[user1@ns user1]$

これで公開鍵・秘密鍵のセットが作成されます。
秘密鍵 : $HOME/.ssh/identity
公開鍵 : $HOME/.ssh/identity.pub
この公開鍵の方をログインされるホストの $HOME/.ssh/authorized_keys に、なければ新規に作り、付け加えておきます。
その手順としてscpが良いみたいですね。
$ scp ~/.ssh/identity.pub 10.0.0.101:.
相手 10.0.0.101 に移ってから
$ cat identity.pub >> ~/.ssh/authorized_keys
でセットが動作できるようになります。

これでパスワードを入れずにrsyncは使えるようになりました。TL7SとTLS6.5で使えました。

※2002.7.3 追記
TL7Sどうしで上記をやろうとするとなぜだかパスフレーズが省略できない。
そして、TCS6.5においても一通りのアップデートをかけたらパスフレーズが省略出来なくなった。
それらの理由と対策はこうだ。
sshのprotocol virsionにおいてTLS6.5以降では2を標準にしているらしい。(でも6.5の時は1だった気がする)。
/etc/ssh/sshd_conf に Protocol 2,1という風に優先順序が記載されているので確認できる。
で、上記に長く記載した手順はすべてprotocol virsion 1を対象にしてある。
virsion 2を使う場合には次のところを読み替えれば対応できる。

virsion1
virsion2の場合
ssh-keygen ssh-keygen -t dsa
identity
identity.pub
id_dsa
id_dsa.pub
authorized_keys authorized_keys2





もどる


ルーター:ルーターのログを取り込む & フィルターの設定(YAMAHA RTA54i)

これまでに常用してきたルーターは LANEED LDBBR4 という比較的安いものでありました。
べつに不満は無かったのですが、ログを取る機能がないのでちょっと不便なときもありましたが、それも一時だけ。
まあいいか、と思って半年使っておりますが、不具合があります。

まず、MYサーバーでxinetdを稼動させるとハングアップする という事です。
だから xinetd を使わず inetdをそのまま稼動させています。

それはそれでなんとか、って感じですが、昨日、またその前の日に数回ハングアップしました。
これが全然原因不明です。特にトラフィックがどうにかなっているという感じでもないのですが、私が不在時にハングアップしていたのでどうにもなりません。
低速タイプなので過負荷かもしれません。
あとフィルタなど設定がかなり安易なので、そろそろ欲が出てきました。というかLDBBR4は自宅サーバーの人にはお薦めできません。低機能なので。

で・・・・考えました。

やっぱりログをとって止まる瞬間を押さえよう。

そのためにはログの取れるルーターを用意し、サーバーで取り込む必要がある。

という事で、YAMAHA RTA54iをログを取る間だけ借用しました。------ 調子が良いので正式に導入しました。

【ルーターの設定をします】
ルーターの方では、
 Syslog機能というブラウザの画面から、INFOとNOTICEを選択
 Syslogホストアドレスとして 10.0.0.100 を指定
 たったこれだけです。
【サーバーの受取体制を整備します】
 /etc/syslog.conf
 ここに、
 user.debug;user.notice;user.info /var/log/router-log
 
この様な記述を追加します。
 user.debug
 user.notice
 user.info
 という3つのログレベルを列挙して重複しない用に一行で書いた記述です。
 後ろはログファイルです。
 # touch /var/log/router-log
 
として空のファイルを作成しておきます。
 /etc/rc.d/init.d/syslog を開き
  daemon syslogd -m 0
 という行を探し
  daemon syslogd -r -m 0
 と、-rパラメータを追加してリモートからのログ入力をうけられるようにします。
 これで、/etc/rc.d/init.d/syslog restart
 によりロギングを開始します。

 でも・・ログがroot宛のメールで送られてきてちょっとわずらわしいなぁ

 あと、ルータの出力は、RAT54i、RTA52i、が全く同じで、更にNTT-ME SOHO SL11も同じフォーマットだったので、少なくともこれらはこの設定が流用できます。

【ルータのフィルタ設定】
 フィルタやNATの設定状態を提示しておきます。
 画像目一杯なので見えるかどうかわかりませんが・・・・

これがWAN側の設定です。
動的フィルタの設定画面が下に続いていて切れてしまい見えませんが特に設定していません。

これを選択して開いた時にブラウザの自動縮小が働いて見えない場合でも画面右下の拡大ボタンで見られます

こちらがLAN側、WANとかぶってますが気にせずセットしました。
3389ポートと200番台のポート範囲は鷹の巣さんのルーター設定に書かれていたのでLAN側に追加してみました。


上記設定後、日々微妙にいじっています。最新版の設定をここに書いて置きます

 

さあ、これでルーターがある間に不正ログを集めるぞ!

yamahaオフィシャルサイトの紹介
トップがここ
資料一覧はここ
階層が深いのでただでさえ見つかりにくいし、機種が増えるに従ってどんどん深くなって行きます。でもがんばれば、絶対有用な技術資料詳細が見つかります。

もどる


SQL:データベースの仕込み - MySQL -

Linuxでデータベースを構築する気はなかったのですが、かつさんの記事のどこかで、「あるとやっぱり便利」 と書いてあったのが心に残ってしまいました。あると便利なのは、承知してます。
そろそろ落ち着いてきたのでSQLを稼動させてみましょうか。
フリーDBの選択肢、 MySQL と PastgreSQL 
MySQLは軽快で早い、ただ商用で使うなら商用ライセンスが必要とのこと。商用で使うことはないのですが、ライセンスは3万円弱だそうです。商用にしても安いや。特に商用で使うことはないなぁ。
PostgreSQLは完全フリー。
両者とも誉められている記事は多く、特に優劣はないみたいなので、「選んだ方」が「良い方」かな。
そこで、MySQLを入れてみることにしました。
基本的なインストール手順はhttp://www.atmarkit.co.jp/flinux/rensai/mysql01/mysql01b.htmlを参考にさせて頂きました。
内容が重複してしまうかもしれませんが、実施した手順を記載します。
あらかじめ専用のユーザーを作ります。
#groupadd  mysql
#adduser  -g  mysql  -d  /usr/local/var mysql
この手順です。
しかしTurbo6.5でははじめからmysqlがインストールしていたらしく、それに気づかず、これらのユーザーが作成できないところから変だと思いました。あとで一旦削除してやりなおしました。

次に、 http://www.mysql.com のdownloadページからMySQLのソースをダウンロードします。ソースがパッケージ製品群の下のほうにひっそりといます。
今回はバージョン3.23.49を取り出しました。
ソースなので
mysql-3.23.49.tar.gz
これ、11MB程度。こちらがADSLでも先方が遅いらしくダウンロードは30分くらいかかります。
これを、
#tar xvfz mysql-3.23.49.tar.gz
として展開し、作られたディレクトリにうつってから
./configure --with-charset=ujis  -with-extra-charsets=all  --with-mysqld-user=mysql
と実行します。オプションは元のページを参照して頂きたいと思います。
ちょっと時間はかかりますが、終わったら
#make
と実行します。makeはかなり時間がかかります。あまりの長さにこのインストール記録を書き始めてしまいました。まだ終わる気配がありませんのでもう少し書き進みます。
以前はPCのスピードを評価するのにC言語のコンパイルを使っている記事をよく見かけました。まさしくPCの能力を評価されている気がします。
長い
qmailのコンパイルなんてあっという間だったのが、これは長い・・・・・・・・
約30分で終わりました。次は
#make install
です。こちらはすぐに終わりました。
次はデータベース初期化とデータディレクトリのオーナーをmysqlにする操作だそうです。
#/usr/local/bin/scripts/msql_install_db --user=mysql
と書いてありますが、環境がすこし違って scriptディレクトリは無い状態です。
#/usr/local/bin/mysql_install_db --user=mysql
こうです。
#chown -R mysql /usr/local/var
#chgrp -R mysql /usr/local/var


さて、次に動作確認ですが

# /usr/local/bin/safe_mysqld --user=mysql &

で起動させて、

# /usr/local/bin/mysqlshow

というコマンドで現在登録されているデータベースを表示させます。
この時点で既に

# mysqlshow

これだけでOKです。

[root@ns /root]# mysqlshow
+-----------+
| Databases |
+-----------+
|  Desktop |
|  Maildir |
|  mysql  |
|  test   |
+-----------+
[root@ns /root]#

こう表示されればOKです。必要なのは mysql と test の2つです。これが自動に作られるDBで、Maildir と Desktop はqmailやXwindowが勝手に作るやつで、mysqlとは無縁のディレクトリなので消してしまいました。

どうにか動作する様になりました。仕込みが終わったので今日はここまでとします。
あと、影武者にも同じことを施して動作する様にしてからミラーを組みなおすこととします。

あ、あと自動起動の方法ですが、起動は前述の通り

/usr/local/bin/safe_mysqld --user=mysql & 
これで行きます。
自動に起動させるには

Turbo Linux Server 6.5の場合
  /etc/rc.d/init.d/mysql というファイルに上記のコマンドを書き出します。
 chmod +x /etc/rc.d/init.d/mysql
  として実行できるようにしておきます。そして自動に起動させる為のシンボリックを貼りました。
 ln -s  /etc/rc.d/init.d/mysql  /etc/rc.d/rc3.d/S83mysql

Turbo Linux 7 Serverの場合は
 
  /etc/init.d/mysql になります。



もどる


応用:サーバー稼動チェッカーの作成 Perlにて

あまり自由な時間が取れないけれど、時間があいた時にはmySQLかPerlの本を読んでいます。

並行しながらわずかずつ進めていますが、今回はPerlの練習がてらサーバーチェッカーを作ってみました。
葛飾独歩さんのツールで鷹の巣さんが運用されているのと同じ様なものです。
といってもあくまで練習程度なのでとてもソースを提示できる様なものではありませんので書きません。(参考にならなくてすいません)。日記だけということで・・・・・

−−−全体像はこんな感じ−−−
Perlスクリプトです。
80番のポートへリクエスト
resultが200を返えしたらサーバーOKとします
まず最初に大手のサーバーにリファレンスとしてチェックをかけます。(勝手にアクセスしてます)。
リファレンスがNGだった場合は、自分のルーターが死んでいる可能性があるのでそれ以降のチェックは無効と考えます。
次に目的のサーバーへチェックをして200が返らない場合はサーバーが動作していません。
動作していないサーバーは指定のメールアドレスにレポートを送信します。
メールの送信は練習を兼ねて25番のポートに直接コマンドを送っています。

この様なスクリプトをcronで10分ごとに起動させています。cronへの登録はこんな感じ

# crontab -e

*/10 * * * * /dorekore/nantoka.pl

(ここだけ書くな!って意見も聞こえそうです)

とりあえず、現在80番のみのチェックです。
他のポートに対してもチェックをするのは簡単ですが、サーバーではApacheなど80番が標準稼動だと思うのでこれだけで充分な気がしています。
一応、複数サーバーの登録が出来るようにしてありますので、ご希望の方はチェック致しますよ。

特徴(上記説明と重複しますが)
 1)自分のルーターやモデムが死んでいる時は、チェックをしない。(チェックすると全部のチェック対象がNGになるから)
 2)10分間隔で HEAD / HTTP/1.0 というリクエストを送る。
 3)NGになったらメール送信。繰返しは3回まで(20分間)。
 4)その後もNGが続いても、メールがうるさいので送らない。
 5)復帰したらメールを送る。

てな具合です。
登録希望はメールで受けてますので希望者はどうぞ。

もどる


MTA:qmailにAPOPを使う

ちょっと前にネットワークのパケットをみるツールを見たら、POPで送るパスワードがみえみえじゃ無いですか。
こりゃ話には聞いていたけどこのままじゃいけない。
避けてきたAPOPを検討しよう。

ちょっと説明モードで、通常、メールサーバー間の送受信やクライアントからの送信にはSMTPサーバが稼動します。
サーバーにたまったメールをダウンロードするためにはダウンロード用の手順が必要です。
ほとんどの場合 POP3というダウンロードのプロトコルを使いますね。
でもこれはパスワードがそのまま見える形で流れるので、チェックされていると簡単に持ってかれてしまいますね。
プロバイダの場合はそれでもメールの盗み見くらいで済みますが、我々の様なサーバ管理では、ユーザーとパスワードが取られると何が起こるかわかりません。

パスワードを暗号化するAPOP、これを入れてせめて盗聴からは逃れよう、そういうものです。
但し、暗号化されるのはパスワードのみ、それ以外のタイトルや本文は流れています。

なぜ、避けていたかというとPOP before SMTPとうまくリンクできるかどうか?不安だったから。
また、APOPでないクライアントからのアクセスも可能にしたいので共存はできるのか?
という事。
でも踏み切ることにしました。

今回qmailに組み込むAPOPのモジュールは、もう一ついい所があって、POP用のパスワードはユーザーアカウントのパスワードとは別のファイルを使い切り分けが出来ます。

インストール手順はこちらに書きました

今では無事POPとAPOPが110ポートでアクセス出来るようになっています。詳細をご覧ください。

もどる


真のアクセスカウンターをmysqlで作成

・・・すいません。これも日記だけになります。
検索エンジンで私のサイトが出てくるようになった。そのせいかと思う。
トップページのカウンターとログが全然比例しない。

もともと同じIPからのダブルカウントやリロードはぜんぜん気にしてなかったけど、トップのカウンターが5なのにログには50とは100とかどんどん増えてる。なんとかしたいなぁと。

mysqlはいつでも使えるスタンバイができているので、新規にデータベースを作成し、テーブルを作り、ログ格納の準備をすすめました。

真のカウンターの仕様はというと
 基本はApacheのログを読込む事とした。全部のページをカバーする為。
 次にダブルカウントの回避。tableは日付とIPをキーとした。投入時にsqlで検索し、ヒットしなければInsertする。
 .gif .jpg .png などの画像へのgetログは、カウントするのは無駄。バナーリンクの参照も多いでしょうから無視。
 ワームやロボットはデータとして残す。

以上のベースを元にカウンターを作製してみました。
表示する段階で、
 通常のアクセス
 サーチエンジン経由
 ロボット
 ワーム

 全部のGETリクエストの回数
をCGIで表示することとします。

サーチエンジン経由からは半分以上の率になっています。

もどる


referereの日本語を完全に表示させる

Apacheのログを見ていると検索エンジンからやってきているログが見えます。
例えばこんな感じ
http://google.yahoo.co.jp/bin/query?p=%a5%b5%a1%bc%a5%d0%b9%bd%c3%db+telnet&b=60&hc=0&hs=0

なんて書いてあるんだろう?
これをそのままブラウザに貼り付けるとその答えが見えます。
さてこれを日本語に変換してみたいと思います。

ここにある様な %xx という表記の繰返しは、URLエンコードという手順で変換されています。だからデコードします。

 require 'jcode.pl'; jcode.plを使って変換するので、フルパス指定するか、同じディレクトリに置きます

 $moji = "http://google.yahoo.co.jp/bin/query?p=%a5%b5%a1%bc%a5%d0%b9%bd%c3%db+telnet&b=60&hc=0&hs=0";

 $moji =~ s/\+/ /g; まず + を半角スペースに変換します

 $moji =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/eg; %付きの16進数の文字列2桁を、ぜんぶ数値にします。

 $moji = jcode::convert(*moji,'sjis','euc'); これで日本語に変換

jcode.plが変換をしてくれるので楽ですね。上記の例では 「サーバー構築 telent」 という文字です。


さて、ここまではよくあるパターンです。
この変換で、デコード出来ずに化けてしまうものが時々みられます。
よく見るとデコード出来ない文字は、UTF-8 というコードがつかわれているみたいですね。


http://www.google.co.jp/search?q=%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%A7%8B%E7%AF%89%E8%A8%98%E9%8C%B2&ie=UTF-
8
&oe=UTF-8&hl=ja&lr=

さて、これはなんでしょう?
jis , sjis , euc ,などとは異なる別のコードでUTF-8というものです。というわけで、もう一段変換が必要になりました。

このコンバーターを作ろうとしましたががなかなか思い通りにいってくれないので、jcode.plみたいな既存のモジュールを使って解決をすることにします。

jcode.pmというperl向けモジュールを使います。

http://openlab.ring.gr.jp/Jcode/index-j.html

ここからモジュールをダウンロードし、以下の操作

(download Jcode-0.80.tar.gz or Jcode-0.80.zip. )

$ gunzip Jcode-*.tar.gz | tar xf -

(又は tar zxf Jcode-0.10.tar.gz) ・・・私はこちらで実施

$ cd Jcode-*

$ perl Makefile.PL

$ make

$ make install

これで完成。


前のコードを次のように書き換えて

 use Jcode; ここを変更
 $moji = "http://www.google.co.jp/search?q=%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%A7%8B%E7%AF%89%E8%A8%98%E9%8C%B2&ie=UTF-8&oe=UTF-8&hl=ja&lr=";
 $moji =~ s/\+/ /g;
  $moji =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/eg;
 $moji=jcode($moji)->sjis; ここを変更。ここの部分でほとんどのコードを変換してくれます
   

jcode.plの変換機能も網羅しているのでこれは便利です。
ちなみに上記の例では「サーバの構築記録」です。

これで表示は完璧!  (と思いきや、まだ化けるデータが一つだけ出てきました。それは無視だな)。

このまだ化けるデータが何なのかわかりました。
jcode.pmがUTF-8を認識できていないパターンがあるみたいです。
URLエンコード中に+記号、すなわちスペースが入っていると何らかのタイミングがあるのでしょうか、化けます。
だからUTF-8を見つけたら意図的にコード指定をしてしまいます。

あともう一つ、URLエンコードでは%がついてくるのが普通ですが、本日x(小文字のエックス)が%の代りに使われているものがありました。
この際だからまとめて変換だ。
上記のコードを更に改造して次のようにします。

 use Jcode;
   
  $moji = "http://www.google.co.jp/search?q=%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%A7%8B%E7%AF%89%E8%A8%98%E9%8C%B2&ie=UTF-8&oe=UTF-8&hl=ja&lr=";
 $moji =~ s/\+/ /g;
 $moji =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/eg;
  $moji =~ s/x([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/eg;  xも%と同じ扱いにする為に列挙
 if($moji =~ /utf-8/i) { ここで utf-8の文字をチェックして
	$moji=jcode($moji,'utf8')->sjis; utf-8があるなら、utf-8からsjisへの変換を指定する
 }else{
	$moji=jcode($moji)->sjis; それ以外は自動変換に任せる
 }

これで今度こそ完璧!

更に補足:%の代わりにxが使われているものがあるのでその対策を書きましたが、excelなど偶然にも xのあと2桁が16進数になっているキーが該当してしまいました。だから削除しておきます。


もどる


qmailでも未承諾広告をはじきたい

流石になんとかしたくなりました。
qmailで何が出来るか????
仕分けには .qmail (dot-qmail) を使うのが順当です。
スクリプトは?
perlでやるのは重過ぎ、という意見もありますが、広告という文字をはじくにはもうそれしか方法がありません。
電子メール、一般的に本文はjisで書かれていますが、subjectは特殊なエンコードをしてあります。
Subject: =?ISO-2022-JP?B?GyRCJCI5LTlwJCIbKEI=?=
こんな感じ。この例では 「あ広告あ」というsubjectになってます。
subjectの文字を、前方を =?ISO-2022-JP?B? で、後方を =?= で囲んで、MIMEでエンコードしてあるんですね。
これをデコードするにのはその仕様に関する情報が揃いません。
そこでツールをお借りしました。
http://www.itboost.co.jp/perl/perl_08.php
こちらより mimer.pl を勝手にお借りして使ってみました。
スクリプトをそのまま載せます。

#!/usr/bin/perl
use Jcode; 広告という文字と比較する為に Jcodeも使います
require "/usr/myapp/mimer.pl"; このmimer.pl がmimeエンコードしてくれるファイルです
$flg=0;
$koukoku ='~ML~M~P'; この文字は「広告」という文字です
while(<STDIN>){ qmailはSTDINからメール本体を取り出せます
	if($_ =~ /Subject/i){
		last;
   }
};
$subject = $_;
$subject = mimedecode($subject); これが mimer.pl のコマンドでmimeデコードしてくれます
$subject = jcode($subject)->sjis;
if($subject =~ /$koukoku/) {$flg=1;}
if($flg){
	exit 0; 広告が含まれてるならcondredirectが使えるように0を返します
}else{
	exit 1;
} 
    

これを koukoku.pl という名前にしておいて
chmod +x /usr/myapp/koukoku.pl
としておきます。

で、subjectに「広告」という字が含まれていると0を返すスクリプトの出来上がり。
あとは .qmailに

   |condredirect  適当なアカウント@ayamizu.com  /usr/myapp/koukoku.pl
   ./Maildir/
   &携帯電話@docomo.ne.jp
 

とでも書いておくと、広告の入っているやつは 「適当なアカウント@ayamizu.com」 へ転送して終了、それ以外は、通常の保存と携帯への転送など、お好きな様にどうぞ。

その後は絶好調です。