‘サーバ’ カテゴリーのアーカイブ

レンタルサーバのデータをクライアントで自動バックアップしないと夜も眠れない。

2009年11月28日 土曜日

先日、今時ありえないが、某有名グループ企業のレンタルサーバ会社から・・・

「HDD逝ったからデータも逝きました。」

との驚きの報告を頂きました。
データが逝ったのは痛い。当然クライアントでバックアップはとっているのだが、リアルタイムで100%全てのデータのバックアップをとっているわけではないので、更新頻度の高いデータについてはバックアップがされていない部分が存在しました。
もう少しバックアップ頻度を上げておくべきでしたが、私的には「データが飛んだんで新しいサーバにデータをアップしなおしてくれ。」なんてことを言ってしまうレンタルサーバ会社のせいにしたいのと思うのは至極普通の感情だと思う。
その会社のエンジニアがRAIDという言葉を知らないとは思えないが、「目が点」とはまさにこのことである。
18時間近くサーバ自体止まった上に、データも飛んで、事後の対応も非常に遅く、言っていることも的を得ず、非常にバカな子供が発するいいわけのように感じ、「はいはい。」といった感じでサクッとDNSを書き換えて自前のサーバに引き込んで、その間に他のレンタルサーバを見繕ってしまいましたが・・・(笑)
自分史的には「大きな会社の前代未聞のお粗末」を体験し、非常に良い経験になりました。THX

で、自前のサーバだけでなく私は共用レンタルサーバも(最近安いし便利になってきましたし)活用しているのですが、自前サーバやVPSと違ってちょっと変わったことをしようとするとその制限に躓くことがあります。たとえばcronが使えないので・・・とかです。
レンタルサーバに置いてある更新頻度の高いデータはその更新頻度に応じてバックアップをとっておきたいですよね。しかし、標準でついているバックアップのオプションは意外と融通が利かないものが多いのではないでしょうか?
特に不特定多数のユーザが利用する掲示板や予約システムなどを動かしている場合はなるべくバックアップの頻度を増やして障害時のダメージを軽減したいですね。
レンタルサーバの標準のバックアップ機能は融通が利かない。cronが使えない。そんな時、こんな方法はいかがでしょうか?

まずは、こんな感じのCGIをサーバの適した場所に置く。

#!/usr/bin/perl

use Archive::Zip;

print "content-type: text/plain\n\n";
my $homedir = $ENV{'HOME'};
print $homedir;

unlink('./bak.zip');

# "保存パス", "圧縮ターゲットディレクトリ", "作成圧縮ファイル名"
my $zipfile = &ArchiveDir ("./", "./baktarget", "bak.zip");

sub ArchiveDir {
	my $dir = $_[0];
	my $dirname = $_[1];
	my $zipfile = $_[2];
	my $zip = Archive::Zip->new();
	$zip->addTree($dir, $dirname);
	$zip->writeToFileNamed("$dir/$zipfile");
}

レンタルサーバでありがちなパスが分からない?って場合はmy $homedir = $ENV{‘HOME’};といった感じでパスを見つけて使いましょう。このCGIでは$homedirをその後で使ってませんがね・・・
こんな感じでCGIを使って画像表示等をトリガーにしてバックアップさせるのもいいですね。

次にクライアントからこんな感じのシェルスクリプトをcronすれば自動バックアップできますね。

#!/bin/sh
cd /home/hogehoge/bak
wget http://fugafuga.com/bak.cgi
rm bak.cgi*
find ./ -name '*.zip' -mtime '7' -exec rm -f {} \;
wget http://fugafuga.com/bak.zip -O bak_`date +%Y%m%d_%H%M`.zip

この例ではwgetを使ってバックアップCGIを起動しています。
次にそいつの出力したファイルはいらないんで消して。7日前のファイルを消して、日付を付けてバックアップファイルを保存しています。
こうすればサーバでcronが使えなくてもクライアントのcronを使ってリモートで自動バックアップできますね。

Postfix つい忘れる設定

2009年10月2日 金曜日

得意先にデカイファイルを送ろうとしたら、なんだかデカイメールが送れません・・・
そういえば最近Postfixの設定をいじったのを思い出しました。
この設定を入れておくの忘れてましたね。
単位はbyteです。それにしても最近はGBとかTBとか普通で急にbyteとかいわれると「は?」ですね。

/etc/postfix/main.cf

message_size_limit = 102400000
mailbox_size_limit = 102400000

容量制限の設定はmessage_size_limitで行います。ちなみに関連でmailbox_size_limitがあります。mailbox_size_limitはmessage_size_limitよりも大きくしておかないとエラーになります。
本来はMaildirの場合はmboxじゃないですから関係ありませんね。ですが、これを入れとかないとmailbox_size_limitのデフォルトの値がmessage_size_limit以下になる場合はエラーが出てしまいますので注意です。Maildirを使用している場合でも同容量以上の値を入れておきましょう。
Maildirの容量制限には素直にquotaを使うのがいいですね。
当然ですがデフォルトの値を見てみると・・・

# postconf -d mailbox_size_limit
mailbox_size_limit = 51200000
# postconf -d message_size_limit
message_size_limit = 10240000

そりゃ当然ですがデフォルトでもmailbox_size_limitはmailbox_size_limitより大きくなっていますね。
以上、Postfixの容量制限の設定でした。

メールアドレス偽装入門

2009年9月21日 月曜日

連休はどこにも行かないでラックとボーっ・・・

メールアドレス偽装と書くと聞こえが悪いが、転送とはある意味で偽装だ。
ホームセンターで包丁を買うのは合法だが、その包丁を使ってあじを三枚におろすのではなく人間を三枚におろしてしまったら違法である。
同じようにメールのFromを書き換えても合法だが、そのFromに実在する人物や会社等が使うアドレスを使ってスパムを送信する事は違法である。
私はメールのFromを書き換える行為が低レベルではあるが偽装と呼ぶものだと理解している。もちろんToやその他のヘッダ等を書き換えれば書き換えるほどそのレベルは上がる。
私は現代人のメール病を深刻化させている一つの原因に、PCにはコレで携帯にはコレと複数のアドレスを持っているということがあげられると思います。
そこで今回提案したいものがメールアドレス偽装と呼ばれる方法です。この情報を応用すればメールに関する色々な病気を治療するのに役立つと思われます。
携帯電話のメールアドレスはキャリアが変われば変わってしまうし、自分の慣れたスパムフィルターを使う事が出来ない。
そのような点を解決するサブアドレスを提供するサービスはあるが、もし自分がメールサーバを持っているのならそのようなサービスを利用する事は有料であれば金の無駄遣いです。
そこで今回は携帯電話のメールアドレスをPCのメールアドレスに偽装する等に使える簡単な方法を紹介致します。必要な条件はPostfixでメールサーバを運用している事です。
Postfixを使ったメールアドレスの偽装は簡単です。
設定ファイルの以下の周辺の関連をチェックすると簡単に出来ます。

参考リンク:Postfix設定パラメータ

/etc/postfix/main.cf

local_header_rewrite_clients = static:all
canonical_classes = envelope_sender, envelope_recipient, header_sender, header_recipient
canonical_maps = hash:/etc/postfix/canonical
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

とりあえずこの設定だけ見ておけばFrom等の書き換えは十分できます。
では自分の携帯アドレスを偽装して携帯電話でメールを送る例を考えてみましょう。
まずは送信ヘッダの偽装です。sender_canonicalを使用します。
自分の携帯アドレスを自分の偽装アドレスに書き換えて、相手の携帯アドレスを転送用の相手のアドレスに書き換えます。
送信に携帯会社のサーバを使ったら偽装は出来ません、そこで転送用の相手のアドレスを用意することによって自分のサーバ経由で相手の携帯電話にメールを送ります。

/etc/postfix/sender_canonical

自分の携帯アドレス 自分の偽装アドレス
相手の携帯アドレス 転送用の相手のアドレス

次は受信ヘッダの偽装です。recipient_canonicalを使用します。
送信とは逆のことをしていますが、自分の偽装アドレスを自分の携帯アドレスに直す必要はないですね。

/etc/postfix/recipient_canonical

転送用の相手のアドレス 相手の携帯アドレス

そして転送です。virtualを使えば簡単に出来ます。
参考記事:Google AppsしたらPostfixのバーチャルドメインでorz

/etc/postfix/virtual

転送用の相手のアドレス 相手の携帯アドレス
自分の偽装アドレス 自分の携帯アドレス

最期にpostmapコマンドとPostfixのリロードを忘れずに。

メールアドレスを偽装したい相手にメールを送りたい場合は、まず転送用の相手のアドレスにメールを送り自分の携帯アドレスを偽装アドレスにヘッダを書き換えます。そして相手の携帯アドレスにそのメールを転送します。
相手はそのまま返信するとFrom(自分の偽装アドレス)に返信しますが、その返信メールのFrom(相手の携帯アドレス)を転送用の相手のアドレスに変えておけば、自分がそのまま返信してもまた自分のアドレスを偽装できます。

と、偽装偽装と言っていますが携帯でサブアドレスが持てるサービスはこれとやっている事は基本的に変わりません。聞こえは悪いが立派な偽装です。
しかし、他人の携帯電話のアドレスに偽装してメールを送信する等は絶対にやったらいけません。
大人とは、三枚におろす方法は知っているが三枚におろさないことができる人を言うのです。
今回のこの方法は極々初歩的なメールヘッダ偽装の方法で、ちょっと知識があればすぐに見破る事が出来ます。メールについてより詳細に巧妙に偽装する方法はあるのですが、それは私は三枚におろさない大人なので・・・この件はこれにて一件落着であります。

セキュアメールサーバ構築のポイント

2009年7月18日 土曜日

Postfixの基本的な設定のポイントについてもメモっておこっかな。
ちなみに現在の私のメインサーバは環境的にはCentOS 5.3ですが。以下の設定は一例で大雑把なものですが、他の環境でもこんな感じのポイントを中心に見ていけば設定できると思います。
まずはmain.cfの設定です。
saslauthdを使ってSMTP-AUTHをするための設定が入っています。

/etc/postfix/main.cf

myhostname = mail.hogehoge.com
mydomain = hogehoge.com
myorigin = $mydomain
inet_interfaces = all
mydestination = ns.$mydomain, $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
message_size_limit = 104857600
virtual_alias_maps = hash:/etc/postfix/virtual

mydestinationの設定には注意が必要です。
以下の記事を参照してください。全ホストを漏れなくリストしときましょう。
mydestination設定の注意点

バーチャルドメインの設定については以下の記事を参照してください。
バーチャルドメインの設定

システムとは別にSMTP-AUTH専用のユーザとパスワードを使う設定です。もちろん同じにすることもできますが、セキュリティー的には別にしたほうが良いですね。
また、以下の設定では認証にCRAM-MD5を使用しています。
/usr/lib64/sasl2/smtpd.conf

pwcheck_method: auxprop
mech_list: cram-md5

SMTP-AUTH用のユーザとパスワードの設定方法です。

# saslpasswd2 -u mail.hogehoge.com -c hoge
Password:
Again (for verification):

SMTP-AUTH用のユーザを削除する方法です。

# saslpasswd2 -d hoge -u mail.hogehoge.com

SMTP-AUTH用のユーザのリストを見る方法です。

# sasldblistusers2
hoge@mail.hogehoge.com: userPassword

SMTP-AUTH用のユーザとパスワードの情報は/etc/sasldb2に記録されます。
main.cfのmail_ownerで設定されているユーザを確認し、そのユーザ以外は読めないようにパーミッションは要確認です。
この記事と合わせて以下の記事を参照すると、Postfix,Dovecot,OpenSSLを利用したセキュアなメール環境の設定のポイントがザッと分かると思いますので、興味のある方はどうぞ。

安いSSLを使う
Postfix TLS
Dovecot

Postfix TLS

2009年7月17日 金曜日

最近はPostfixとDovecotの組み合わせでメールサーバを構築しています。
Dovecotの受信をSSLにする設定のポイントを記事にしましたが、Postfixの送信のSSLについてもメモっておきましょう。
最近のディストロで普通にPostfixを使用していればTLSサポートでビルドされているでしょうし、以下のポイントを中心に見れば設定はスムーズにできると思います。

/etc/postfix/main.cf

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/hogehoge.com.crt
smtpd_tls_key_file = /etc/pki/tls/private/hogehoge.com.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

/etc/postfix/master.cf

smtps     inet  n       -       n       -       -       smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
tlsmgr    unix  -       -       n       1000?   1       tlsmgr

Postfixを再起動したら確認を忘れずに。SMTPS 465/tcpです。

# netstat -an --tcp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:465                 0.0.0.0:*                   LISTEN