
2010年に買っていたレンズ。17mm(実質34mm)の単焦点。
折角だから試してみました。

「普段の行動範囲で、普段目にする印象と同じ写真ができあがる」
という印章です。


特に、強い光に関しても克明に撮ってくれますし

広めの画角にも対応。

物撮りにも対応しているので、新しいのを買うよりは、当時の投資を信じて使っていくのも悪くありません。

2010年に買っていたレンズ。17mm(実質34mm)の単焦点。
折角だから試してみました。

「普段の行動範囲で、普段目にする印象と同じ写真ができあがる」
という印章です。


特に、強い光に関しても克明に撮ってくれますし

広めの画角にも対応。

物撮りにも対応しているので、新しいのを買うよりは、当時の投資を信じて使っていくのも悪くありません。
自宅に置いてあったルータが入れ替え完了。その際、NASが固定設定だったため、接続できなかったというありがちなことをしでかしたので、そのメモです。
10年以上も前のNAS、AS-202Tでの手順です。
これは個人運用だったから助かった手。企業でこれをやるのは様々な意味でおすすめしません。
深夜作業だったため、写真などは残していません。ご了承ください。
この段階で実行してもおそらくNWはスキャンされないでしょう。
ASUSTOR NASの筐体は、背面にリセットスイッチがあります。クリップの先や画鋲でないと届かない場所にあります。それを1秒ほど押し続け、ビープがなったら話します。
※設定データが消えるだけで、実データはそのままであることは安心ください。※
ここがポイントです。設定リセットを行うと、169.254.1.2などのIPに変わっています。
必要に応じてPCのIPアドレスを一時的に変えておくとよいでしょう。
表示されたIPアドレス:8000をブラウザで打ち込み、ログインします。パスワードも初期パスワードに戻っています。
192.168.xx.x (現在繋がっているアドレス)255.255.255.0192.168.x.1 (※一般的なルーターの住所です)192.168.x.1(または Googleの 8.8.8.8)を入力します。ルータのNW配下に戻します。
の2点を確認し、パスワードの変更やアクセスポートの変更などを実施します。
ApacheのWAFモジュールであるmod_securityを導入します。
として機能している、筆者のVPS運用の核となる技術。その2026年版です。
WAFとはWeb Application Firewallの略で、Webアプリケーション層の脆弱性を狙った攻撃を防ぐためのセキュリティシステムです。
この機能により、Webサーバーやアプリケーション本体に脆弱性が見つかったとしても、WAFが前段の盾としてこれをカバーできます。
ModSecurityは、IIS/Apache/Nginxといった主要なWebサーバープログラムにモジュールとして組み込みが可能なオープンソースのWAFです。
本稿で導入するModSecurityは、Ubuntu 24.04系のパッケージ管理で提供されるEOL (End-of-Life) となっているv2ですが、機能性は単一VPSの防御としては十分です。
v3への移行は、セキュリティ強度とメンテナンス性を考慮し、パッケージ化ないしはOSアップデートなどのタイミングでまた後日検討していきます。
※ パッケージ管理にaptitudeを用いています。必要に応じてaptに読み替えてください。
sudo aptitude update
sudo aptitude install libapache2-mod-security2
sudo apache2ctl -M |grep security
security2_module (shared)
と表示されていることを確認します。
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
推奨ファイルをそのまま設定ファイルとして書き換えます。
cd /usr/share/modsecurity-crs && pwd
sudo git clone https://github.com/coreruleset/coreruleset.git
sudo mv /usr/share/modsecurity-crs/coreruleset/crs-setup.conf.example /usr/share/modsecurity-crs/coreruleset/crs-setup.conf
cd /etc/apache2/mods-available/ && pwd
sudo cp -pi security2.conf /path/to/backup/directory/security2.conf.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
diff -u /path/to/backup/directory/security2.conf.$(date +%Y%m%d) security2.conf
エラーがなければバックアップは成功です。
/etc/apache2/mods-available/security2.confを、以下の差分になるように教義・信仰に沿ったエディタで編集します。(要root権限)
<IfModule security2_module>
- # Default Debian dir for modsecurity's persistent data
- SecDataDir /var/cache/modsecurity
+ # Default Debian dir for modsecurity's persistent data
+ SecDataDir /var/cache/modsecurity
- # Include all the *.conf files in /etc/modsecurity.
- # Keeping your local configuration in that directory
- # will allow for an easy upgrade of THIS file and
- # make your life easier
- IncludeOptional /etc/modsecurity/*.conf
+ # Include all the *.conf files in /etc/modsecurity.
+ # Keeping your local configuration in that directory
+ # will allow for an easy upgrade of THIS file and
+ # make your life easier
+ IncludeOptional /etc/modsecurity/*.conf
- # Include OWASP ModSecurity CRS rules if installed
- IncludeOptional /usr/share/modsecurity-crs/*.load
+ # --- OWASP Core Rule Set (CRS) の読み込み ---
+
+ # 1. CRSのセットアップファイルを読み込む(必須)
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/crs-setup.conf
+
+ # 2. CRSのルールファイルを読み込む
+ # パフォーマンス問題を起こすSQLデータ漏洩検知ルールを除外
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/REQUEST-*.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-950-DATA-LEAKAGES.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-980-CORRELATION.conf
+ IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
→ 修正後のsecurity2.conf全文
<IfModule security2_module>
# Default Debian dir for modsecurity's persistent data
SecDataDir /var/cache/modsecurity
# Include all the *.conf files in /etc/modsecurity.
# Keeping your local configuration in that directory
# will allow for an easy upgrade of THIS file and
# make your life easier
IncludeOptional /etc/modsecurity/*.conf
# --- OWASP Core Rule Set (CRS) の読み込み ---
# 1. CRSのセットアップファイルを読み込む(必須)
IncludeOptional /usr/share/modsecurity-crs/coreruleset/crs-setup.conf
# 2. CRSのルールファイルを読み込む
# パフォーマンス問題を起こすSQLデータ漏洩検知ルールを除外
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/REQUEST-*.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-950-DATA-LEAKAGES.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-980-CORRELATION.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
</IfModule>
※ なぜここまで除外するか?
この、RESPONSE-9x系のルールは、ページの内容に機密情報(クレジットカードのデータなど)が入っていないかを精査します。
これは重要なものですが、昨今のAIボットによる過剰なクロールが挟むと、サーバそのものへの負荷を強め、更にログの圧迫(実際にサーバ容量120GB全てを食い尽くしました)とサーバダウンにつながります。
こちらは個人サイト、単一VPSの運用を旨としているため、ここに関するデータはオミットです。 その分、他の設定の補強でセキュリティ強度を担保します。
/usr/share/modsecurity-crs/coreruleset/rules && pwd
配下に
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.confファイルを作成します。
#
# === CRS Exclusions - Before Rules Execution (Organized) ===
#
# ===================================================================
# 1. 共通ルール・汎用ルール (General/Common Rules)
# ===================================================================
# 1-1. 遅い通信(Slowloris)対策
# 矛盾するConnectionヘッダーを持つリクエストを遮断
SecRule REQUEST_HEADERS:Connection "@rx (?i)(?:keep-alive(?:,\sclose|,\skeep-alive)|close(?:,\skeep-alive|,\sclose))" \
"id:10001,phase:1,t:none,block,msg:'[CUSTOM RULE] Contradictory Connection header, possible Slowloris probe.',tag:'application-attack',tag:'PROTOCOL_VIOLATION/INVALID_HREQ',setvar:'tx.inbound_anomaly_score_pl1=+%{tx.critical_anomaly_score}'"
# 1-2. IPアドレス直打ちアクセス対策
SecRule REQUEST_HEADERS:Host "@rx ^[\d.]+(:\d+)?$" \
"id:10002,\
phase:1,\
deny,\
status:404,\
log,\
msg:'[CUSTOM RULE] Host header is a numeric IP address (incl port). Blocked immediately.',\
tag:'application-attack',\
tag:'PROTOCOL_VIOLATION/INVALID_HREQ'"
# 1-3. Hostヘッダーが存在しない場合は即ブロック
SecRule &REQUEST_HEADERS:Host "@eq 0" \
"id:10003,\
phase:1,\
deny,\
status:404,\
log,\
msg:'[CUSTOM RULE] Missing Host Header. Blocked immediately.'"
なぜこの設定が必要なのか?
「雑なスキャナー/クローラーをまとめてブロックする」にあります。
Connection: keep-alive, close という通常ではありえないヘッダーでサーバを枯渇させることが非常に多いです。(Slowloris などのDoS攻撃ツール)「ブラウザを用いて実際にアクセスする」方が
はあり得ません。これら雑なスキャナー/クローラーにWAFの計算力を与える必要はありません。
sudo apache2ctl configtest
Syntax OKを確認します。
sudo systemctl restart apache2.service
systemctl status apache2.service
active (running) を確認します。
稼働済みのApacheバーチャルサイトの設定ファイルをいじります。バックアップ確認は入念に行ってください。
cd /etc/apache2/sites-available && pwd
sudo cp -pi your_site.conf /path/to/backup/directory/your_site.conf.$(date +%Y%m%d)
.confファイルやバックアップディレクトリは自分の環境を指定します。
diff -u /path/to/backup/directory/your_site.conf.$(date +%Y%m%d) your_site.conf
エラーがなければバックアップは成功です。
/etc/apache2/sites-available/your_site.confを、以下の差分になるように教義・信仰に沿ったエディタで編集します。(要root権限)
# Mod Security
## ModSecurity有効化
SecRuleEngine On
## ModSecurity検知モード
### 検知モードで動かす場合はSecRuleEngine Onをコメントアウトしてこちらを有効化します
#SecRuleEngine DetectionOnly
## ファイルのアップロードをできるようにします。
SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
## テスト用の検知パラメータを付け加えます。
SecRule ARGS:modsecparam "@contains test" "id:4321,deny,status:403,msg:'ModSecurity test rule has triggered'"
diff -u /path/to/backup/directory/your_site.conf.$(date +%Y%m%d) your_site.conf
+# Mod Security
+
+## ModSecurity有効化
+SecRuleEngine On
+## ModSecurity検知モード
+### 検知モードで動かす場合はSecRuleEngine Onをコメントアウトしてこちらを有効化します
+#SecRuleEngine DetectionOnly
+
+## ファイルのアップロードをできるようにします。
+SecRequestBodyInMemoryLimit 524288000
+SecRequestBodyLimit 524288000
+
+## テスト用の検知パラメータを付け加えます。
+ SecRule ARGS:modsecparam "@contains test" "id:4321,deny,status:403,msg:'ModSecurity test rule has triggered'"
+
sudo apache2ctl configtest
Syntax OKを確認します。
sudo systemctl restart apache2.service
systemctl status apache2.service
active (running) を確認します。
?modsecparam=testを追加してアクセスします。403 Forbidden
のように、アクセスできないことを確認します。
また、サーバでも
sudo cat /path/to/sites_log/directory/sites_error.log
※ログの格納場所やログの名前は自分の環境に合わせます。
を開き、
ModSecurity: Access denied with code 403 (phase 2). String match "test" at ARGS:modsecparam. [file "/etc/apache2/sites-enabled/your_site.conf"] [line "53"] [id "4321"] [msg "ModSecurity test rule has triggered"] [hostname "host_address"] [uri "/"] [unique_id "xxxxxxx"]
のように、エラーが発生していることを確認します。
WordPress、Redmine等のWebアプリは自身の操作によって「不審なアクセス」として遮断することが極めてよくあります。(偽陽性)
そのため、テストを行った後は
## ModSecurity有効化
#SecRuleEngine On
## ModSecurity検知モード
### 検知モードで動かす場合はSecRuleEngine Onをコメントアウトしてこちらを有効化します
SecRuleEngine DetectionOnly
として検知モードとして動かした方が良いでしょう。

ゲームの目的が
だったので、アンバス人でセレクトです。
初期位置から受動パワーをガンガンもらえる位置にいたので
をコンスタントにセレクトできました。

最終的な盤面。全ての施設が何らかの同盟の一部という、一切の無駄がない構成。もちろん、ゲーム目的の「同盟に所属する施設数」「衛星トークン数」は1位。

特筆すべきは、初の同盟タイルが初めて6枚手に入れられたこと。上級タイルも
を取れました。

最終的な得点は182点。研究も盤面もしっかり取れた満足いくゲームでした。
Webサーバを運営していてよかったことの一つは、「悪意ある攻撃」をリアルタイムで見られること、に尽きます。
2026/02/17も、そのようなログを見かけました。どのような攻撃で、どんな悪意があったのかのメモです。
以下、ご紹介するログは実際のログですが、
は別のものに置き換えています。これはプライバシー配慮という点ではなく「攻撃者に名前を与えない」から来るものです。
攻撃者は、Unix系とWindows系の両方のサーバーを想定し、2回に分けて「点火テスト」を試みています。
[Tue Feb 17 03:16:50 2026] [security2:error] [client 192.0.2.55]
ModSecurity: Access denied with code 403 (phase 2).
[id "932130"] [msg "Remote Command Execution: Unix Shell Expression Found"]
[id "934100"] [msg "Node.js Injection Attack 1/2"]
[data "Matched Data: var res=process.mainModule.require('child_process').execSync('echo $((40261*44548))').toString().trim(); ..."]
[hostname "sub.example.jp"] [uri "/"]
[Tue Feb 17 03:16:51 2026] [security2:error] [client 192.0.2.55]
ModSecurity: Warning. [id "932120"] [msg "Remote Command Execution: Windows PowerShell Command Found"]
[data "Matched Data: var res=process.mainModule.require('child_process').execSync('powershell -c 40261*44548').toString().trim(); ..."]
この攻撃はサーバー乗っ取りを目的としたものです。
攻撃コードの中にある 40261*44548 という計算式が肝です。
process.mainModule.require('child_process') という、Node.jsの最も強力な権限を持つ命令を呼び出そうとしています。__proto__ という特殊なプロパティを操作しようとしています。今回のログで最も注目すべきは、ModSecurityの異常スコア(Anomaly Score)が 45点〜50点というそこそこ高い数値を叩き出している点です。
これら複数のフィルタが同時にに反応したため、ModSecurityはこれは間違いなく脅威であると断定し、即座に遮断しました。
攻撃は「いきなり行う」というよりは「どの攻撃が効くか」を確認してからリソースを集中していきます。なので、実際のログを見て「これが攻撃の前段階である」をつかんでおくのは大事。(そのためのログ確認です)
『孫子 虚実篇 六』の
「攻めて必ず取る者は、其の守らざる所を攻むればなり。守って必ず固き者は、其の攻めざる所を守ればなり」
これは、守備側に立たされるサーバ管理者も持っておきたい心構えだと思いました。
部屋が格段にきれいになったので、ボドゲを自室で回せるだけの機会が発生です。

相当久しぶりだったのでプレイ感覚を忘れるというていたらく。
全てで失敗し、最終結果は59点。クリアの足きりならず。
この手のゲームは継続的なプレイが重要だなと改めて思いました。

しっかりとオーガナイザーで整理されている訳なので。
使い始めが2024年という、そこそこ息が長いデッキのマナカーブやシナジーを元に調整を重ねています。
《リスの将軍、サワギバ/Chatterfang, Squirrel General(MH2)》
お気に入りのデッキですが、ここ半年回していなかったのは明確な理由がありました。
「Geminiの画像生成により、全てのトークンを一新する必要があったため」

上記リストの太字はトークン生成/トークン生成を強化するもの。
それだけに、この一仕事を終えてホッとしています。
正直、かなり甘く見ていました。
a.hoge.comというサブドメインでNextcloudを立ち上げて運用していたのですが、唐突にexample.comというネイキッドドメインで運用しようとしたのがきっかけ。
まではすんなりいきました。
Nextcloudは単なるファイルストレージではなく、統合コラボスイート。非常に多岐にわたって運用していたんだと改めて痛感。
がそれなりにヘビー。それ以上にヘビーだったのが
の設定変更を忘れていたことでした。
また、動作確認後、「DBの向き先とNextcloud格納ディレクトリが新ドメインに即していない」ことがわかり、
-pirオプションをつけてコピー&リネームwww-dataに所有者変更/etc/logrotate.d配下のローテーションを新しいログ格納ディレクトリに変更までやって、完全移行が完成しました。
「サーバリプレースとどう違うのか」レベルではありましたが、うまくいって良かったです。
詳細な手順は相当なボリュームになりそうなので、様子を見て描いていきます。
筆者はletsencryptでワイルドカード証明書を取得していますが、
*.example.com
の証明書を取得して、
example.com
の、「サブドメインが付かないドメインそのもの」 (hoge.example.com / foo.example.com / supercalifragilisticexpialidocious.example.com等を 含まない ドメイン)、いわゆるネイキッドドメインでの証明書を取っていないかどうかの確認手順です。
割と躓きやすい仕様ですが、
*.example.comは、example.comを含みません。
ワイルドカード証明書は「何か」.example.comにマッチする証明書。つまり、この「何か」が空文字にならないルールです。
筆者が過去の記事でletsencryptで証明書を作成する際
certbot certonly --manual \
--preferred-challenges dns \
--server https://acme-v02.api.letsencrypt.org/directory \
-m あなたの有効なメールアドレス@example.com \
-d "*.example.com" \
-d "example.com"
と、
-d "*.example.com"-d "example.com"のように、ワイルドカードとネイキッドドメインの両方を含めているのはまさにその理由です。
*.example.com だけ取得
↓https://example.com にアクセス
↓
証明書エラー
↓
「え、ワイルドカードなのに!?」
という事態が多く発生します。
以下の2つのコマンドを用います。
非常に簡単です。
sudo certbot certificates
と実行するだけ。
Certificate Name: example.com
Serial Number: UID]
Key Type: ECDSA
Identifiers: *.example.com example.com
のように、Identifiersの欄に.*がついているとついていないドメインがついていればOKです。
openssl x509 -in /path/to/certs/directory/cert.pem -noout -text | grep -A1 "Subject Alternative Name"
と実行。(証明書の場所は合わせます)
X509v3 Subject Alternative Name:
DNS:*.example.com, DNS:example.com
のように、DNSの欄に.*がついているとついていないドメインがついていればOKです。
以上、実務で予め両方の証明書を取得していれば「なんてことない」仕様ですが、これを取得していない場合のSSL再取得の手間はかなり手間です。
Powered by WordPress & Theme by Anders Norén