投稿者: manualmaton Page 1 of 290

狙われる.envファイル。

ログ解析をしていると、1分にも満たない大量の.envへのスキャンがありましたので、そのメモです。

「テロリストに名前を与えない」のポリシーから、IP等はダミーに置き換えています。

観測されたログデータ(IPはダミーに置き換え)

[Mon Apr 27 05:14:18 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [msg "[CUSTOM RULE] Host header is a numeric IP address. Blocked immediately."] [uri "/.env"]
[Mon Apr 27 05:14:18 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/app/frontend/.env"]
[Mon Apr 27 05:14:19 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/.gitlab-ci/.env"]
[Mon Apr 27 05:14:21 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/resources/.env"]
[Mon Apr 27 05:14:22 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/alpha/.env"]
[Mon Apr 27 05:14:23 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/.idea/.env"]
[Mon Apr 27 05:14:26 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/.env.sendgrid"]
[Mon Apr 27 05:14:27 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/new/.env.production"]
[Mon Apr 27 05:14:34 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/xampp/.env"]
[Mon Apr 27 05:14:36 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/kubernetes/.env"]
[Mon Apr 27 05:14:37 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/stripe/.env"]

なぜ.envファイルを狙うのか?

.envファイルは通常、アプリケーションの設定情報を保存するために使われます。ここには、ソースコードには直接書けない機密情報(クレデンシャル)が凝縮されています。

データベースの接続情報: DB_PASSWORD, DB_USERNAME, DB_HOST

これが漏れると、DB内の個人情報や顧客データをすべて盗まれる(SQLインジェクションの手間すら不要になります)。

外部APIのキー: STRIPE_SECRET_KEY, SENDGRID_API_KEY, AWS_SECRET_ACCESS_KEY

ログにも .env.sendgrid/stripe/.env がありますが、これらが盗まれると、攻撃者はあなたの名義で勝手に決済を行ったり、大量のスパムメールを送信したり、クラウドサービス上で高額なマイニングマシンを動かしたりできます。

特にAWS関連が狙われると

  • あなたのお金で大量のサーバが立てられ
  • 見たくもない額の請求がAWSから届き
  • 更に海外当局から嫌疑をかけられる

などもあり得ます。

アプリケーションの秘密鍵: APP_KEY, SECRET_KEY

セッションの偽造やデータの復号が可能になり、管理者アカウントを乗っ取られる原因になります。

なぜこれほど多くのパスを試行するのか?

上記ログには様々なディレクトリ(/alpha/, /kubernetes/, /.idea/ など)を探索しています。これには2つの戦略があります。

  • フレームワークの特定:
    • パスのパターンから、そのサーバーがLaravelなのか、Djangoなのか、あるいはDockerKubernetesで動いているのかを推測しようとしています。
  • 不注意なバックアップや設定ミスの露呈:
    • 開発者が一時的に作成したコピー(.env.production)や、Gitの管理ディレクトリ(/.idea/)の中に残された設定ファイルを狙っています。本流のルートディレクトリがガードされていても、サブディレクトリの設定が甘いケースが多いことを彼らは知っています。

攻撃のメカニズム:スキャンから悪用まで

攻撃のプロセスは非常に効率化(自動化)されています。

  • 一斉スキャン:
    • ボットを使用して、世界中のIPアドレスに対して /.env へのリクエストを投げまくります。
  • 自動検知:
    • ステータスコード 200 OK が返ってきた瞬間に、中身を自動でパース(解析)します。
  • 即時悪用:
    • AWSのキーが見つかれば数分以内にインスタンスを立て、DB情報が見つかればデータをダンプしてランサムウェア(身代金要求)のメッセージを残します。

防御の鉄則

WAFは、もはやWEBサーバの必須装備となりつつあります。それに留まらず、基本を守りましょう。

  • 公開ディレクトリの外に置く:
    • .env は、Webブラウザからアクセスできる public_html や www の外側に配置するのが鉄則です。
  • Webサーバーの設定:
    • Apacheなら .htaccess、Nginxなら location ブロックで、ドットファイル(.*)へのアクセスを拒否する設定を入れます。
  • 権限設定:
    • 実行ユーザー以外が読み取れないよう、パーミッションを最小限(600 など)にします。

このように、多くの攻撃は「意志を持たず、目標を自動的に追尾する」ボットが大半以上を占めています。言うなれば「自動操縦型の群体スタンド」と言うべきでしょう。
スタンドそのものが意志を持たない(上に“本体”への直接攻撃が許されていない)以上、こちらも意志を持たずに防御していくというお話しです。

デッキ微調整記録。(統率者メモ2026/04/27)

気がつけばウルザ以上に使い込んでいるミシュラデッキ。

今度は逆に、オリジナルのところを太字にしています。

統率者

  • 《高名な者、ミシュラ/Mishra, Eminent One(BRC)》

クリーチャー

  • 《湖に潜む者、エムリー/Emry, Lurker of the Loch(BRC)》
  • 《ガジェットマスター、ドナテロ/Donatello, Gadget Master(TMT)》
  • 《練達の変成者/Master Transmuter(BRC)》
  • 《発明の領事、パディーム/Padeem, Consul of Innovation(BRC)》
  • 《オートンの兵士/Auton Soldier(WHO)》
  • 《ゴブリンの溶接工/Goblin Welder(C14)》
  • 《ゴブリンの技師/Goblin Engineer(MH1)》
  • 《大胆な再製者/Audacious Reshapers(BRC)》
  • 《爆発炉のヘルカイト/Blast-Furnace Hellkite(BRC)》
  • 《無情な屍技術師/Ruthless Technomancer(NEC)》
  • 《求道の達人、サイラス・レン/Silas Renn, Seeker Adept(BRC)》
  • 《ウェザーライトの艦長、ジョイラ/Jhoira, Weatherlight Captain(BRC)》
  • 《テルカーの技師、ブルーディクラッド/Brudiclad, Telchor Engineer(BRC)》
  • 《増殖されし者、マスター/The Master, Multiplied(WHO)》
  • 《歩行格納庫の自動機械/Stridehangar Automaton(DRC)》
  • 《クルーグの災い魔、トラクソス/Traxos, Scourge of Kroog(BRC)》
  • 《飛行機械の組立工/Thopter Assembly(MOC)》
  • 《ワームとぐろエンジン/Wurmcoil Engine(SOM)》
  • 《サイバーマン軍団/Cybermen Squadron(WHO)》
  • 《金属製の巨像/Metalwork Colossus(BRC)》

アーティファクト

  • 《改良式鋳造所/Retrofitter Foundry(DRC)》
  • 《虚無の呪文爆弾/Nihil Spellbomb(BRC)》
  • 《旅人のガラクタ/Wayfarer's Bauble(BRC)》
  • 《太陽の指輪/Sol Ring(PIP)》
  • 《順応する万能工具/Adaptive Omnitool(DRC)》
  • 《ラクドスの印鑑/Rakdos Signet(BRC)》
  • 《精神石/Mind Stone(BRC)》
  • 《胆液の水源/Ichor Wellspring(BRC)》
  • 《ディミーアの印鑑/Dimir Signet(BRC)》
  • 《忘却の偶像/Idol of Oblivion(BRC)》
  • 《忘却石/Oblivion Stone(BRC)》
  • 《ソニック・ドライバー/Sonic Screwdriver(WHO)》
  • 《スカイクレイブのイカ/Skyclave Squid(ZNR)》
  • 《溶鉄の大桶/Smelting Vat(BRC)》
  • 《スランの発電機/Thran Dynamo(BRC)》
  • 《面晶体の記録庫/Hedron Archive(BRC)》
  • 《石成エンジン/Lithoform Engine(BRC)》
  • 《ゴンティの霊気心臓/Gonti's Aether Heart(AER)》
  • 《イシュ・サーの背骨/Spine of Ish Sah(BRC)》
  • 《監視亀ラ/Sewer-veillance Cam(TMT)》
  • 《身代わり合成機/Simulacrum Synthesizer(BIG)》
  • 《税血の刃/Tithing Blade(LCI)》
  • 《呪われた鏡/Cursed Mirror(BRC)》
  • 《時の篩/Time Sieve(ARB)》

インスタント / ソーサリー

  • 《知識の渇望/Thirst for Knowledge(BRC)》
  • 《発明品の唸り/Whir of Invention(AER)》
  • 《シンクロ解除/Desynchronization(ACR)》
  • 《削剥/Abrade(BRC)》
  • 《ラクドスの魔除け/Rakdos Charm(EOC)》
  • 《魔性/Bedevil(BRC)》
  • 《加工/Fabricate(M10)》
  • 《ロリアンの発見/Lorien Revealed(LTR)》
  • 《大群への給餌/Feed the Swarm(BRC)》
  • 《テリシアの終焉/Terisiare's Devastation(BRC)》
  • 《財宝発掘/Trash for Treasure(C16)》
  • 《消却/Delete(WHO)》
  • 《冒涜の行動/Blasphemous Act(BRC)》

エンチャント

  • 《テフェリーのヴェール/Teferi's Veil(WTH)》
  • 《武器製造/Weapons Manufacturing(EOE)》
  • 《鏡割りの寓話/Fable of the Mirror-Breaker(NEO)》

プレインズウォーカー

  • 《屑鉄の学者、ダレッティ/Daretti, Scrap Savant(C14)》

土地

  • 《島/Island》
  • 《沼/Swamp》
  • 《山/Mountain》
  • 《モリアの坑道/Mines of Moria(LTR)》
  • 《教議会の座席/Seat of the Synod(BRC)》
  • 《囁きの大霊堂/Vault of Whispers(BRC)》
  • 《大焼炉/Great Furnace(BRC)》
  • 《Underground Sea(3ED)》
  • 《硫黄泉/Sulfurous Springs(10E)》
  • 《窪み渓谷/Sunken Hollow(BFZ)》
  • 《燻る湿地/Smoldering Marsh(BRC)》
  • 《闇滑りの岸/Darkslick Shores(SOM)》
  • 《黒割れの崖/Blackcleave Cliffs(SOM)》
  • 《水没した地下墓地/Drowned Catacomb(M10)》
  • 《竜髑髏の山頂/Dragonskull Summit(M12)》
  • 《湿った墓/Watery Grave(RAV)》
  • 《血の墓所/Blood Crypt(DIS)》
  • 《轟音の滝/Thundering Falls(MKM)》
  • 《霧霊堂の橋/Mistvault Bridge(BRC)》
  • 《鉱滓造の橋/Drossforge Bridge(BRC)》
  • 《銀色険の橋/Silverbluff Bridge(BRC)》
  • 《崩れゆく死滅都市/Crumbling Necropolis(BRC)》
  • 《ザンダーの居室/Xander's Lounge(SNC)》
  • 《統率の塔/Command Tower(BRC)》
  • 《産業の塔/Spire of Industry(DRC)》
  • 《風変わりな果樹園/Exotic Orchard(BRC)》
  • 《ヨーグモスの墳墓、アーボーグ/Urborg, Tomb of Yawgmoth(PLC)》
  • 《フォモーリの宝物庫/Fomori Vault(BIG)》
  • 《アカデミーの廃墟/Academy Ruins(DRC)》
  • 《灰のやせ地/Ash Barrens(BRC)》
  • 《血染めのぬかるみ/Bloodstained Mire(ONS)》
  • 《汚染された三角州/Polluted Delta(ONS)》

好きなコンボ

  • ゴンティの霊気心臓による実質1枚無限ターン。
  • 飛行機械の組立工と時の篩による無限ターン
  • 身代わり合成機とオートンの兵士による盤面制圧。

その分、アーティファクト全部破壊などに弱いものの「それはまた統率者の華」という形です。

Node.jsの混在環境の解消。

Ubuntu24.04サーバでGrowiを運用していた際に、2系統のNode.jsが独立して存在していた状況が発生しました。

環境

通常ユーザー環境

  • パス: /usr/local/bin/node
  • バージョン: v20.18.0(Nodesource経由のシステムインストール)
  • 状況: pnpmなどの最新ツールが利用不可、または古いバージョンを参照。

rootユーザー環境

  • パス: /root/.nvm/versions/node/v24.14.1/bin/node
  • バージョン: v24.14.1(nvm経由)
  • 状況: 最新版がインストールされているが、systemdなどのサービスから正しく参照できていない可能性があった。

そもそも論として

「各ユーザーにnvmをインストールすればいいのでは?」は確かにその通りですが、筆者サーバーはWebサーバ。つまり、nodeを主に用いるのはGrowi環境であり、

  • rootに最新Node.jsを使わせたい。
  • そして、sudo配下できちんとroot環境でのNode.jsを使いたい

という状況。これを直していきます。

さっくりとした手順

  1. 元々のNode.jsをアンインストールします。
  2. root環境の一本化と最新化を行います。
  3. ついでにGrowi起動スクリプトの動的かを行います。

Node.jsをアンインストール

※これを用いるまでに

sudo su -

の後、

which node

を実行し、

/root/.nvm/versions/node/v24.14.1/bin/node

rootが参照しているNode.jsが.nvm経由であることを確認し、

exit

でroot環境から抜けます。

  • 一般ユーザーが持つNode.jsをアンインストール
sudo apt-get purge -y nodejs
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/bin/npx
sudo rm -rf /usr/local/bin/pnpm
  • hashをクリア
hash -r

一般ユーザーのNode.js系のプログラムの向き先を合わせる

  • Node.jsの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/node /usr/local/bin/node
which node

/usr/local/bin/nodeを確認。

node -v

v24.14.1などを確認。

  • npmの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/npm /usr/local/bin/npm
which npm

/usr/local/bin/npmを確認。

npm -v

11.13.0などを確認。

  • pnpmの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/pnpm /usr/local/bin/pnpm
which pnpm

/usr/local/bin/pnpmを確認。

pnpm -v

10.33.2などを確認。

Growiの起動スクリプト修正

Growi起動スクリプト(growi-start.sh)を修正し、rootが見ているデフォルトバージョンを参照するように修正しました。

DEFAULT_NODE_VER=$(cat "$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$DEFAULT_NODE_VER/bin:$PATH"

この修正により、同じ場所を見るような運用が可能になります。

それでも残る問題点

将来的にnodeのバージョンを上げた場合、一般ユーザーでも

sudo ln -sf /root/.nvm/versions/node/v25.xx.yy/bin/node /usr/local/bin/node

のように帰る必要がありますが、そこは割り切りましょう。

ジェスカイ統率者のコンボ追加。(統率者メモ2026/04/25)

構築済みデッキのシャーシを利用して組み直したデッキの現行版のメモです。

太字と斜体が追加、入れ替えです。

統率者

  • 《悟った喪失者、ナーセット/Narset, Enlightened Exile》

デッキ

クリーチャー

  • 《僧院の導師/Monastery Mentor(TDC)》
  • 《溺神の信奉者、リーア/Lier, Disciple of the Drowned(TDC)》
  • 《モンスーンの魔道士、ラル/Ral, Monsoon Mage(MH3)》
  • 《若き紅蓮術士/Young Pyromancer(TDC)》
  • 《嵐窯の芸術家/Storm-Kiln Artist(TDC)》
  • 《マナ形成のヘルカイト/Manaform Hellkite(TDC)》
  • 《第三の道の偶像破壊者/Third Path Iconoclast(TDC)》
  • 《嵐捕りの導師/Stormcatch Mentor(BLB)》
  • 《迷える黒魔道士、ビビ/Vivi Ornitier(FIN)》
  • 《双対の声、ヴェイラン/Veyran, Voice of Duality(TDC)》
  • 《三学の修得者、エルシャ/Elsha, Threefold Master(TDC)》

インスタント

  • 《剣を鍬に/Swords to Plowshares(PIP)》
  • 《皆に命を!/Everybody Lives!(WHO)》
  • 《魂の仕切り/Soul Partition(BRO)》
  • 《断れない提案/An Offer You Can't Refuse(SNC)》
  • 《考慮/Consider(TDC)》
  • 《ジュワー島の撹乱/Jwari Disruption(ZNR)》
  • 《劇的な逆転/Dramatic Reversal(TLE)》
  • 《ナーセットの逆転/Narset's Reversal(TDC)》
  • 《大あわての捜索/Frantic Search(TDC)》
  • 《極性を反転せよ/Reverse the Polarity(WHO)》
  • 《けちな贈り物/Gifts Ungiven(CHK)》
  • 《この町は狭すぎる/This Town Ain't Big Enough(OTJ)》
  • 《意志の力/Force of Will(ALL)》
  • 《崇高な天啓/Sublime Epiphany(TDC)》
  • 《削剥/Abrade(VOW)》
  • 《カズールの憤怒/Kazuul's Fury(ZNR)》
  • 《大勝ち/Big Score(TDC)》
  • 《彗星の嵐/Comet Storm(MM2)》
  • 《プリズマリの命令/Prismari Command(TDC)》
  • 《マグマ・オパス/Magma Opus(TDC)》
  • 《ギャリフレイの陥落+終止符を/Gallifrey Falls+No More(WHO)》

ソーサリー

  • 《解体の波/Dismantling Wave(TDC)》
  • 《セヴィンの再利用/Sevinne's Reclamation(DMR)》
  • 《マキンディの暴走/Makindi Stampede(ZNR)》
  • 《大群退治/Vanquish the Horde(TDC)》
  • 《思案/Ponder(TDC)》
  • 《定業/Preordain(TDC)》
  • 《豚の呪い/Curse of the Swine(TDC)》
  • 《多様な洞察力/Manifold Insights(C16)》
  • 《信仰無き物あさり/Faithless Looting(TDC)》
  • 《一攫千金/Strike It Rich(MH2)》
  • 《炎の中の過去/Past in Flames(TSR)》
  • 《ジェスカイの意志/Will of the Jeskai(TDC)》
  • 《マナ噴出/Mana Geyser(TDC)》
  • 《熱狂のリフレイン/Rousing Refrain(OTC)》
  • 《表現の反復/Expressive Iteration(TDC)》
  • 《時の一掃/Time Wipe(WHO)》

エンチャント

  • 《志同じく/Aligned Heart(TDC)》
  • 《亡霊の牢獄/Ghostly Prison(TDC)》
  • 《嵐追いの才能/Stormchaser's Talent(BLB)》
  • 《豪奢の呪い/Curse of Opulence(TDC)》
  • 《苦々しい再会/Bitter Reunion(BRO)》
  • 《美術家の才能/Artist's Talent(BLB)》
  • 《死の国からの脱出/Underworld Breach(THB)》
  • 《ジェスカイの隆盛/Jeskai Ascendancy(KTK)》
  • 《思考の旋風/Whirlwind of Thought(TDC)》
  • 《時を解す者、テフェリー/Teferi, Time Raveler(WAR)》
  • 《崇高な工匠、サヒーリ/Saheeli, Sublime Artificer(WAR)》

アーティファクト

  • 《太陽の指輪/Sol Ring(TDC)》
  • 《秘儀の印鑑/Arcane Signet(PIP)》
  • 《発展のタリスマン/Talisman of Progress(PIP)》
  • 《独創のタリスマン/Talisman of Creativity(PIP)》
  • 《確信のタリスマン/Talisman of Conviction(PIP)》
  • 《等時の王笏/Isochron Scepter(MRD)》
  • 《コーリ鋼の短刀/Cori-Steel Cutter(TDM)》

土地

  • 《平地/Plains》
  • 《平地/Plains》
  • 《平地/Plains》
  • 《島/Island》
  • 《島/Island》
  • 《島/Island》
  • 《島/Island》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《天上都市、大田原/Otawara, Soaring City(NEO)》
  • 《フェアリーの集会場/Faerie Conclave(10E)》
  • 《工業公国、リンドブルム/Lindblum, Industrial Regency(FIN)》
  • 《天界の列柱/Celestial Colonnade(ZNE)》
  • 《鋭い突端/Needle Spires(OGW)》
  • 《さまよう噴気孔/Wandering Fumarole(OGW)》
  • 《氷河の城砦/Glacial Fortress(TDC)》
  • 《硫黄の滝/Sulfur Falls(PIP)》
  • 《断崖の避難所/Clifftop Retreat(TDC)》
  • 《アダーカー荒原/Adarkar Wastes(TDC)》
  • 《戦場の鍛冶場/Battlefield Forge(TDC)》
  • 《シヴの浅瀬/Shivan Reef(TDC)》
  • 《神聖なる泉/Hallowed Fountain(DIS)》
  • 《聖なる鋳造所/Sacred Foundry(RAV)》
  • 《蒸気孔/Steam Vents(GPT)》
  • 《ラウグリンのトライオーム/Raugrin Triome(IKO)》
  • 《神秘の僧院/Mystic Monastery(PIP)》
  • 《統率の塔/Command Tower(PIP)》
  • 《風変わりな果樹園/Exotic Orchard(PIP)》
  • 《溢れかえる岸辺/Flooded Strand(KTK)》
  • 《沸騰する小湖/Scalding Tarn(ZEN)》
  • 《乾燥台地/Arid Mesa(ZEN)》
  • 《危険地帯/Perilous Landscape(TDC)》

逆転棒が入ったこと、ジェスカイ体操からの彗星の嵐も狙えるようになりました。

車麩と吸収。

昨日のちょっとした思考実験。「なぜ料理は後から調味料を入れた方が美味しくなるのか」をすでに実践し、さらなる旨味を作ったという母のやり方です。

メイン料理は肉豆腐…… に見えて、車麩が入っています。つまり、肉と煮汁の旨味をこちらに吸収させるというやり方。

では、そのとき何が起こったかをmermaid.jsで見てみましょう。

sequenceDiagram participant P as 煮汁 participant V as 既存食材 participant F as 車麩 Note over P, V: 【フェーズ1:盤面の安定】 Note right of P: 煮汁は調味され、適温。<br/>旨味は鍋全体に拡散している状態。 Note over P, F: 【フェーズ2:暴力的介入】 Note right of F: 車麩を投入 rect rgb(200, 220, 240) Note over P, F: 【物理的介入:温度低下】 F->>P: 大量の常温物質が熱を奪う Note left of P: 鍋全体の温度が急激に低下。<br/>既存食材の表面が引き締まる。 end rect rgb(240, 200, 200) Note over P, F: 【物理的介入:強制吸着 】 Note right of F: 乾燥した多孔質の組織が<br/>強烈な毛細管現象を発揮。 P->>F: 周囲の煮汁を強引に吸い上げる V-->>P: 旨味を鍋に残したまま、水分だけが移動 Note right of F: 煮汁の濃度が車麩内部で上昇。<br/>旨味が固定される end Note over F: 旨味の塊となった車麩の完成

敢えての「暴力的介入」の名にふさわしい逸品となっていました。

調理の順番。(浸透圧と調味料の入れ方)

筆者は弁当を作る際、スープジャーを用いて汁物を毎回作っていますが、教わったり実感として体験した

  1. 肉ジャガなどを作るときに味付けを最後にした方が逆に味が染みる。
  2. 調味済みの煮汁で煮てしまうと逆に煮崩れしたり味がしみない。

この一見して矛盾に見える調理法がなぜ理にかなうのか?

これを少し調べてみました。この現象を紐解く鍵は、主に

  1. 「浸透圧」
  2. 「熱による組織の変化」

の2点にあります。

以下、AIと壁打ちしながら得た結論です。

浸透圧と細胞壁のブロック

料理の基本は、食材の中に水分(だし汁)や調味料を送り込むことです。しかし、野菜や肉の細胞は「細胞膜」や「細胞壁」で守られており、いきなり濃い味(塩分や糖分)を加えると、逆効果になることがあります。

  • 脱水作用:
    • 最初から味を濃くしてしまうと、浸透圧の働きにより、食材の中の水分が外に引き出されてしまいます。その結果、組織がギュッと収縮して硬くなり、味が中に入っていく隙間がなくなってしまいます。
  • 味の通り道を作る:
    • まずは「だし汁(真水に近い状態)」で煮ることで、熱によって細胞同士を繋いでいる成分(ペクチンなど)が分解され、組織が柔らかくなります。この「組織が緩んだ状態」を作ってから味を入れるのが、最も効率的なのです。

2. 分子量の違い(さしすせその法則)

調味料の「分子の大きさ」も関係しています。

  • 砂糖(分子が大きい):
    • 組織に浸透するのに時間がかかります。
  • 塩(分子が小さい):
    • すぐに浸透し、組織を引き締めてしまいます。

先に塩分(醤油や塩)を入れてしまうと、組織が引き締まってしまい、後から大きな分子である砂糖が入り込めなくなります。

そのため、まずは組織をふっくらさせ、甘みを先に入れ、最後に塩分で味を固定するという順序が科学的にも推奨されます。

3. 「味が染みる」のは火を止めた後

実は、煮込んでいる最中よりも、「温度が下がっていくとき」に最も味が染み込みます。

  • 熱膨張と収縮:
    • 加熱中は食材の中の水分や空気が膨張し、外へ出ようとする力が働いています。火を止め、温度が下がる過程で、膨張していた組織が収縮し、その隙間に周囲の煮汁がグングン吸い込まれていきます。

「最後に味を調える」という工程は、この冷却による吸収の直前で、最も美味しい状態の煮汁をスタンバイさせる重要なステップなのです。

4. 肉や魚の場合

肉や魚も原理は似ていますが、特に「タンパク質の変性」が加わります。

  • 肉:
    • いきなり塩分濃度の高い液で煮ると、表面のタンパク質が即座に凝固し、中心部まで味が届くのを邪魔してしまいます。まずは水分を含ませながらゆっくり加熱し、組織が緩んだところで味を加える方が、しっとりと味が乗ります。
  • 魚:
    • 魚は身が崩れやすいため、先に表面を「霜降り」などで固めることがありますが、味の浸透についてはやはり「煮汁の濃度が徐々に上がっていく」状態の方が、身が締まりすぎずふっくら仕上がります。

調味料の蒸発・変成

これが一番の問題かもしれません。

醤油や味噌、酒といった調味料の芳香成分は、長く煮すぎると熱で飛んで(揮発して)しまいます。

最後に加えることで、素材の味を引き立てる「香り」や「風味」を最大限に維持できます。

結論

「だし汁で煮てから、最後に味を付ける」のは、食材のゲート(組織)を優しく開けてから、主役の味を招待するという、極めて効率的なアプローチです。

mermaid.jsによるメカニズム

失敗するパターン(先に調味料を入れる)

sequenceDiagram participant F as 食材 participant W as 水・出汁 participant S as 調味料 Note over F, S: 【フェーズ1:早すぎる介入】 S->>W: 調味料(醤油・塩・砂糖)を全投入 Note over W: 出汁の濃度が最初から極めて高い状態 Note over F, W: 【フェーズ2:細胞の防衛反応】 W-->>F: 高濃度の液が細胞壁に接触 F->>W: 浸透圧により<br />細胞内の水分が急激に脱出 Note right of F: 細胞が脱水し、<br/>タンパク質が強固に凝固(締まる) Note over F, W: 【フェーズ3:浸透の遮断】 W-x F: 旨味成分が中に入ろうとするが、<br/>硬くなった表面(鎧)に阻まれる F-x W: 食材自体の旨味も外に出られなくなる Note over F: 外側だけ味が濃く、中はパサパサで硬い<br/>「味の染まない煮物」の完成
sequenceDiagram
    participant F as 食材
    participant W as 水・出汁
    participant S as 調味料

    Note over F, S: 【フェーズ1:早すぎる介入】
    S->>W: 調味料(醤油・塩・砂糖)を全投入
    Note over W: 出汁の濃度が最初から極めて高い状態

    Note over F, W: 【フェーズ2:細胞の防衛反応】
    W-->>F: 高濃度の液が細胞壁に接触
    F->>W: 浸透圧により<br />細胞内の水分が急激に脱出
    Note right of F: 細胞が脱水し、<br/>タンパク質が強固に凝固(締まる)

    Note over F, W: 【フェーズ3:浸透の遮断】
    W-x F: 旨味成分が中に入ろうとするが、<br/>硬くなった表面(鎧)に阻まれる
    F-x W: 食材自体の旨味も外に出られなくなる

    Note over F: 外側だけ味が濃く、中はパサパサで硬い<br/>「味の染まない煮物」の完成

成功するパターン(あとから調味料を入れる)

sequenceDiagram participant F as 食材 participant W as 水・出汁 participant S as 調味料 Note over F, W: 【フェーズ1:基盤構築】 W->>F: 加熱された出汁が細胞壁を軟化 F->>W: 食材自身の旨味を放出 Note right of F: 細胞がふっくらと開き、<br/>受け入れ態勢が整う Note over F, S: 【フェーズ2:味の介入】 S->>W: 調味料(醤油・塩)を投入 Note over W: 出汁の濃度が上昇(浸透圧の差が発生) W->>F: 浸透圧により味が細胞内へ移動 F->>W: 余分な水分を排出 Note over F, W: 【フェーズ3:定着】 Note right of F: 火を止め、冷却される過程で<br/>さらに味が奥まで引き込まれる Note over F: 中心まで味が染みた状態
sequenceDiagram
    participant F as 食材 
    participant W as 水・出汁 
    participant S as 調味料 

    Note over F, W: 【フェーズ1:基盤構築】
    W->>F: 加熱された出汁が細胞壁を軟化
    F->>W: 食材自身の旨味を放出 
    Note right of F: 細胞がふっくらと開き、<br/>受け入れ態勢が整う

    Note over F, S: 【フェーズ2:味の介入】
    S->>W: 調味料(醤油・塩)を投入
    Note over W: 出汁の濃度が上昇(浸透圧の差が発生)

    W->>F: 浸透圧により味が細胞内へ移動 
    F->>W: 余分な水分を排出

    Note over F, W: 【フェーズ3:定着】
    Note right of F: 火を止め、冷却される過程で<br/>さらに味が奥まで引き込まれる

    Note over F: 中心まで味が染みた状態

まとめ

以前、『スーパードクターK』(或いは『ドクターK』)にあった

「理を料(はか)ると書いて料理」

とはよく言ったもの。昔ながらの作法が理にかなっているのは経験則という学びの結果だと思いました。

持ち運び、携行食。

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

弁当箱とスープジャー。

  • ちりめん山椒の混ぜご飯
  • ドラムスティック蒸し焼き
  • チキンナゲット
  • えのきとネギの味噌汁。

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

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

折りたたみ自転車&椅子。

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

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

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

ここで広げたのが、この、ローバックチェア。冒頭に示した収納ケースごとフロントバッグにも入りました。

この椅子を広げて思ったことは

  • 思った以上に快適
  • 背もたれのある安心感
  • 輪行後の休息手段を『自前で』用意する楽しさ

が加わった形。ここから荷物の加減乗除をしていながら、最適化を図っていきたいです。

RHEL系LinuxにZabbixサーバをインストール

RHEL系Linux(Rocky Linux 9)にZabbixサーバを構築したときのメモです。

環境

  • Zabbix 7.0
  • PHP-FPM 8.3
  • MySQL 8.0
  • Apache 2.4

前提

  • Linuxの初期設定完了済み
  • 以下のミドルウェアをインストール済み。
  • Apache 2.4
  • MySQL 8.0 (mysql_secure_installation込み)
  • PHP-FPM 8.3

さっくりとした手順

  1. php.iniを修正します。
  2. Zabbixパッケージをインストールします。
  3. DBを作成しスキーマをインポートします。
  4. ZabbixのDBを設定します。
  5. Apacheのバーチャルホストを設定します。
  6. Zabbixサービスを有効化してFirewalldを設定します。
  7. 初期インストールを行います。

PHP 設定の最適化 (php.ini)

Zabbix Web UI の動作要件に合わせて PHP のパラメータを修正します。おそらく多くの方がWebインストールした後に怒られる設定です。

  • php.iniのバックアップ
sudo cp -pi /etc/php.ini /path/to/backup/directory/php.ini.$(date +%Y%m%d)

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

  • php.iniのバックアップ確認
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php.ini 

差分がなければバックアップ成功です。

  • php.ini 修正箇所:
  • post_max_size = 16M (8M から変更)
  • max_execution_time = 300 (30 から変更)
  • max_input_time = 300 (60 から変更)

上記は例です。環境に合わせましょう。

  • php.iniの編集確認
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php.ini 

+の箇所に修正した値になっていることを確認します。

  • php-fpmサービス再起動(設定反映)
sudo systemctl restart php-fpm

Zabbix パッケージのインストール

  • レポジトリ追加

2026年4月の最新パッケージである7.0.xを使うため、レポジトリを追加します。

  • Zabbixリポジトリのインストール
sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest.el9.noarch.rpm
  • キャッシュのクリア
sudo dnf clean all
  • EPEL リポジトリとの競合を避けるため、リポジトリを指定してインストールします。

この指定が地味に詰まりました。

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ログイン
mysql -u root -p
  • DB作成
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がインジェクションとなり得るスキーマを許可することがあります。

Zabbix Server の DB 設定

サーバー本体が DB に接続するためのパスワードを設定します。

/etc/zabbix/zabbix_server.conf を以下のように修正します。

修正箇所:

  • DBPassword=あなたのパスワード (コメントアウト # を外して追記)

Apache (httpd) バーチャルホストの設定

上記、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>

サービスの起動と Firewalld の設定

全てのコンポーネントを起動し、必要なポートを開放します。これも地味にはまるポイントです。

  • サービスの有効化と起動
sudo systemctl enable --now zabbix-server zabbix-agent2 httpd php-fpm
  • Firewalld の許可
sudo firewall-cmd --permanent --add-service={zabbix-server,zabbix-agent,http}
  • Firewalldのリロード
sudo firewall-cmd --reload

Web セットアップとログイン

  1. ブラウザで http://(ServerName)/ にアクセス。
  2. 全てのチェック項目が OK であることを確認し、DB情報を入力して完了。
  3. 初期ログイン情報:
  • User: Admin (Aは大文字)
  • Password: zabbix

Apacheのインストールと初期設定(RHEL系)

概要

RHEL系(AlmaLinux / Rocky Linux 9等)にWebサーバーApacheをインストールします。最近のトレンドはNginxではあるものの、以下のメリットを考慮してApacheを選択します。

  1. 豊富なモジュールとカスタマイズ: 歴史が長く、情報の蓄積が膨大。
  2. 動的コンテンツの設定のしやすさ: PHP等との親和性が高い。
  3. 運用の手軽さ: 小規模サイトを迅速に立ち上げるのに適している。
  4. 高度なセキュリティ・ログ設定:
    • 自宅等からのアクセスログを除外するなどのログカスタマイズ。
    • 悪質なクローラーの排除。
    • mod_security(WAF)による防御。

さっくりとした手順

  1. firewalldの設定: 外部からのアクセス許可を与えます。
  2. Apacheのインストール: dnfを使用してインストールします。
  3. Apacheの設定: セキュリティとサーバー名の設定を行います。
  4. 設定の反映確認: 正常に動作しているかチェックします。

1. firewalldの設定

サーバー移設などでハマりやすいのが「設定は正しいのにページが表示されない」現象です。RHEL系ではデフォルトで強力なファイアウォール(firewalld)が動作しており、ポート80/443を明示的に開放する必要があります。

大前提

SSH接続(ポート22)は許可されている前提で進めます。設定を誤るとリモート操作ができなくなるため、慎重に行いましょう。

  • HTTP通信を許可する
sudo firewall-cmd --permanent --add-service=http
  • HTTPS通信を許可する
sudo firewall-cmd --permanent --add-service=https
  • 設定を反映させる
sudo firewall-cmd --reload
  • 設定を確認する
sudo firewall-cmd --list-all

services の欄に httphttps が含まれていればOKです。

2. インストールを行います

RHEL系ではApacheのパッケージ名は httpd です。

  • パッケージ全体のアップデート
sudo dnf update -y
  • Apache (httpd) のインストール
sudo dnf install httpd -y
  • バージョン確認
httpd -v

-(表示例)-
Server version: Apache/2.4.57 (AlmaLinux)

  • サービスの起動と自動起動設定
sudo systemctl enable --now httpd
  • サービス稼働確認
systemctl status httpd

enabledactive (running) を確認します。

3. 設定を行います

  • 設定ファイルのバックアップ

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行が追加されていることを確認します。

4. 設定反映を確認します

  • 構文確認
sudo httpd -t

Syntax OK と表示されることを確認します。

  • サービス再起動
sudo systemctl restart httpd
  • 設定の反映確認(ヘッダー確認)
curl -I http://localhost

以下のように、Server ヘッダーが Apache のみ(バージョン情報なし)になっていれば成功です。

HTTP/1.1 200 OK
Date: ...
Server: Apache
...

Page 1 of 290

Powered by WordPress & Theme by Anders Norén