メールサーバの移行

イメージ
 自前のメールサーバを停止 これまで、自ドメインのメールサーバはVPS上に構築していた。 ・Ubuntu Server ・Postfix ・Dovecot ・spamAssassinと、BlackListの利用 Spam対策を行ってきたし、サーバ上でメールをトリガーにして各種プログラムを動かしたりしてきた。 メールサーバのメンテナンスは結構面倒くさくて、  ・Disk容量のチェック  ・不正アクセスのチェック  ・各種セキュリティパッチの適用 など、手間がかかる。 そこで、外部のサーバを利用することに…。 結構安くて使い勝手の良さそうなのが、「さくらのメールボックス」 3年契約で、3070円とな…。  メールアドレスは自分のだけなので、20GBまで利用可能!  (Gmailより大きいねぇ) ということで、早速契約。 アカウント設定を行って、既存のDNSを書き換える。WHOISも書き換えて完了。 SMTPとIMAPが利用できればOK。 ちょうど、GoogleがSPF設定していないと受信しないし、DKIMおよびDMARCに対応していないメールを弾くようになったので、対応しているのを確認。 さくらサーバ自体は、これまでお客さんのサーバとして何件も利用しているので、利用方法も難しくはない。  Webメールにも対応しているので、いざという場合にもありがたい。 ということで、各メールソフトの設定を変更。  PC(常時使用する3台)とタブレット、スマートフォンと台数は多いがそれ程手間はかからない。 問題は、旧サーバで送受信したメールの履歴だけれど、これはThunderbrdを使ってローカルに保存することで回避。  本当は、サーバtoサーバでMailboxに残そうとも考えたんだけど、古いメールはそれ程必要ないし、ローカルにバックアップしてあれば凌げるので、良しとする。 移行時にDNSの反映で若干時間がかかったものの、問題なく送受信できるのを確認して、作業完了。  これでメンテナンスの手間が減るので、安いもんです。

現場で書き換え…

ログインスクリプトでエラー

前回、マイクロソフトのサンプルに問題があって、修正が必要と書いたのだけれど、現場でテストしてみると、さらにエラーが発生する。


strGroups = LCase(Join(CurrentUser.MemberOf))

今度は、この記述だ・・・。
どうやら、ユーザのデータを引いた時のOUやグループの設定状況でデータ個数が配列で返らない場合に、うまくjoinできていないらしい。
そこで、

'strGroups = LCase(Join(CurrentUser.MemberOf))
if IsArray(CurrentUser.MemberOf) then
   strGroups = LCase(join(CurrentUser.MemberOf))
else
   strGroups = LCase(CurrentUser.MemberOf)
End if
てな感じで、配列かどうかで処理を分ける必要があるということが判明。
その場で、書き換えてテストしなければならない程の、逼迫ぶりで…。疲れましたゎ。

でも、これで何とか動作するようになり、OKです。
念の為、全て記述しておこう。
Const MANAGER_GROUP = "cn=manager"
Const SUPPORT_GROUP = "cn=support"
'Const STAFF_GROUP   = "cn=staff"
Set wshNetwork = CreateObject("WScript.Network")
'homeはプロファイル設定で掴ませることにするのでコメントアウト
'wshNetwork.MapNetworkDrive "i:" , "\\dc01\home$\" & wshNetwork.UserName
wshNetwork.MapNetworkDrive "s:" , "\\dc01\staff"
Set ADSysInfo = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName)
'strGroups = LCase(Join(CurrentUser.MemberOf))
if IsArray(CurrentUser.MemberOf) then
   strGroups = LCase(join(CurrentUser.MemberOf))
else
   strGroups = LCase(CurrentUser.MemberOf)
End if
If InStr(strGroups, MANAGER_GROUP) Then
    wshNetwork.MapNetworkDrive "m:" , "\\dc01\manager"
'    wshNetwork.MapNetworkDrive "n:" , "\\dc01\support"
End If
If InStr(strGroups, SUPPORT_GROUP) Then
    wshNetwork.MapNetworkDrive "n:","\\dc01\support"
       
End If

度重なる仕様変更

ちなみに、先のスクリプトは、前回とは後半部分が異なっている。
これは、作業途中で現場から、このドライブは共有して欲しくないとか…。
この場で、言うかよ〜! って話です。

まあ、今回導入したところは、基本的にネットワークのちゃんとした利用の仕方を知らないままなんとなく使ってきたという所もあり、いろいろな話をする中で、だったら…こうして欲しい。とか、こんな風に使えれば…みたいな話が出てくるので、利用している人たちの感性はまともと言えるかな。
結局、これまで管理していた人が、そういった情報を吸い上げず、こちらから提供しないことからうまく回っていなかったのかなぁと…。

そんなことを思いながらも、依頼主に確認をし、ドライブマッピングとユーザの関係を変更することに。導入作業前にも確認しているんだけどね〜。

ついでにバッチも実行

ログオンスクリプトには、もう1つ加えておくことにした。
もちろん、サーバは時刻合わせを行なっているんだけど、クライアントがずれてもらっては困る。といってデフォルトの時刻合わせは馬鹿すぎる。

そこで、nettime.batを作成。中身は簡単なもんです。以下の通り。
net time /domain:%userdnsdomain% /set /y
全クライアントが、ログイン時に実行するように設定しておきます。
これで、サーバとの同期は完了するので、困ることはございません。

いろいろと、検討したけどなるべくシンプルに運用したいので、この程度でやめておこうと思っています。

ふう、ドキュメントの作成もあるので、時間取られてなかなかBlogの更新ができませんなぁ
ちうことで、もう少し、今回手間取ったところあたりをまとめておきたいと思います。




コメント

このブログの人気の投稿

WPS Officeで日本語入力ができない

VirtualBoxでUSBから起動

Virtualboxとnvidiaドライバ