Dreamweaverを活用してwordpressサイトをメンテナンスする(2)

前記事に引き続いて。今度はWordpressのインストールと、DreamWeaverとの連携を行う。

WordPressをインストールする

20150311_26_fx

WordPress 日本語ローカルサイトからWordpressをダウンロードする。
この記事を書いた時点での最新版は4.1.1だった。なお、Wordpressは自動バージョンアップ機能もあるので、多少バージョンの低いものを扱っても大丈夫。

20150311_27_explorer

ダウンロードしたら、zipファイルを解凍して、できた【wordpress】フォルダを【C:\xampp\htdocs\】フォルダに移動する。

20150311_28_fx

移動が終わったらhttp://localhost/wordpress/を開く(開く前に、XAMPPのコントロールパネルでApacheとMySQLがちゃんと起動していることを確認)。問題がなければ、Wordpressの最初の設定画面が立ち上がるはずだ。【さあ、始めましょう!】を押して設定を進めていく。

20150311_29_fx

データベース名はさっき設定した通り『localhost_wordpress』、ユーザ名『root』、パスワード『local_root_pass』、データベース『localhost』、テーブル接頭辞『wp_』と設定すればよい。

20150311_30_fx

成功すればこのようなメッセージになる。もしエラーが出たら、■XAMPPでApache・MySQLはちゃんと起動しているか? ■MySQLのrootパスワードは正しく設定してあるか? ■phpMyAdminでデータベースをちゃんと作成してあるか? 辺りに立ち戻って確認しよう。

20150311_31_fx
Wordpressの初設定画面。ここで入力するユーザ名とパスワードはMySQLのユーザ名/パスワードとは違うので注意。仮に、ここではユーザ名『mai』、パスワード『local_wordpress_pass』として以降の作業を進める。入力が終わったら【WordPressをインストール】をクリック。

20150311_32_fx
これでインストール作業は終わり。

20150311_33_fx

20150311_34_fx

実際にログインしてみると、管理画面へログインすることもできるし、

20150311_35_fx
http://localhost/wordpress/にアクセスすることで実際にテストブログを見ることもできます。

MySQLにWordpress用ユーザを追加する

さて、ここまでWordpressのデータベース接続先にrootを用いてきましたが、Wordpress接続先にrootと言うのはセキュリティに好ましくありません。そこで、MySQLで新しくこのWordpress専用ユーザを設定しましょう。

20150311_36_fx

まず、XAMPPからMySQLのAdminをクリックし、phpMyAdminの画面を呼び出します。そこで、上のメニューの中から【SQL】をクリックします。

20150311_37_fx

SQL文を打ち込んで、ユーザを追加します。このユーザは、先ほど作ったWordpressのデータベース、local_wordpressを管理する専用とします。

<code>
CREATE USER 'local_wordpress'@'localhost' IDENTIFIED BY 'local_user_pass';
GRANT USAGE ON *.* TO 'local_wordpress'@'localhost';
GRANT ALL PRIVILEGES ON `localhost_wordpress`.* TO 'local_wordpress'@'localhost';
</code>

:SQL文の意味:
一行目 CREATE USERでlocalhost鯖に『local_wordpress』と言うユーザを作る。パスワードは『local_user_pass』としておく。
二行目 グローバルレベルでCREATE権限を設定しておく。グローバルレベルで権限がない状態に。一応のおまじない構文。
三行目 データベース『localhost_wordpress』ではすべての権限を与える。

20150311_38_fx

ユーザの作成に成功すると返り値は空(正常)になる。ここでphpMyAdminの上のメニューから【ユーザ】をクリックすると、

20150311_39_fx

local_wordpressと言うユーザが追加されているのが確認できる。

次に、Wordpressの設定ファイルを編集する。【C:\xampp\htdocs\wordpress\】にあるwp-config.phpを開くと、以下のような項目があるのでそれぞれ書き換えます。

<code>
/ ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'localhost_wordpress'); ←書き換えない
/** MySQL データベースのユーザー名 */
define('DB_USER', 'root'); ←local_wordpressへ書き換える
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'local_root_pass'); ←local_user_passへ書き換える
/** MySQL のホスト名 */
define('DB_HOST', 'localhost'); ←書き換えない
/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8'); ←書き換えない
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', ''); ←書き換えない
</code>

ここまでの作業が終わったら、もう一度Wordpressのダッシュボードhttp://localhost/wordpress/wp-admin/を開いてみましょう。
作業が正しく済んでいれば、先ほどと同じようにダッシュボードが、失敗していればおそらく【データベース接続エラー】と表示されますので、成功するまで設定を念入りに確認しましょう。
ここまでの作業が済んだら、rootのパスワードは変更して分かりにくいものにした方がいいです。

DreamWeaverでWordpressのサイトを閲覧する

ここまでの作業で、ローカルにWordpress鯖が立ったので、DreamWeaverを用いてビジュアルをチェックできます。
DreamWeaverを立ち上げて、【サイト】→【新規サイト】と進みます。

20150311_40_dw

サイト名は何でもいいですが、ローカルのサーバ上のサイトを見ていることがわかりやすい名前がいいでしょう。
ローカルサイトフォルダーは、Wordpressをインストールした【C:\xampp\htdocs\wordpress\】を指定します。

20150311_41_dw

【+】のボタンを押してサーバーを追加する。

20150311_42_dw

サーバー名:は何でもいいです。
使用する接続:にローカル/ネットワーク を指定しましょう。
サーバーフォルダー:はwordpressをインストールしたフォルダ、
Web URL:はhttp://localhost/wordpress/ を指定します。

20150311_43_dw

追加が終わるとサーバー設定画面に戻りますが、この時リモートのチェックボックスを外してテストのチェックボックスにチェックを入れましょう。

20150311_44_dw

バージョンコントロールは特に行わないので「なし」のまま。詳細設定も特に変更なしです。

20150311_45_dw

ここまでの設定を保存すると、ローカルとテストサーバーの設定が終わります。

20150311_46_dw

今度はライブビューで作成したブログサイトのプレビューを見ることができるようになりました!(ここまで長い…)。

20150311_47_explore

さらに、自分のテーマを適用させてみましょう。【C:\xampp\htdocs\wordpress\wp-content\themes】に適用させたいテーマフォルダを置きます(僕の場合は『chatarou5style』と言う名前になっています)。

20150311_48_fx

WordPressの管理画面を出しているブラウザにいったん戻り、テーマの設定から今追加したテーマを有効化します。

20150311_49_dw

再びDreamWeaverに戻り更新すると、テーマが適用されたWebサイトが出来上がりました! ここまででやっとテーマファイルをDreamWeaverでビジュアライクに編集することが可能になります。(さらに次の記事へ続く)

Dreamweaverを活用してwordpressサイトをメンテナンスする(1)

このサイト、一昨年終わりごろにWordpressで再構築して、自前のテーマファイルを設定したんだけど、自作のテーマファイルと言うのが手抜きと言うか、通常サイドバーに置かれてる要素がページ末にダラダラと並んでいる状態のまま放置してきてしまった(普段あまり見かけないシングルカラムレイアウトにしようというのは構築当初から考えていたのだけど)。

そこで、今回DreamWeaverを使ってサイトメンテをすることにした。が、Wordpressサイトのメンテは思ったより手順が面倒なので、調べた結果をまとめて備忘メモすることとした。なお、この記事を書いている僕はDreamWeaverは今まで使ったことのなかった初心者レベル。だから初心者でも行けるよ、ってことで。


この本を買って一応読破してみたけど、Dreamweaverの本と言うよりはHTMLの基礎みたいな感じで一時間もかからない本だった…。

DreamWeaverでWordpressを管理する際の問題点

20150311_01_dw

まず、DreamWeaverを立ち上げて、リモートサイトとファイルを共有するとこんな感じになる。
ここまでの手順はネットで探せばいくらでもあるというかDreamWeaverの基本的使い方だから省略。

20150311_02_dw

ここで、ローカルビューで自分が適用しているテーマファイルを開く(例えばindex.php)と、画面の真ん中上のビューのところに
(このビューの中には本来ライブビュー、つまり実際にブラウザ上で見えるhtmlイメージが表示されるはずなのである)
【このページにはサーバーのみによって検索される動的関連ファイルがある可能性があります。検索|環境設定】
と言う文字がポップアップする(画像の赤枠の中)。ここで【環境設定】を押しても設定に行くだけなので、【検索】を押すのだが

20150311_03_dw
こんな風に
【サーバの内部エラーのため、動的関連ファイルは解決されませんでした。再試行】
と言う表示になって、相変わらず実際のwebイメージを見ることができない。
これは、ローカルにファイルを置いているだけでは、DreamWeaverがWordpressのphpを理解できていないからだ。
そこで、DreamWeaverがphpを理解するために、ローカル(自分のパソコン)にウェブ鯖(テストサーバーと言う名称)を立てて、Wordpress環境を構築してやる必要が出てくる。

XAMPPをインストールする

さて、ローカル環境にWordpressの実行環境を作る方法だけど、一つ一つソフトをインストールしたり設定したりするのはかなりめんどくさい。
そこで、ローカルに一気にインストールできるツールが出回っている。XAMPP(ザンプ)と言うツールだ。いわゆる、LAMP(Linux、Apache、MySQL、PHP or Perl、これはLinux版)のWindows版のツールと言う意味らしい(なので頭の文字がLinuxではなくx-Windowって意味になってる?)これをインストールするとWordpress以外は一気にインストールできるのでお勧めだ。
XAMPP Installers and Downloads for Apache Friendsに行き、XAMPPをダウンロードしよう。

20150311_04_fx

なるべくなら、レンタルサーバのPHPバージョンとリモート環境のPHP環境を揃えたほうがいい。が僕の場合、さくらのレンタルサーバの方に入っているPHPは5.4.35とあまり新しくなく、今ダウンロードできるXAMPPが5.5.19か5.6.3だったので、遠慮なく最新の方をダウンロードした。

20150311_05_fx

ダウンロード画面はこんな感じ。

20150311_06_xampp

ダウンロードしたファイルを実行すると、UACの質問の後にこんなクエスチョンが出る。アンチウイルスを作動している場合は注意してくれってことだが、僕の環境(avast!)ではアンチウイルスを停止させなくても特に問題はなかった。Yesを押して続行する。

20150311_07_xampp

今度のメッセージは一応注意。
【Important! Because an activated User Account Control (UAC) on your system some functions of XAMPP are possibly restricted. With UAC please avoid to install to C:\Program Files (x86) (missing write permissions). Or deactivate UAC with msconfig after this setup.】
UACの問題が出るので、【C:\Program Files (x86)】みたいな一般的なインストール先へのインストールはやめましょうってこと。この後出てくるけど、このツールのデフォルトのインストール先は【C:\xampp】になるので、そっちに入れておけば問題はない。OKを押して続行する。

20150311_08_xampp

20150311_09_xampp

インストールするツールを尋ねてくる。今回の作業では、■Apache(標準で必ず入る)、■MySQL、■PHP(標準で必ず入る)、■phpMyAdminは必須かと思う。残りは入れる必要はないんだけど、別に邪魔でもなければ入れといてもいいとは思う。

20150311_10_xampp

先ほど書いた通り、デフォルトのインストール先が【C:\xampp】になっているのでこのまま続行。

20150311_11_xampp

Bitnami for XAMPPと言うのは、XAMPPの環境に簡単にインストールできるWordpressアプリなのだが、僕が試用した限りではbitnami_wordpressと言う名前の不要なWordpressサイトを作るだけなので(テーマの編集などならそれで済ませても構わないのだが)、今回はチェックを外してWordpressは別途落とすこととした。

20150311_12_xampp

20150311_13_xampp

20150311_14_xampp

説明に従っていけばインストールは完了する。最後の画面で、『Control Panel』をすぐに出したくない場合はチェックを外してもいい。ここではそのまま引き続いて作業してしまうので、チェックしたまま進める。

XAMPPでローカルサーバを実行する

20150311_15_xampp

コントロールパネルを起動するとこんな感じ。僕は全部のツールをインストールしてしまったのでTomcatとかも入っているけど、不要ツールのチェックを外した人はその辺はいないかもしれない。早速、ApacheとMySQLの【Start】ボタンを押して両方を起動させよう。

20150311_16_xampp

こんな感じになれば正常な起動。うまくいかなかったりするとステータス画面に赤色の文字列が並ぶのだが、その辺の詳細は省略。

20150311_17_fx

コントロールパネルの【Apache】の【Admin】を押すと、こんな風にXAMPPのページが立ち上がる。見ての通り、localhost内に立ち上がっていて、Web鯖が起動していることも確認できる。右端の『日本語』を押す。

20150311_18_fx

こんな風に日本語トップページが出ると、ちょっと感動するかもしれない。ここで、左のメニューに並んでいるのの上から3番目、『セキュリティ』をクリックする。

20150311_19_fx

するとこんな風に現在のセキュリティについてずらずらっと一覧が出る(なおこのページ、僕の環境では必ず文字化けが発生する。日本語文字エンコードをShift-JISに設定すればなおる)。ここからMySQLのパスワードが設定できるので、画面中段ぐらいのオレンジ文字の【http://localhost/security/xamppsecurity.php】に飛んで設定しよう。

20150311_20_fx

ここで設定するパスワードはローカルサーバのMySQLのrootアカウントのパスワードなので、勘違いしないように。文字列は何でもいいけど、ここでは便宜上『local_root_pass』と入れたものとして以下書いていきます。パスワードを入力したら、【パスワードを変更しました。】ボタンを押す。

20150311_21_fx

変更が終わるとメッセージが出るので、xamppのコントロールパネルに戻る。

20150311_22_xampp

MySQLを一度【Stop】を押して終了させ、もう一度【Start】を押して再起動完了をさせよう。次に、コントロールパネルの【MySQL】の【Admin】を押すと、phpMyAdminのページが立ち上がる。

20150311_23_fx

ここでユーザ名:root、パスワード:local_root_pass(さっき設定したもの)でphpMyAdminにログインする。

20150311_24_fx

ここで、Wordpressで最初に接続するテスト用のデータベースを作成しておこう。phpMyAdminの上に並んでるメニューから、【データベース】をクリック。

20150311_25_fx

データベースを作成する。データベース名は何でもいいけど、ここでは『localhost_wordpress』と言う名前で作ることにする。右隣の照合順序は、『utf8_general_ci』としておいた方がいいらしい。

これで、Wordpressをインストールする前準備は完了した。(次の記事へ続く)

【spam対策】:さくらのレンタルサーバのfmlでスパム対策をする

うちの鯖ではメーリングリストを2件運用している。さくらのレンタルサーバがfmlをインストールしてくれてあるので、設置はとても簡単なのだが、今月に入ってそのうちの一つのMLでやたらスパムメールが飛び交うようになってしまった。
多分原因はメーリングリスト参加メンバの一人がウイルススパムに引っかかって、自分のアドレス帳に載っているメールアドレスを垂れ流してしまったこと。そのなかにメーリングリスト用のアドレスも入っていて、どこかで拾われたっぽい(ので僕のところには自分のアドレスとMLのアドレスと両方からスパムが増えてしまった)。
まあ、参加メンバがウイルスに引っかかったり、スパムをやらかしたりと言うのは責におえる話では無いし、そういう状況に対応してこそ自前で運用していることの最大のメリットであるべきだと考えているので、いろいろ設定を加えてみた。この記事はその備忘記事。

なお、この記事の内容はfml の SPAM 対策を大いに参考にしてもらった。と言うか、ほとんど抜粋でしかない。参考記事は決して新しい記事ではないようだが、参考元にもあるようにfml自体が相当に古いソフトでもあるので、参考記事の内容で充分であった。

スパムメールフィルタを通す設定にする

まずは必須の設定。さくらのレンタルサーバはspamassassinと言うベイジアンフィルタを標準搭載しているので、これはぜひ活用したい。
スパムアサッシンの設定はサーバ提供の初期設定でも構わないが、可能なら日本語環境向けにカスタマイズぐらいはしておきたい。
うちのサーバでのspamassassinカスタマイズ状況は、臨時対策:最近急に増えたスパムメール対策および2011年04月版SpamAssassinのベターな設定@さくらインターネットのレンタルサーバにまとめてあるので、そっちを参考にされたし。
で、SpamAssassinに対応する設定は以下の通り。

まず、/home/(user名)/fml/spool/ml/(ml名)/を開き、そこのconfig.phファイルとcfファイルに以下のコードを書き加える。
(config.ph:445行目ぐらいに設定があるのでコメントアウト外して追記しても、その辺りにコード追記でも構わない。もちろんどこに書いてもいいけど)

<code>
$USE_DISTRIBUTE_FILTER = 1;
&DEFINE_FIELD_PAT_TO_REJECT('X-Spam-Flag', 'Yes');
</code>

(cf:90行目辺りの# YOU CAN EDIT MANUALLY AFTER HERE. の後に書いておくのが無難だと思う)

<code>
USE_DISTRIBUTE_FILTER	1
&DEFINE_FIELD_PAT_TO_REJECT('X-Spam-Flag', 'Yes');
</code>

両方同じ設定を書いてあるように見えるけど、まあおまじないと言うことで両方書いておいた方がいい。また、同じように見えて;一個分表記が違うのでその辺は一応注意。たしかさくらのレンタルサーバ初期設定でも、うちのスパムフィルタ設定参考にしても、さくらのレンタルサーバ非公式FAQを参考にしても、X-Spam-FlagをYesにして判定しているのは同じはずなので、そこは気にしなくてもいいだろう。これで、fmlのフィルタ機能が有効になる。

次に、同じく/home/(user名)/fml/spool/ml/(ml名)/の、includeおよびinclude-ctlに以下のように書き足す。
(includeの場合)

<code>
"|/usr/local/bin/spamassassin |/home/user-name/fml/fml.pl /home/user-name/fml/spool/ml/fml-name "

# Multipart Canceler Filter by Yuao TANIGAWA 
#"|/home/user-name/fml/bin/multipart.pl |/home/user-name/fml/fml.pl /home/user-name/fml/spool/ml/fml-name "
</code>

(include-ctlの場合)

<code>
# ***ATTENTION***  --ctladdr options is stronger than "--distribute", 
# Hence even if config.ph has the setting &DEFINE_MODE(distribute),
# this "fml.pl ... --ctladdr" does commnads-service;
"|/usr/local/bin/spamassassin |/home/user-name/fml/fml.pl /home/user-name/fml/spool/ml/fml-name  --ctladdr"

# Multipart Canceler Filter by Yuao TANIGAWA 
#"|/home/user-name/fml/bin/multipart.pl |/home/user-name/fml/fml.pl /home/user-name/fml/spool/ml/fml-name  --ctladdr"
</code>

つまり、|/usr/local/bin/spamassassinを書き足す(上記コードではuser-nameおよびfml-nameを適宜修正すべし)。include-meadなんてファイルもあるが、これは書き換えても書き換えなくてもどっちでもいいだろう(エラーメール用のフィルタらしい)。これで、フィルタの中でSpamAssasinを呼ぶように設定が加わる。なお、参考記事では|/usr/bin/spamassassinとなっているけど、さくらのレンタルサーバではSpamAssassinの置き場所が違うのでそこは注意。一応SSHログインしてwhich spamassassinをして場所を確認しておいた方がいいかもしれない。

で、この二つを書き終えるとスパムからのfml投稿は拒否されるわけだけど、拒否された結果どこかの.spamボックスなどに残るのか、闇夜の彼方に消え去るのかはちょっと不明。時間があれば調査したい。

参加者以外の投稿を禁止

上記設定してあればほとんどのメールは食い止められると思うが、一部スパムフィルタをすり抜けるメールは存在するだろうので、ML登録者以外からの投稿は禁止してしまった方がいい。メーリングリストを介してスパムを垂れ流すなんて正直、管理者として赤っ恥もいいところなので、そんなメールはゼロにしたいと言う強い思い入れでもある。
なお、この設定をして何が困るかと言うと、ML参加者が複数のメールアドレスを所持していて、たまたまML配信先とは違うアドレスから投稿したら拒否された、と言うケースだが、fmlでは一応『配信可能なアドレス』と『配信されるアドレス』は別個に設定できる。設定はさくらのレンタルサーバコントロールパネルからでも可能だし、fmlの設定メニュー(makefml config ML)からでも可能だけど、めんどくさいので/home/(user名)/fml/spool/ml/(ml名)/にある
members→『配信可能なメールアドレス』
actives→『配信されるメールアドレス』
の一覧なのでこれに直接書き足した方が手っ取り早いと思う。で、管理者ですら知らないメーリングリスト参加者の保有メールアドレスへの対応はすっぱり諦めよう(余裕があれば棚卸調査のメールをMLに流してもいいとは思うが)。

で、以下のように設定を書き換える。/home/(user名)/fml/spool/ml/(ml名)/を開き、そこのconfig.phファイルとcfファイルを再び開きコードを書き換える。
(config.ph:90行目ぐらいと115行目ぐらいに設定があるので、書き換える。)

<code>
$MAIL_LIST                     = "fml-name\@$DOMAINNAME";
$PERMIT_POST_FROM              = "members_only";
$REJECT_POST_HANDLER           = "ignore";

$CONTROL_ADDRESS               = "fml-name-ctl\@$DOMAINNAME";
$PERMIT_COMMAND_FROM           = "members_only";
$REJECT_COMMAND_HANDLER        = "ignore";
</code>

(cf:26行目辺りからのアクセスポリシーの書き換え)

<code>
### Access Policy
MAIL_LIST                	lapis@$DOMAINNAME
PERMIT_POST_FROM         	members_only
REJECT_POST_HANDLER      	ignore

CONTROL_ADDRESS          	lapis-ctl@$DOMAINNAME
PERMIT_COMMAND_FROM      	members_only
REJECT_COMMAND_HANDLER   	ignore
</code>

これも両方設定は同じことなんだけどおまじないで両方書き換えで。要するにPERMIT_XXX_FROMをmembers_onlyに、REJECT_XXX_HANDLERをignoreにしている。参加者以外からのメールは拒否した上に無視する、と言うこと。無視にしておかないと、『spam業者がfmlにメールを投げる』→『fmlが拒否メールをspam業者宛てに返す』→『spam業者から文句のメールが返ってくる』と言うくだらない事態が起こるからだ。文句と言うのはReturned mail: see transcript for details(reason: 550 5.1.:User unknown)だったりWarning: could not send message for past 4 hours(454 4.7.1 : Relay access denied)だったりとまあいろいろ(と言うか文句言ってるのはspam業者の鯖じゃなくてうちの鯖か)あるのだけど、こんな無駄なキャッチボールしてても仕方ない。

この設定をしておくことで、少なくともfml参加者にスパムを垂れ流すことは防げるだろう。いや、さらにfml参加アドレスで詐称してスパムメール流して来たらどうすんの?とかなくもないけど、そこまでになったらその時考える。まあ、可能性として高いのは、『詐称されるアドレス垂れ流すほどリテラシーの低いそのML参加者の方になんらかの対策を促し、それが不可能ならそのML参加者を退会処置にする』とすべきかなあ。

不正メール受信時の警告メール抑制

上記まで終えるとスパムメールがメーリングリスト上に流れたり、スパムメールに対して無駄な応答をしたり、と言った処置には対応が済むのだけど、最後の迷惑モノとして、メーリングリスト管理者宛てに「不正メールが来たので報告しておきますよ」と言うfmlのおせっかい機能がある。まあ、そりゃfmlのソフトの挙動として不審なエラーを報告する義務は大事なんだけど、毎日そんな報告を何件も受けていても仕方ない。ので、このfmlおせっかい機能を無効にする。

これは直接ソースコードを書き換えるしかないので、/home/(user名)/fml/を開き、そこのfml.plファイルを開きコードを改変する。
(fml.pl:1833行目辺りからのIgnoreHandler関数の改変)

<code>
sub IgnoreHandler
{
    &Log("Ignored: \"From:\" field is not member");
#    &WarnE("Ignored NOT MEMBER article from $From_address $ML_FN", 
#	   "Ignored NOT MEMBER article from $From_address");
}
</code>

IgnoreHandler という関数定義の中の「WarnE」をコメントアウトする。

これでfmlへの迷惑なメールの対処は一応完了。

【spam対策】:最近急に増えたスパムメール対策

ここ数日、スパムメールを受ける割合が急速に増えた。
正しく言うとスパムメールフィルタ(SpamAssassin)をすり抜けて受信してしまうメールが増えた。
これはどういうことかと思い調べてみると、どうやら同一の手口のメール対策が不十分で、受信してしまうことが分かった。

Return-Path:
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on www302.sakura.ne.jp
X-Spam-Level: ******
X-Spam-Status: No, score=6.1 required=12.0 tests=BAYES_50,CONTENT_TYPE_PRESENT, HTML_MESSAGE,MIMEQENC,MULTIPART_ALTERNATIVE,ONLY1HOPDIRECT,ONLY1HOPDIRECTRIPE, QENCPTR1,QENCPTR2,RCVD_IN_SBL,RIPE_NCC,RP_MATCHES_RCVD,TOOLONGSTR, URIBL_JP_SURBL autolearn=no version=3.3.2
Received: from www302.sakura.ne.jp (ksav31.sakura.ne.jp [210.224.165.211])
by www302.sakura.ne.jp (8.14.5/8.14.5)
with ESMTP id s1PCK5ID038721 for <___@________.net>;
Tue, 25 Feb 2014 21:20:05 +0900 (JST) (envelope-from OnlineDoctorate-___=______.net@_alaskansmokedsalmonplus.com)
X-Nat-Received: from [202.181.99.22]:20402 [ident-empty] by smtp-proxy.isp with TPROXY id 1393330805.22619
Received: from net._alaskansmokedsalmonplus.com (net._alaskansmokedsalmonplus.com [77.81.108.140])
by www302.sakura.ne.jp (8.14.5/8.14.5)
with ESMTP id s1PCJhkJ038572 for <___@________.net>;
Tue, 25 Feb 2014 21:19:46 +0900 (JST) (envelope-from OnlineDoctorate-___=_______.net@alaskansmokedsalmonplus.com)
MIME-Version: 1.0
From: Online Doctorate
To: ___@______.net
Subject: Find the degree program for you.
Reply-To: replyto1@_alaskansmokedsalmonplus.com
List-Unsubscribe:
Message-ID: <5253142afb72bdd6c0db0751d4f7433d@_alaskansmokedsalmonplus.com>
Date: Tue, 25 Feb 2014 12:19:51 +0000
X-Anti-Virus: Kaspersky Anti-Virus for Linux Mail Server 5.6.45.2/RELEASE, bases: 25022014 #7301207, status: clean
X-Antivirus: avast! (VPS 140224-1, 2014/02/25), Inbound message
X-Antivirus-Status: Clean
Content-Type: multipart/alternative; boundary=”===============3635023624886176509==”
Content-Transfer-Encoding: 7bit

There is no text only message available for this email. Please use an HTML capable email client.
Unsubscribe from future emails: unsub1@_alaskansmokedsalmonplus.com

(HTMLパートは省略)

Return-Path:
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on www302.sakura.ne.jp
X-Spam-Level: **********
X-Spam-Status: No, score=10.9 required=12.0 tests=BAYES_50, CONTENT_TYPE_PRESENT,HTML_MESSAGE,MIMEQENC,MULTIPART_ALTERNATIVE, ONLY1HOPDIRECT,ONLY1HOPDIRECTRIPE,QENCPTR1,QENCPTR2,RCVD_IN_MSPIKE_L3, RIPE_NCC,RP_MATCHES_RCVD,TOOLONGSTR,URIBL_DBL_SPAM,URIBL_JP_SURBL autolearn=no version=3.3.2
Received: from www302.sakura.ne.jp (ksav51.sakura.ne.jp [219.94.192.131])
by www302.sakura.ne.jp (8.14.5/8.14.5)
with ESMTP id s1OAV2Tv091610 for <____@______.net>;
Mon, 24 Feb 2014 19:31:02 +0900 (JST) (envelope-from CookingSchool-___=______.net@jessicadegouw.net)
X-Nat-Received: from [202.181.99.22]:44918 [ident-empty] by smtp-proxy.isp with TPROXY id 1393237862.29202
Received: from non._jessicadegouw.net (non._jessicadegouw.net [31.220.43.158])
by www302.sakura.ne.jp (8.14.5/8.14.5)
with ESMTP id s1OAV1lg091606 for <___@______.net>;
Mon, 24 Feb 2014 19:31:01 +0900 (JST) (envelope-from CookingSchool-___=________.net@jessicadegouw.net)
MIME-Version: 1.0
From: Cooking School
To: ___@________.net
Subject: You won’t get in trouble for playing with food here.
Reply-To: replyto1@_jessicadegouw.net
List-Unsubscribe:
Message-ID: <5253142afb72bdd6c0db0751d4f7433d@_jessicadegouw.net>
Date: Mon, 24 Feb 2014 05:31:02 -0500
X-Anti-Virus: Kaspersky Anti-Virus for Linux Mail Server 5.6.45.2/RELEASE, bases: 24022014 #7276764, status: clean
X-Antivirus: avast! (VPS 140223-1, 2014/02/24), Inbound message
X-Antivirus-Status: Clean
Content-Type: multipart/alternative; boundary=”===============9001998848229897669==”
Content-Transfer-Encoding: 7bit

There is no text only message available for this email. Please use an HTML capable email client.
Unsubscribe from future emails: unsub1@_jessicadegouw.net

(HTMLパートは省略)

一部伏字にしてあるけどこんな感じのメール。SpamAssassinのフィルタがしきい値(うちは12に設定している)までカウントしていない。
手口としては、
・送信元サーバはいろいろ。偽装サーバではなくちゃんとドメインも存在していそう。
・Return-Pathのアドレスに受信したうちのアドレスが入っているので、ヘタに返信するとさらに多量のスパムを受け取ると思われる。
・メッセージ本文にUnsubscribeアドレスが入っているけど、ここにメール送ってもたぶんスパム100倍返しを食らうだろう。
・送信元サーバは様々だけど、Unsubscribeアドレスがどれも「unsub1@XXXX」になっているので、たぶん同一犯かなあ。

と言うことで、メッセージ本文中のUnsubscribeアドレスに送れ、の文章が同じことに着目して、private_prefsに以下の通り設定を追加してみた。
(user_prefs、private_prefsの設定し方については過去の記事参照。)

<code>
# For irregular spam.
rawbody  UNSUB1 /Unsubscribe from future emails/
describe UNSUB1 Unsubscribe adress is unsub1@example.net
score    UNSUB1 10.0
</code>

ついでに、今のprivate_prefsを他のところも抜粋して書いておくと

<code>
# 
# more information (default spamassassin rules)
# -- about : http://spamassassin.apache.org/tests_3_2_x.html
# 

# added 2011/04/15 by [chatarou] helped by [yoh]
# for checking SAKURA & MY MAIL's network.
# following IPs are anti-Virus Servers of SAKURA INTERNET (ksavXX.sakura.ne.jp)
trusted_networks 210.224.165.38 210.224.165.45 210.224.165.143 210.224.165.142 210.224.165.211 210.224.165.212 210.224.165.35 210.224.165.220 219.94.192.131 219.94.192.132 219.94.192.133 219.94.192.134 219.94.192.135 219.94.192.136 219.94.192.137 219.94.192.138 219.94.192.139 219.94.192.140 219.94.192.141 219.94.192.142 219.94.192.143 219.94.192.144 219.94.192.145 219.94.192.146 219.94.192.147 219.94.192.148 219.94.192.149 219.94.192.150 219.94.192.151 219.94.192.152 219.94.192.153 219.94.192.154 219.94.192.155 219.94.192.156 219.94.192.157 219.94.192.158 219.94.192.159 219.94.192.160 219.94.192.161 219.94.192.162 219.94.192.163 219.94.192.164 219.94.192.165 219.94.192.166 219.94.192.167 219.94.192.168 219.94.192.169 219.94.192.170 219.94.192.171 219.94.192.172 219.94.192.173 219.94.192.174 219.94.192.175 219.94.192.176 219.94.192.177 219.94.192.178 219.94.192.179

#replace_tag MYMTA ((mail|www)\.chatarou\.net)
#trusted_networks 127.0.0.1 192.168.0.1/24

# I receive very few Japanese spam mails, allmost all of spam mails are come from foreign countries.
# so changes some socres of Japanese mail's rule. :2011/04/26 by [chatarou]
score ISO2022JP_CHARSET -2.0
score ISO2022JP_BODY -2.0

# 
# We use SAKURAWEB as SMTP. so the following rule has no meanings. : 2007/12/21 by [chatarou]
# 
score SAKURAWEB 0.0

# For RAKUTEN Mail.
header   RAKUTEN_INFO Subject =~ /\!Z3ZE7\!\[/
describe RAKUTEN_INFO Rakuten Mail
score RAKUTEN_INFO -5.0

# For SONY Info Mail.
header   SONY_INFO From =~ /info\@e\.crmstyle\.com/
describe SONY_INFO SONY Info Mail
score SONY_INFO -5.0

# For irregular spam.
header   VIRTUAL_VEGASCLUB From =~ /Virtual VegasClub/
describe VIRTUAL_VEGASCLUB Virtual VegasClub
score    VIRTUAL_VEGASCLUB 5.0

header   LINKEDIN Subject =~ /LinkedIn/
describe LINKEDIN LinkedIn
score    LINKEDIN 5.0

header   PAYROLL Subject =~ /Payroll Invoice/
describe PAYROLL Payroll Invoice
score    PAYROLL 50.0

header   IRREGULAR_RETURN_PATH Return-Path =~ /\-___\=example\.net/
describe IRREGULAR_RETURN_PATH Return-Path contains (-___=example.net)
score    IRREGULAR_RETURN_PATH 6.0

rawbody  UNSUB1 /Unsubscribe from future emails/
describe UNSUB1 Unsubscribe adress is unsub1@example.net
score    UNSUB1 10.0


# 
# "FERA" ,or "DYN_FERA" is defined & scored as porn word by [yoh].
# but, "FERRARI" is not porn word for [chatarou]...: 2011/04/16 by [chatarou]
# 
rawbody  FERRARI /\%U\%\'\%i\!\<\%j/
describe FERRARI  Ferrari (maybe F1 WORKS TEAM)
score    FERRARI -0.1

#'

rawbody  MCRALEN /\%\^\%\/\%i\!\<\%l\%s/
describe MCRALEN  Mcralen (maybe F1 WORKS TEAM)
score    MCRALEN -0.1

meta  F1_MAIL FERRARI && MCRALEN
score F1_MAIL -4.0

# 
# Other Virtual Domains(chatarou.sakura.ne.jp, www302.sakura.ne.jp) are not used on mailservice. : 2011/04/24 by [chatarou]
# 
header   FAKE_VDH_TO To =~ /\@(chatarou|www302)\.sakura\.ne\.jp/
describe FAKE_VDH_TO To:  @(chatarou|www302).sakura.ne.jp
score    FAKE_VDH_TO 5.0

# 
# Other Virtual Domains are used by spammers as fake from-address. : 2011/04/24 by [chatarou]
# 
header   FAKE_VDH_FROM From =~ /\@www302\.sakura\.ne\.jp/
describe FAKE_VDH_FROM From:  @www302.sakura.ne.jp
score    FAKE_VDH_FROM 5.0

# 
# Spammers frequently writes "Nothing" in To:header. . : 2011/04/24 by [chatarou]
# 
header   NOTHING_TO_HEADER To =~ /!@/
describe NOTHING_TO_HEADER To:  Nothing
score    NOTHING_TO_HEADER 5.0


# 
# Default postmaster is used by almost only spammers. : 2008/06/20 by [chatarou]
# 
header   POSTMASTER_TO To =~ /postmaster\@example\.net/
describe POSTMASTER_TO To:  postmaster@example.net
score    POSTMASTER_TO  5.0

# threshold level down from 10.0 to 8.0 2011/04/13 by [chatarou]
# threshold level up to 12.0 2011/04/18 by [chatarou]
required_score 12.0
</code>

こんな感じになっていた。一応判定基準等をメモっておくと
・楽天とソニーはやたら危険な文字列をメール本文に盛り込むせいで、しょっちゅうスパム行き誤判定を食らっていてかわいそうだったので、救済措置をつけた。
・VIRTUAL_VEGASCLUBってのは一時期スパムフィルタをすり抜けて来ていたメールだけど、最近見かけないが設定放置。
・LINKEDINも同様。って言うかうちでNGにしてるって、LINKEDINは過去にどんな変なメール送ってきていたのやら。さっぱり記憶なし。
・PAYROLLって言うのは2013年末ごろから頻繁に見かけるようになった気がする。これはスパムメールではなくウイルスメールなので、絶対に受信拒否。
・UNSUB1は今回追加のルール。IRREGULAR_RETURN_PATHも今回の対策に反応するように書いた予備のルール。
・FERRARI、MCRALEN、F1_MAILの理由は以前の記事で書いたので省略。以降の設定も以前の記事と同じなので省略。

僕は臨時で困ったときのみ対策をするけど、こういうのを常にチェックしていて日本語用スパムフィルタ設定ファイルを書いているyohさんには頭が下がるなあと思いました。

改訂版:さくらのレンタルサーバ用spfレコード、AAAAレコード設定

さくらのレンタルサーバにspfレコードが追加されたの追記と言うか、修正と言うか、改訂版。

前回の記事の内容を抜粋すると、

(a) 最近、さくらのレンタルサーバからGMailに送信するメールで、遅延問題が発生しているらしい。

(b) そこで、さくらのレンタルサーバではspfを導入し、チェックボックスをONにするとspfの設定が有効になるらしい。

(c) が、少なくともうちの環境では上記設定はうまくいかなかった。そこで、初心に帰ってドメインメニューから自分でTXTレコードのspfを設定し直すことにし、GMailでうまくいかない原因を探ってみた。

(d) すると、GMail側ではうちのサーバのIPv6アドレスを使ってspfの評価がされていることが原因だと分かった。

(e) そこで、spfレコードに(1)IPv6アドレスの指定を追加してあげる、か(2)FQDNのAレコードを指定してあげると言う対策で問題は解消した。

と言う感じなのだが、そもそもなんでIPv6が通ってないの? とかspfレコードで直打ちでIPv6レコードを書くのはちょっと強引じゃないか? とか思い、もう少し設定を見直すことにした。

そもそも、さくらのレンタルサーバではIPv6を有効にするための手順があり、いつの間にか僕のサーバでもIPv6を有効にできるようになっていたのだけど、僕はまだIPv6サービスを有効にしていなかった。

20140208-spf_11

どうやらさくらのレンタルサーバからGmailへの配信で問題が出るのは、この辺の設定にありそうだ。つまり、

(a) 僕がchatarou.netドメインでメール配信を行うと、結果的には僕のアカウントが入っているサーバであるところのwww302.sakura.ne.jpでGMail側でspf評価がされる。

(b) 僕はIPv6アドレス設定をしていないので、IPv6での評価は失敗する。(たぶん、www302サーバの誰かがIPv6設定を有効にすると、全体に影響があるのだろう)

と言う感じになっていそう。

ならば、IPv6アドレスをドメイン設定に追加してあげれば問題は解決するのではないか?と考えた。

最良の対策案:IPv6アドレスの追加

そこで、自分のドメイン情報にIPv6アドレスを追加してみる。

まず、自分のサーバのIPv6アドレスを調べる。これは、wwwXXX.sakura.ne.jpのサーバ番号にnslookupすればわかる。やり方は、コマンドプロンプトを開いて『nslookup』と打ち込み、『wwwXXX.sakura.ne.jp』と打ち込む。WindowsXPなどの場合はIPv4しか返ってこないので、『set type=AAAA』と打ち込んでから同様に『wwwXXX.sakura.ne.jp』と打ち込む。

20140208-spf_12

次に、調べたIPv6アドレスを自分のサーバに追加してあげる。さくらインターネットのコントロールパネルから設定してもいいが、イマイチ不安なので自分で直接追加してみる。

20140129-spf_6

さくらのコントロールパネル(会員メニューの方)にログインして、『契約情報』をクリック。

20140129-spf_7

『ドメインメニュー』をクリック。

20140129-spf_8

『ゾーン編集』を行う。

20140208-spf_14

現在のゾーン設定が見れるので、『編集』をクリック。

20140208-spf_13

『エントリの追加と変更』に必要な値を入力していく。IPv6用のエントリはAタイプではなくAAAAタイプなので注意。入力が終わったら『新規登録』ないし『変更』をクリックして、上のエントリ名テーブルに正しく追加されたことを確認して、一番最後に『データ送信』をクリックして完了。

この方法で、『AAAA=(IPv6アドレス)、TXT=”v=spf1 +mx ~all”』と言うシンプルな記述で設定は完了する。ドメインが浸透するまで若干の時間待ってから、SPFレコードチェックツールやGMailにテストメールを配信してうまく設定が完了しているか確認すればいい。

次善の対策案:spfレコードに必要なIPを追加

何らかの理由があって、上記設定は見送りたいという場合は、spfレコードを直接編集して設定すればいい。

spfレコードの設定方法はtxtレコードに
“v=spf1 +ip4:(IPの4桁アドレス) +ip6:(IPの6桁アドレス) +mx ~all”
“v=spf1 +a:www(鯖番号).sakura.ne.jp +mx ~all” か
のどちらかを記載する。

細かい設定方法は前回のエントリに書いてあるので、こっちは割愛します。

上記の設定のどれかを行うことで、GMailのspf認証設定は完了します。