########################################################## # # # 2015 年度 Mail サーバ 再構築手順書 (Ver.1.0) # # # # 2016/01/25(三上 峻): 2014 年度手順書を基に作成 # # # ########################################################## □ 構築ドキュメントとインストールするもの * OS - Debian GNU/Linux 8.0 (jessie) * サーバソフト - qmail + apop + tcpserver + ezmlm + ezmlm-idx + mess822 (iftocc) - dovecot + imap * その他 - gate - mew - etc... http://www.ep.sci.hokudai.ac.jp/~epmail/ □ メモ * 入れ換え日までに OS、qmail、gate その他ツール群の インストールを済ませておく. * 入れ替え当日に入れ換え担当者の作業 PC に グローバル IP アドレスをとっておく. * 入れ換え日はサーバの入れ替え、細かな設定の調整を行う. * 全作業が完了したらメールで報告して mail サーバ再開. * 細かな作業が多いのでサーバ入れ替えの流れを良く 理解し混乱しないようにする * 当日行う作業のうち特記すべきものは(三上個人メモ) - quota の設定 - install は済ませた - /etc/fstab の書き換え等 - 事前にLABEL 付け - root, sys-bk, swap - 先に書き込んでおいてコメントアウトしておく □ 作業内容 ※ 番号の前に * がついているものは現行の grey での作業 [ 入れ換え日前日まで ] ※ 入れ替え日前日までの内容は書いているアドレスのページに 従って行い詳しく書かない. 1. OS のインストール http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/basic/index.html 留意点 + Debian GNU/Linux 8.0 (jessie) のインストール 2. メールサーバのインストール http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/qmail.html 留意点 + qmail 今回は netqmailをパッケージからではなくソースから入れた. パッケージからだとsmtp-auth 等のパッチをあてることができないため + 制御ファイル /var/qmail/control/ 以下の制御ファイルの設定に注意. * 一旦 usuzumi にて制御ファイルの作成を行い、後で書き換え. * この時点の usuzumi に ep.sci.hokudai.ac.jp の MX は向けられていない. + dovecot パスワードの暗号化に今まで使っていたdovecotpw が使えなくなったためdoveadom の使用に変更(2014 年度から) + ssl http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/ssl.html + 2015 年度からUPKI 証明書を導入 + 受信テスト メールアドレスのホスト名はフルドメイン (usuzumi.ep.sci.hokudai.ac.jp) で行った. 3. quota のインストール http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/basic/quota-guide.html 留意点 + quota のインストール確認 + /etc/fstab の書き換え + コメントアウトだけするように設定 + コメントインは当日外付けHDD を付けてから行う(home, home.bk) + デバイスに適切にLABEL をつけておく + root, sys-bk, swap 4. mess822 (iftocc) のインストール http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/iftocc.html 5. gate のインストール http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/gate-reconfig.html 6. usuzumi の qmail 停止 http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/qmail_stop.html 7. mondo* のホームディレクトリ変更 (/etc/passwd) ※ /home に mondo* のホームディレクトリがあると, ※ 付け替え後見えなくなってしまう # mkdir /work # usermod -d /work -m mondo4 ※ usermod はアカウントの情報を変更するコマンド ※ -d はホームディレクトリをそのあとの引数に変更する ※ -m は以前のディレクトリを移動する(-m は -d と一緒に使われる) 8. シャットダウン + ネットワーク線を抜く + 電源を落とす # halt -p [ 入れ換え当日 ] ※ 番号の前に * がついているものは現行の grey での作業 *1 ログイン中の全ユーザーのターミナルにメッセージを表示 # wall The system will shutdown at ??:00 Please logout ([Ctrl]+[D]キーを押すとプロンプトが返ってくる) *2 一般ユーザのアクセスを禁止する. # vim /etc/hosts.deny + 編集する追加内容は以下の通り ALL: ALL + 自分だけ入れるようにする # vim /etc/hosts.allow + 編集する追加内容は以下の通り ALL: (入れ換え作業者 PC のグローバルIP) *3 grey の qmail,dovecot を停止する. + /, /home のバックアップ + /etc/cron.daily/rsync を実行する. # nohup /etc/cron.daily/rsync & 時間がかかるので次に進む + ログインしているユーザを強制的にログアウト + ログインしているユーザを調べる $ who + who ででたアカウント名のユーザの PID を調べる $ ps aux | grep [who ででたアカウント名] + ユーザを強制的にログアウト $ sudo -s # kill -KILL [先ほどのアカウント名のPID] + qmail の停止 + qmail 関連のプロセスの動作を確認する $ ps aux | grep qmail + qmail を停止する # service qmail stop + qmail が停止したか確認 $ ps aux | grep qmail + 停止していない場合は, PID を確認して, kill する $ ps aux | grep qmail + 調べた PID を停止する # kill -TERM [PID] + 再度qmail が停止したか確認 $ ps aux | grep qmail + メールキュー内のメールを排出. 同時に qmail のプロセスを 停止する + メールキュー内のメールを確認する # /var/qmail/bin/qmail-qstat # /var/qmail/bin/qmail-qread + queue に溜まったメールを強制的に排出 # kill -ALRM `ps ax | grep qmail-send | grep -v grep | awk '{print $1}'` + qmail が停止したことを確認する # ps aux | grep qmail + dovecot の停止 + dovecot 関連のプロセスの動作を確認する $ ps aux | grep dovecot + dovecot を停止する # service dovecot stop + dovecot が停止したか確認 $ ps aux | grep dovecot + 停止していない場合は, PID を確認して, kill する $ ps aux | grep dovecot + 調べた PID を停止する # kill -TERM [PID] + 再度dovecot が停止したか確認 $ ps aux | grep dovecot 手順の詳細は http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/qmail_stop.html を参照. 4 ep ドメイン宛のメールがセカンダリメールサーバである www へ配送 されているか確認する. + www サーバで以下を実行して, qmail のキューが時間とともに増加して いることを確認する. root@orange:# /var/qmail/bin/qmail-qstat root@orange:# /var/qmail/bin/qmail-qread 詳細は http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/www.html#secondary を参照. *5 現 grey 内の重要ファイルをバックアップ + バックアップをとるファイルは以下の通り. - /etc/passwd /etc/shadow /etc/group /etc/sudoers /etc/ssh/ /etc/skel/ /etc/cron.daily/rsync /var/spool/cron/ /var/lib/canna/dic/user/ + バックアップする.(今回のバックアップ先は 以下の自分の領域) # mkdir /home/mikataka/mailwork/grey_set # cp -pr /etc/passwd /home/mikataka/mailwork/grey_set/ # cp -pr /etc/shadow /home/mikataka/mailwork/grey_set/ # cp -pr /etc/group /home/mikataka/mailwork/grey_set/ # cp -pr /etc/sudoers /home/mikataka/mailwork/grey_set/ # cp -pr /etc/ssh/ /home/mikataka/mailwork/grey_set/ # cp -pr /etc/skel/ /home/mikataka/mailwork/grey_set/ # cp -pr /etc/cron.daily/rsync /home/mikataka/mailwork/grey_set/ # cp -pr /var/spool/cron/ /home/mikataka/mailwork/grey_set/ # cp -pr /var/lib/canna/dic/user/ /home/mikataka/mailwork/grey_set/ - 再構築終了後, 問題がないことを確認したら削除する *6 5 でバックアップした shadow ファイルから usuzumi に 移すためのファイルを作成する + /etc/shadow の gate で生成される部分だけをコピーした ファイルを作る(今回は /home/mikataka/mailwork/grey_set にバックアップ ファイルを作成したとしてやる) + 入れ替え前のgreyの /etc/shadow を別ファイルにコピー root@grey:# cp /home/mikataka/mailwork/grey_set/shadow /home/mikataka/mailwork/grey_set/shadow.tmp + エディタでひらいて実際に不必要な部分の削除 root@grey:# vim /home/mikataka/mailwork/grey_set/shadow.tmp + 最初から gate までと最後の nobody を消す (つまり UID 1000 -- 29999 以外のすべてを消す) *7 現 grey をシャットダウン + ネットワーク線をはずしておく + grey シャットダウン後、外付けの HDD の電源を切ってすべて外す. # halt -p 8 usuzumi 起動 + 外付けの HD (/home) を接続 + 外付けの HD (/home.bk) を接続 + usuzumi (新 grey) をネットワーク線を抜いたまま起動 ※ これ以降の作業でアカウントが書いてないものは usuzumi(新 grey )で行っているコマンドとする. 9 外付け HD のデバイスファイルの確認 + デバイスが認識した確認する. # dmesg | grep sd ※ sd が付いているものを探す. + 見つけた sd のラベルを確認する(今仮にそれが sdc1 と sdd1 だとする) # e2label /dev/sdc1 /home # e2label /dev/sdd1 /home.bk ※ この場合は sdc1 が /home で, ※ sdd1 が /home.bk となる. ※ これ以降は sdc1 が /home で, ※ sdd1 が /home.bk と仮定して話を進める. ※ 実際にやる場合この作業で分かったラベルで行う 10 仮マウント + 仮のマウントポジションを作る # mkdir /mnt/home/ + 仮マウントする # mount -t ext3 /dev/sdc1 /mnt/home 11 usuzumi へ設定ファイルのコピー + 外付けのHD(/mnt/home)から設定ファイルを移す. - 移すファイルは以下の通り. /etc/shadow /etc/ssh/ /etc/skel/ /var/spool/cron/ /var/lib/canna/dic/user/ + usuzumi(新grey) の移すファイルをバックアップ # mkdir /work/mondo4/backup # cp -pr /etc/shadow /work/mondo4/backup/ # cp -pr /etc/ssh/ /work/mondo4/backup/ # cp -pr /etc/skel/ /work/mondo4/backup/ # cp -pr /var/spool/cron/ /work/mondo4/backup/ # cp -pr /var/lib/canna/dic/user/ /work/mondo4/backup/ + usuzumi(新grey) の /etc/shadow から User UID1000 -- 29999 のユーザ部分を削除する # vim /etc/shadow + usuzumi(新grey) の /etc/shadow へペースト # cat /mnt/home/mikataka/grey_set/shadow.tmp >> /etc/shadow ※ nobody の場所が途中になってしまうので nobody だけ手動で最後の 行に移す + 他のファイルをコピーする. # cp -pr /mnt/home/mikataka/grey_set/ssh/* /etc/ssh/ # cp -pr /mnt/home/mikataka/grey_set/skel/* /etc/skel/ # cp -pr /mnt/home/mikataka/grey_set/rsync /etc/cron.daily/rsync # cp -pr /mnt/home/mikataka/grey_set/cron/* /var/spool/cron/ # cp -pr /mnt/home/mikataka/grey_set/user/* /var/lib/canna/dic/user/ + 仮マウントをアンマウントする # umount /dev/sdc1 12 quota の設定 詳細は http://www.ep.sci.hokudai.ac.jp/~epmail/y2015/dvlop/basic/quota-guide.html http://www.ep.sci.hokudai.ac.jp/~epwww/dvlop/quota.html を参照 + /etc/fstab の編集 + /home, /home.bk のためのエントリを追加 # vim /etc/fstab + 以下のように追加する LABEL=root / ext4 errors=remount-ro 0 1 LABEL=sys-bk /bk ext4 defaults 0 2 LABEL=swap none ext4 swap 0 0 LABEL=/home /home ext3 defaults,usrquota 0 2 LABEL=/home.bk /home.bk ext4 defaults 0 2 + マウントポイントの作成 # mkdir /home.bk # mkdir /bk + マウントする # mount -a + aquota.user を作成する # rm /etc/quota.user # quotaoff -a # rm /home/quota.user # quotacheck -a ※ quotacheck -a を使うとquota.user とaquota.user がないときは ※ aquota.user を作ってくれる. + quota を再起動する # /etc/init.d/quota restart + ユーザにディスク使用制限を掛ける # edquota gate + gate に quota を掛ければ gate によって 登録される者はすべて quota を掛けられる + nano が起動されるので blocks の後の soft と hard を以下 のようにする ※ soft は一定時間の猶予を与える. hard は直ちに停止する ※ soft 10 G, hard 12 G とする - 変更後 filetype blocks soft hard inodes soft hard /dev/sdc1: 19568 10000000 12000000 4170 0 0 ※ block はディスクの制限, ※ inode はフィルシステムに作成可能なファイル数の制限となる. ※ 今回は block にかける. + 全ユーザへのquota 制限の適用 # edquota -p gate `gate-user-list stable ` + 一部のユーザ(hogehoge)のみquota 制限を外すときは以下のように行う # edquota hogehoge + soft hard を 0 にする - 今回は村上さん(mimstars のみ) + quota が適切にかけられたか確認する # repquota -u -a | lv 13 ホスト名、IP アドレスの変更 + 設定ファイルに記述されているホスト名を "usuzumi" から "grey" へ変更する - 変更するファイルは以下 /etc/hosts /etc/hostname /etc/motd /etc/im/SiteConfig /etc/mailname /etc/init.d/qmail /etc/exim4/update-exim4.conf.conf /var/qmail/control/locals /var/qmail/control/me /var/qmail/control/rcpthosts # vim /etc/hosts ※ ip アドレスをusuzumi: 133.50.160.52 から grey:133.50.160.50 へ ※ usuzumi とついているところはgrey へ変更 # vim /etc/hostname # vim /etc/motd # vim /etc/im/SiteConfig # vim /etc/mailname # vim /etc/exim4/update-exim4.conf.conf ※ usuzumi から grey へ # vim /var/qmail/control/locals # vim /var/qmail/control/me # vim /var/qmail/control/rcpthosts # vim /etc/init.d/qmail ※ usuzumi から grey へ + IP アドレスを usuzumi: 133.50.160.52 から grey:133.50.160.50 へ # vim /etc/network/interfaces 詳細は http://www.ep.sci.hokudai.ac.jp/~epcore/dvlop/y2015/iplist.html を参照 14 usuzumi (新 grey) を shutdown し,ネットワークカードを差し替える # halt -p 15 usuzumi (新 grey) を起動 + BIOS を立ち上げてオンボードのネットワークカードが立ち上がらないよ うにする + 起動後に以下の作業を行う. + qmail/dovecot 停止 ※ 3 と同様にやる + ネットワーク接続 + ネットワーク線を grey <=> usuzumi のように付け替える ※ ip と 大計ハブポートの対応に注意 ※ ※ grey: 133.50.160.50 G0916.09 ※ usuzumi: 133.50.160.52 G0916.11 + HDD が正しく認識されているか確認する. $ df -h + ネットワークがつながっている確認する $ ping 133.87.1.11 16 SSL 証明書の更新 + 事前に証明書の結合・秘密鍵のパスフレーズ削除は終わらせておく + qmail: host証明書 + 中間証明書 + 秘密鍵 の結合証明書(qmail.pem)を取得 + dovecot: それぞれ別々に取得 + qmail + あらかじめ作成しておいた結合証明書を取得 # scp mikataka@www:~/mail_work/upki_ssl/grey_connect.pem ./qmail.pem + これまでのファイルと置き換え # cp qmail.pem /var/qmail/server.key/ + 権限変更 # chmod 700 /var/qmail/server.key/qmail.pem + dovecot + 証明書,秘密鍵の取得 # scp mikataka@www:~/mail_work/upki_ssl/grey_mod.cer ./ # scp mikataka@www:~/mail_work/upki_ssl/nii-ocda3sha2.cer ./ # scp mikataka@www:~/mail_work/upki_ssl/grey_out.key ./ + これまでのファイルと置き換え # cp grey_mod.cer /etc/dovecot/dovecot.cer # cp nii-odca3sha2.cer /etc/dovecot/ # cp grey_out.key /etc/dovecot/private/dovecot_key.pem # chmod 700 /etc/dovecot/private/dovecot_key.pem 17 /, /home 領域のバックアップコピー + /etc/cron.daily/rsync を実行する. # cd /var/log # mkdir rsync-log # nohup /etc/cron.daily/rsync & ※ これは時間がかかるので終るのを待たずに次の作業へ 18 gate の公開鍵の更新 + www サーバから新 grey に ssh してもらって公開鍵を更新する. (www サーバの管理者か gate 管理者にやってもらう) gate@orange:$ ssh-keygen -R grey.ep.sci.hokudai.ac.jp gate@orange:$ ssh-keygen -R 133.50.160.50 gate@orange:$ ssh grey.ep.sci.hokudai.ac.jp Are you sure want to continue connecting (yes/no)? [yes] 19 gate を動かして, /etc/passwd と /etc/tcp.smtp を生成する. + gate.conf の設定で本気モードにする # vim /etc/gate.conf + 以下のようにする $DEBUG_CONFIG = 1 → $DEBUG_CONFIG = 0 + gate で /etc/passwd と /etc/tcp.smtp を生成する $ ssh orange.ep.sci.hokudai.ac.jp orange:$ telnet grey.ep.sci.hokudai.ac.jp 8888 ※ www に入るのはどのアカウントでもよい 詳細は http://www.ep.sci.hokudai.ac.jp/~gate/dvlop/y2011/gate-reconfig.html#test_use 20 gate/quota/qmail/dovecot の動作確認 + usuzumi 再起動 (qmail を起動させるため) # reboot + gate の動作確認 $ date $ ls -l /etc/passwd /etc/shadow ※ タイムスタンプがdate の時間とほぼいっしょになるのを確認する + gate-daily が動いている確認する $ ps aux | grep gate ※ gate-daily が動いていなければ, 転送は完了している. + /etc/passwd が gate-daily によって更新されているか確認する $ ssh orange.ep.sci.hokudai.ac.jp orange:$ ls -lt /etc/passwd ※ 表示される時間が数分前であればよい + 転送されているか確認する # ls /home/gate/userdv/stable /home/gate/ipdb/stable 詳細は http://www.ep.sci.hokudai.ac.jp/~gate/dvlop/y2011/gate-reconfig.html#test_use 参照 + quota の確認 # repquota -u -a | less + qmail の動作試験 + メーラから pop でメールを受信確認 + pop, pop over ssl + メーラから smtp でメールを送信確認 + smtp, smtp over ssl + dovecot の動作試験 + メーラから imap でメールを受信確認 + imap, imap over ssl 詳細は http://www.ep.sci.hokudai.ac.jp/~epnetfan/tebiki/server-mail/config/remote.html http://www.ep.sci.hokudai.ac.jp/~epnetfan/tebiki/server-mail/usage/mew-use.html 参照 21 www (secondary) からの配送確認 orange:# /var/qmail/bin/qmail-qstat を実行し,qmail のキューが時間と共に減少していることを確認する. 22 作業アカウントおよび, 作業ディレクトリ, 設定ファイルのバックアップを削除する. # rm -r /ETC /HOME /home/mikataka/grey_set/ /work/mondo4/backup/ # userdel -r mondo4 # userdel -r mondo4 23 再構築完了をメールで報告, MAIL サーバ再開 24 サーバのテプラ張替え 25 手引き集の改訂 ###################################################################### ※ 新 grey が上手く動作しなかった場合には旧 grey に入れ替え直し, 後日その 原因及び対策を考える. 以下にその時の手順を書く [旧 grey への入れ替え直し] 1 新 grey に入っているユーザがいるかもしれないのでターミナルにメッセージを表示 # wall The system will shutdown at ??:?? Please logout ([Ctrl]+[D]キーを押すとプロンプトが返ってくる) 2 一般ユーザのアクセスを禁止する. 作業中に誤って一般ユーザがサーバにアクセスできないようにする. 編集するファイルと追加内容は以下の通り # vim /etc/hosts.deny ALL: ALL <-- を追加 他の行はコメントアウト # vim /etc/hosts.allow ALL: 133.87.45.XX <-- 入替担当者のグローバルIP を追加 他の行はコメントアウト 3 新 grey の qmail と dovecot を停止する. + dovecot 停止 # service dovecot stop + qmail 停止 # service qmail stop + 停止確認 # ps aux | grep qmail + メールキュー内のメール数の確認. # /var/qmail/bin/qmail-qstat # /var/qmail/bin/qmail-qread + メールキュー内のメールを排出. 同時にqmail のプロセス停止. # kill -ALRM `ps ax | grep qmail-send | grep -v grep | awk '{print $1}'` + qmail プロセスが停止したことを確認. # ps aux | grep qmail + ネットワーク線を抜く + ep ドメイン宛のメールがセカンダリメールサーバである www へ配送されているか確認する. orange:# /var/qmail/bin/qmail-qstat qmail のキューが時間ともに増加していることを確認. 4 新 grey を shutdown # halt -p 5 ネットワークカードを usuzumi (旧 grey) と交換し, 外付け HDD を usuzumi (旧 grey) に接続. また, メモリも抜いてあるのでメモリも挿す. 6 ネットワークケーブルを抜いた状態で usuzumi (旧 grey) を再起動 ※ ホスト名, IP アドレスは変更されていないので, そのまま用いる 7 usuzumi (旧 grey) の qmail を停止 手順は 新 grey のときと同じ 8 ネットワークケーブルをつなぎ, ネットワーク接続が確立しているか ping コマンド, host コマンドで確認 9 usuzumi (旧 grey) を再起動 10 /etc/hosts.deny, /etc/hosts.allow の編集 + /etc/hosts.deny "ALL: ALL" の行を削除 + /etc/hosts.allow から "ALL: (作業用ホストの IP アドレス)" の行を削除 11 www サーバで orange:# /var/qmail/bin/qmail-qstat qmail のキューが時間ともに減少していることを確認. 12 自機で imap などが使える確認 13 報告メールを投げる 14 テプラを張り直す 15 トラブルの原因及び対策の調査 ######################################################################