タグ「ValueServer」が付けられているもの

バリューサーバー(ValueServer)で独自ドメインのメールを使っているのですが、最近1日に約100通以上のスパムメールが届くようになり、メールの削除作業が面倒になってきました。送られてくる迷惑メールはほぼすべてが海外からの英文メール。

リアルタイムなメールの受信や、いろいろなデバイスでメールができるようにWEBメーラーを使用しています。現在使用しているメーラー側では迷惑メールの設定の画面もなく、メーラー側で迷惑メールのフィルター設定ができません。

じゃぁ、どうすればいいの?

バリューサーバーの管理画面の「ドメインメールの設定・追加」「カスタムフィルター」というのがあり、メールクライアント側ではなく、メールサーバー側に振り分けルールを登録してやれば振り分けれるようです。

カスタムフィルターを登録してみる

例えば、迷惑メールが届くアドレスを仮にaaa@example.comとします。

フィルター1 ウィルスメールはゴミ箱へ

バリューサーバー(ValueServer)ではウィルスメールはメールの件名に「******VIRUS*****」が付いて届きます。

なので、件名に「******VIRUS*****」が含まれたものは直接削除でもいいのですが、振り分けの挙動を見るために今回はゴミ箱(.Trashフォルダ)に入れるようにします。

  • 1行目の条件: [Subject(題名)] が [\*\*\*\*\*VIRUS\*\*\*\*\*] [を含む]
  • 処理: [./.Trash] [に振り分ける]

エスケープ処理と使用できない文字

「*」はエスケープ処理しないといけないので「\」を付けて「\*」にします。その他の文字は以下の通り。

フィルター2 迷惑メールはスパムフォルダへ

バリューサーバー(ValueServer)ではSpamAssassinというもので迷惑メールを判定して、メールヘッダにスパムレベル(*印の数がレベル数になっている)を「X-Spam-Level: ******」といった感じで挿入しているようで、ここをフィルターにかけます。「X-Spam-Flag: YES」でもいいかもしれません。ちなみにフィルターによるメールの振り分けはprocmailというもので行っているようです。

メーラーでメールヘッダーを開いてみたところ

英文メールに限らず、日本語やその他の言語でもSpam Levelが「*****(5)以上」の場合、迷惑メールフォルダ(.Spamフォルダ)に振り分けます。どのレベルがいいかはよくわかりませんがとりあえず5で様子をみたいと思います。

  • 1行目の条件: [ヘッダ全体] が [X-Spam-Level: \*\*\*\*] [を含む]
  • 処理: [./.Spam] [に振り分ける]

※「*」はエスケープ処理しないといけないので「\」を付けて「\*」にします。

メールフォルダーについて

ちなみにバリューサーバー(ValueServer)のメールフォルダーは以下のように「.(どっと)」が付いたフォルダーになっています。

フィルター3 英文メールは全部スパムフォルダへ

  • 1行目の条件: [全体に日本語を含まない]
  • 2行目の条件: [全体] が [.*] [を含む] ←これ絶対必要
  • 処理: [./.Spam] [に振り分ける]

2行目の条件は不要に思えますが、これがないと保存してもこのフィルターの登録が消えます。

そして、この条件を登録するとなぜか英文メールがスパムフォルダに振り分けられると同時に、同じメールが受信トレイにも残り、メールが2重になります。多分2行目に [.*] があるからなんだと思います。

この場合、「ドメインメールの設定」画面でaaa@example.comの「受信方法」を「POP/WEB受信のみ」を「メールを破棄」にします。保存を押すと「破棄」と表示が変わります。

  ↓

破棄して大丈夫なの?

と、フィルターのルールに引っかからない正常なメールも全部受信された時点で破棄されてしまうんじゃないかと思いましたが、ちゃんとメールは届きました。「破棄」にすると英文メールはすべて迷惑メールフォルダへ行き、受信トレイには同じメールが残らなくなりました。

フィルター4 ルールの最後に必要なお約束フィルター

ルールの最後には必ずこのフィルターのルールが必要です。上記以外は全部普通に受信トレイに振り分けるという感じっぽいです。

  • 1行目の条件: [全体] が [.*] [を含む]
  • 処理: [./] [に振り分ける]

おわり

これで取り合えず今のところ迷惑メールの振り分けに成功しています。

ルール設定画面全体のスクリーンショットも残しておきます。

参考サイト

以下のサイトを参考しました。バリューサーバー(ValueServer)以外に同じGMOデジロックが提供しているXREACORESERVERも同じ方法になるかと思います。

 

バリューサーバーのcronでMovabletypeの再構築を自動化できない

昨日はバリューサーバーでMovabletypeの再構築を行うスクリプトの動作を確認できたので、)あとはcronにそのスクリプトを登録し、毎日自動的に再構築をしようとコントロールパネルの「CRONジョブの設定・編集」に登録しました。

ところが実行されていない!?あれ??なんで??

ヘテムルの時は実行が成功したのか、エラーが出ているのかメールが届いていたのですが、メールも届かず、cronが動いているのかどうなのか、さっぱりわかりません。サポートも期待できないので、自己解決するためにいろいろ調べました。

crondの動作状況を調べる

cronを使用するためにcrondというやつが動いていないといけないみたいで、Tera Termを使ってレンタルサーバーにSSHで接続し、以下のコマンドで調べます。

# /etc/rc.d/init.d/crond status

すると、

crond (pid  *****) is running...

と返ってきたので、どうやらcronは動いているみたいです。

もし、cronが動いていなかったら

/etc/rc.d/init.d/crond start
再起動の場合は
/etc/rc.d/init.d/crond restart

crontab -lでcronジョブの登録状況を調べる

SSHで以下のコマンドを打つ

crontab -l

すると「CRONジョブの設定・編集」に登録した内容が表示されました。

ちゃんと登録されているみたいです。

じゃあなんで動かない!?

昨日はSSHからcronで登録したファイルでちゃんとrebuild-pagesを実行することができたのになんで?まだ何かエラーがあるの?

とういうことで、cronで登録のファイルが実行されたときにどうなっているのかを知るために、今度はエラーメールが届くような方法がないか探したところcrontab -ecrontab -lで表示されたリストにMAILTO="user@example.com"と宛先を入れればいいようです。(※contab -rと打つとジョブが削除されますので隣同志のerを打ち間違えないように注意)

crontab -eでMAILTOを追加する

crontab -e

と打つとviエディタが起動し、crontab -lで表示された内容が出てくるので、一番上の行にメールの宛先を入力します。

ただし、Linuxに慣れている方はご存知だとおもいますが、viエディタの操作は普通に文字を入力するようにできませんので注意。

ちなみにTera Termでは以下できました。

  1. iを押し入力モードにする
  2. カーソルで移動して最初の行を改行し、そこにMAILTO="user@example.com"と入力
  3. ESCを押して入力モードから出る
  4. :wq と打つと保存して終了

そして、ちゃんと保存できているかはcrontab -lで確認できます。

cronを実行してみる

バリューサーバーのコントロールパネルの「CRONジョブの設定・編集」に2分後の時刻を設定してみましたが、設定の反映に1時間程度かかるようで、待っていられないので、SSHからcrontab -eで2~3分後の時間を設定してみました。

すると、メールキター!!でもエラー!!

BEGIN failed--compilation aborted at /virtual/user-dir/bin/lib/perl5/Web/Scraper.pm line 10.
Compilation failed in require at ./tools/rebuild-pages line 14.
BEGIN failed--compilation aborted at ./tools/rebuild-pages line 14.

/Web/Scraperの10行目を見る

use HTML::TreeBuilder::XPath;
とある。ですが、HTML::TreeBuilder::XPathはインストールしてやったはず...。もしかして、HTML::TreeBuilder::XPathがどこにあるかわからないよいう意味でパスを入れてやればいいのかな?ということで、パスを挿入。
use lib ("/virtual/user-dir/perl5/lib/perl5");
use HTML::TreeBuilder::XPath;

rebuild-pagesの14行目を見る

/mt/tools/の中にあるrebuild-pagesを開くと

use Web::Scraper;

とある。前回、これもパスを追加して対策したはず...。Web::ScraperHTML::TreeBuilder::XPathがないと動かない。ここにもHTML::TreeBuilder::XPathのパスがいるのかな?何故かWeb::ScraperHTML::TreeBuilder::XPathの保存されている場所がそれぞれ違う(多分インストールをミスった)。

ということで、rebuild-pagesHTML::TreeBuilder::XPathのパスを追加。

#追加前
use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib", "/virtual/user-dir/bin/lib/perl5");

#追加後
use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib", "/virtual/user-dir/bin/lib/perl5", "/virtual/user-dir/perl5/lib/perl5");

そしてもう一度cron実行

キター!!メールにsuccessの文字

rebuilding (星屋工作室ブログ ...
Individual built success.

無事、毎日cronでMovabletypeの再構築が自動化されました。

ただ、バリューサーバーは3分以上かかるスクリプトはダメみたいなので、全部の再構築をするのに時間が足りないため、インデックスやアーカイブページの再構築を個別に行うよう、cronジョブを複数に分けました。また、複数のジョブの間隔は1時間空けないといけないみたいなので、1時間5分間間隔で連続してcronを実行するようしました。

 

速くて安いサーバーないかな~なんてネットで検索してたらレンタルサーバーの比較をしているページ(http://rs-hikaku.com/)を見つけました。

速くて安いのなら乗り換えようかとバリューサーバー(ValueServer)の10日間のお試しで使ってみた。けどヘテムル(heteml)で動いていたものが動かない...。

cronに登録してMovabletypeの再構築をrebuild-pagesで自動的に毎日行っているのですが、以前の記事で書いた内容でヘテムル(heteml)では動いていたのにバリューサーバー(ValueServer)では動かない。

でも動かないままあきらめるのも嫌なので動くまでやってやろうと以下の事を追加で行い動かすことができました。

SSHでrebuild-pagesを実行したらエラー

まず動かない原因を探るためTera Termをインストールして、バリューサーバー(ValueServer)のサーバーにSSHでログインし、rebuild-pagesを実行してみます。

/usr/bin/perl /virtual/user-dir/public_html/mt/tools/rebuild-pages

rebuild-pagesを実行してみたところ

BEGIN failed--compilation aborted at /virtual/user-dir/public_html/mt/tools/rebuild-pages line 14.

というエラー。どうやらcronの設定が悪いのではなく、スクリプトでエラーが出ているようです。

/mt/tools/にあるrebuiled-pagesを開いて14行目を見ると「use Web::Scraper;」とありました。PerlモジュールのWeb::Scraperで引っ掛かっているようで、どのフォルダーを探してもWeb::Scraperが見当たらないのでエラーとなっているようです。

Web::Scraperを入れる

PerlモジュールのWeb::Scraperをどうやって入手すればいいのかわからなかったのですが、以下のサイトを参考にSSHでbinというディレクトリを作ってWeb::ScraperをインストールするためのcpanmWeb::Scraperに必要なHTML::TreeBuilder::XPathをそれぞれインストールしました。

cpanmを/virtual/user-dir/binにインストール

% cd /virtual/user-dir
% mkdir bin
% cd bin
% curl -LO http://xrl.us/cpanm
% chmod +x cpanm

Web::ScraperとHTML::TreeBuilder::XPathを/virtual/user-dir/binにインストール

% cd /virtual/user-dir
% cpanm -l bin Web::Scraper
% cpanm -l bin HTML::TreeBuilder::XPath

これで、/virtual/user-dir/bin/lib/perl5/Web/Scraperができあがりました。

rebuiled-pagesにパスを追加

rebuiled-pagesの8行目あたりにPerlモジュールの参照先を指定する部分があります。ここにはWeb::Scraperのある場(/virtual/user-dir/bin/lib/perl5)が指定されていませんので追加します。

#編集前
use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib");
#編集後 use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/../extlib", "/virtual/user-dir/bin/lib/perl5");
LWP::UserAgent::Localのあるディレクトリ(/mt/lib/)または/mt/extlib/にWeb::Scraperをインストールしておけば、これは不要だったかもしれませんがあまりSSHになれていないので、変なことにならないようここは参考通りにしておきます。

最後にlocal.pmのパスを修正

/virtual/user-dir/public_html/mt/lib/LWP/UserAgent/Local.pmの".$script_name""/virtual/user-dir/public_html/mt/$script_name"に修正します。

#88行目あたり
#修正前
my $pid = open2( \*RESPONSE, \*REQUEST, "./$script_name" ) #修正後 my $pid = open2( \*RESPONSE, \*REQUEST, "/virtual/user-dir/public_html/mt/$script_name" )
#94行目あたり
#修正前
open RESPONSE, "./$script_name|" or die "Couldn't spawn $script_name";

#修正後
open RESPONSE, "/virtual/user-dir/public_html/mt/$script_name|" or die "Couldn't spawn $script_name";

できた!

それぞれ修正したファイルをアップロードして、パーミッションも700にして、再度SSHで

/usr/bin/perl /virtual/user-dir/public_html/mt/tools/rebuild-pages

と打ってrebuiled-pagesを実行したらキター!!

ってことで一件落着。

【追記】これでcronもうまくいくはずだったのですが、うまくいかず以下のページで解決。