かつての「アイコン」。

まさかの、令和になっての立体化です。

Popup Parade 『機動戦艦ナデシコ』ホシノ・ルリ

旧Wordpressでもアイコンにしていたこのキャラクターの立体化。リリースと同時に予約をして、ようやく届きました。

開封&撮影

コンデジ

まずはコンデジによる分割撮影。比較的小ぶりながらも諸々の再現度が高かったです。

ミラーレス

服のロゴやら小物などの細かいところもアニメに沿って再現。

サイズ比較

かなり前にリリースされていたプライズ版との比較。Popup Paradeの商品コンセプトにあるように、かなり小さいサイズ感です。

このスケールですと、

1/12用に購入した小物とも合わせやすいので助かります。

Mod_Securityが検知したIDの抜き出し。(awkワンライナー)

Mod_Securityが検知したセキュリティポリシーの判定に役立つ小技です。

環境

  • Mod_Security
  • Apache2.4

を連携させ、SecRules On / DetectOnlyにしています。

ログ表示例

[Wed Nov 01 14:12:12.213885 2023] [:error](中略) ModSecurity: Warning. Pattern match (中略) at ARGS:html. [file "/usr/share/modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "308"] [id "941190"] [msg "IE XSS Filters - Attack Detected."] (略)

ここから、941190の部分のみを取り出します。

コマンド

awk '{match($0, /\[id "([0-9]+)"\]/, arr); if(arr[1]) print arr[1]}' ログファイル

コマンド実行例

awk '{match($0, /\[id "([0-9]+)"\]/, arr); if(arr[1]) print arr[1]}' /var/log/bookstack/bs_error.log | sort -u
# 更に重複を排除

実行結果

941180
941190
942170
942350

これらを除外するなり例外に加えるなどの処理を行う下地ができました。

Redis-ServerでPIDが作られない問題に対処。

Nextcloudを導入する際、Redis-Serverを組み込むところを行いました。

その中に気になるメッセージがあったので対処します。

Starting Advanced key-value store...
redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after s>
 Started Advanced key-value store.

手順1. IPv6無効化

参考にしたURL:
https://ubuntu.perlzemi.com/blog/20200225174004.html

1-1.設定ファイルのバックアップを取ります。

  • ディレクトリ移動
cd /etc/redis && pwd
  • 設定ファイルバックアップ
sudo cp -pi redis.conf /path/go/backup/directory/redis.conf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u redis.conf /path/go/backup/directory/redis.conf.$(date +%Y%m%d)

差分がなければ(エラーがなければ)バックアップ完了です。

1-2. 設定ファイルを編集します。

  • ファイル編集

次のファイルを、以下の差分になるように編集します。

/etc/redis/redis.conf
  • 差分
-bind 127.0.0.1 ::1
+bind 127.0.0.1

手順2. 起動スクリプトの編集

参考URL:
https://github.com/redis/redis/issues/7361

2-1.設定ファイルのバックアップを取ります。

  • ディレクトリ移動
cd /etc/systemd/system && pwd
  • 設定ファイルバックアップ
sudo cp -pi /etc/systemd/system/redis.service /path/to/backup/directory/redis.service.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u /etc/systemd/system/redis.service /path/to/backup/directory/redis.service.$(date +%Y%m%d)

差分がなければ(エラーがなければ)バックアップ完了です。

2-2.設定ファイルを編集します。

次のファイルを、以下の差分になるように編集します。

/etc/systemd/system/redis.service
-PIDFile=/run/redis/redis-server.pid
+#PIDFile=/run/redis/redis-server.pid
+ExecStop=/bin/kill -s TERM $MAINPID
+ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid" 

2-3. 設定ファイルを反映させます。

sudo systemctl daemon-reload

3. 修正を確認します。

  • redis-serverサービス再起動
sudo systemctl restart redis-server.service
  • 設定反映確認
systemctl status redis-server.service

次のように、PIDが作られていれば設定完了です。

    Process: 531 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
    Process: 653 ExecStartPost=/bin/sh -c echo $MAINPID > /var/run/redis/redis.pid (code=exited, status=0/SUCCESS)
   Main PID: 652 (redis-server)
      Tasks: 4 (limit: 4671)
     Memory: 4.4M
     CGroup: /system.slice/redis-server.service
             └─652 /usr/bin/redis-server 127.0.0.1:6379

Nextcloudの認証強化。(二段階認証アプリの設定)

Nextcloudをインターネット上で公開する場合、ほぼ必須の措置です。

環境

Nextcloud 27.1.3で挙動を確認しました。

二段階認証アプリの有効化

管理>アプリ>「あなたのアプリ」に移動します。

Two-Factor TOTP Providerを「有効にする」をクリックします。

二段階認証の設定

個人>セキュリティに移動します。

  1. 二要素認証の、TOTPを有効化します。
  2. QRコードが表示されるので、外部認証アプリ(Google Authenitcator等)でコードを読み取ります。
  3. 新しく表示されたコードを読み取って「検証」します。

アプリをなくした場合に備え、バックアップコードも作っておきます。

挙動

  1. 別のPC/ブラウザなどでNextcloudサイトにアクセスします。
  2. ユーザ名とパスワードを利用してログインします。
  3. 以下のようにコードの入力画面が出ます。

これで、ある程度の安全性が担保されました。

『Otaru1899』ソロプレイのルールメモ。

ボードゲーム『Otaru1899』購入理由の一つは、『イナゾー拡張』によってソロプレイが可能ということにあります。

このソロプレイのルールをメモしておきます。

ソロ概要

  • オートマカード(最新鋭ロボット「イナゾー」)と対戦を行います。
  • 難易度を3つから選べます。

イナゾーの特徴

  • イナゾーは初期資産も漁船も持ちません。
  • イナゾーは教育の必要がありません。(全て待機状態です)
  • イナゾーは紙幣/資源を持たず、得ることもありません。
    • そのため、農学校、開拓使村のアクションを解決する際、何も行いません。
  • 複数の投資や任命を行うことがあります。

セットアップ

プレイヤーの準備

  1. 共通ボードは1/2人用の面を使います。
  2. 通常通り、プレイヤー用の準備を行います。
  • 初期資産タイルはランダムに2枚引き、1枚を選びます。(そこから示された資源を得ます)
  • プレイヤーの開始時資源は、任意の資源を1つ選びます。

イナゾーの準備

  1. イナゾー用の個人ボードは、ワーカーのみ用意します。これら全てをワーカー置き場に置きます。
  2. ソロカード9枚を用意し、以下の難易度に合わせます。
  3. 上記、用意したソロカードをシャッフルして裏向きに置きます。
  4. 1枚を表向きに置いておきます。

イナゾーの難易度

  • イージー:レベル3のソロカード3枚を箱に戻します。
  • ノーマル:レベル3のソロカード3枚を箱に戻します。イナゾーは15名声点を持った状態でスタートします。
  • ハード:レベル1のソロカード3枚を箱に戻します。イナゾーは15名声点を持った状態でスタートします。

ゲーム進行

プレイヤーの先行でスタートし、互いに手番を繰り返します。

イナゾーの行動基準

イナゾーは、常に「4つのアクションスペースから、そこにある紙幣の金額が一番大きいアクションを実行します。

プレイヤーのターン時の行動

プレイヤーの行動

通常と同じです。

  1. 4種類のアクションエリアから、ポーンを「今置かれていないところ」に移動する。
  2. そこに置かれている紙幣を全て得る。
  3. そのエリアに隣接しているエリアに紙幣コマを1つずつ置く。
  4. エリアに沿ってトラックを動かす。
  5. アクションを実施する。

まで行います。

イナゾーの行動

その後、イナゾーはプレイヤーが選んだアクションを行いますが、以下が異なります。

プレイヤーのアクションが農学校/開拓使村の場合

イナゾーは何も行いません。

プレイヤーのアクションが中央小樽駅の場合
  • ソロカードに書かれた各数字(AP)に従って、小さい方から順に、そのAPを最大限使って実行できる処理を行います。
  • 行える処理がない場合(任命できるスペースが塞がれているなど)、そのAPは飛ばします。(何もしません)
  • イナゾー配下のワーカーは教育の必要がないため、直接、手駒のワーカーを送り込むことができます。
  • 複数の任命を取ることがあります。
  • アクション解決後、ソロカードの裏向きの山から1枚をめくります。
プレイヤーのアクションが基督教会の場合
  • ソロカードに書かれた各数字(AP)に従って、小さい方から順に、そのAPを最大限使って実行できる処理を行います。
  • 行える処理がない場合(APが足りない、タイルが全てなくなった等)、そのAPは飛ばします。(何もしません)
  • 複数の投資を行うことがあります。
  • これによってイナゾーがタイルを得た場合、全て裏向きでイナゾーの脇に置きます。
    • イナゾーは建物の効果を利用せず、有力者の表面から得点を得ることもありません。
  • アクション解決後、ソロカードの裏向きの山から1枚をめくります。

イナゾーのターン時の行動

  • そこにある紙幣の金額が一番大きいアクションにポーンを置きます。
  • そこに置かれている紙幣は全て共通ストックに戻します。(イナゾーは紙幣を得ることも支払うこともありません)
  • 隣接したエリアに紙幣コマを1つずつ置く、エリアに沿ってトラックを動かすまでは同じです。
  • 先のルールに従って、農学校/開拓使村の場合は何もせず、中央小樽駅/基督教会はカードに書かれたAPに従って処理を実行します。

ゲーム中に収穫/決算が発生した場合

収穫時

イナゾーは何も実行しません。

決算時

プレイヤーと同様、通常のルールに従って名声点を得ます。

最終得点計算

中央小樽駅の追加名声点

  • プレイヤーと同様の条件で、通常通り、名声点を得ます。
  • ワーカーを置いている団の得点条件タイルでは、イナゾーは、「それら全ての条件を持っている」ものとします。

タイルの追加名声点

  • イナゾーが獲得した即時有力者タイル1枚ごとに6名声点を得ます。
  • イナゾーが獲得した建物タイル1枚ごとに3名声点を得ます。

勝敗

  • イナゾーがプレイヤーより多くの点数を獲得した
    • プレイヤーの敗北です。
  • イナゾーとプレイヤーが同点
    • プレイヤーの敗北です。
  • イナゾーがプレイヤーより少ない点数を獲得した
    • プレイヤーが勝利します。

ボードゲーム『Otaru 1899』開封と百均グッズによる収納。

「うちばこや」謹製のボードゲーム、『Otaru1899』到着したので、早速の開封です。

コンポーネント

緻密な木駒の美しさは相変わらず。カード類はアドオンのみとなっていて、厚めのしっかりとしたタイルで構成されています。

なにより目を引いたのがオプションで購入したメタルコイン。ずっしりした重さはゲームへの没入感バッチリです。

収納

元の箱に余裕があったので、収納の難易度は中程度。

  • 資源:Case and Case4分割
  • ワーカー:Case and Case 2分割の中身だけ
  • タイル類/金トークン/拡張:TCGケース(スリム)
  • メタルコイン:分割ピルケース
  • その他:タッパー

と、百均グッズで全て収納。

後は実際にプレイを繰り返して、改良をしていきます。

トランクと背景-1-(最初のトライ)

買い物中に、トランク型のストレージを見かけたので「同じ事ができないだろうか?」と試すことにしました。

うまい具合にちょうどいいサイズのトランクがありました。経年変化もナイスです。

試撮影

適当に小物を入れてみます。

座像のようなものは土台を利用して高さを合わせてみます。

手持ちの背景と併せるとこうなりました。

撮影して思ったこと

  • より「箱庭」感が増します。
  • 旅情感や「鞄から飛び出した」見せるディスプレイのようです。

その反面、全てにピントを合わせる分、撮影難易度は飛躍的に上がってきました。

面白い題材ではあるので、もう少し続けていきます。

RabbitMQを検証環境にインストール。

ちょっと検証が必要だったので、RabbitMQのインストールを行いました。

前提

以下の環境で動いています。

  • Ubuntu 20.04
  • Apache 2.4系

また、本件ではリバースプロキシ化も実施するので、

  • それに合わせたドメイン
  • ドメインに沿った証明書

をインストール済みです。

さっくりとした手順

  1. レポジトリを追加します。
  2. RabbitMQをインストールします。
  3. 管理コンソールを有効化します。
  4. 管理コンソールのリバースプロキシ化させます。
  • 参考にしたWebサイト

https://www.vultr.com/docs/install-rabbitmq-server-ubuntu-20-04-lts/

レポジトリを追加します。

  • RabbitMQ追加
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
 echo "deb https://dl.bintray.com/rabbitmq-erlang/debian focal erlang-22.x" | sudo tee /etc/apt/sources.list.d/rabbitmq.list

インストールを実施します。

  • レポジトリを追加したのでパッケージのアップデート
sudo aptitude update
  • RabbitMQのインストール
sudo apt-get install rabbitmq-server -y --fix-missing
  • インストール確認
systemctl status rabbitmq-server.service 

Active(Running)を確認します。

  • サービス有効化
sudo systemctl enable rabbitmq-server

RabbitMQの管理コンソールを有効化します。

  • コンソール有効化
sudo rabbitmq-plugins enable rabbitmq_management
  • 管理者とパスワード設定
sudo rabbitmqctl add_user admin password

ユーザー名(admin)やパスワード(password)は環境に合わせて適切なものを設定してください。

  • 管理権限付与
sudo rabbitmqctl set_user_tags admin administrator

adminの部分はユーザー名を指定します。

  • 管理コンソールアクセス確認

ブラウザから

http://サーバのIP:15672

と入れることでログインできるようになります。

リバースプロキシの実施

  • ログ格納ディレクトリの追加
sudo mkdir /var/log/mq_console

適切なディレクトリを指定してください。

  • ディレクトリの所有者変更
sudo chown www-data:www-data mq_console
  • 設定ファイル作成
  • 作成するファイル(要管理者権限)
/etc/apache2/site-available/rabbitmq.conf
  • 作成内容
<VirtualHost _default_:80>
    # ドメイン名を指定します
    ServerName 【hoge.example.com】
    # HTTPアクセスを強制的にHTTPSにリダイレクトします
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost _default_:443>
    # ドメイン名を指定します
    ServerName 【hoge.example.com】
    # アクセスログを指定します
    CustomLog /var/log/mq_console/console_access.log combined 
    ErrorLog /var/log/mq_console/console_error.log

#SSL設定
  SSLEngine on
   # SSLを有効化します
    Protocols h2 http/1.1

# SSL証明書を指定します
SSLCertificateFile /etc/certs/hoge.example.com.crt
# 秘密鍵を指定します
SSLCertificateKeyFile /etc/private/hoge.example.com.key

    # Header に Host: example.com を追加するため
    ProxyPreserveHost On
    # HTTPS利用時: Header に x-forwarded-proto: https を追加するため
    RequestHeader set x-forwarded-proto 'https'

    ProxyPass / http://localhost:15672/
    ProxyPassReverse / http://localhost:15672/


</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off
  • 設定ファイル追加
sudo a2ensite rabbitmq.conf
  • 設定確認
sudo apache2ctl configtest

Syntax OKを確認します

  • Webサービス再起動
sudo systemctl restart apache2.service
  • アクセス確認

ブラウザから

設定したドメインにアクセスし、以下の画面を確認します。

  1. 設定した管理者アカウントでログインできること
  2. 以下の管理コンソールが出ること

PHPモジュール一覧を表示するスクリプト。

Webアプリをサーバに設置する際、有効、無効になっているモジュールの一覧が欲しいときがあります。

そういうときはphp.infoを使うのが手っ取り早いとは思いますが、セキュリティ上、それらをWebサイトに設置するのは好ましくありません。

そこで、以下のスクリプトをChatGPTに指示しながら出力しました。

スクリプト

  • php_modules.sh
#!/bin/bash

echo "PHP モジュール一覧を表示します。以下のオプションを選択してください。"
echo "0(またはエンターのみ): 全ての一覧を表示"
echo "1: 有効なモジュールのみを表示"
echo "2: 無効なモジュールのみを表示"

read -p "選択: " choice

case "$choice" in
  1)
    echo -e "\n有効なモジュールのみ表示:"
    enabled_modules=$(php -r '$count=0; $modules = get_loaded_extensions(); sort($modules); foreach ($modules as $extension) { if (extension_loaded($extension)) { echo $extension . ": Enabled\n"; $count++; } } echo $count;')
    echo "有効なものは${enabled_modules}件です"
    ;;
  2)
    echo -e "\n無効なモジュールのみ表示:"
    disabled_modules=$(php -r '$count=0; $modules = get_loaded_extensions(); sort($modules); foreach ($modules as $extension) { if (!extension_loaded($extension)) { echo $extension . ": Disabled\n"; $count++; } } echo $count;')
    echo "無効なものは${disabled_modules}件です"
    ;;
  *)
    echo -e "\n全てのモジュールを昇順で表示:"
    php -r '$modules = get_loaded_extensions(); sort($modules); foreach ($modules as $extension) { echo $extension . ": " . (extension_loaded($extension) ? "Enabled" : "Disabled") . "\n"; }'
    ;;
esac
  • スクリプトに実行権限付与
chmod +x php_modules.sh

スクリプトの動き

  • 実行
./php_modules.sh
  • 実行結果抜粋
PHP モジュール一覧を表示します。以下のオプションを選択してください。
0(またはエンターのみ): 全ての一覧を表示
1: 有効なモジュールのみを表示
2: 無効なモジュールのみを表示
選択: 

全てのモジュールを昇順で表示:
Core: Enabled
FFI: Enabled
(略)

と、これでモジュールのチェックを事前に行うことが可能になりました。

Tips:apacheバーチャルサイトのオフオン(切り替え)

ちょっとした小技が役立ったのでメモに残しておきます。

環境

  • Ubuntu 20.04系
  • Apache 2.4系

で、バーチャルサイトでサイトを検証していました。

背景

検証で動かしているWebアプリAがaaa.hoge.comで動いていました。

そこに、同じ環境でWebアプリBを動かす需要がありました。

本来なら、DNSで

  • aaa.hoge.com
  • bbb.hoge.com

とするところ、

  • DNS登録が間に合わない
  • 2つ同時に動かせるようなスペックではない

という背景がありました。そこで、「一度WebアプリAを無効にしつつ、WebアプリBをaaa.hoge.com」として動かすようなすり抜けを使いました。

さっくりとした手順

  1. WebアプリAの設定ファイルを無効化します。
  2. WebアプリBの設定ファイルを作成します。
  3. WebアプリBを有効にします。

前に動いているサイトの無効化

sudo a2dissite app_a.conf

sudo systemctl restart apache2.service

WebアプリB用の設定ファイル作成

  • /etc/apache2/sites-available/app_b.conf

に以下のように作っていきます。

略
<VirtualHost *:443>
    # ドメイン名を指定します
    ServerName aaa.hoge.com
    # アプリB用のログディレクトリを指定します。
    CustomLog /var/log/nextcloud/nextcloud_access.log combined
    ErrorLog /var/log/nextcloud/nextcloud_error.log

    # アプリB用のドキュメントルートディレクトリを指定します。
  # アプリAno参照ドキュメントとは違うディレクトリにします
    DocumentRoot /home/www-data/nextcloud
    <Directory /home/www-data/nextcloud>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>
略

サイトBを有効化します。

sudo a2ensite app_b.conf

sudo apache2ctl configtest

sudo systemctl restart apache2.service

動作を確認します。

aaa.hoge.com(など、今までアプリAが動いていたサイトのドメインで)アプリBのサイトが動くようになれば成功。

一時的な手段ではありますが、効果はありました。

Page 38 of 238

Powered by WordPress & Theme by Anders Norén