この検証時に持って行ったのはそれだけではありませんでした。

弁当箱とスープジャー。
- ちりめん山椒の混ぜご飯
- ドラムスティック蒸し焼き
- チキンナゲット
- えのきとネギの味噌汁。
そして、画像から見えていませんが、ついでに持って行ったハムとレタスのサラダがこの時の食事のMVP。サラダというよりはゆずポン酢の酸味と塩気が体にしみたという形です。

道中で購入したロールケーキの甘さもガツンときました。
この検証時に持って行ったのはそれだけではありませんでした。

弁当箱とスープジャー。
そして、画像から見えていませんが、ついでに持って行ったハムとレタスのサラダがこの時の食事のMVP。サラダというよりはゆずポン酢の酸味と塩気が体にしみたという形です。

道中で購入したロールケーキの甘さもガツンときました。

キャンプ用のローバックチェア。これを折りたたみ自転車と合わせてみたらどうなるだろうかと思いながら輪行してみました。

この通り、鞄で運べるレベルになるのがブロンプトンの強み。

輪行→自走後、レインボーブリッジの真下に到着。

ここで広げたのが、この、ローバックチェア。冒頭に示した収納ケースごとフロントバッグにも入りました。
この椅子を広げて思ったことは
が加わった形。ここから荷物の加減乗除をしていながら、最適化を図っていきたいです。
RHEL系Linux(Rocky Linux 9)にZabbixサーバを構築したときのメモです。
php.ini)Zabbix Web UI の動作要件に合わせて PHP のパラメータを修正します。おそらく多くの方がWebインストールした後に怒られる設定です。
sudo cp -pi /etc/php.ini /path/to/backup/directory/php.ini.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php.ini
差分がなければバックアップ成功です。
post_max_size = 16M (8M から変更)max_execution_time = 300 (30 から変更)max_input_time = 300 (60 から変更)上記は例です。環境に合わせましょう。
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php.ini
+の箇所に修正した値になっていることを確認します。
sudo systemctl restart php-fpm
2026年4月の最新パッケージである7.0.xを使うため、レポジトリを追加します。
sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest.el9.noarch.rpm
sudo dnf clean all
この指定が地味に詰まりました。
sudo dnf install -y --disablerepo=epel \
zabbix-server-mysql \
zabbix-web-mysql \
zabbix-apache-conf \
zabbix-sql-scripts \
zabbix-selinux-policy \
zabbix-agent2
MySQL (MariaDB) に Zabbix 用の DB とユーザーを作成し、初期スキーマをインポートします。
mysql -u root -p
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'あなたのパスワード';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
EXIT
→ SET GLOBAL log_bin_trust_function_creators = 1;を指定しないと、zabbixに必要なスキーマを拒否することがあります。
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
mysql -u root -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"
インポート後にこれを行っておかないと、MySQLがインジェクションとなり得るスキーマを許可することがあります。
サーバー本体が DB に接続するためのパスワードを設定します。
/etc/zabbix/zabbix_server.conf を以下のように修正します。
修正箇所:
DBPassword=あなたのパスワード (コメントアウト # を外して追記)上記、dnfで設定した標準設定を無効化し、/etc/httpd/virtual/ 配下で管理するように変更します。
これは、「一つのサーバにWebサーバとZabbixを同時に立てる必要がある」などで重要なテクニックです。
sudo mkdir -p /etc/httpd/virtual
sudo mv /etc/httpd/conf.d/zabbix.conf /path/to/backup/direcotry/zabbix.conf.$(date +%Y%m%d)
/etc/httpd/virtual/zabbix.conf
等として、以下のようなファイルを作ります。
<VirtualHost *:80>
# 自分の環境に合わせます
ServerName zabbix.example.com
DocumentRoot /usr/share/zabbix
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# FPM設定
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
# 任意のログディレクトリを指定します
ErrorLog /var/log/httpd/zabbix_error.log
CustomLog /var/log/httpd/zabbix_access.log combined
</VirtualHost>
全てのコンポーネントを起動し、必要なポートを開放します。これも地味にはまるポイントです。
sudo systemctl enable --now zabbix-server zabbix-agent2 httpd php-fpm
sudo firewall-cmd --permanent --add-service={zabbix-server,zabbix-agent,http}
sudo firewall-cmd --reload
http://(ServerName)/ にアクセス。Admin (Aは大文字)zabbix
RHEL系(AlmaLinux / Rocky Linux 9等)にWebサーバーApacheをインストールします。最近のトレンドはNginxではあるものの、以下のメリットを考慮してApacheを選択します。
mod_security(WAF)による防御。dnfを使用してインストールします。サーバー移設などでハマりやすいのが「設定は正しいのにページが表示されない」現象です。RHEL系ではデフォルトで強力なファイアウォール(firewalld)が動作しており、ポート80/443を明示的に開放する必要があります。
SSH接続(ポート22)は許可されている前提で進めます。設定を誤るとリモート操作ができなくなるため、慎重に行いましょう。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
services の欄に http と https が含まれていればOKです。
RHEL系ではApacheのパッケージ名は httpd です。
sudo dnf update -y
sudo dnf install httpd -y
httpd -v
-(表示例)-Server version: Apache/2.4.57 (AlmaLinux)
sudo systemctl enable --now httpd
systemctl status httpd
enabled と active (running) を確認します。
RHEL系の設定ファイルは /etc/httpd/conf/httpd.conf です。
sudo cp -pi /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)
※任意のバックアップディレクトリを指定してください。
diff -u /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) /etc/httpd/conf/httpd.conf
エラーがないことを確認します。
セキュリティ向上のため、署名の非表示化とサーバー名を追記します。
sudo bash -c "cat >> /etc/httpd/conf/httpd.conf" << 'EOF'
# Custom Settings
ServerSignature Off
ServerTokens Prod
ServerName example.com:80
EOF
※ example.com の部分は、ご自身のドメイン名またはホスト名に置き換えてください。
diff -u /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) /etc/httpd/conf/httpd.conf
末尾に指定した3行が追加されていることを確認します。
sudo httpd -t
Syntax OK と表示されることを確認します。
sudo systemctl restart httpd
curl -I http://localhost
以下のように、Server ヘッダーが Apache のみ(バージョン情報なし)になっていれば成功です。
HTTP/1.1 200 OK
Date: ...
Server: Apache
...
ちょっとしたミスで地獄行きになるところだったので、自戒を込めてメモを記します。
「DNSの設定変更中、Aレコードとシリアル番号を間違えて登録するところだった」
なお、LinuxのDNS、BINDを用いての作業です。
DNSレコードの設定は、インターネット上の住所録を書き換えるような作業です。一歩間違えると、メールが届かない、ウェブサイトが見られない、あるいは悪意のある第三者に通信を乗っ取られるといった甚大な被害に直結します。
というか、やらかしかけました。
なぜこれほどまでに慎重さが求められるか? 改めて、「自分に言い聞かせるレベルで」メモをします。
DNSは「一度間違えると修正が反映されるまで時間がかかる」という特性があるため、ミスが致命傷になりがちです。
AレコードやCNAMEの記述ミスにより、全世界からサイトやAPIへの接続が断たれます。
MXレコードの設定ミスは、ビジネス連絡の遮断を意味します。また、SPF/DKIM/DMARCなどの送信ドメイン認証に不備があると、正当なメールが「迷惑メール」として破棄されます。
これがある意味の恐怖です。不要になった外部サービス(SaaS等)へのCNAMEを残し続けると、そのドメインを第三者に取得され、せっかくのブランド名で偽サイトを運営されるリスクがあります。
後述するTTLの設定により、間違った設定が世界中のキャッシュサーバーに残り続け、即座に修正しても数時間は復旧しないことがあります。
BIND(Berkeley Internet Name Domain)のようなテキストベースの管理では、私のようなエンジニアの「うっかり」が原因で同期不全が起きることがよくあります。
BINDのゾーンファイルには、SOA (Start of Authority) レコード内にシリアル番号が存在します。
BINDでは、FQDN(完全修飾ドメイン名)の末尾にドットを付け忘れると、オリジンのドメイン名が自動的に付加されてしまいます。
example.com と書くべきところを example.com.(末尾ドットあり)としなかった場合、example.com.example.com. という意図しないレコードとして解釈されます。これに関してはAIと壁打ちしながら設定しました。
作業の数日前から、対象レコードのTTLを短く(例:300秒など)設定しておきます。
ファイルを保存した後、サービスを再起動(reload)する前に必ずチェックコマンドを叩く習慣をつけます。
named-checkzone [ドメイン名] [ゾーンファイル名]
`
ゾーンファイルの整合性確認(シリアル番号の形式ミスなども検知できます)
シリアル番号は YYYYMMDDNN(日付+その日の更新回数)の形式で運用するのが一般的です。
例: 2026年4月16日の1回目の修正 →
2026041601
この、第三者が見ても分かる増分をやりましょう。極端な話
のような「ローマ的増分」は分かっているのが自分であっても混乱の元です。
設定を反映したら、自分のPCのブラウザで確認するだけでなく、外部から正しく引けるかを確認します。
dig @8.8.8.8 example.com A
dig @[セカンダリDNSのIP] example.com A
DNS設定は、「間違えた瞬間に世界中にそのミスが拡散し、しかもすぐには消せない」という怖さがあります。
特にBINDなどの手動管理では、「シリアル番号のカウントアップ」と「末尾のドット」を指差し確認するだけでも、トラブルの多くを回避できます。作業前のTTL短縮と、作業後の多角的な検証をセットで行うようにしましょう。
拙稿にて、ドメインを掲げる意味として
の3つを挙げています。また、池波正太郎の
「人間、落ちるところへ落ちてしまっても、なにかこう、この胸の中に、たよるものがほしいのだねえ」
「たよるもの、ねえ…」
「いえば看板みたいなものさ」
「かんばん、かね…?」
「人間、だれしも看板をかけていまさあね。旦那のお店にもかけてござんしょう」
――『にっぽん怪盗伝』
にも感銘を受けています。「ちょっとしたミスによって看板に泥を塗る」事態が起きかけたという話でした。
機会があったのでメモです。
仮想マシン用の論理ボリューム(LV)を作成します。
sudo lvcreate -L 500G -n vm_host VMdisk
予め作成されていたcockpitにブラウザからログインします。
VMLVM ボリュームグループVM (※/dev/を含まないVG名のみを入力)4 / vCPU数: 42 / ソケットごとのコア: 2 / コアあたりのスレッド: 1既存のストレージ/dev/VMdisk/vm_host を選択。cdrom を追加し、最上位(1番目)にドラッグして移動。Bridge to LAN を選択。
筆者のvpsに訪れる攻撃者。基本や最新のトレンドまで多くのパターンがあります。
そんな中、1分の間に大量の情報略取を試みる攻撃者のログがありました。
これらを紹介します。
例によって、テロリストに名前を与えないという哲学の元、アクセス者のグローバルIPは晒しません。
[Tue Apr 14 --:--:-- 2026] [security2:error] [client 192.0.2.10] ModSecurity: Access denied with code 404 (phase 1). [msg "[CUSTOM RULE] Host header is a numeric IP address. Blocked immediately."] [hostname "vps.example.jp"] [uri "/"]
[Tue Apr 14 --:--:-- 2026] [security2:error] [client 192.0.2.20] ModSecurity: Access denied with code 404 (phase 1). [hostname "vps.example.jp"] [uri "/.env"]
[Tue Apr 14 --:--:-- 2026] [security2:error] [client 192.0.2.20] ModSecurity: Access denied with code 404 (phase 1). [hostname "vps.example.jp"] [uri "/sendgrid.env"]
[Tue Apr 14 --:--:-- 2026] [security2:error] [client 192.0.2.20] ModSecurity: Access denied with code 404 (phase 1). [hostname "vps.example.jp"] [uri "/web/.env"]
[Tue Apr 14 --:--:-- 2026] [security2:error] [client 192.0.2.20] ModSecurity: Access denied with code 404 (phase 1). [hostname "vps.example.jp"] [uri "/static//etc/passwd"]
[Tue Apr 14 --:--:-- 2026] [security2:error] [client 192.0.2.20] ModSecurity: Access denied with code 404 (phase 1). [hostname "vps.example.jp"] [uri "/static//home/user/.aws/credentials"]
どのようなファイルを見ようとしているのか?
/settings.py (Django),/config.js (Node.js),/.env/sendgrid.env/.env.local/application.yml/database.yml (Rails)/static//etc/passwd/static//etc/shadow/static//proc/self/environshadow ファイルなどは、ログイン情報の心臓部です。/etc/passwd が奪われれば、サーバー内のユーザー一覧が露呈し、次の攻撃の正確な座標を与えてしまうでしょう。/etc/shadow も暗号化されているとは言え、ローカル環境でハッシュ値を割り出されてしまいます。/proc/self/environ が読めると、実行中のプロセスの環境変数が丸見えになり、壊滅的な被害に繋がります。/staticこれは、特定のWAF(Webアプリケーションファイアウォール)や、リバースプロキシの設定(Nginxのエイリアス設定の不備など)をバイパスしようとする試みです。正規化の過程で // が / に変換される挙動を悪用し、本来アクセスできないディレクトリの外側へ飛び出そうとしています。/static//home/user/.aws/credentials彼らは「置き忘れ」や「甘い設定」を狙っています。
などは組織の運用であって、攻撃者はそういうところが絶好のカモにしています。これは、私にも跳ね返る言葉ですが:
「ポーカーを始めて30分が過ぎても誰がカモか分からなければ、あなたがカモだ」
のウォーレン・バフェットの言葉はサーバ管理でも通用するというお話しでした。
UbuntuのLAMPサーバの環境確認に使える一式のワンライナーの紹介です。
echo -e "| Item | Version / Status |\n|:---|:---|\n| **OS** | $(lsb_release -d | cut -f2) |\n| **Memory** | $(free -h | awk '/^Mem:/ {print $2" (Used: "$3")"}') |\n| **Web Server** | $({ apache2 -v 2>/dev/null || nginx -v 2>&1; } | head -n 1 | sed 's/^[ \t]*//') |\n| **PHP** | $(php -v 2>/dev/null | head -n 1 | cut -d' ' -f1,2 || echo "Not Installed") |\n| **PHP-FPM** | $(systemctl list-units --type=service | grep -o 'php[0-9.]*-fpm' | tr '\n' ' ' | xargs || echo "Not Running") |\n| **DB** | $(mysql -V 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1 | sed 's/^/MySQL /' || psql --version 2>/dev/null || echo "Not Installed") |\n| **Node.js** | $(node -v 2>/dev/null || echo "Not Installed") |\n| **Python** | $(python3 -V 2>/dev/null || echo "Not Installed") |\n| **Ruby** | $(ruby -v 2>/dev/null | cut -d' ' -f1,2 || echo "Not Installed") |"
このコマンドは echo -e を使用して、1つの大きな文字列を出力しています。
| Item | ... |:Markdownの表ヘッダーを作成しています。$( ... ):コマンド置換と呼ばれる仕組みです。カッコ内のコマンドを先に実行し、その結果を文字列の中に埋め込みます。| 項目 | 実行している処理の内容 |
|---|---|
| OS | lsb_release -d でOSの説明行を取得し、cut -f2 でタブ以降のOS名(Ubuntu…など)だけを抜き出しています。 |
| Memory | free -h でメモリ情報を取得。awk を使って「全容量($2)」と「使用量($3)」を抽出して整形しています。 |
| Web Server | { apache2 -v || nginx -v } で両方を試し、見つかった方の1行目を表示。sed で行頭の余計な空白を消しています。 |
| PHP | php -v の1行目から、cut を使って「PHP 8.x」のような名称とバージョンのみを取得しています。 |
| PHP-FPM | systemctl で起動中のサービス一覧から php*-fpm に一致するものを探し、tr と xargs で横一列に並べています。 |
| DB | まず mysql -V を試し、バージョン番号を正規表現で抽出。それがなければ psql(PostgreSQL)を確認します。 |
| Node / Python | それぞれ -v または -V オプションでバージョンを確認。インストールされていなければ "Not Installed" を返します。 |
| Ruby | ruby -v の結果から、最初の2単語(例:ruby 3.x)だけを抜き出しています。 |
実行すると、以下のような表がターミナル(またはMarkdown対応のエディタ)に表示されます。
| Item | Version / Status |
|---|---|
| OS | Ubuntu 24.04.4 LTS |
| Memory | 5.8Gi (Used: 3.8Gi) |
| Web Server | Server version: Apache/2.4.58 (Ubuntu) |
| PHP | PHP 8.3.30 |
| PHP-FPM | php8.3-fpm |
| DB | MySQL 8.0.45 |
| Node.js | v20.19.2 |
| Python | Python 3.12.3 |
| Ruby | ruby 3.2.3 |
サーバー構築直後の確認や、GitHubのIssueに環境情報を貼る際にとても重宝するものです。
ボードゲーム『大鎌戦役』は星章を6つ獲得するとその瞬間にゲームが終わるという話をしました。そこから逆算し
「どうすれば一手番でゲーム終了まで持って行けるのか?」を落とし込んできました。
後述する前準備が面倒。これをやるなら素直に既に星章が取れているからです。
これは必須です。というのも、「戦闘による星章の上限が撤廃されている勢力」だからです。
具体的には
移動後に
があり、それによりパラメータが上がる余地があることです。これがメック展開だったら徴用で増えるのはコイン、徴用だったら戦闘カードであり星章を取ることができません。
なので、それを満たすマットは
→ 移動後に「改善」がある。
または
→ 移動後に「建築」がある。
各プレイヤーにある秘密の目的。これは比較的達成が優位な
「特定の地形を3つ支配している」があります。
そこで、実際の盤面を用意しました。
で、以下の状態です。

逆に、それ以外の星章のきっかけである
等はない状況です。
では、アクションをしてみましょう。ザクセンの手番が始まります。
移動を選択。
ユニット1つを選びます。トンネルにいるノルディックのキャラクターを戦闘で撤退させます。
移動権2つめです。同様にトンネルにいるノルディックのメックを撤退させます。
移動権3つめです。メックにワーカーを搭載し、同様にトンネルにいるノルディックのメックを撤退させます。
上段の移動アクション全て解決。下段の建築を選び、資源を支払って4つめの建物を建てます。
建築をしたので徴用のトリガーが入ります。支持(民心)が17→18に上がります。
秘密の目的「地底の誘発」の条件が一致。これを公開して手番が完了。

で一気に埋まりました。
そもそも、戦闘三連はどこかしらで相手勢力は反撃に転じるはずです。また、ザクセンはトンネルでの戦闘を得意とするため、そこに居座るというのもなかなか難しい状況。
それ以前に、支持(民心)は一番挙げるのが難しい箇所。
あくまでも「技術的には可能(Technically Possible)」だが「実用的ではない(Not Practical for everyone)」
話でした。

筆者がボードゲームの世界に深く傾倒するきっかけとなった『ナショナルエコノミー』。その三部作
を一つにまとめた完全版です。
本作のジャンルは「ワーカープレースメント」です。プレイヤーは19世紀から20世紀の経営者となり、労働者の雇用、業務の割り当て、賃金の支払いを通じて、企業と社会の発展を目指します。
リソースが「手札・お金・ワーカー」の3点のみというシンプルさです。
一般的なボードゲームにありがちな「特定の建物を建てるために特殊な素材が必要」といった細かな縛りがないため、見通しが非常にクリアです。
一方で、賃金支払いのルールは極めてシビアに設計されています。ラウンドが進むごとに上昇する賃金が支払えない場合、不足1金につきマイナス3点という強烈なペナルティが課されます。この容赦ないインフレに直面すると、「経営者が労働者を安く使いたくなる理由」を身をもって体感することになり、思わず独白したくなるような没入感があります。
また、「家計」という概念の存在も秀逸です。手元の資金を回すには市場から現金を回収する必要があり、そのためには自分が建てた建物を売却しなければなりません。「誰かの支出は誰かの所得である」というマクロ経済の仕組みを、ゲームシステムとして見事に体現しています。
これは特筆すべきものです。カードの引き運のために、出遅れたプレイヤーが挽回するチャンスが出てきます。完全実力主義やドラフトのテクニックなどが少ないのも魅力です。
今回のリメイクで最も素晴らしいのは、コンポーネントの豪華さです。オリジナル版ではカードのみだったお金やワーカーが、チップや視認性の高い木駒へと変更されました。特に資金チップの箱をそのまま家計の管理に利用できる点は、プレイスペースの節約にも繋がり、非常に実用的です。
また、三部作がすべて同梱されているため、基本の「プログレス」から段階を踏んで発展系へと進める構成も、プレイヤーへの配慮が感じられます。
改善された点がある一方で、いくつか気になった部分もあります。
一つは、オリジナル版にあった毒のあるフレーバーテキストが省かれたことです。世界観を彩るスパイスが減り、背景が少し希薄になった印象を受けます。
二つ目は、ソロプレイの難易度が緩和されていない点です。初期手札に恵まれないと身動きが取れなくなることがあり、特に『Glory』は資金繰りに役立つ建物が少ないため、運の要素を「現実の経営もままならないもの」と割り切る必要があります。
最後に、コンポーネントの豪華さと引き換えに、オリジナル版の利点であった「鞄の隙間に入るコンパクトさ」は失われました。
とはいえ、海外産の一般的なワーカープレースメント作品に比べれば、依然として持ち運びやすいサイズに収まっています。
として、本作は極めて完成度の高いパッケージです。マクロ経済学をシビアに体験できる核となる部分はそのままに、洗練されたイラストと豪華な仕様、そして入手しやすい価格で提供されたことは圧巻の一言に尽きます。市場にあるうちに、ぜひ手に取っていただきたい一作です。
私が初めて「ワーカープレースメント」というメカニズムに出会ったのが、この『ナショナルエコノミー』でした。
一人旅の温泉宿で何気なく遊び始めたのですが、「ワーカーを置くことでリソースが増え、さらにそのリソースで拡大再生産を行う」という面白さに魅了され、チェックアウト直前まで没頭してしまったことを覚えています。
その後、この仕組みに惹かれるまま、次に遊ぶべきステップを飛び越えていきなり『アルルの丘』を購入し、周囲の愛好家から「刻むだろっ! 普通もっと‥‥! 段階をっ‥!」と驚かれたのも、今では良い思い出です。
Powered by WordPress & Theme by Anders Norén