サーバーの移行手順

サーバーの老朽化あるいはVPS業者の乗換えなどにより、サーバーを移行する場合の手順についてのメモ。

1.移行手順

DBサーバー移行時だけ計画停止(メンテナンス)するという条件で、 以下の手順で移行する。

1)新サーバーの環境構築

現行サーバーからプログラム、データ等をコピーして、新サーバーで環境を構築する。

新サーバーの環境構築

この時に、現行DBサーバーからデータをコピーして新DBサーバーに登録するまでの時間を覚えておくこと。この時間が、4)でのサービス停止時間(メンテナンス時間)を決めるのに必要となる。

テスト端末でhostsに以下の設定を追加することで、新サーバーの動作確認を行う。

(テスト端末のhosts設定)
222.222.222.222 XXService.com #新WebサーバーのIPアドレスを設定

Windows10でのhosts設定方法は以下。

新Webサーバーと新DBサーバーで、問題なく動作することを確認する。OS等のバージョンを上げている場合は、その影響がないか念入りに動作確認を行う。

2)新Webサーバー+現行DBの動作確認

新DBサーバーは一旦停止して、新Webサーバーから現行DBサーバーを見るようにする。現行DBサーバー側で、新Webサーバーからの接続を許可 (DB設定とファイアウォール)する 。

新Webサーバー+現行DBの動作確認

1)と同様に、新Webサーバーにアクセスして動作確認を行う。

3)DNSを変更してWebサーバー並行稼働(現行DB)

DNS設定を現行サーバーから新サーバーに変更することで、ユーザーが徐々に新Webサーバーにアクセスするようになる。

DNS設定を変更し、Webサーバー並行稼働(現行DB)

通常であれば1週間ほどでDNSキャッシュは全て更新されて、現行Webサーバーへの ユーザーからのアクセスは完全になくなる。この時間を短くしたい場合は、事前にDNS設定でTTL値を小さくしておく。

現行Webサーバーは、ユーザからのアクセスがなくなった時点でお役御免となる。

4)DBサーバーを移行し、新サーバーにて運用

事前に、計画停止についてユーザーへの告知(調整)をする。

計画停止時にDBサーバーの切り替え作業を行い、旧サーバーを停止する。

DBサーバーを移行し、新サーバーにて運用

計画停止時の作業内容としては、ざっくり以下。

  1. メンテナンス中として、DBアクセスを止める
  2. DBバックアップを取得し、新DBサーバーに投入する
  3. 旧サーバーを停止し、DBアクセス先を新DBサーバーに変更
  4. サービス再開

2.レプリケーション機能を使う場合

データ量が多くてDB移行時の停止時間が長くなりすぎる場合あるいは長い停止時間が取れない場合には、レプリケーション機能を使う。

2)と3)の間で、新DBをスレーブに設定することで、

3)Webサーバー並行稼働+現行DBサーバー(マスタ)+新DBサーバー(スレーブ)といった運用にする。

レプリケーション機能を使う場合

4)DBサーバー切り替えは、以下作業となり、僅かな停止時間で実施できる。

  • 新DBサーバーを、スレーブからマスタに昇格し
  • DB接続先を新DBサーバーに切り替える

IPアドレス制限かけるもの

固定IPでのアクセスルートを確保した場合、以下に関してIPアドレス制限をかける。今後、また固定IPの変更、追加もあると思うので個人用メモ。

  • WordPressの管理ページ
  • 運営サイトの管理ページ
  • 管理者向けシステム
  • IP制限に対応しているネット銀行
  • IP制限に対応しているコントロールパネル
  • OneDrive for Business
  • SoftEther VPN Server

SSHに関しては、固定IP用サーバーの障害時に困るので、IPアドレス制限はかけずに鍵認証にて対応。将来、固定IP用サーバーを別業者でもう一つ確保して、IPアドレス制限もかけるようにするか。

クラウド/VPS/レンタルサーバーの【コントロールパネル】セキュリティ対策

※これは古いです。最新版(2020年11月)はこちら

クラウド、VPSのセキュリティ対策について、サーバー自体のセキュリティ対策をちゃんとしても、コントロールパネルが乗っ取られたら元も子もない。

そこで、知っている範囲での各社の状況 (2019年2月21日時点)についてのメモ。

  IP制限 2段階認証 ログイン通知 操作ログ
お名前.com × × × ×
ConoHa × ×
エックスサーバー × × × ×
さくらインターネット ×

VPS:×

クラウド:〇

×
ニフクラ × ×

1. お名前.com

「お名前.com Navi」にログイン出来たら、後はすべて操作可能。ログインに関する制限、通知等の機能もない。

2.ConoHa

「アカウント設定」から「2段階認証」「ログイン通知メール」が可能。

https://support.conoha.jp/common/guide/account/?btn_id=c-2stepauthentication-sidebar_guide-account

3.エックスサーバー

「サーバーパネル」にログイン出来たら、後はすべて操作可能。ログインに関する制限、通知等の機能もない。

4. さくらインターネット

VPSとクラウドともに操作ログが閲覧できる。

(VPS)

https://help.sakura.ad.jp/hc/ja/articles/206245282-%E6%93%8D%E4%BD%9C%E5%B1%A5%E6%AD%B4%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B

(クラウド)

https://manual.sakura.ad.jp/cloud/controlpanel/eventlog/eventlog.html

クラウドは2段階認証にも対応。

https://manual.sakura.ad.jp/cloud/controlpanel/settings/2-factor-auth.html

5. ニフクラ(旧名称:ニフティクラウド)

ログインのIPアドレス制限が、「アカウント管理」からアカウントを選択して、「IP許可設定追加」で可能。

https://cloud.nifty.com/service/ip_limit.htm

また、過去6カ月分のコントロールパネルの操作ログが参照できる。

https://cloud.nifty.com/help/log/

ログイン時の通知メールの機能はない。

SoftEther VPNでL2TP/IPSec

ConoHaのVPSサーバー(CentOS 7.6)にインストールしたSoftEther VPNでL2TP用のサーバー設定した時の作業メモ。

利用目的としては、 外で公共Wifiを使う時のセキュリティ対策と、サイト管理作業時のIPアクセス制限をVPSサーバーに限定するため。後、東京リージョンのサーバーなので、地方や海外でもradikoでJ-Waveが聴けるというメリットもある。

1.管理マネージャーからの設定

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/1

1)不要機能の無効化

管理マネージャーから以下をすべて無効にする。

  • OpenVPN / MS-SSTP
  • ダイナミックDNS ※configファイルの書き換え
  • VPN Azure

2)余分なリスナーを削除

 使わないリスナーは削除する。

3)暗号化と通信関係の設定

「使用する暗号化アルゴリズム」はデフォルトから強いものに変更。

「インターネット接続の維持機能を使用する」のチェックを外す。

4)仮想HUBの設定

「DEFAULT」があれば削除して、新たに適当な名前でデフォルト用Hub(以下、仮にHubDummy)と利用するHub(以下、仮にHubReal)を作成する。

  • 「匿名ユーザーに対してこの仮想HUBを列挙しない」にチェックを入れる。
  • 最大同時セッション数の制限を設定する

5)IPSec / L2TP 設定

「L2TP サーバー機能を有効にする(L2TP Over IPSec)」を有効にする。

「IPSec事前共通鍵」を適当に設定。

「接続時のユーザー名で仮想HUBが省略された場合に接続する仮想HUBの選択」にHubDummyを設定する。

6)仮想NATおよび仮想DHCPサーバー機能

HubRealの 「仮想Hubの管理」から「仮想NATおよび仮想DHCPサーバー機能」を開いて、

「SecureNAT機能を有効」にする。

「SecureNATの設定」で、「仮想NAT機能を使用する」と「仮想DHCPサーバー機能を使用する」にチェックを入れる。

7)ローカルブリッジ設定

新しいローカルブリッジを定義する。

以下にあるようにtapデバイスを使うようにした。

https://ja.softether.org/4-docs/1-manual/3/3.6#3.6.9_tap_.E3.83.87.E3.83.90.E3.82.A4.E3.82.B9.E3.81.AE.E4.BD.BF.E7.94.A8

仮想HUBにHubRealを選択し、「作成する種類」は「新しいtapデバイスとのブリッジ接続」を選択して、「ローカルブリッジ」を追加する。

8)ユーザーの作成

HubRealの「仮想HUBの管理」から、ユーザーを作成する。とりあえずはパスワード認証で。

2.ポート開放

使用するポートは、UDPの500と4500。

https://ja.softether.org/3-spec#SoftEther_VPN_Server_.E3.81.AE.C2.A0L2TP.2FIPsec_.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E6.A9.9F.E8.83.BD.E3.81.AE.E4.BB.95.E6.A7.98

サーバーでIPSecのポートを公開する。

firewall-cmd --permanent --add-service=ipsec
firewall-cmd --reload

3.クライアント接続

SoftEtherのサイトのチュートリアルはここ。

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide

3.1 Windows10からの接続

SoftEtherのサイトはWindows7のままなので、以下サイトが参考に。

http://www.seil.jp/doc/index.html#fn/pppac/use/pppac-client/win10_l2tp.html

ユーザー名は、「ユーザー名@HUB名」を入れる。 事前共有キーは、「IPSec事前共通鍵」のこと。

3.2 iPhone/iPadからの接続

iOS12.1.4の場合、「設定」から「VPN」で、「VPN構成を追加」で設定できる。タイプは「L2TP」にし、 アカウントは「ユーザー名@HUB名」、 シークレットに「IPSec事前共通鍵」を設定。

SoftEtherのサイトは 、古いiOSで英語版だけど参考まで。

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/2

SoftEther VPNサーバーのインストール

ConoHaのVPS(CentOS7)に、SoftEther VPNサーバーを入れた時のメモ。

(SoftEther VPN)

https://ja.softether.org/

(インストール手順)

https://ja.softether.org/4-docs/1-manual/7/7.3

1.事前準備

必要なソフトを入れる。

 yum install gcc 

2.インストール

(ダウンロードページ)

https://www.softether-download.com/ja.aspx?product=softether

コンポーネント「SoftEther VPN Server」、プラットフォーム「Linux」、CPU「Intel 64 / AMD 64(64 bit)※」を選択する。(※念のため、サーバーの/proc/cpuinfoで確認)

最新のものをサーバーで取得する。

wget ダウンロードURL 

後は、インストール手順通りに進める。

(インストール作業)

tar xzvf ダウンロードファイル
cd vpnserver/
make ※質問にはすべて1を入力

vpnserverディレクトリを、/usr/localに配置してパーミッションを変更する。

cd ..
mv vpnserver /usr/local
cd /usr/local/vpnserver
chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver

解凍したvpnserverフォルダがフルアクセスだったので、一応、このパーミッションも変更した。

cd ..
chmod 700 vpnserver

3.動作確認

vpncmd の check コマンドによる動作チェックを行う。

cd vpnserver
./vpncmd

コマンドで、「3」を入力して「VPN Tools」に入り、 「check」を入力して動作確認を行い、「exit」で終了。

4.サービス登録

公式ページのインストール手順では、スタートアップスクリプトとなっているが、CentOS7ではサービス登録にする。サービス登録の内容は、以下ページが参考になる。

https://qiita.com/salt_field/items/5969f7d7a8612e150bda

サービス登録までを行う。

 vi /usr/lib/systemd/system/vpnserver.service 
----------------------------------------------
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target
----------------------------------------------

systemctl daemon-reload
systemctl enable vpnserver

5.NATトラバーサル、ダイナミックDNS機能 、IPv6リスナー の無効化

NATトラバーサルが有効のままでは、ファイアウオールに関係なくSoftEther VPNサーバー管理マネージャから接続できてしまうので、無効化する。

コンフィグファイルを直接編集し、ダイナミックDNS機能 、IPv6リスナーも使わないので同時に無効化する。 。

cd /usr/local/vpnserver
cp -p vpn_server.config vpn_server.config.org
vi vpn_server.config
-------------------------------
:
declare DDnsClient
{
bool Disabled true
:
:
declare ServerConfiguration
{
:
bool DisableIPv6Listener true
bool DisableNatTraversal true
:
-------------------------------

6.管理者パスワード設定

管理者ログインのIPアドレス制限の設定を行う。

cd /usr/local/vpnserver
vi adminip.txt
-------------------------------
127.0.0.1
XXX.XXX.XXX.XXX   ※6.で接続するクライアントIPアドレス
-------------------------------

vpnserverを起動し、コマンドにて管理者パスワードを設定する。

systemctl start vpnserver 

cd /usr/local/vpnserver
./vpncmd
:
Select 1, 2 or 3: ※1を入力
:
Specify Virtual Hub Name: ※そのままリターン

Specify Virtual Hub Name: ※そのままリターン

VPN Server>ServerPasswordSet
:
Password: ※パスワード入力
Confirm input: ※パスワード再入力
:
VPN Server>quit

7. VPN サーバー管理マネージャから設定

Windows端末にて、ダウンロードページから、「SoftEther VPN Server Manager For Windows」をダウンロードして、サーバー管理ツールをインストールする。

サーバー側で必要なポートを開放する。とりあえず443ポートで接続する場合は以下を実行。

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

サーバーアドレスと管理者パスワードを設定して接続して、目的に応じた設定をしする。