FreeBSDの最近のブログ記事

moblog

| コメント(2) | トラックバック(0)

iPhoneを購入したのでmoblogをやってみようかと思い立つ。
#以前、渡米前にも設置を考えたのだが、当時持っていたのは初代の京ポンで、カメラ性能がイマイチだったこともあり設置しなかった。

まずはひらたさんのサービス"moblog.uva.ne.jp - moblog mail gateway [dh memoranda]"を試してみたが、うまくいかない。メールを送っても何もエントリーされなかった。

多分こっちの設定が悪いんだろうけど、メール送った先で何が起こっているのかわからないので何も出来ず。ならばと思い、伊藤譲一さん作のmail2entry.pyを設置しようと思い、調査開始。

どうやら最新版(と言っても2003年)はaron atkinsさんの改良版mail2entry.pyらしい。と言うことで設置。

Bell's Memorandum: mail2entry”を参考にして稼動確認。ついでにここに書かれている本文無しエントリーへの対応と投稿時間をJSTにするパッチを施す。

#注意:settings.pyの"password:"に書くパスワードは、通常のWebブラウザからログインするときに使うパスワードではなく、"メイン・メニュー > システム・メニュー > 投稿者 > 投稿者の名前: 投稿者のプロフィール"で設定できる"Webサービスのパスワード"を記述しなければならない。

アルファベット投稿はうまくいくが、日本語を投げるとエラー。さらに検索。
わんこ日記(2007-04-08): mail2entryが失敗する”によれば、Python2.4では日本語ロケールの記述ルールが変更されてるらしい。

さらにテストすると、写真なしだとうまくいくが、写真をつけても表示されない。調べるとアップロード自体はうまく行っているのだが、生成されたファイルのパーミッションが600になっていた。またまた検索。

"torus solutions!: qmail との連携"を参考に画像ファイルのパーミッション変更。

今度こそうまく行ったらしい。参考にさせていただいたサイトに感謝。
記事の間隔があきすぎるのも少しは解消されるかな(笑)

いろいろ先人の知恵を利用させてもらったお礼にパッチ済セットを再頒布してみようと思う。
元のライセンスはGPLv2、再頒布は問題ないであろう。(問題あったら連絡ください)

mail2entry20070710.tar.gz

以下改良版mail2entry.pyからの変更点リスト。

本文無しエントリーを受け入れるように変更。 by bell氏
投稿時間をlocaltimeに変更。 by bell氏
生成するファイルのパーミッションを"644"に。 by と お る氏
Python2.4対応。(日本語対応部分) by わんこ氏

前回SpamAssassinを導入したわけだが、資料を読み進めていくとTLSサポートぐらいはしておいても良いような気がしてきたので導入。

portsでpostfixを再インストール
"/var/db/ports/postfix/options"に前回選択したオプションが記録されているので参考にする。

#cd /usr/ports/mail/postfix #make config

[X] TLS Enable SSL and TLS support
TLSにチェックを入れる。後のオフションは"/var/db/ports/postfix/options"参照

#make
#/usr/local/etc/rc.d/postfix.sh stop
#make deinstall
#make reinstall
#/usr/local/etc/rc.d/postfix.sh start


そして設定。証明書を新たに作成するのは面倒くさいので、今回はWebサーバーで利用している自作の証明書(/usr/local/certs/に置いてある)を流用。高価な証明書を持っているのならそれを利用すればよい。"/usr/local/etc/postfix/main.cf"に下記の内容を追記。
# Enable TLS but it's not forced
smtpd_tls_cert_file = /usr/local/certs/server.crt
smtpd_tls_key_file = /usr/local/certs/server.key
smtpd_tls_loglevel = 2
smtpd_use_tls = yes

テスト(赤字は入力するコマンド。黒字はサーバーからの応答。)
下記の例のように、"startssl"のコマンドに対して”220 2.0.0 Ready to start TLS”が帰ってくれば成功。うまくいかない場合は、設定ファイル、証明書、鍵ファイル等をチェック。(鍵ファイルの暗号は解いてあること。)
# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 wink.pilo.to ESMTP Postfix
ehlo localhost
250-wink.pilo.to
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
starttls
220 2.0.0 Ready to start TLS
quit
Connection closed by foreign host.

以上。

妻がspamメールがウザイとのたまうので、サーバーによく使われているらしいSpamAssassinを使ってみようと思い勢い良くportsでインストール。

# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make
# make install
インストール時のオプションは以下のとおり。SPF_QUERYは現状どんだけ意味があるのかわからないがとりあえず入れておいた。いらなきゃいつでも外せるし。
Options for p5-Mail-SpamAssassin 3.1.7_3

[X] AS_ROOT Run spamd as root (recommended)
[ ] DOMAINKEYS DomainKeys support
[ ] DKIM DomainKeys Identified Mail
[X] SSL Build with SSL support for spamd/spamc
[X] GNUPG Install GnuPG (for sa-update)
[ ] MYSQL Add MySQL support
[ ] PGSQL Add PostreSQL support
[X] RAZOR Add Vipul's Razor support
[X] SPF_QUERY Add SPF query support
[ ] RELAY_COUNTRY Relay country support
[X] TOOLS Install SpamAssassin tools

/etc/rc.confに下記の2行追記。
# Enable SpamAssassin
spamd_enable="YES"
"/etc/hosts.allow"におまじないを追加。
# spamd
spamd : localhost : allow
spamd : ALL : deny
下記コマンドで開始。
/usr/local/etc/rc.d/sa-spamd.sh start
と、ここまで勢い良く進めてからPostfixとの連携方法を探る(笑)

あれ?SpamAssassinはユーザー単位でかけるのが普通なの?と思うぐらいサーバー一括型の情報は検索結果の上位に来ない。
サーバー一括でかける方法としてはspamass-milterを使ったsendmailとの連携方法は良く目にする。しかしPostfixではProcmail使えとか、フィルタースクリプト書いて連携しろとかいう方法は見つかるのだが、なんだかいまいち美しくない。
Psotfixの設定だけでいけないのか?と思いさらに検索し続けると、やっとこのpostfix-jp-MLのログを発見した。

早速書かれていたSpamAssassin Wiki:IntegratedSpamdInPostfixへ飛ぶ。

まずは"/usr/local/etc/postfix/master.cf"を編集。smtpdの後に"-o content_filter=spamassassin"と追記。

# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
#smtp inet n - n - - smtpd
smtp inet n - n - - smtpd -o content_filter=spamassassin
最終行に下記の2行を追記。
spamassassin
unix - n n - - pipe
user=nobody argv=/usr/local/bin/spamc -e /usr/local/sbin/sendmail -oi -f ${sender} ${recipient}
早速"/usr/local/etc/rc.d/postfix.sh reload"でpostfixに設定更新させて、"tail -f /var/log/maillog"でログをながめながらテストメール送受信してみる。
spamd[?]: spamd: setuid to nobody succeeded
spamd[?]: spamd: creating default_prefs: /nonexistent/.spamassassin/user_prefs
と言うエラーが記録された。SpamAssassinの呼び出しに失敗しているようだ。
FreeBSDではユーザーnobodyのホームディレクトリが"/nonexistent/"に設定されている。実際にはそんなディレクトリは存在せず、単にログインさせないユーザーのホームディレクトリという意味である。

仕方がないのでユーザーをpostfixに変更

spamassassin
unix - n n - - pipe
user=postfix argv=/usr/local/bin/spamc -e /usr/local/sbin/sendmail -oi -f ${sender} ${recipient}

今度は
Feb 21 13:25:02 サーバー名 postfix/pipe[プロセスID]: fatal: user= command-line attribute specifies mail system owner postfix
はあ、そう言われれば仰るとおりですね。
気を取り直してSpamAssassin用のアカウントであるspamdへ変更。

spamassassin
unix - n n - - pipe
user=spamd argv=/usr/local/bin/spamc -e /usr/local/sbin/sendmail -oi -f ${sender} ${recipient}

今度は
spamd[?]: spamd: setuid to spamd succeeded
spamd[?]: spamd: creating default_prefs: /var/spool/spamd/.spamassassin/user_prefs
spamd[?]: config: cannot write to /var/spool/spamd/.spamassassin/user_prefs: No such file or directory
spamd[?]: spamd: failed to create readable default_prefs: /var/spool/spamd/.spamassassin/user_prefs
spamd[?]: spamd: processing message for spamd:58
うまくいくかと思いきや、もう一歩。ユーザーspamdのホームディレクトリ"/var/spool/spamd/"に.spamassassin/user_prefsを作ってあげなければいけないようだ。ええぃ手間のかかる!
# touch /var/spool/spamd/.spamassassin/user_prefs
# chown spamd:spamd /var/spool/spamd/.spamassassin/user_prefs
これでどないや?
spamd[?]: spamd: clean message (0.0/5.0) for spamd:58 in 5.2 seconds, 17598 bytes.
spamd[?]: spamd: result: . 0 - scantime=5.2,size=17598,user=spamd,uid=58,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=61562,mid=,autolearn=ham
お、成功!

喜びもつかの間ふと考えれば、この場合送信メールもスパムチェックしてしまうため、自分の送信するメールにもX-Spamヘッダーがついてしまう。あんま問題はないはずだけど、万が一自分の出したメールが自分のシステムからスパム認定受けたらかっこわるいよなぁ(笑)

どうしたもんかとPsotfixのぺーじのドキュメント類を眺めていたら、Psotfixのぺーじ:Postfix ビルトインコンテンツ検査というドキュメント中に『あるドメイン宛のメールのみをヘッダ/本体チェックするように設定する』と言う項目を発見。
これで自ドメイン宛のメールだけSpamAssassinかければいいじゃんと更に読み進めると、フィルターをかけたいドメインに別のIPアドレスを振って区別するという方法だった…

別にもう一個IPアドレスを用意することぐらい出来るけど、それじゃあ送信用と受信用のSMTPサーバーを用意するようなもんだろ。だったらサブミッションポートを立ち上げてそっちをノーチェックにしても一緒じゃん。
と、思うも今までサブミッションポートを使わなかったのには理由ががあったのだ。
サブミッションポートを開けるときは必ずSMTP-AUTHを使え。という呪文を至る所で目にする。

PostfixでSMTP-AUTHを行う場合のパターンは

1.Unixパスワードで認証、しかしPlain textでしかパスワードをやりとり出来ないためTLSも併用すべき。
2.sasldb等で、別途管理。この場合CRAM-MD5、DIGEST-MD5あたりが使えるため、TLSは必ずしも必要ない。

該当マシンは個人サーバーで小規模のため、最近主流であるメールアカウントの管理をLDAPやらRDBで管理するような大仰な事はせず、古式ゆかしくUnixアカウントとして運用している。と言う条件を加味するとそれぞれの懸念点は

1のパターンでは生でメールアカウントのユーザーネームパスワードが流れてしまう為TLSの使用を強制したいところだが、全ての環境でTLSが使えるクライアントばかりとも限らないためそれは出来ない。
2のパターンではUnixアカウントのパスワードと同期するのも面倒だし、別パスワードにしてもユーザーが混乱する。

財団法人インターネット協会迷惑メール対策委員会のページにIAjapan 3 迷惑メール対策カンファレンスの講演資料のページがある。そこにsubmissionポートの提供 方法と実践という資料が置いてあるのだが、そこを読んでもPOP before SMTPを廃止してSMTP-AUTHを導入すべき理由は、spamerにシステムを悪用された際の
解析が困難になるという理由しか書いていない。(正確にはNATも解析が難しくなる要因とも書いてあるが、ユーザー数が多くなければ問題無し)

例外を想定しまくってシステムを複雑にしても、障害の原因とは成ってもたいしてメリットはない。
というわけで現状のPOP(IMAP) before SMTPで十分と判断。

"/usr/local/etc/postfix/master.cf"の"submission"で始まる行の行頭の"#"を削除。

smtp inet n - n - - smtpd -o content_filter=spamassassin
submission inet n - n - - smtpd
メーラーのSMTPサーバー設定のポートを25から587に変更してテスト。
SpamAssassinが働いていないことを確認して任務完了。

次はTLS有効にしてみるか。

追記
『正確にはNATも解析が難しくなる要因とも書いてあるが、ユーザー数が多くなければ問題無し』と書いたが、この場合『NATの内側からアクセスしているユーザーが居る場合、一人正規ユーザーが電子メールを利用すると他も全員SMTPサーバーをノーチェックで利用できるようになってしまうという問題』の方が大きいかもしれない。だが、上記の通り、該当サーバーのユーザーは非常に限られた人数のため特に問題とは成らない。Webメーラーも提供しているので、外ではそれを使うようにさせば済むのでうちの場合は無問題。

追記その2
TLS導入に関しては"Postfix with TLS"に書いた。

エントリーも300も超えてくるとさすがにBerkeleyDBでは厳しいのかトラックバックに失敗するようになってきた。
いつかMySQLに変えようと思い続けて幾年月。でもどうせやるなら文字コードをeucからutf-8に変えたいなぁと思い続けてさらに幾年月。

このままだといつまで経ってもやらないと確信するに至ったため、条件を一つ減らしてBerkeleyDBからMySQLへの移行だけをやってみようと思い立った。

思い立ったら吉日ということで調べてみると、巷ではSQLiteが流行っているらしい
理由はBerkeleyDBより早い。レンタルサーバーではMySQLが共用のことが多く、遅い。SQLiteはファイルベースのSQLエンジンだから、速度が他人に左右されない。といったところだろうか。
レンタルサーバーによってはCGIの実行時間に制限があるところもあるみたいで、MySQL環境が劣悪な場合は再構築中にエラーが出たりなんだりと大変なんだそうな。んで、レンタルサーバーではSQLiteが流行ってると。
MySQLが過負荷で無い場合は当然SQLiteよりも早いのだが、勘違いしちゃってる人も多いみたい。

俺の場合は自前のマシンだし、まったく関係ないので迷わずMySQLに移行。あれ?そもそも何でBerkeleyDBにしたんだっけ?まったく思い出せない…
多分こんなにやり続けると思ってなかったんだと思うが…

そうこうしているうちにOgawa::Memoranda:mt-db-convert.cgi: MTデータベースの相互変換CGIスクリプトというところにたどり着いた。

早速

> mysql -u root -p
Enter password: パスワード
mysql>
mysql> create database movabletypedb;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on movabletypedb.* to movabletypeuser@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges;
mysql> exit

とDB作成。
詳しくはGoogle様での検索結果参照

そしてBlogのデータをディレクトリごとコピーしてバックアップ。
"mt-db-convert.cgi"を"mt-config.cgi"と同じディレクトリに置いてパーミッションを"755"に変更。
ブラウザで”http://自分のBlogアドレス/"mt-config.cgi"が置いてあるディレクトリ/mt-db-convert.cgi”にアクセス。

さっき自分で設定したMySQL上のDBのデータを入力、しばし待つ

-------------------------------------
# DataSource /usr/home/ユーザー名/BerkeleyDBでのDBディレクトリ
ObjectDriver DBI::mysql
Database movabletypedb
DBUser movabletypeuser
DBHost localhost
DBPassword パスワード
-------------------------------------

等と親切な情報が表示されるので、これを元に"mt-config.cgi"を書き換える。
試しに"サイトを再構築"してみると…あっけなく成功。
忘れずに"mt-db-convert.cgi"を削除。

ogawaさんありがとう!
ちなみに効果のほどはまだ不明。再構築は早くなったような気がする。

サイトフィード株式会社Fresh Readerというサーバー型RSSリーダーを入れてみた。
ライセンス条項には"ブロガーライセンス:無料"との記述が!
ありがたく使わせていただきます。

今でもFirefox&sageや、SafariのRSS機能を使ってはいるのだが、いつも同じ端末から見ているわけではないのでサーバーインストール型でperlで動くrnaというツールを使わせてもらっていた。
これはこれで非常に便利なのだが俺のように150個ほど登録した状況だと"重い(perlの宿命か)"、"Blogの自己申告時間を基準にソートされるのでよく見落とす"等の点が改善されないかなーと思っていた。

PHPで作られた2chリーダー"p2"がいい感じなのでp2の拡張パック内にあるRSS機能に期待していたりもしたがなかなかそこまで手が回らないらしく。

BloglinesのようなASP型のものは確かに良いのだけど、システムメンテやなんかが煩わしいし…

なので、サーバーインストール型のRSSツールを見かけるたびに試してみているのであった。

Fresh Readerは比較的軽いのと新着まとめ読みが出来るのが非常に気に入ったのでrnaから移行することにした。
"過去1時間に取得した記事を表示""過去6時間に取得した記事を表示""今日取得した記事を表示""今週取得した記事を表示"のように、既読の記事をさかのぼってまとめ読みできる機能がイカスね。

移行はOPMLですんなり。

以下、FreeBSD+Apache2へのインストール方法。(Linuxでも基本的に同じはず)

アーカイブ

ウェブページ

  • /P
OpenID対応しています OpenIDについて
Powered by Movable Type 5.01
 

Techonrati

Technorati search

» リンクしているブログ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちFreeBSDカテゴリに属しているものが含まれています。

次のカテゴリはMacです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。