の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/サーバー構築メモ その2/メールサーバー その2
|
|
2010年9月24日(金) |
2011年1月6日(木) 修正 |
メール送信制限にSMTP-AUTHによる認証を設定します。 また併せて受信制限によるスパムメール対策を施します。 最終的に落ち着いたのはPostfix + DovecotでDovecot SASLを使う方法。 これがメールサーバーとして一番楽でいい組み合わせかもしれない。 |
|
|
PostfixやSendmailなどのSMTPサーバーはそのままではだれでもメール送信が可能です。このままではスパムメールの発信基地として利用されてしまいますので、このサーバーのメールユーザーのみが送信可能なように認証設定を行います。 また何も設定しなければすべてのメールを受け取りますが、これも大量のスパムメールを受け取ることになりますので併せてメールの受信制限(スパムメールの受信拒否)も行います。 ただしこれだけでは受信スパム対策としては甚だ不十分で、別途 再度のスパム対策 も併せてご覧ください。
|
送受信制限設定
/etc/postfix/main.cfに以下の設定を追加します。 基本設定とバーチャル配送定義の間にでも書き込みます。 まずはSMTP-AUTHにCyrus-SASLを使う場合。 ...... # saslによるSMTP Authを有効にする smtpd_sasl_auth_enable = yes # anonymousは許可しない smtpd_sasl_security_options = noanonymous # OutlookなどのためにLOGIN認証を使用する broken_sasl_auth_clients = yes # SASLアプリケーションの指定(ただしpostfixバージョン>2.3の場合) # ディフォルトでこれ(Cyrus SASL)になってはいる smtpd_sasl_type = cyrus smtpd_sasl_path = smtpd
# HELOコマンドでホスト名をチェック smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/access, permit
# RFCの定義に適合しないメールアドレスが通知された場合受信拒否 strict_rfc821_envelopes = yes
# 送信元ホストの接続許可制限 smtpd_client_restrictions = permit_mynetworks, check_client_access hash:/etc/postfix/access, reject_rbl_client all.rbl.jp, reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl-xbl.spamhaus.org, …2011.1.6 誤認が多いといううわさなのではずしてみる。 reject_unauth_pipelining,
reject_unknown_reverse_client_hostname, …2011.1.6 稀にスパム発信元でもないのにちゃんと設定していないサーバーがあり、やむなく削除。絶大な効果があったんだけど。 permit
# メール送信の制限 smtpd_recipient_restrictions = permit_mynetworks, check_recipient_access hash:/etc/postfix/access, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, permit
# メール送信者のチェック smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access, reject_non_fqdn_sender, reject_unknown_sender_domain, permit ......
|
このままではまだ送信はできません。 Cyrus-Saslを設定していないため認証できないからです。
|
Cyrus SASL
メール送信の認証にまずはもっとも一般的に使用されているCyrus-Saslをやってみます。これはすでにインストールされています。 前のサーバーではまだ理解不足もあってかMySQLにうまくつながらなかったり、ドメイン名込みのname@domain.tld形式のユーザ名がうまく認識されずソースを修正したりしましたが、今回はまずはそのままやってみます。
メールのユーザやパスワードなどはPostfixAdminによってMySQLデータベースに格納されています。 このデータを使ってCyrus-Saslで認証するには 1.直接MySQLデータを参照する方法 2.すでに動いているIMAPサーバー(Dovecot)を通して認証を確認する方法 の2つがあります。 Dovecotの認証にMySQLのデータベース以外の(PAMなどの)認証データがある場合は2がよさそう。(だぶって設定するのはたいへんそう。やる気なし。) 今回はMySQLだけなのでどちらでもかまいません。 ためしに両方やってみます。
|
その1:MySQL直接
/usr/lib/sasl2/smtpd.conf を作成して pwcheck_method: auxprop auxprop_plugin: sql sql_engine: mysql sql_database: postfix sql_hostname: localhost sql_user: postfix sql_passwd: MySQLパスワード sql_select: SELECT password FROM mailbox WHERE username='%u@%r' AND active='1' mech_list: plain login saslauthd_path: /var/run/saslauthd/mux log_level: 3
を記載 パスワードが書いてあるのでいちおうchmod 0640しておきます。 ためしに登録されたメールアカウントから送信してみて...OKです。 |
|
その2:IMAPサーバー経由(RIMAP)
/usr/lib/sasl2/smtpd.conf には pwcheck_method: saslauthd mech_list: plain login saslauthd_path: /var/run/saslauthd/mux log_level: 3
を記載 さらに/etc/sysconfig/saslauthdに SOCKETDIR=/var/run/saslauthd MECH=rimap FLAGS="-r -O localhost"
を記載 RIMAPの場合は先にCyrus-Sasl(saslauthd)を起動しておく必要がありますので、 # service saslauthd start # chkconfig saslauthd on 同様にメール送信テストしてみて...これもOKです。 |
|
Dovecot SASL
PostfixくんとDovecotさんはなぜか仲良しです。 両者にDovecotの認証機構をそのまま共有するための機能が備わっています。 これも試してみます。 /etc/dovecot.confのauth defaultのsocket listenの最後の部分を書き換え。 auth default { mechanisms = plain login ......... socket listen { client { # デフォルトの Postfix の $queue_directory 設定を仮定 path = /var/spool/postfix/private/auth mode = 0660 # デフォルトの Postfix のユーザとグループを仮定 user = postfix group = postfix } } } /etc/postfix/main.cfの以下の項目を書き換え # SASLアプリケーションの指定 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth dovecot, postfixを再起動してメール送信テスト。OK。 これがメールサーバーとしていちばん楽で確実な組み合わせかもしれない。 |
|
3つともどれでもOKということがわかりましたので、あとは好みの問題でどれかひとつを有効にしておきます。 今回はそのまま最後のDovecot SASLにしておきました。余計なプログラムを介さないだけ安定ではないだろうかと。(実はそのままの設定で楽をしたかっただけ?)
|
あと、/etc/postfix/のaccess, header_checks などにはスパム拒否の設定を随時書き込みますが、現行サーバーのファイルをそのまま移行しました。
|
2011.05.10 さらなるスパム対策
|
|
|