Google Appsもろもろ設定

某ドメインでGoogle Apps Standard Editionを利用していたのですが、そのドメインのメールアドレスがSPAM配信に使われているようで、配信不能なエラーメールが大量に届くようになってしまいました。
とりあえず、

  • 存在しないアカウント分は受信しないことに
  • こちらのヘルプに従いSPFレコードを設定

をおこなって様子見です。

mod_rewriteで期間指定のリダイレクト

Apacheのmod_rewriteではRewriteCondの判定に日付や時間を使うことができます(TIME_*変数)。
これを使うとある期間限定でのリダイレクト設定を施すことが可能です。

たとえば年末年始を休暇中のページにする。

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20071228
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} <20080104
RewriteRule ^/index\.html /vacation.html [R,L]

上の例では2007年12月29日から2008年1月3日の間、全ページへのアクセスが/vacation.htmlにリダイレクトされます。ちなみに比較演算子には">="や"<="は使えません。

TIME_HOURやTIME_MINを使えば時間帯を指定することもできます。夜間はリダイレクトするといった設定も。

RewriteCond %{TIME_HOUR}%{TIME_MIN} >1800 [OR]
RewriteCond %{TIME_HOUR}%{TIME_MIN} <0900
RewriteRule ^/index\.html /sleep.html [R,L]

条件へのマッチ状況はRewriteLogLevel 4以上でチェックできますので、そちらでご確認ください。

詳しくはApache公式ドキュメントをどうぞ。
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

A Collection of JVM Options

A Collection of JVM Options
SPARC/Solarisのみですが、jvmのバージョン毎に利用可能なオプションが一覧できます。

TomcatのSession Persistenceを無効化

Session Persistenceといっても、LoadBalancerなどで設定するCookie Persistenceのハナシではありません。

Tomcatは停止時にセッション状態をファイルに保存して、起動時に読み込んでセッションを永続化するようになってます(Session Persistence)。

場合によっては便利ですが、セッションに積むインスタンスがシリアライズに対応していないとExceptionが発生したり、作りによっては都合がよくありません。

Session PersistenceはManager Componentでおこなってますので、こちらの設定で無効化することができるようになってます。
Apache Tomcat Configuration Reference - The Manager Component

手っ取り早くTomcat全体で無効化してしまうには、$CATALINA_HOME/conf/context.xmlに

<Manager pathname="" />

と書かれた部分がありますのでこちらを有効にします。デフォルトではSESSIONS.serというファイル名なのですが、それをnullにしているので保存しないようになります。

Manager Conponentでは、このほかにセッションIDの長さ(sessionIdLength)や、最大セッション数(maxActiveSessions)などを設定することができるようになってます。

なお、Managerの設定はContext単位になりますので、バーチャルホストやアプリケーション毎に設定することも可能です。
詳しくはApache Tomcat Configuration Reference - The Context Containerを。

ちなみにTomcat 4の頃からずばりsaveOnRestart="false"と設定できるPersistent Managerがあったのですが、当時はExperimentalと注意書きされていました。Tomcat 6になってもExperimentalのままなので開発止まっちゃったんですかね Puzzled

Postfixに宛先だけで中継許可判定させる

Postfixを使って、特定のドメイン、宛先にしかメールを送信できないMTAを用意してみました。
mynetworks以外からの接続でも、宛先さえマッチすればいくらでも中継するという、本番ではあまり好ましくない構成ですが、テスト環境としては重宝したりします。環境はCentOS 3.9+Postfix 2.0.16です。

まずは、mynetworksであれば中継するという動作を抑制するため、main.cfのsmtpd_recipient_restrictionsからpermit_mynetworksを取り除きます。

smtpd_recipient_restrictions = reject_unauth_destination

次に送信可能な宛先をrelay_domainsとrelay_recipient_mapsに定義します。
main.cfのrelay_domainsに中継可能な宛先を列挙します。

relay_domains = example.jp,
 example.com,
 example.net
relay_recipient_maps = hash:/etc/postfix/relay_recipients

さらにrelay_recipient_mapsにユーザ名まで含めた宛先を列挙します(/etc/postfix/relay_recipients)

@example.jp		#
user1@example.com	#
user2@example.net	#

これで一応example.jpは全ユーザ宛、example.comとexample.netは一部ユーザ宛に送信可能で、それ以外には送信できないMTAになるはずです。

ただ、一点不可解な動きがあって、SMTP接続では意図した動作になるものの、sendmailコマンドで送信すると宛先に関係なく送信できてしまう状態になってしまいました。コマンド起動だとmain.cf利かないなんてわけはないだろうし…謎です Puzzled

Google AdSenseを設定してみました

Google AdSenseを申し込んでみたらすぐに審査が通ったようなので設定してみました。

DrupalはAdSenseモジュールを入れれば簡単に設定できます。

  • Google AdSenseのサイトで「コンテンツ向け AdSense」の設定をし、AdSense用のIDを入手する。この時点では広告のタイプとか選ばなくてもOK。
  • "Administer » User management » Profiles"にいって、single-line textfieldとしてprofile_google_adsense_client_idフィールドを定義する。
    名前は"Google AdSense client ID"などとし、Private fieldに設定しておく。
  • 実際のUser ProfileにAdSenseのIDを設定する。
  • AdSenseモジュールの設定で、"Google AdSense client ID profile field"にprofile_google_adsense_client_idに設定した名前を選択する。
  • "Administer » Site building » Blocks"でAdSense用のブロックを定義する。広告のタイプはここで選ぶ。

あとは広告が表示されるのを待つだけ。

あとはAdSenseモジュールの設定で"Placeholder when ads are disabled?"というオプションがあるので、これをチェックしておくとAdSense IDを設定したユーザでは広告が表示されなくなり誤クリックを予防できます。これは便利。

Google Analyticsモジュールでも認証ユーザにはトラッキングコードを出さないようにできたり、やはり細々と配慮が行き届いてます。

IE+SSLでダウンロードできない問題

MovableType 3で「エントリーの書き出し」をやろうと思ったら、FirefoxやOperaはOKだがInternet ExplorerはNG、という問題に遭遇。
どうもSSL+IEでのみ発生する問題らしい。
Internet Explorer が SSL 経由によるファイルのダウンロードで "No-Cache" ヘッダーを処理できない
こちらに掲載されているレジストリ変更をおこなったところ、IE7はOKになったがIE6は直らなかった Puzzled
(HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"BypassSSLNoCacheCheck"=Dword:00000001を追加)

一般ユーザにレジストリ変更してもらうのは大変なのでサーバサイドで対処したほうがよさそうだが、その場合はHTTPヘッダとして

Cache-Control: public
Pragma: public

を返すようにすればよい模様。

この問題、以下のKBに一通りまとまっていた。
Prevent caching when you download active documents over SSL
自動翻訳されたものはこちら
SSL でアクティブ ドキュメントをダウンロードすると、キャッシュを禁止します。

テーマ変更

DrupalのデフォルトテーマをTechに変更してみました。
コンテンツ内のリストマーカーがはみ出してしまってるのが気になりますが…
non-zeroのときもそうだったのですが、スタイルシートに

#content ul{
  margin-left: 1em;
}

などを追加してあげればちょっとは改善するものの、他の部分にも微妙に影響が出るので、適用しようか否か悩んでます。

IIS 6.0で「既定の FTP サイト」をユーザー分離モードに変更する方法

すみませんが試せていないので、本当にできるのか問題ないのかわかりません。

IIS 6.0でユーザー分離モードを使うと、ユーザー別に異なるFTPホームを割り当てることができます。
このユーザー分離モードはFTPサイトを作成する際のウィザードに答える格好で構成するのが一般的ですが、これだと「既定の FTP サイト」のままでは使うことができません(Active Directoryを使うユーザ分離モードはiisftp.vbsスクリプトを使って後からでも構成できます)。
また新しく作成するサイトには"Metabase Path"というランダムな値が振られ、ログファイルディレクトリなどに使われるので、構成管理上ちょっと気持ちが悪いです。

この「ユーザー分離モード」という状態は、メタベースという情報に記録されているので、こちらを設定すれば規定のFTPサイトでもユーザー分離モードに変更することができそうです。
UserIsolationMode メタベース プロパティ (IIS 6.0)

C:\WINDOWS\System32\inetsrv\MetaBase.xmlには「既定の FTP サイト」というServerCommentの設定が含まれているので、そちらにUserIsolationMode="1"を追加してあげればいいはず。

<IIsFtpServer	Location ="/LM/MSFTPSVC/1"
		ServerAutoStart="TRUE"
		ServerBindings=":21:"
		ServerComment="既定の FTP サイト"
		ServerSize="1"
                UserIsolationMode="1"
	>

IIS 6.0からメタベースがバイナリ形式からXML形式に変わってので楽になりました。

なおメタベース編集をIIS稼働中におこなう場合は、IIS管理マネージャのプロパティで「メタベースの直接編集を有効にする」をチェックする必要があると思われます。

例示用に使える予約ドメインと予約IPアドレス

例示用、テスト用に使用できる予約ドメインがあるのはいまや有名な話。
RFC 2606 - Reserved Top Level DNS Names

IPv4アドレスにも例示用に使用できる領域が予約されている。
RFC 3330 - Special-Use IPv4 Addresses

  • APIPAでアサインされるアドレス
    169.254.0.0/16 - This is the "link local" block.
  • 例示用はこれ
    192.0.2.0/24 - This block is assigned as "TEST-NET" for use in documentation and example code.
  • ベンチマークテスト用なんてのもある
    198.18.0.0/15 - This block has been allocated for use in benchmark tests of network interconnect devices.

など。他にもいろいろ書かれている。

ドキュメンテーションや例示用の場合、ドメイン名にはexample.jpとかexample.comを、IPアドレスには192.0.2.0/24を使おう、ということになる。