今回はLinuxサーバーをSSHポートフォワーディングを使用したトンネル接続でVNCコントロールする方法を使用してみます。
最近のディストリビューションでは標準でVNCがインストールされるパッケージオプションも多く、少なくとも大抵のディストリビューションのインストーラーにRPMパッケージは含まれています。今回の設定も CentOS6 とそれに含まれている VNCサーバーで設定をしてみました。従ってVNCサーバーは標準のRPMインストールです。
まずはVNCサーバーの設定ですが、デーモンとしてサービス起動するとGUIが常駐することになるので普通はやりません。xinetd経由で起動することもできますがサーバーの設定作業を楽にすることを目的とし、一般ユーザーに解放するものではないので使用するときだけ手動で起動することにします。
VNC の起動コマンドは「vncserver」ですがLinuxのようなマルチデスクトップのOSではこれにスクリーン番号のオプションを付けて起動します。何もオプションを付けなかった場合はスクリーン0として扱われ、これは「vncserver :0」というコマンドを実行したのと同じになります。クライアントが接続出来るスクリーンは1つに限定されるため、複数のユーザーで同じスクリーンを同時使用することはできません。従って、複数の人間がアクセスする可能性がある場合はユーザーごとにスクリーンを分けておくことが賢明です。
また、ここで扱うスクリーン番号はVNCのポート番号に連動しており、0ならば5900、1ならば5901のようになります。後ほど設定するSSHのポートフォワーディングで使用するので覚えておきましょう。
1. 起動コマンドのエリアス設定
各ユーザーごとに使用するタイミングで起動、終わったら終了させることを前提に各ユーザーの「.bashrc」ファイルにコマンドエリアスを作成しておきます。
編集ファイル:/home/ユーザー/.bashrc
最終行に以下の2行を追加(スクリーン番号は任意に変更する)。
alias vncstart=’vncserver :1′
alias vnckill=’vncserver -kill :1′
ここでは起動を「vncstart」、終了を「vnckill」というコマンドに設定していますが任意の表現でかまいません。なお、ここで設定したエリアスは次回ログインから有効になるので注意しましょう。ということで一回ログアウトして再度ログインしてコマンドを実行してみます。
# vncstart
起動メッセージが表示されパスワードの入力を求めてくるのでパスワードを入力、設定します。起動した旨のメッセージが表示されたらプロセスを確認してみます。
# ps ax | grep Xvnc
プロセスの確認ができたら一旦終了させます。
# vnckill
最初の起動でユーザーディレクトリ配下に「.vnc」というディレクトリが作成され、この中にXの設定、パスワード、ログが保存されるようになります。
次にVNCで使用するデスクトップを標準のtwmからgnomeに変更します。
2. デスクトップの変更
編集ファイル:/home/ユーザー/.vnc/xstartup
最終行をコメントアウトしてコマンドを追加する。
#twm &
exec gnome-session &
次にSSHサーバーがポートフォワーディングを使えるように設定を変更します。
3. SSHDポートフォワードの設定
編集ファイル:/etc/ssh/sshd_config
#AllowTcpForwarding yes
上記記述のコメントアウトをはずす。
AllowTcpForwarding yes
以上でサーバー側のセットアップは終了です。上記 1 は各ユーザーごとに別のスクリーン番号で設定し、設定したスクリーン番号を覚えておいて下さい。
4. SSHクライアントの設定
SSHトンネルを作るためのクライアントの設定ですが、ここでは「putty」を使用します。「poderosa」を使用する場合は別途プラグインが必要となります。
すでにサーバー接続のセッション情報は保存してあることを前提に説明します。
putty を起動したら保存してあるセッションを読み込みます。左側のSSHの中から「トンネル」を選択します。
「フォワードするポートを追加」の「源ポート」に任意の使用していないポート番号を入力します。上では15901を使用しています。
「送り先」に localhost:ポート番号 のように入力します。ここではスクリーン番号「1」に対応した「5901」を入力しています。追加ボタンをクリックしてポート一覧に追加します。これでトンネルの設定は終わりです。毎回入力しなくていいようにセッションに保存しておきましょう。
このセッションでサーバーに接続し、1で設定したコマンドでVNCサーバーを起動します。起動が確認できたら vncviewer を起動して接続してみます。
上のように入力してOKをクリックしパスワード入力ダイアログが表示されればトンネル接続は成功です。
]]>12.設定完了後のトラブルシュート
前回までで一通りの設定は終了しましたが、幾つかの問題点が発見されました。内容は次のようなことです。
1. DTI側のメンテナンスが発生した後、もしくはVMサーバーの再起動を行った時に Dovecot の設定ファイルである dovecot.conf ファイルが書き換わってしまう。
2. ウェブフォームからphpでメール送信ができない。
3. 外部ドメインからのメールを受信できない。
まず1の問題ですが、これは BlueOnyx が設定ファイルを書き換えてしまうようです。Dovecot は BlueOnyx でも使用しているため、メールを使用しない設定をしていると設定ファイルが初期化され、設定ファイルの以下の行が書き換わります。
protocols = pop3 imap → protocols =
つまり、メールを使用しないという設定のために使用するメールプロトコルを空白に書き換えてしまうわけです。プロトコルの設定が記入されていませんからサービスの起動も失敗します。
今回の場合LDAPでバーチャルドメインを使う方法で構築しているためできませんが、通常の構築であれば BlueOnyx 側で Dovecot だけを使用する設定をするのがいいのかもしれません。つまり POP3、IMAP サーバーとして構成する方法です。
私の場合は仕方がないのでコピーを作成し、メンテナンスの後にコピーしてあるファイルと置き換える方法で対処しています。
2と3の問題は smtp のポート番号を変更した後で発生しました。考えてみれば単独のメールサーバーでメールゲートウェイを兼ねているわけですから25番ポート以外を指定すれば動かないのは当然なわけで、ちょっと迂闊でした。
ということで、Submission ポートを設定することで回避しました。設定方法は簡単です。Postfix の master.cf ファイルを開き
#submission inet n????? -?????? n?????? -?????? -?????? smtpd
↓
submission inet n????? -?????? n?????? -?????? -?????? smtpd
と、コメントアウトするだけです。
Postfix をリロードすると Submission ポート587番が有効になり上の問題は解決します。
本来ならば今回の連載は SpamAssassin の実装となるところなのですが、問題が発生して実装を一時中断しています。
SpamAssassin を動作させるところまでは問題なくいっていたのですが、フィルターを通して本来の宛先に再配送するところでエラーが発生し、メールループのような現象が起こってしまいます。原因を調べているところですので、解決したら連載の続きとして掲載予定です。
11.SMTP AUTH の実装
CentOS 5 には saslauthd がインストールされていたことは前述しました。まずはsaslauthd がサポートしている認証形式を確認しておきます。
>saslauthd -v
saslauthd 2.1.22
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap
ldap がリストにあるので問題ありません。OSのパッケージによっては ldap が別モジュールになっている場合がありますが、CentOS の場合は基本パーケージに ldap サポートが含まれています。
次に設定ファイルを修正していきます。まずはメールサーバーの認証に sasl を使用するように設定します。
/usr/lib/sasl2/smtpd.conf ファイル
pwcheck_method: saslauthd
mech_list: plain login
ここではログインメカニズムを plain に設定しておきます。次に saslauthd の設定ファイルである saslauthd ファイルを編集します。
/etc/sysconfig/saslauthd ファイル
#変更箇所
MECH=ldap
#追加箇所(起動オプション)
FLAGS=”-O /etc/saslauthd.conf -c”
認証方法を LDAP にするとともに ldap 接続情報の記述ファイルとなる saslauthd.conf ファイルのパスをオプションで渡すように設定します。
/etc 配下に上で指定したファイル saslauthd.conf を作成します。
/etc/saslauthd.conf ファイル
ldap_servers: ldap://localhost:389/
ldap_auth_method: bind
ldap_bind_dn: cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
ldap_bind_pw: パスワード
ldap_search_base: ou=mailsys,dc=hogehoge,dc=com
ここに記述する接続情報はサーバーパス、認証メソッド、検索ベースが基本で、ここでは bind メソッドを使用するのでバインドユーザーのdnとパスワードも記述しています。
サービスを起動して登録済みテスト用ユーザーで接続のテストをしてみます。
>service saslauthd start
>testsaslauthd -u test -p パスワード
0: OK “Success.”
上のようになれば接続成功です。
次に postfix の設定ファイルに SMTP AUTH を使用するよう設定を追記していきます。加えていくつかのセキュリティー設定も追記しておきます。
/etc/postfix/main.cf ファイル追記部分
# ACCESS CONTROL
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
check_client_access cidr:/etc/postfix/access.cidr
reject_unknown_client
smtpd_sender_restrictions = permit_auth_destination
reject_authenticated_sender_login_mismatch, permit
smtpd_recipient_restrictions = permit_mynetworks
check_recipient_access hash:/etc/postfix/recipient
permit_sasl_authenticated
reject_unauth_destination????????????????????????????? ?
smtpd_client_connection_count_limit = 10
#ERROR CONTROL
smtpd_recipient_limit = 10
smtpd_soft_error_limit = 5
smtpd_hard_error_lomit = 10
smtpd_error_sleep_time = 2
# SMTP AUTH Configration
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sender_login_maps = ldap:/etc/postfix/login-address.cfg
#RATE CONTROLS
anvil_rate_time_unit = 60
smtpd_client_connection_rate_limit = 6
smtpd_client_message_rate_limit = 20
smtpd_client_recipient_rate_limit = 20
smtpd_client_event_limit_exceptions = 127.0.0.1
anvil_status_updata_time = 3600
かなりたくさんありますが、昨今のインターネット状況を考えるとこのくらいのセキュリティー設定が最低限必要かと思います。
では、一つずつ説明していきましょう。
まず最初の項目 smtpd_client_restrictions は接続クライアント(端末)に関するアクセス制御になります。設定している項目は3種類で、
check_client_access hash:/etc/postfix/access
check_client_access cidr:/etc/postfix/access.cidr
reject_unknown_client
になります。上からアクセスを許可するクライアントを FQDN 形式で記述した access ファイルと IPアドレス形式で記述した access.cidr ファイル、不明クライアントのアクセス拒否という設定になります。上に記述したパスに同名.db というハッシュファイルを作成しておく必要があります。
例えば access ファイルであれば以下のように記述し postmap コマンドで .db ファイルを作成します。
/etc/postfix/access ファイル
.hogehoge.com??? OK
.hahuhahu.jp?????? OK
>postmap /etc/postfix/access
hogehoge.com というドメインと hahuhahu.jp というドメインのクライアントの接続を許可しています。ヴァーチャルで取り扱う全てのドメインを記述しておく必要があります。上の postmap コマンドを実行すると access.db というファイルが作成されます。 postfix の設定ファイル内で access と書いてあっても実際には access.db ファイルを見に行っているので .db ファイルがなかった場合にはエラーがログに出力されます。
次の項目 smtpd_sender_restrictions はメール送信者のアクセス制御です。ここでは2項目、
permit_auth_destination
reject_authenticated_sender_login_mismatch, permit
を設定しています。最初の行で自サーバー宛のメール以外を拒否するように、次の行で認証できない送信者は拒否するように設定しています。最初の行は不正中継を拒否するために絶対必要な設定で2行目は SMTP AUTH 用の設定になります。
次の項目 smtpd_recipient_restrictions はメール中継に関する制御で、
permit_mynetworks
check_recipient_access hash:/etc/postfix/recipient
permit_sasl_authenticated
reject_unauth_destination
の4項目を設定しています。最初の行で $mynetworks を優先的に許可して2行目に受信者マップファイル(メーリングリストなどで使用予定)を指定、3行目で SMTP AUTH の設定をしています。4行目は $mydestination 以外への要求を拒否します。postfix の場合きりがないほど細かな設定が可能ですが、だいたいこの程度の内容で不正リレーは防ぐことができます。
smtpd_client_connection_count_limit は同じ送信元からの同時接続数を制限する設定です。
#ERROR CONTROL に記述しているのは postfix の遅延応答機能を利用したスパム対策で、宛先不明エラーなどが起こった時に遅延応答をさせます。これを利用することで一定時間内に複数のエラーメールを送信してくる相手に対しては接続拒否をさせることが出来るようになります。
最初の行で1つの接続で許可する宛先件数を10件に制限し、次の行で遅延応答を開始するエラー回数を指定しています。接続拒否する最大件数を3行目で10件に指定して最後の行で遅延応答を2秒に設定しています。
# SMTP AUTH Configration セクションは文字通りSMTP AUTH そのものの設定で saslauthd を使用するための設定と送信者マップファイルの指定を記述しています。
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sender_login_maps = ldap:/etc/postfix/login-address.cfg
ここでは login-address.cfg というファイルを指定していますが、このファイル内容は postfix の ldap 用設定ファイルとほとんど一緒です。すでに作成してある ldap-account.cf ファイルをコピーして作成します。
/etc/postfix/login-address.cfg ファイル
server_host = 127.0.0.1
server_port = 389
timeout = 5
search_base = ou=mailsys,dc=hogehoge,dc=com
query_filter = (mail=%s)
result_attribute = uid
result_format = %s
scope = sub
bind = yes
bind_dn = cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
bind_pw = パスワード
最後はレートコントロールです。ここでは単位時間内のメール送信数、接続数、宛先数などを制限しています。ここでは1分間の単位時間内に6接続、20宛先、20メッセージ、ローカルホストからの制限はなしに設定しています。
設定が完了したら postfix をリロードして設定を反映させテストメールを送信してみます。最初はメールクライアントに認証設定をせずに送信してみてエラーが出ることを確認します。次に認証設定を入れて送信できれば SMTP AUTH の実装は完了です。
]]>10.dovecotの設定
BlueOnyxでメールサービスを不使用にするとSMTP ポート(TCP25番)が使えなくなることを前回書きましたが、ここで悩んだ原因のもう一つが pop3 ポートは使えるということでした。実際のセットアップでは postfix と dovecot の設定ファイルを一気に作ってSMTP AUTH の実装までを行ったあと同時にテストしていたため、受信は問題なくできることからハマってしまいました。
メール送信をしてもメールを含む複数のログ(auth や ldap などを採取するようにしてみた)に何の痕跡も残らないことから、iptablesなどセキュリティー関係の設定も見直してみたのですが、どこにも25番ポートを閉じている様子はありませんでした。
(ちなみに、CentOS ではデフォルトで selinux がオンの状態になっていますが、セットアップの段階では余計な作業の発生を避けるためサービスを停止しています)
このことから、25番ポートが閉じている原因は BlueOnyx だろうと推測したわけです。というか、BlueOnyx の入っていないまっさらの状態でのセットアップはすでに何回も経験していますので、これ以外にはちょっと考えにくいということなのですが、目的がサイト構築であり BlueOnyx の仕組みを知ることではないので敢えてその原因を深く追求することはやめておきます。
本題の dovecot の設定です。
まずは設定ファイルの変更、加筆をします。
/etc/dovecot.donf ファイル
# Protocols we want to be serving:
protocols = imap pop3 ← pop3 と imap の両方を記述
disable_plaintext_auth = no ←コメントアウトをはずす
##
## Mail processes
##
first_valid_uid = 89 ←コメントアウトをはずして postfix の uid,gid に変更する
first_valid_gid = 89
mail_location = maildir:~/Maildir ※※
##
## POP3 specific settings
##
pop3_uidl_format = %08Xu%08Xv ←フォーマット形式だけ OutlookExpress 互換の形式にする
##
## Authentication processes
##
↓ここからLDAPでの認証設定
auth default {
mechanisms = plain
# LDAP database
passdb ldap {
args = /etc/dovecot-ldap.conf ←パスワードデータベースに下でも記述している設定ファイルを指定
}
# static settings generated from template
#userdb static {
#? args = uid=89 gid=89 home=/home/virtual/%d/%u
#}
# LDAP database
userdb ldap {
# Path for LDAP configuration file, see doc/dovecot-ldap.conf for example
args = /etc/dovecot-ldap.conf ←LDAP設定ファイル
}
user = root
}
mail_uid = 89
mail_gid = 89
これが最初に作成した設定ファイルです。
なぜ最初なのかというと、前回同様のセットアップした時(去年)のバージョンと記述方法やパラメータが変更されており、設定方法にやや不安があったためです。
postfix の設定の時にテストアカウントの属性項目で IMAPMailDir という項目にかなり長い記述をしていますが、以前セットアップした際に userdb static{} の内容がうまく機能してくれなかったことや userdb ldap{} という項目自体がなかったためです。
最後の2行は追記していますが、これが userdb static の uid=89 gid=89 の部分に相当する内容を独立して記述した場所になります。
最終的な運用での設定では
auth default {
mechanisms = plain
# LDAP database
passdb ldap {
args = /etc/dovecot-ldap.conf
}
# static settings generated from template
userdb static {
args = uid=89 gid=89 home=/home/virtualMail/%d/%u
}
# LDAP database
userdb ldap {
# Path for LDAP configuration file, see doc/dovecot-ldap.conf for example
args = /etc/dovecot-ldap.conf
}
user = root
}
で問題なく動きましたので、こちらの設定を最初から記述してください。
さて、この設定ファイルで指定しているLDAP設定ファイルの内容ですが、あらかじめサンプルファイルが用意されていますので、こちらを変更して使用します。
/etc/dovecot-ldap.conf ファイル
dn = cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com ←LDAPサーバーにログインするユーザー情報
dnpass = パスワード ←上のユーザーのパスワード
auth_bind = no ←上のユーザーだけでログインするので no に設定
base = ou=mailsys,dc=hogehoge,dc=com ←検索ベース
scope = subtree ←検索スコープ
user_attrs = uid=user,imapMailDir=mail ←dovecot.conf のLDAP設定で動けばここはコメントアウトしてOK
user_filter = (&(objectClass=inetOrgPerson)(uid=%u))
pass_attrs = uid=user,userPassword=password ←パスワードの参照先
pass_filter = (&(objectClass=inetOrgPerson)(uid=%u)) ←パスワード参照時の絞り込み検索フィルター
default_pass_scheme = PLAIN-MD5 ←暗号化形式をデフォルトのMD5 に指定
いろいろな項目がありますが、変更するのは上の内容になります。
文中に記述していますが user_attrs= は dovecot.conf ファイルの userdb static{} とイコールなので dovecot.conf の設定だけで動いていれば次のフィルター行を含めて必要ありません。
設定が終わったら dovecot を起動します。
>service dovecot start
メールの受信を行って問題なければ設定は終了です。
DTIのVPSサービスでは、当初なんらかのサーバーメンテナンスが実施される度に dovecot.conf ファイルが初期状態に戻ってしまうトラブルがありましたが、現在は解消されています。おそらくこれも yum のオートアップデートの問題だったのでしょう。
次回はSMTP AUTHの実装です。
]]>Windows7のデスクトップはHDD容量が最も大きいため、ファイルストレージとしても使用しているわけですが、Macからの初期接続ではIPアドレスを指定してやる必要があるため、固定IPをふっています。またメディアサーバーとしてXBoxからも接続するので、固定IPのほうが都合がいいわけです。
先週メインのWinマシンの調子がおかしくなったため、オンラインバックアップイメージからレストアをしたのですが、その直後から勝手にDHCPに変更されてしまいました。再度固定IPに変更したのですが、再起動するたびにデフォルトゲートウェイが消えてしまい、インターネット接続ができなくなりました。再起動の度にいちいちネットワーク設定を開かなければならないというのは不便なのでこの現象について調べてみました。
どうやら複数のサービスに起因するバグのようで、初期に固定IPアドレスを設定した後、DHCPに変更し、再度固定IPに変更するとこの現象が発生するようです。ネットワークのプロパティで設定した内容はレジストリに保存されるのですが、この時実際のデータの前に改行が入ってしまうようです。
レジストリの場所は、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Intaerfaces
の中の DefaultGateway と DefaultGatewatMetric の二つの項目で、この改行をレジストリエディタで削除してやると次回からは消えなくなります。
このバグはVistaの頃から直っていない問題のようですが、まあ、MSさんの場合直す気もないのかと推測しています。実際世の主流はDHCPですし、OSが混在するような環境で双方でデータ交換するようなことがなければDHCPで何の問題もないわけですが、私に似た環境でVista、Win7をお使いの方はご注意ください。
この記事を書いたのが2010年の7月27日でしたが、その後毎月1000件を越えるアクセスがこの記事にきています。それだけ同じトラブルに見舞われた方が多いと言うことですね。
かなり原因が解りにくいトラブルなのでOSの再インストールをした人とかもいらっしゃるのではと思います。Win7ではSP1も含めて今年に入ってからだけでも約30個の更新がリリースされていますが、未だにこの記事へのアクセアスが減っていないところをみると予想通りバグフィックスはされていないのでしょうか。
このあたりの情報お持ちの方がいらっしゃればコメントなどいただけると有り難いです。
ここまでの設定が終了したら postfix を起動するわけですが、設定ファイルに間違いがないか一応確認しておきます。(大抵は単純なタイプミスが多いですが)
>service postfix check
問題がなければ [OK] 表示されます。何らかのエラーが出力される場合はエラー内容に従って設定内容を見直してみてください。
テスト用のアカウントをLDAPデータベースに作成します。
と、ここでひとつ。 phpldapadmin には多数のテンプレートが用意されていますが、これが結構目障りになります。不要なテンプレートは別のディレクトリに移動させておくといいでしょう。
次の画面は初期レコードとして登録したメールアカウント格納用の ou を開いた画面です。
まずはヴァーチャルドメインのレコードをこの配下に作成します。「子エントリーを作成する」をクリックすると作成用テンプレートの選択画面になるので、 Generic: Organisational Unit を選択してドメインを登録します。
作成できると上の画面になります。続けて「子エントリーを作成する」をクリックして追加したテンプレート「Postfix Virtual User Account」を選択します。ここで test@hogehoge.com のアカウント情報を登録するわけですが、とりあえず送受信のテストができればよいので基本情報だけを作成します。入力する項目は、
uid: test
sn: test
cn: test
電子メール: test@hogehoge.com
MailDir: hogehoge.com/test
IMAPMailDir: Maildir:/home/virtualMail/hogehoge.com/test/Maildir
パスワード: パスワード
のようになります。 IMAPMailDir の内容については Dovecotの設定で後ほど説明します。また、パスワードを設定する際に暗号化形式を指定できますが、CentOS5 で提供される openldap パッケージのデフォルトは md5 になっているようです。以前 Fedora で構築したことがあるのですが、その時には ssha が標準だったため ssha で設定したところこちらではエラーになってしまいました。デフォルトの暗号化形式は openldap設定ファイルで変更できますが、変更する必要がなければこのまま md5 を使えば良いでしょう。なお、当サイトで提供しているテンプレートもデフォルトが ssha になっていますので、これを md5 で使用する場合はテンプレートを変更して下さい。
これで送信テストの準備はできましたので送信してみます。
と、ここでトラブル発生です。ソケットエラーで送信できません。いろいろと調べてみたのですが、原因がとんと掴めないまま数時間悩みました。最終的に tcpdump でトレースしたところ25番ポートが受信していないことが解りました。どうやら BlueOnyx でメールを不使用にすると勝手にポートを閉じてしまうようです。smtp の標準ポートを使わないことはセキュリティー的にも悪くないことなのでこの際 smtp ポートそのものを変えてしまうことにしました。
/etc/postfic/master.cf ファイルを書き換えてポート番号を変更しサービスをリロードしたら今度は普通に送信できました。
/etc/postfic/master.cf ファイル
smtp????? inet? n?????? -?????? n?????? -?????? -?????? smtpd
↓
ポート番号????? inet? n?????? -?????? n?????? -?????? -?????? smtpd に書き換える
>service postfix reload
]]>いよいよメールサーバーの設定に入っていきます。今回はLDAPを使用するということで、いくつかのLDAP用設定ファイルを用意しなければなりません。
postfix設定ファイルの置き場所は /etc/postfix/ ですのでこの中に設定ファイルを作っていきます。
まずはpostfixの設定ファイルである main.cf ファイルにいくつかの変更を加えておきます。
/etc/postfix/main.cfファイル修正内容
# INTERNET HOST AND DOMAIN NAMES
myhostname = mail.hogehoge.com ←postfixを稼働するホスト名
mydomain = hogehoge.com ←メールサーバーのヴァーチャルではない実際のドメイン
# RECEIVING MAI
mydestination = $myhostname, localhost, localhost.localdomain
↑受信可能とする宛先メールサーバー
# TRUST AND RELAY CONTROL
mynetworks = xxx.xxx.xxx.xxx/32
relay_domains = $mydestination
↑リレーを許可するドメイン(ローカル配送用)と物理ネットワーク
# ADDRESS REDIRECTION (VIRTUAL DOMAIN)
virtual_mailbox_domains = hogehoge.com
↑バーチャルで取り扱うドメイン。複数設定する場合はカンマ区切りで記述する。
virtual_mailbox_base = /home/virtualMail
↑メールを保存するディレクトリベースでここで設定したディレクトリ配下に配信される。
virtual_mailbox_maps = ldap:/etc/postfix/ldap-account.cf
↑配信マッピングに関する設定ファイルの指定
virtual_minimum_uid = 89
↑ここでは postfix の uid を設定しておく。指定しないと一般ユーザーとして500以上が使われる。
virtual_uid_maps = static:89
virtual_gid_maps = static:89
↑ヴァーチャルユーザーを個別で扱わず postfix のみに限定して処理するようにする。
virtual_alias_maps = ldap:/etc/postfix/forward.cf
ldap:/etc/postfix/virtual-alias.cf
↑エリアスの設定ファイル指定。フォワード転送設定ファイルとエリアス設定ファイルを指定しています。
# DELIVERY TO MAILBOX
home_mailbox = Maildir/
↑Maildir形式で扱うことの指定
後ほど Smtp-Auth やセキュリティー関係の設定を追記していくので、ここでは基本的な設定だけを修正、加筆しておきます。
次に上の設定ファイルに合うよう設定ファイルの作成、ディレクトリの作成などを行っていきます。まず基本となるメールボックスのディレクトリを作成し所有者を postfix に変更しておきます。
>mkdir /home/virtualMail
>chown postfix.postfix /home/virtualMail
次に設定ファイルを作るのですが、ここでは先の main.cf 内に記述しているファイルを作成していきます。
/etc/postfix/ldap-account.cf ファイル
server_host = 127.0.0.1
server_port = 389
timeout = 5
search_base = ou=mailsys,dc=hogehoge,dc=com
query_filter = (mail=%s)
result_attribute = mailDir
result_format = %s/Maildir/
scope = sub
bind = yes
bind_dn = cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
bind_pw = bind_dnのパスワード
/etc/postfix/forward.cf ファイル
server_host = 127.0.0.1
server_port = 389
timeout = 5
search_base = ou=mailsys,dc=hogehoge,dc=com
query_filter = (|(mail=%s)(mailRoutingAddress=”*”))
result_attribute = mailRoutingAddress
result_format = %s
scope = sub
bind = yes
bind_dn = cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
bind_pw = bind_dnのパスワード
/etc/postfix/virtual-alias.cf ファイル
server_host = 127.0.0.1
server_port = 389
timeout = 5
search_base = ou=mailsys,dc=hogehoge,dc=com
query_filter = (mailLocalAddress=%s)
result_attribute = mail
result_format = %s
scope = sub
bind = yes
bind_dn = cn=mtaAdmin,ou=Service,dc=hogehoge,dc=com
bind_pw = bind_dnのパスワード
設定ファイルの各項目と内容については以下のようになります。
| server_host | LDAPサーバーのホストアドレス |
| server_port | LDAPサーバーのポート番号 |
| timeout | 接続タイムアウト |
| search_base | 検索ベースディレクトリ |
| query_filter | 検索フィルター正規表現記述 |
| result_attribute | 結果として受け取るべき値の格納先項目名 |
| result_format | 結果のフォーマット形式 |
| scope | 検索スコープ |
| bind | バインドの使用、不使用 |
| bind_dn | バインドを使用する場合のバインドdn |
| bind_pw | バインドdnのパスワード |
また、LDAPでの検索には以下のような置き換え文字が使用できます。
| %s | 入力キー、検索結果ともに属性値そのものに置き換えられる |
| %u | 入力キーまたは検索結果がメールアドレス形式の場合@の前に置き換えられる |
| %d | 入力キーまたは検索結果がメールアドレス形式の場合@の後(ドメイン名)に置き換えられる |
ldap-account.cf を例に具体的に内容を見てみましょう。
search_base はヴァーチャルドメインのアカウント情報を格納する ou=mailsys にして scope を sub に指定しているのでこのディレクトリ配下を検索します。
query_filter として mail=%s すなわちメールアドレスが入力キー→メールアドレスのものを検索します。
result_attribute として Maildir に格納されている値を取り出します。LDAPデータベース上のMaildir項目にはメールの保存先ディレクトリを記述しておきます。例えば、「taro」というアカウントを作成したとすると、「taro」のアカウント情報の Maildir 項目には
hogehoge.com/taro
と記述します。この値が result_format で指定している %s/Maildir/ に加工され
hogehoge.com/taro/Maildir/
として結果が返されます。
main.cf の virtual_mailbox_base で指定している保存先ディレクトリに上の結果が追加され、
/home/virtualMail/hogehoge.com/taro/Maildir/
というディレクトリ配下がメールの配信保存先となるわけです。
bind は使用するので yes にして bind ユーザーとパスワードを記述しています。bind を使用しない場合、接続してきたユーザー単位でLDAP認証が行われます。bind を指定した場合はここで指定ユーザーのみがLDAPサーバーとのやりとりを行うためセッションを共有することができます。
続く・・・
]]>CentOS5にはphpLdapAdminのパッケージは用意されていないことは前述しました。まずは最新版のLinux用をここから入手します。
これをFTPでアップロードするわけですが、BlueOnyxのサイト管理でヴァーチャルサイトの管理ユーザーを作り、パス指定なしでFTP接続すると自動的にウェブのドキュメントルートである /home/sites/ドメイン/web ディレクトリに入ります。この辺がややこしいところで、SSHでターミナル接続をした場合にはヴァーチャルサイト・ディレクトリの users 配下のホームディレクトリに入りますが、FTPだと変わってしまいます。
実のところ、私の場合FTPは普段使用しておらず、WinSCP もしくは FileZila というSFTPが使用できるソフトでSFTP接続しているので気がつきませんでした。SFTPで接続するとターミナルと同様の動作になるからです。これに気がついたのがDreamWeaverでサイト設定をしているときでした。DreamWeaverの内蔵FTPでパス指定接続しようとするとエラーになってしまうのです。
試しに FileZilaでパス指定なしのFTP接続をしてみたら web ディレクトリだったのです。この辺は注意が必要ですね。
さて、ファイルをアップロードしたら展開するわけですが、このままウェブ公開ディレクトリ配下に置くのは危険です。別の任意の場所に展開しましょう。私の場合は /usr/local 配下に展開しました。シェルでログインしてrootになりアップロードしたディレクトリに移動して展開します。
>tar zxvf ./phpldapadmin-1.2.0.5.tgz -C /usr/local/
展開が終わったら元の圧縮ファイルはどこかにバックアップしておきましょう。
展開したディレクトリに移動し、ディレクトリ名を変更しておきます。
>cd /usr/local
>mv phpldapadmin-1.2.0.5 phpldapadmin
次に設定ファイルを作成しておきます。といっても特別な設定は必要ありません。
>cd phpldapadmin/config
>ls
config.php.example
設定ファイルの置き場所に入ると config.php.example というファイルがあります。このファイルを config.php と改名してコピーすれば終わりです。
>cp config.php.example config.php
次に phpldapadmin を展開した場所をウェブから見えるように設定してやる必要があります。
Apacheの追加設定ファイルの置き場所へ移動します。
>cd /etc/httpd/conf.d/
ここに次の内容のファイルを phpldapadmin.conf という名前で作成します。
#
#? Web-based tool for managing LDAP servers
#
Alias /phpldapadmin /usr/local/phpldapadmin/htdocs ←展開したパスに合わせる
Alias /ldaptools /usr/local/phpldapadmin/tools ←ここも同様
<Directory /usr/local/phpldapadmin/htdocs> ↓各ディレクトリの設定
Order Allow,Deny
Allow from all
DirectoryIndex index.php index.html
</Directory>
<Directory /usr/local/phpldapadmin/tools>
Order Allow,Deny
Allow from all
DirectoryIndex index.php index.html
</Directory>
エリアスの名前は適当な名前を付けて下さい。ブラウザからアクセスできてしまうのでオリジナルな名前にしたほうが良いかもしれません。.htaccess で認証制御すればなお良いでしょう。
ウェブサーバーに設定を再読込させます。
>service httpd reload
ブラウザで設定したエリアスにアクセスしてみて phpLdapAdmin のログインページが表示されれば成功です。もし、空白のページが表示されるようであれば、PHPの設定を確認してみましょう。サイト管理の設定で説明したとおり、phpLdapAdminの動作には最低30MBのメモリ割り当てが必要です。
ページが表示されてもエラーが出ていることがよくあります。ログインページで表示されるエラーはだいたいがログイン方式に関係したエラーです。
phpLdapAdminには session, cookie, http, config? 4つの接続方法が用意されています。バージョン1.2.0.5の場合デフォルトはセッションになっているのですが、セッション用一時ファイルの書き込みの失敗でエラーが出ることがあります。この場合、セッションファイルの置き場所である、 /var/lib/php/session のパーミッションを変更してみてください。
正常に表示されるようになったらログインしてみましょう。デフォルトのログイン形式は dn(ディレクトリネーム) 方式です。ログインユーザーのフルパスを入力します。
つまり、 cn=admin,dc=hogehoge,dc=com のような書き方になります。
ログインすると初期設定で入力したツリーがすでに出来ているはずです。
次にテスト用ユーザーのアカウントを登録したいのですが、追加してある postfix に対応したテンプレートが入っていません。テンプレートファイルはphpldapadmin 配下の templates ディレクトリに XML ファイルで入っています。templatesディレクトリには新規作成画面で出てくるテンプレートが置かれた creation ディレクトリと修正・更新用テンプレートの入った modification ディレクトリがあります。ここのファイルを元にpostfix用のテンプレートを作成することができます。
私のサイト用に作ったテンプレートをダウンロードにアップしてありますので、参考にしていただければ幸いです。
補足としてこのテンプレートで使用されるXMLのタグの意味について抜粋して解説しておきます。
| タグ | 内容 |
| <title></title> | 新規登録の際に表示されるテンプレートリストに表示される名前 |
| <regexp></regexp> | テンプレートを表示させるスキーマ階層→正規表現で記述する |
| <atributes></atributes> | 入力項目 id=スキーマオブジェクト名 |
| <display></display> | 表示名 |
| <order></order> | 表示順 |
| <icon></icon> | 表示するアイコン |
| <helper></helper> | ドロップダウンリストの表示 |
| <default></default> | ドロップダウンリストの初期値 |
| <location></location> | ドロップダウンリストの表示位置 |
その他、設定ファイルやテンプレートの詳しい使い方はphpldapadminのドキュメントをご覧になってください。特に設定ファイルについてはバージョンによって記述方法が異なりますので注意して下さい。
]]>LDAPデータベースの管理にphpLdapAdminを使用することは前述していますが、まだデータベースには何も無い状態ですので使用することはできません。まずは基本となる root dn とドメイン情報を除く管理情報を登録することにします。
テキストエディタでLDIFファイルを作成して基本情報をコマンドで流し込むわけですが、この行程では過去に苦い思いをしています。各種文字コードに対応した汎用エディタで作成したファイルをサーバーのデフォルト文字コードであるUTF-8で保存してアップロードし、流し込もうとしたらエラーで流し込めなかったのです。セットアップ時にLDAPサーバーのログを取るようにしたのもこのことがあったからなのです。半日近い時間をかけて自己解決したのですが、原因は文字コードがUTF-8 BOM付になっていたためでした。
使用していたエディタの設定にはUTF-8しか表示されなかったためまったくの意識外でした。アップロードしたファイルを vi で開いても自動判別のため解りません。使用するエディタは必ず UTF-8N に対応したものを使用してください。もしくは直接 vi で記述するようにしたほうが良いでしょう。
さて、初期化用の LDIFファイルの内容は以下のようなものです。
dn: dc=bitsystem,dc=com
objectClass: dcObject
objectClass: organization
o: bitsystem
dc: bitsystem
dn: cn=Manager,dc=bitsystem,dc=com
objectClass: organizationalRole
cn: Manager
dn: ou=mailSys,dc=bitsystem,dc=com
objectClass: organizationalUnit
ou: mailSys
dn: ou=webSys,dc=bitsystem,dc=com
objectClass: organizationalUnit
ou: webSys
dn: ou=Service,dc=bitsystem,dc=com
objectClass: organizationalUnit
ou: mailSys
dn: uid=mtaAdmin,ou=Service,dc=bitsystem,dc=com
objectClass: organizationalPerson
cn: mtaAdmin
sn: mtaAdmin
userPassword: slappasswdで生成したパスワード
dn: uid=webAdmin,ou=Service,dc=bitsystem,dc=com
objectClass: organizationalPerson
cn: webAdmin
sn: webAdmin
userPassword: slappasswdで生成したパスワード
最初のレコードがルートディレクトリの登録になります。2番目のレコードが管理者、3、4番目にオーガナイゼーションユニット、そして Service の中にメールとウェブの管理者を登録します。
シェルでログインしてアップロードしたディレクトリに移動し、以下のコマンドを打ちます。
>ldapadd -x -D “cn=Manager,dc=bitsystem,dc=com” -W -f init.ldif
管理者パスワードを要求されるのでパスワードを入力するとレコードが登録された旨のメッセージが流れます。この時、登録された内容も一緒に表示されますので、ファイル内容と相違ないか確認しておきましょう。たまにスペルミスなどでレコードの一部が登録されていないということも起こるので注意が必要です。
確認のためレコードを検索してみます。
???>ldapsearch -x -b “ou=Service,dc=bitsystem,dc=com” -D “cn=Manager,dc=bitsystem,dc=com” -W ‘(cn=*)’ -LLL
ldapsearch コマンドのオプションを簡単に説明しておきます。
-x 簡易認証指定で、省略するとsasl認証になります。saslの設定はまだですので必ず指定します。
-b 検索を開始するベースdnを指定します。ここで指定した配下が検索されます。
-D バインドユーザーの指定。指定しないと匿名接続になります。
-W 認証に使うパスワードをプロンプト入力に指定します。
-LLL 検索結果をコメントなし、バージョン表示なしで出力します。
シングルクォーテーションと括弧で囲んだ部分が検索文字列です。-w オプションでパスワードをコマンドラインに記述する方法でもかまいません。上の例の場合は Service 配下の cn を Manager で全て検索しており、コマンドを入力するとパスワード入力を求められます。 mtaAdmin と webAdmin のレコードが表示されれば問題ありません。
次はphpLdapAdminをセットアップしてメールの送受信に使用するテストアカウントの登録を行います。
]]>主な用途としては
・ショールームまたは店頭への設置(商品のプロモーション及び説明などの販促用)
・セミナー施設での利用(セミナー端末として資料閲覧やプレゼンテーションの同期再生)
が圧倒的に多く、皆さんiPadという新しいツールにかなりの興味を示しておられます。
従来、タッチパネル付PCを使用していろいろなキオスク端末を開発していましたが、
・設置スペースの関係で台数が制限される。
・端末台数に対して初期費用がかなり大きくなってしまう。
・定期的なメンテナンスが必要なため、ランニングコストもそこそこかかる。
・1日中起動している状態のためPCの耐用年数から最長でも5年程度しかもたない。
などが必ずと言っていいほど問題になっていました。
iPadはこの問題を根本から解決してくれる端末として私たちも注目しています。
iPadはウェブのWi-Fi端末として使用できますので、コンテンツをサーバーに置くことで情報のリアルタイム更新やインターネットとの連携などが可能ですので、従来のキオスク型端末に比べてはるかに多くの情報を提供することが可能です。
しかし、商業利用となると提供目的以外に使用されては困りますので、いろいろな制限(ホームボタンを押せないようにするなど)も必要です。コンテンツもタッチパネルにあった内容にしなければなりません。サーバー側からのプッシュ配信に対応したアプリケーションで端末側の更新処理をなくすなども必要不可欠な機能となります。
現在お話をいただいている案件それぞれに開発をすると、時間的にも費用的にもお客様への負担が大きくなることから、考え得る要望にすべて対応できるようなシステムが開発できないかと考えました。
具体的にはiPad、iPhone(iPod Touch含む)専用のCMS(コンテンツ・マネジメント・システム)をサーバーパッケージソフトとして開発することにいたしました。いつもお世話になっている株式会社クイーリー様と共同で、この、サーバーソフトと専用iPad用アプリケーションとの組み合わせをパッケージ化して今夏リリースする予定でいます。
現在、基本設計がほぼ終わり具体的な動作仕様の策定と詳細設計に入っています。
興味を持たれた方は問い合わせフォームよりお問い合わせください。
]]>