SQLServerExpressの設定

SQLServerExpressインストール後に、最初に構成マネージャー等で設定すること。

1.TCP/IPの有効化

[SQL Server ネットワークの構成] - [SQLEXPRESS のプロトコル]で、[TCP/IP]を右クリックして、[有効にする]に設定。

2.ポートの変更

[TCP/IPのプロパティ] - [IPアドレス]タブで、下の[IP ALL]のポートを任意のポートを設定して、ファイアウォールで指定IPからの接続許可を設定する。

設定後に、 SQLEXPRESSを再起動する。

3.SSMSのインストール

ManageMentStudioをダウロードしてインストールする。

https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15

「使用できる言語」のところで、「日本語」を選んでダウンロードする。

1)DB復元

ManageMentStudio からDBを復元する方法については、以下。

https://docs.microsoft.com/ja-jp/sql/relational-databases/backup-restore/restore-a-database-to-a-new-location-sql-server?view=sql-server-ver15

2)外部からの接続

外部PCからのDB接続には、saユーザーのログインを許可するか別のログインユーザーを作成する。

SQLServerの[プロパティー]-[セキュリティ]の[サーバ認証]で、[SQL Server認証モード と Windows認証モード]に設定して再起動し、SQLServer認証を有効にする。

接続先は2.で3ポートを変更しているので、ManageMentStudio でポート指定をIPアドレスの後にカンマ区切りで指定する。

4.ODBC設定

古い32Bitサーバーアプリを動かすために、32BitのODBCの設定が必要。

https://docs.microsoft.com/ja-JP/troubleshoot/sql/connect/odbc-tool-displays-32-bit-64-bit

32Bit用のODBCコマンドは以下にある。

c:\Windows\SysWOW64\odbcad32

サーバーでポート指定をすること。

Windowsサーバー設定

VPSでWindowsサーバー追加時に設定ことのメモ

1.リモートデスクトップのポート変更

以下レジストリの値を変更したいポートにする。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber

ファイアウォールに上記ポートについて、指定IP(VPN)からのみ許可する設定を追加して、再起動

2.ファイアウォールの設定

リモートデスクトップ用ポートの許可を追加する。不要な設定は、無効にする。

3. リモートログイン時 のメール通知

3.1 SMTP

1)サーバーマネージャーの「役割と機能の追加」から「SMTPサーバー」を追加

2)サービス「簡易メール転送プロトコル」のスタートアップの種類を「自動」に

3)迷惑メール対策として、追加サーバーのSFPレコードを設定

3.2タスクスケジュラー設定

タスクスケジューラで、[トリガー: ユーザーセッションへの接続時]にメール通知するように設定。以前はタスクスケジューラからメール送信設定できたが、現在は使えないようなので、PowerShellで以下のようなコマンドを組む。

# 使用するSMTPサーバを指定します
$smtp = "127.0.0.1"
# 差出人アドレスを指定します
$from = "admin@XXXXX.com"
# 宛先アドレスを指定します
$to = "yourmail@XXXX.com"
# 件名を指定します
$subject = "Login(xxxxserver)"

# メール送信のためのSmtpClientクラスをインスタンス化
$cli = New-Object Net.Mail.SmtpClient($smtp)

# メール送信のためのMailMessageクラスをインスタンス化
$mail = New-Object Net.Mail.MailMessage($from, $to)
$mail.Subject = $subject
$mail.Body = "Did you login?"
$mail.SubjectEncoding = [System.Text.Encoding]::GetEncoding("ISO-2022-JP")
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding("ISO-2022-JP")

# メールを送信します
$cli.Send($mail)

タスクスケジューラの[操作]で、以下のように設定する。

  • 操作:プログラムの開始
  • プログラム/スクリプト:powershell.exe
  • 引数の追加:-Command “コマンドファイルのフルパス”

4.WindowsUpdateの手動化

勝手にUpdateされると困るので、sconfigコマンドから、手動更新に変設して、サーバー再起動する。

5.自動ログオン

サービス化されていない古いアプリサーバーのために、起動時に自動ログインするように設定する。

https://docs.microsoft.com/ja-jp/troubleshoot/windows-server/user-profiles-and-logon/turn-on-automatic-logon

上記では、レジストリにパスワードを平文で保存することになるので、以下のAutoLogonツールを入れるほうがいい。

https://docs.microsoft.com/ja-jp/sysinternals/downloads/autologon

6.アプリケーションエラーの通知

タスクスケジューラで、[トリガー:イベント]で、以下の場合にメール通知するように設定。 メールの送信方法は3と同様。

  • ログ:Application
  • ソース:Application Error
  • イベント ID:1000

PHPからのメール送信

WebサーバーのPHPプログラムから、ユーザーからの問い合わせ等をメール送信しているが、迷惑メールとなって届かないことが多い。最近、GMailのスパム判定がさらに厳しくなっているかんじがする。

1.従来の方法

PHP標準の以下のメール関数を使って実装。

(mail)https://www.php.net/manual/ja/function.mail.php

(mb-send-mail)https://www.php.net/manual/ja/function.mb-send-mail.php

SMTPサーバーの指定はできず、サーバーのメール転送エージェント(MTA:sendmailあるいはPostfix)から送信される。Webサーバーは、サービスのドメインのMXレコードに指定されているメールサーバー (以下「正式メールサーバー」) ではないので、SPFレコードにWebサーバーのアドレスを追加しても、最近は迷惑メールの判断されることが増えてきた。

2.改善策

サービス提供しているドメインの正式メールサーバー経由でメール送信するように修正した。方法として、1)メールリレーの指定をやってみたが、上手くいかない部分もあったので、2)STMPサーバーからの送信とした。

2.1 メールリレーの指定

PHPプログラムは変更せずに、サーバーのMTAから、正式メールサーバーを経由(メールリレー)して送る方法を試してみた。

CentOSでsendmailから、SMTP認証を利用して正式メールサーバー経由で送る場合の設定は、以下が参考になる。

https://access.redhat.com/ja/solutions/2733021

メールサーバーとしてXServerのメールサーバーを利用している場合、SPF_SOFTFAILとなる問題がある。

https://darekoi.blogspot.com/2018/05/xserver-spf.html

ウィルスチェックサーバーをSPFに追加すれば、改善するかもしれないが、保証はない。↓

(2021/08/14)

ウィルスチェックサーバーをSPFに追加してみたころ、以下となりGmailでは迷惑メールのまま送信できなかったが、他のメールには届いた。

tests=SPF_HELO_NONE,SPF_PASS

2.2 正式メールサーバーからの送信

PHPプログラムから、サーバーのMTAを経由せず、SMTP認証を利用して 正式メールサーバーから送るように変更した。

SMTP認証でのメール送信としては、PHPMailerが広く使われているよう。

https://github.com/PHPMailer/PHPMailer

検索すると、使い方について説明している日本語ページはあるが、古いものも多いので、正式なGitHubのサンプル見る方が良いと思う。英語が苦手でも、サンプルプログラム見れば使い方は簡単にわかる。

https://github.com/PHPMailer/PHPMailer#a-simple-example

ただし、サンプルは多言語に対応していないので、以下の追加は必要。

  $mail->CharSet = "utf-8";
  $mail->Encoding = "base64";

あと、正式版にする時には、以下を変更。

 //$mail->SMTPDebug = SMTP::DEBUG_SERVER; //デバッグ
 //$mail->SMTPDebug = SMTP::DEBUG_CONNECTION; //接続に失敗する場合のデバッグ
  $mail->SMTPDebug = SMTP::DEBUG_OFF;

3.結論

迷惑メールにならないサーバーPHPプログラムからのメール送信には、やはり正式にSMTP認証してメールサーバーから送るのが一番かと。DNSにSPF設定してとか、色々やったけど、さっさとプログラム直せばよかった。

CertbotによるSSL証明書(CentOS7.9)

CentOS 7.9 にLet’s encrypt でSSL証明書を設定した時のメモ。

検索すると、古いやり方が出てくる。最新のやり方は、Certbotの本家サイトに行くのがいい。

https://certbot.eff.org/lets-encrypt/centosrhel7-apache

OSとWebサーバーを選んで、後は指示通りにやるだけ。

一応、CentOS 7.9 で、Apache 2.4 でやった時の手順は以下(2021年2月5日時点)。

1.SSLサーバーの設定

mod_sslは既に入れてあり、SSLは有効化されている。

ただし、SSL証明書を取得したいドメインについては、バーチャルホストとして定義するほうがいい。

デフォルトの/etc/httpd/conf/httpd.confではなく、/etc/httpd/conf.d以下に、バーチャルホストを定義する。ここに定義した、XXXX.com.confに対して、後の手順4で、Certbotが、XXXX.com-le-ssl.confを作成して、XXXX.com.confについても、httpsリダイレクトに修正してくれる。

2.snapdのインストール

https://snapcraft.io/docs/installing-snap-on-centos

これも既にやってあったけど、一応、以下をやる。

sudo yum install epel-release

後は、snapdをインストールする。

sudo yum install snapd
sudo systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap

※この後、一度ログアウトするか、再起動

3.snapdのバージョン確認と更新

sudo snap install core
sudo snap refresh core

4.以前のCertbotのアンインストール

sudo yum remove certbot

5.Certbotのインストール

以下を実行。

sudo snap install --classic certbot

6.Certbotコマンドの設定

コマンドにシンボリックリンクをはる。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

7.証明書の設定

以下コマンドを実行して、サイトを選択して設定。

sudo certbot --apache

8.証明書の自動更新の設定

更新のスケジューリングは自動でされる。スケジューリングは、以下コマンドで確認できる。

sudo systemctl list-timers

※CentOS8の場合は、/etc/crontab に設定されている。

WordPressのXserverへの移行

お名前.comのレンタルサーバーから、Xserverのレンタルサーバーへ移行した。WordPressの移行については、「WordPress簡単移行」で移行した。

https://www.xserver.ne.jp/manual/man_install_transfer_wp.php

便利で楽にできていいのだが、ただ、一つのサイトだけデータ移行のところで失敗して移行できなかった。

【原因】

プラグインの「Google Map WP」がDBでバイナリデータを使っていて、それが通常方法でdumpした場合には復元できないためエラーとなるよう。

【対応方法】

「WordPress簡単移行」を使いたい場合は、一旦、「Google Map WP」プラグインを削除してから移行して、その後、Xser ver側で再度、プラグインを入れるしかないか。

そうじゃなければ、自分で移行する。

https://www.xserver.ne.jp/manual/man_install_transfer_wordpress.php

その場合、DBバックアップ時には「–hex-blob」オプションを指定すること。

https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_hex-blob