カテゴリー: サーバー管理

  • win-acmeの新バージョン通知

     v2.1.15辺りからwin-acmeに自身のバージョンをチェックする機能が追加された。

     ただし、実行時のログファイルに記録されているだけなので、定期的にログファイルを確認しないと気付けかない。

     そこで、win-acmeの実行に合わせてログファイルを確認し、新バージョンが発行されていれば電子メールを送るようにする。リポジトリに登録すれば良いとかは無しで。

     まず、win-acmeでバージョンチェックを有効にする。
    展開されたwin-acmeのフォルダー内にあるsettings_default.jsonをsettings.jsonという名前でコピーし、VersionCheckをtrueにする。

      "Client": {
        "ClientName": "win-acme",
        "ConfigurationPath": null,
        "LogPath": null,
        "VersionCheck": true
    
      },
    

     ログファイルをチェックするバッチファイル(win-acme_checknew.bat)
    実行した結果をログファイルに追記しておく。

    @echo off
    @echo win-acmeの新バージョンがあれば、postmaster宛にメールを送る
    @echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
    
    setlocal enabledelayedexpansion
    
    set ACME_LOGFILE=C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Log\log-%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt
    
    @rem ログファイルが無ければ、終了する。
    if not exist %ACME_LOGFILE% goto :DONE
    
    set AVAILABLE=
    @rem setlocal enabledelayedexpansion なので ^! で ! をエスケープする
    for /f "usebackq delims=" %%a in (`findstr /r /c:"\[WRN\] New version .* available^!" %ACME_LOGFILE%`) do Set AVAILABLE=%%a
    
    if not "%AVAILABLE%" == "" (
        @echo New version available!
        @echo call %~dp0SendMail.bat "win-acme New version available^!" "%AVAILABLE%"
              call %~dp0SendMail.bat "win-acme New version available^!" "%AVAILABLE%"
        @echo %DATE%-%TIME: =0% %~nx0 : Send mail.>>%ACME_LOGFILE%
    ) else (
        echo No new version.
        @echo %DATE%-%TIME: =0% %~nx0 : No New Version.>>%ACME_LOGFILE%
    )
    
    :DONE
    endlocal
    
    timeout /T 300
    
    exit /b
    
    

     PowerShellスクリプトを呼び出すバッチファイル(SendMail.bat)

    @echo off
    @rem 電子メールを送信する
    @rem 送信元アドレス
    @rem 送信先アドレス
    @rem 件名
    @rem 内容
    @rem 送信元アドレス、送信先アドレスの両方とも省略した場合は、postmasterのアドレスが使用される
    echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
    
    setlocal enabledelayedexpansion
    
    if "%~4" == "" (
      set MailFrom="postmaster@domain.com"
      set MailTo="postmaster@domain.com"
    
      if not "%~1" == "" set Title=%~1
      if not "%~2" == "" set TxtBody=%~2
    ) else (
      if not "%~1" == "" set MailFrom=%~1
      if not "%~2" == "" set MailTo=%~2
      if not "%~3" == "" set Title=%~3
      if not "%~4" == "" set TxtBody=%~4
    )
    
    @echo powershell -file %~dp0SendMail.ps1 !MailFrom! !MailTo! "!Title!" "!TxtBody!"
          powershell -file %~dp0SendMail.ps1 !MailFrom! !MailTo! "!Title!" "!TxtBody!"
    
    endlocal
    
    exit /b %ERRORLEVEL%

     電子メールを送信するPowerShellスクリプト(SendMail.ps1)

    Param($from, $to, $subject, $body)
    
    $ary = $from.Split("@")
    $server = $ary[1]
    $port = 587
    $user = "xxx"
    $password ="xxx"
    
    $securepassword = ConvertTo-SecureString $password -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential(
      $user, $securepassword)
    
    Send-MailMessage `
      -From $from `
      -To $to `
      -Subject $subject `
      -Body $body `
      -Encoding UTF8 `
      -SmtpServer $server `
      -Port $port `
      -UseSsl `
      -Credential $credential
    

      タスクスケジューラーライブラリのwin-acme renew (acme-v02.api.letsencrypt.org)の操作に、win-acme_checknew.batを追加し、win-acme.exeの後に実行するようにする。

     Windows Server 2016上で実行したときは、SYSTEMアカウントで実行するとログファイルにアクセスできないようだったので、Administratorアカウントにて実行させた。

     なお、win-acmeや電子証明書が更新された場合はタスクスケジューラーからこのバッチファイルの設定が削除されるかもしれないので、そういう場合は再確認しておく。

  • WordPress 掲示板設置

     ユーザー間の情報交換のため、WordPressに掲示板を設置した。

     bbPress,GD bbPress Attachments,BuddyPressのプラグインをインストールした。

    bbPress

     テーマTwenty Twenty-Oneから実装されたダークモードを使うと、トピック内の文字が黒色のままで見えなくなるので、ダークモードは禁止した。

    GD bbPress Attachments

     ダッシュボード-フォーラム-Attachments-Settings
      Users Upload RestrictionsでBlockedをoff
      Topic and Reply DeletingをDelete

     以下の方法で日本語化した。

    C:\xampp\htdocs\wordpress\wp-content\plugins\gd-bbpress-attachments\forms\uploader.php を以下のように書き変え、UTF-8,BOTなしで上書き保存する。
        "Upload Attachments" -> "ファイルのアップロード"
        "Maximum file size allowed is %s." -> "最大サイズは %s です。"
        "Attachments" -> "添付ファイル"
        "Add another file" -> "さらに追加する"

    BuddyPress

     ダッシュボード-設定ーオプション
      ツールバー:off
      アカウント削除:off

  • AWS Amazon SESの送信制限緩和

     Amazon SESでは初期状態だと以下の制限がある。

    • 事前に登録したメールアドレス以外へ送れない
    • 24時間で200通しか送れない
    • 1秒間に1通しか送れない

     送信先に制限があると内部利用でしか使えないため、この制限を緩和する。

     まず、厳しく言われているバウンスや苦情を処理するためにAmazon SNSを使って素早く処理できるように設定しておく。

    https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/configure-sns-notifications.html

     IAMユーザーを作成する

    • Amazon IAMコンソールを開く
    • 左ペインのユーザーを選び、ユーザーの追加ボタンを押す
      • ユーザー名:AmazonSNSAdmin
      • AWS アクセスの種類を選択:
        • プログラムによるアクセス:On
        • AWS マネジメントコンソールへのアクセス:On
        • コンソールのパスワード:自動生成パスワード
    • 次のステップボタンを押す
    • 既存のポリシーを直接アタッチを選ぶ
      • AmazonSNSFullAccess を選択する
    • 次のステップボタンを押す
    • 次のステップボタンを押す
    • 作成されたIAMユーザー情報をメモしておく

     バウンスをメールで受け取れるように設定する。

    • Amazon SESコンソールを開く
    • 左ペインのIdentity Managementで、Domainを選択する
    • Notificasionsを開き、Edit Configurationボタンを押す
    • Click here to create a new Amazon SNS topic.を押し、SNSTopicと入力して、Create Topicボタンを押す
    • Bauncesの右のNo SNS topicを開き、上で入力したSNSTopicを選ぶ
    • Include original headersをチェックする
    • Email Feedback ForwardingをEnableにする
    • Save Configボタンを押す

     サンドボックス外への移動

    • Amazon SESコンソールを開く
    • 左ペインのSending Statisticsを選ぶ
    • Your Amazon SES account has “sandbox” access in region xxx と枠が表示されている。右ペインの Request a Sending Limit Increase ボタンを押す
    • サポートダッシュボード画面が開くので入力していく
      • Case details
        • Limit type:SES 送信制限 <-最初から選択されている
        • メールの種類:その他
        • ウェブサイトの URL:https://www.sample.com/
        • あなたのメールを明確にリクエストした受信者のみに送信する方法を詳しく説明してください:
          • 事前に、またはWeb上で依頼されたメールアドレスのみにメールを送信します
        • バウンス通知、および苦情通知を受け取った場合に従うプロセスを詳しく説明してください
          • メールアドレスのNotificationsに、Bounce Notifications SNSを指定し、バウンスが発生した通知が来た場合は即座に解消に努めます
        • AWS サービス条件 と AUP を順守しますか? -:はい
      • Request 1
        • リージョン:Asia Pasific (Tokyo)
        • Limit:希望する一日あたりの送信クォータ
        • New limit value:1000
      • Use case description
        • Lightsail上のWindows Server 2016でWordpressを稼働させ、ブログを開設する。
        • 趣味のクラブ(30人程度)でメンバー間の情報共有、メーリングリストの運営を行う。
        • 年に1回行っているイベント(50人程度)の告知、参加受付を行う。
      • Contact Optionsを開く
        • Preferred contact language:日本語
    • Submitボタンを押して送信する。

     約8時間後に、RE:[CASE xxx] Limit Increase: SES 送信制限という件名の日本語メールが届き、以下の制限に変更された。

    このたびは、送信制限の引き上げ申請をご送信いただき、ありがとうございます。新たな送信クォータは、1 日あたり 50,000 メッセージとなります。新たな最大送信レートは、毎秒 14 メッセージです。また、お客様のアカウントを Amazon SES サンドボックスから移動いたしました。