2004/11/29

ApacheのWebdavでXPから共有(apache1.3編)(FreeBSD, Internet, Web)

はじめに

自宅と会社で楽にファイルの受け渡しができるように、Webdavを入れました。

Apache 1.3+Webdavは比較的多くのサイトで構築方法が紹介されていますが、私も便乗して公開します。

構築した際のサーバ・クライアントの情報は以下の通りです。

■サーバ

  • FreeBSD 5.3-RELEASE-p1
  • Apache 1.3.33-1
  • mod_dav-1.0.3_2
  • mod_encoding-20021209_1

■クライアント

  • Windows XP Professional SP2

Windows XPからBasic認証で失敗する人必読です。

mod_dav,mod_encodingのインストール

apacheは既にインストールされている事を前提で記述します。portsコレクションを最新にして、mod_dav,mod_encodingをインストールして下さい。mod_davはWebdavの本体モジュール、mod_encodingはWebdavで日本語ファイル名を使用する為に追加します。

# portinstall mod_dav
# portinstall mod_encoding

自動的にmod_davのLOCKディレクトリ及びファイルも適切なパーミッションで/var/db配下に作成されます。後は/usr/local/etc/apache/httpd.confを設定するだけです。

/usr/local/etc/apache/apache.conf.mod_davというサンプルファイルも作成されますが、これはmod_encodingについての記述は無いので、参考にはしないことにします。

環境設定

Webdavの動作環境として以下の条件で設定する場合の設定を説明することにします。

  • アクセスURL
    http://www.hijiki.net/dav/
  • 実体のディレクトリ
    /share/dav/
  • 認証方法
    専用のユーザ名とパスワードによるBasic認証

実体ディレクトリの作成

/share/davディレクトリを作成します。ディレクトリのパーミッションはApacheが動作しているデフォルトのユーザ・グループで作成します。httpd.confのUser,Groupで指定しているユーザ・グループです。通常はwww:wwwになっていると思いますので、そのパーミッションで作成します。

# cd /share
# mkdir ./dav
# chown www:www ./dav
# chmod 750 ./dav

ユーザの作成

この後指定するhttpd.confの設定と合わせれば別にどこに作成してもいいのですが、アカウント情報を/etc/webdav.passwdという名前で作成します。

ユーザ名とパスワードの作成は「htpasswd」というapacheに標準で含まれるコマンドを使用します。一人目のユーザを登録するときには-cオプションを付けて、ファイルの新規作成後にアカウント登録する形になります。以下の例では二人ユーザを登録しています。

# htpasswd -c /etc/webdav.passwd user1
New password:(パスワード入力)
Re-type new password:(パスワード入力)
Adding password for user user1
# htpasswd /etc/webdav.passwd user2
New password:(パスワード入力)
Re-type new password:(パスワード入力)
Adding password for user user2

このパスワードファイルもオーナーはwww(apacheデフォルトの場合)しか読み取れなくていいのでwww:wwwで他のユーザのパーミッションを外してしまいましょう。

# chown www:www /etc/webdav.passwd
# chmod 700 /etc/webdav.passwd

httpd.confの設定

httpd.confは以下の様に設定してください。

/usr/local/etc/apache/httpd.conf
LoadModule dav_module      libexec/apache/libdav.so
LoadModule encoding_module libexec/apache/mod_encoding.so

AddModule mod_dav.c
AddModule mod_encoding.c

# webdav
<IfModule mod_headers.c>
   Header add MS-Author-Via "DAV"
</IfModule>

<IfModule mod_encoding.c>
   EncodingEngine on
   NormalizeUsername on
   SetServerEncoding UTF-8
   DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
   AddClientEncoding "cadaver/" EUC-JP
</IfModule>

DAVLockDB /var/db/DAVLock
DAVMinTimeout 600

Alias /dav "/share/dav"

<Location /dav>
   DAV On
   AuthType Basic
   AuthName "Please Input ID and Password."
   AuthUserfile /etc/webdav.passwd
   <LimitExcept GET HEAD OPTIONS>
     Require valid-user
   </LimitExcept>
</Location>
      

NormalizeUsernameの指定はWindows XP独特の仕様変更で、Webdav認証時に「ホスト名\ユーザ名」として認証を試みる所をユーザ名だけで認証するために必要なパラメータです。

あとは、apachectl stopして、apachectl startすればWebdavが組み込まれたApacheが起動する筈です。

Windows XPからの共有

以下の手順で行います。

(1)マイネットワークから「ネットワークプレースの追加」を選択。

(2)ウイザード開始画面の「次へ」を選択

(3)「別のネットワークの場所を選択」を選び、「次へ」を選択

(4)URLの入力

URLに「http://www.hijiki.net/dav?」を入力

※URLの最後の「?」が重要です。これを入れないと先のユーザ認証で失敗します。

(5)ユーザ名、パスワードを入力

(6)ネットワークプレースの名前設定(すきな共有名)

(7)「完了」ボタンを押して終了

おわりに

Webdav共有は通常のファイル共有と違って、共有フォルダ上でファイルを開いたり実行したりはできませんが、遠隔地からファイルを共有する際にわざわざFTP等を使わないでも簡単に転送ができるのが良いと思います。

プロトコルにはHTTPを使用し、今回は認証もPlainなBasic認証なのでセキュリティ的にはどうかなと思いますが、便利に使えるので導入してみてはいかがでしょうか。

2004/11/27

FreeBSD qmail+vpopmailでVirtual Domain(Mail)

はじめに

別のエントリでqmailをrelay-ctrlを使ってPOP Before SMTPを実現し、Virtual Domainはqmaiの機能を使ったやり方で紹介しましたが、今回はqmail+vpopmailを使用した方法について説明します。既にqmailが動いている人向けの移行注意点も一緒に記載します。

前回と同じくセットアップの前提条件として

  • Virtual Domain(複数ドメイン)対応
  • POP Before SMTPを実装

を含んでいます。APOPには今回も対応しませんが、vpopmailのビルドオプションで簡単に実現はできそうです。

vpopmailの特徴

普通にqmailだけでメールアドレスを管理すると最終的に配信されるユーザ毎にUNIXアカウントが必要になりますが、vpopmailはUNIXアカウントとは別にメールアドレスとパスワードを保持し、メールスプールも一括管理されます。

また、Virtual Domainの追加や、ユーザ、aliasの追加は全てコマンドラインからvpopmailのコマンドを入力することによって行われます。Web上からユーザやaliasの管理ができるqmailadminやvqadminなどのツールもオープンソースで出ています。

更に標準でPOP Before SMTPにも対応しています。

必要なパッケージ

qmail+vpopmailを運用させるのに必要なパッケージは以下の通りです。

  • qmail
  • ucspi-tcp
  • checkpassword
  • vpopmail

portsを最新にして、portinstall等からインストールして下さい。

もし、qmailの付与するヘッダの日付がGMTじゃなく、localtime(JST)で表示させたい場合は先に以下の設定をしてパッチの準備をしておきます。

# cd /usr/ports/mail/qmail/files
# fetch http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
# gzcat qmail-date-localtime.patch.gz > patch-date-localtime
# rm qmail-date-localtime.patch.gz

※一応標準設定で不正中継対策は大丈夫なように出来ていますが、「telnet relay-test.mail-abuse.org」 で全てのチェックをパスしたいときには先に以下の設定をしてパッチの準備をしておきます。

# cd /usr/ports/mail/qmail/files
# fetch http://www.qmail.org/qmail-smtpd-relay-reject
# mv qmail-smtpd-relay-reject patch-qmail-smtpd-relay-reject

簡単にそれぞれのパッケージの説明をします(間違っているかもしれません)。

qmail MTA本体
ucspi-tcp qmailをセキュアな状態で運用するためのwrapper
tcpserverというプログラムからqmailの各種プログラムを呼び出す
checkpassword popでメール受信する際に行うパスワードチェックプログラム
qmailのパッケージに入っているpop3デーモンが呼び出す
vpomail qmailでVirtual DomainとPOP Before SMTPを実現するためのプログラム群

vpopmailのインストール先について

portsからvpopmailをインストールすると、/usr/local/vpopmail配下に設定されます。また、vpopmailはこのインストールされたディレクトリ配下に各ドメイン、ユーザ、alias、受信メールをストアするので、なんかイヤです。できるだけ/usrパーティションが増えすぎないように考慮して、私はvpopmailの各設定ファイルについては/var/vpopmailに設定するように変更しました。

# mkdir /var/vpopmail
# mkdir /var/vpopmail/domains
# rmdir /usr/local/vpopmail/domains
# ln -s /var/vpopmail/domains /usr/local/vpopmail/.

qmail+vpopmailの設定

※既にqmail単体でVirtual Domainを実現している人は、全てのユーザのメール受信を確認後、qmailサービスを停止し、以下のファイルを削除して、qmailを停止してから作業を行って下さい。

  • /var/qmail/alias/.qmail-*
  • /var/qmail/controls/virtualdomains

/var/qmail/controlの設定

qmailの各種初期設定情報は/var/qmail/controlディレクトリ配下に準備します。設定するマシンのIPアドレスがグローバルアドレスでネームサーバで逆引き設定がされている場合は以下のコマンドで自動で設定されます。

# /var/qmail/configure/config

私の環境では上記コマンドを実行するとプロバイダの名前が各種設定ファイルに登録されてしまうので、自分で/var/qmail/controlディレクトリ配下のファイルを編集する事になりました。以下に個々のファイルの設定内容を示します。

/var/qmail/control/defaultdomain
hijiki.net

↑これは@以下が省略されたメールを送信した際に自動的に付与するドメイン名です。

/var/qmail/control/locals
localhost

↑受信するホスト名ドメイン名を記述します。これはqmail-sendというプロセスが参照します。

/var/qmail/control/rcpthosts
localhost

↑受信するホスト名ドメイン名を記述します。これはqmail-smtpdというプロセスが参照します。後述するVirtual Domainを設定する時にもこのファイルをいじります。

/var/qmail/control/me
hijiki.net

↑自サーバのFQDNを指定します。

/var/qmail/control/plusdomain
net

↑ドメイン部が+で終わっている場合にその後ろに付与する文字列を指定します。何の為にあるのかよく分かりません。適当でいいと思います。

qmailのaliasの削除

qmailインストール直後には/var/qmail/alias配下に.qmail-*というaliasファイルがあります。既にqmailを利用している人もaliasファイルはこのディレクトリ上に作成していると思いますが、vpopmailを使用する場合、aliasの管理もvpopmailが/usr/local/vpopmail/domainsディレクトリ配下で管理しますので、全て一旦削除します。

# cd /var/qmail/alias
# rm -f .qmail-*

Virtual Domainの作成

それでは必要なVirtual Domainを作成しましょう。今回はhijiki.netのドメインを作成します。別にvpopmailを使ってVirtual Domainを利用するからといって、複数のドメインである必要はありません。ドメインが一つだけでも、コマンドラインでユーザ管理等が行えるので便利ですよ。

さて、作り方ですが、/usr/local/vpopmail/binにあるvadddomainコマンドを使います。vadddomainは指定ドメインの設定を行うほかに、「postmaster@指定ドメイン名」を作成しますので、postmasterのメール受信パスワードの設定も同時に行います。

具体的には「vadddomain ドメイン名パスワード」の形式で実行します。パスワードはコマンドライン引数で省略した場合、コマンド実行後に聞いてきますのでそこで入力してもOKです。

「vdominfo ドメイン名」で作成されたドメイン情報が表示されます。ドメイン名を間違えて入力してしまったら、「vdeldomain ドメイン名」で削除もできます。

# cd /usr/local/vpopmail/bin
# ./vadddomain hijiki.net password01
# ./vdominfo hijiki.net
domain: hijiki.net
uid: 89
gid: 89
dir: /usr/local/vpopmail/domains/hijiki.net
users: 1

ユーザの追加

ユーザの新規追加は「vadduser ユーザ名@ドメイン名」の形式で行います。実行するとパスワード入力を二回聞かれますので、同じパスワードを入力してください。

追加確認は「vuserinfo ユーザ名@ドメイン名」でOKです。また、ユーザ名を間違えてしまったら「vdeluser ユーザ名@ドメイン名」で削除します。

# ./vadduser hoe@hijiki.net
Please enter password for hoe@hijiki.net:[パスワードを入力]
enter password again:[パスワードを入力]
# ./vuserinfo hoe@hijiki.net
name: hoe
passwd: $1$o1AXafVj$mMC9X8tz.cEdxE3Nw7B1D0
clear passwd:
uid: 1
gid: 0
flags: 0
gecos: hoe
limits: No user limits set.
dir: /usr/local/vpopmail/domains/hijiki.net/hoe
quota: NOQUOTA
usage: NOQUOTA
account created: Sat Nov 27 20:10:28 2004
last auth: Never logged in

aliasの設定

メールサーバを立ち上げると、root,webmaster,postmaster,infoあたりのユーザにメールが必ずと行っていいほど来るようになりますね。まあ基本的にはSPAMなんでしょうけど、その辺のメールをaliasで一人のユーザに転送する設定をしましょう。postmasterはvadddomainで自動的に個別のアカウントが作成されますが、aliasを設定すればそちらが優先されますので、転送しておいた方が便利です。

コマンドは「valias -i ユーザ名@ドメイン名 alias名@ドメイン名」となります。一覧を見るには「valias -s ドメイン名」とします。aliasの削除は「valias -d alias名@ドメイン名」です。

# ./valias -i yotan@hijiki.net asd@hijiki.net
# ./valias -s hijiki.net
root@hijiki.net -> yotan@hijiki.net
webmaster@hijiki.net -> yotan@hijiki.net
info@hijiki.net -> yotan@hijiki.net
postmaster@hijiki.net -> yotan@hijiki.net
asd@hijiki.net -> yotan@hijiki.net
rabi# ./valias -d asd@hijiki.net

tcpserverの設定

qmailのデーモンはtcpserverから起動されます。tcpserverはいわゆる接続制御を行ってくれます。

qmailのデフォルトでは/etc/tcp.smtpを使用するのが一般的ですが、vpopmailはPOP Before SMTPの制御の為に動的に/usr/local/vpopmail/etc配下に、このtcp.smtpとPOPログイン情報を追加したtcp.smtp.cdbを作成しますので、デフォルト設定を変更するファイルは/usr/local/vpopmail/etc/tcp.smtpになります。

今回はsmtpに対するアクセスをローカルエリア内からのみアクセス可能な設定をします。自宅の環境はネットワークが192.168.0.0/24となっています。

/usr/local/vpopmail/etc配下にtcp.smtpという名前でファイルを作成します。中身は以下の様に設定します。

/usr/local/vpopmail/etc/tcp.smtp
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

一旦vpopmailを組み込んだqmailが動作してしまえばtcpserverが認識できるcdb形式のファイルは自動的に作成されるのですが、始めは一応手動で作成しておいた方がよさそうです。以下のコマンドで/usr/local/vpopmail/etc/tcp.smtp.cdbが作成されます。

# /usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb /usr/local/vpopmail/etc/tcp.smtp.tmp < /usr/local/vpopmail/etc/tcp.smtp

今回はsmtpに対する制限だけを説明します。pop3についても制限をかけることが出来ますが、今回は省略します。

POP Before SMTPタイムアウトの設定

POPへのアクセス後一定時間経ったらSMTPの許可リストをクリアするために、cronで5分周期程度でプログラムを実行させる必要があります。

crontab -eでcrontabに以下の一行を追加します。

*/5 * * * * /usr/local/vpopmail/bin/clearopensmtp > /dev/null 2>&1

/var/qmail/rcの作成

portsからqmailをインストールすると、/usr/local/etc/rc.d/qmail.shの実体は/var/qmail/rcにシンボリックリンクされています。しかし実際にはそのファイルは存在しませんので、一から作る必要があります。

以下にサンプルのrcファイルを示します。

/var/qmail/rc (/usr/local/etc/rc.d/qmail.sh)
#!/bin/sh
case $1 in
start)
        echo "Start qmail ..."
        exec env - PATH="/var/qmail/bin:$PATH" \
        qmail-start ./Maildir/ splogger qmail &

        /usr/local/bin/tcpserver -v -u 82 -g 81 \
        -x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp \
        /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

        /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net \
        /usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
        ;;
stop)
        echo "Stop qmail ..."
        PID=`/bin/ps -afwww | grep qmail | awk '{print $1}'`
        if [ ! -z "$PID" ] ; then
                /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        ;;
status)
        /bin/ps -afw | grep qmail
        ;;

*)
        echo "usage: `basename $0` {start|stop|status}" >&2
        exit 64
        ;;
esac

非常に難解ですが、これもqmailの特徴でqmail単体では非常にシンプルなメール配送しか行わず、他のアドインソフト(tcpserver,vpopmaill等)を色々組み合わせて順番に指定して複雑な機能を実現する形を取っています。

qmailの起動

既に他のMTAが動いている場合は止めて下さい。またPOPサーバも停止します。ここからしばらくはメールの送受信が行えなくなりますので手際よく作業を行って下さい。

sendmailの停止(必要に応じて作業)

以下のコマンドで停止します。

# sh /etc/rc.d/sendmail stop

後は再起動時に自動でsendmailが立ち上がらないように/etc/rc.confを修正します

/etc/rc.conf
sendmail_enable="NONE"

Postfixの停止(必要に応じて作業)

以下のコマンドで停止します。

# postfix stop

後は再起動時に自動でPostfixが立ち上がらないように/usr/local/etc/rc.d/postfix.shをpostfix.sh.norun等にリネームします。

popの停止(必要に応じて作業)

popデーモンをinetd経由で起動していると仮定します。

/etc/inetd.confのpop3の行をコメントアウトします。

/etc/inetd.conf
#pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper

最後にinetデーモンにHUPシグナルを送ればpopサーバは停止します。

# killall -1 inetd

mailer.confの編集

FreeBSDは/usr/sbin/sendmail等は全てmailwrapperというプログラムにシンボリックリンクが張られていて、/etc/mail/mailer.confで定義することにより自由に各種コマンドを別のMTAのものに入れ替えることが出来ます。

まあ、既にPostfix等別のMTAを使ったことのある人には説明は不用ですが、今回はqmailを使うのでmailer.confを以下のように設定します。前のファイルをバックアップするかどうかはお任せします。

/etc/mail/mailer.conf
sendmail        /var/qmail/bin/sendmail
send-mail       /var/qmail/bin/sendmail
mailq           /var/qmail/bin/qmail-qread
newaliases      /var/qmail/bin/newaliases
hoststat        /var/qmail/bin/qmail-tcpto
purgestat       /var/qmail/bin/qmail-tcpok

qmailの起動

さて、いよいよqmailを起動します。別にOSをrebootしてもいいのですが、以下のコマンドで起動て、その直後にステータス確認を行いましょう。

# /usr/local/etc/rc.d/qmail.sh start
Start qmail ...
# /usr/local/etc/rc.d/qmail.sh status
61154 p0 S+ 0:00.01 /bin/sh /usr/local/etc/rc.d/qmail.sh status
61156 p0 S+ 0:00.00 grep qmail
84983 p0- I 0:00.10 qmail-send
84984 p0- I 0:00.01 /usr/local/bin/tcpserver -v -u 82 -g 81 -x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qma
84985 p0- I 0:00.01 /var/qmail/bin/splogger smtpd 3
84986 p0- I 0:00.51 /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net /usr/local/vpopmail/bin/vchkpw /var
84987 p0- I 0:00.02 splogger qmail
84988 p0- I 0:00.01 qmail-lspawn ./Maildir/
84989 p0- I 0:00.00 qmail-rspawn
84990 p0- I 0:00.01 qmail-clean

上記のようにqmail-*が沢山起動していればとりあえずOKだと思います。

動作確認

Windows等のメーラーでアカウント設定する場合、アカウント名には「ユーザ名%ドメイン名」の形式で指定します。別に%は@でも大丈夫そうですが、一応言われたとおりに設定して下さい(笑)。

あとはローカル配送、外へ向かっての配送、外からの受信を確認します。

おわりに

ドメインの追加(vadddomain)以外のユーザの追加等はqmailの再起動なしに行うことができます。

コマンドラインからの設定が面倒な人にはqmailadminというWeb用ツールがお勧めです。ただし、このCGIはApacheのsuexec環境では動作させることができませんでした。一応それでも動作確認はしたのですが別にこれといって特筆するべき事も無いので説明は省略します。

興味のある方はqmailadminも入れてみて下さい。

2004/11/13

FireFoxを使っている(Internet)

ここ数日FireFoxを使ってWebサーフィングしていますが、なかなかいい感じです。

タブブラウザ機能も便利だし、他のタブブラウザと違って、一つしか表示していないときはIEと同じように表示されるし。

また、画面内文字検索がウインドウ下部に出て入力した文字をリアルタイムに検索してくれて便利です。ちょっと残念なのが、テキスト入力フィールド内の検索が出来ないことかな。

あと、MovableTypeでエントリ編集しているとJavaScriptでリンクの作成が簡単にできるボタンがIEでは付くのですが、FireFoxでは使えなかったりもします。

Web検索も画面右上の入力フィールドに文字列を入れるだけで日本の検索エンジンをサーチしてくれるし、細かいところでIEを抜いています。あとはIEとの互換性が高まれば完璧ですね。

なんかfan clubも出来たようなのでメールマガジンに登録してみました。どんな内容が届くのかな。