自室サーバの世代交代・前編『未来に進むための記憶』

はじめに

先日購入したミニPC、BOSGAME E5。Ubuntu 26.04 LTSをインストールし、ホスト名を「four-mations」として運用を開始していました。

そして今回、最後まで旧PCに残っていたAdGuard Homeの移行が完了しました。これにより、長らく自室内サーバとして稼働していたLet's note CF-XZは、その役目を終えることになります。

今回の記事は、この世代交代についての記録です。そして、移行作業を通じて改めて実感した「過去の自分が残したメモ」のありがたさについても触れていきます。

旧環境と新環境

まず、今回の移行元と移行先について。

旧環境

  • 機種:Panasonic Let's note CF-XZ
  • CPU:Intel Core i5-7300
  • メモリ:8GB
  • ストレージ:256GB SSD
  • 主な用途:
    • Nextcloud
    • AdGuard Home

もともとはモバイルノートPCとして使っていた機材です。それを自室内のサーバとして転用し、ファイル共有やDNSフィルタリングといったサービスを担わせていました。

新環境

  • 機種:BOSGAME E5
  • CPU:AMD Ryzen 3 5300U
  • メモリ:16GB
  • ストレージ:512GB NVMe SSD
  • OS:Ubuntu 26.04 LTS Desktop
  • ホスト名:four-mations

性能面はもちろん、メモリやストレージにも余裕ができました。そして何より、専用のミニPCに役割を集約することで、今後の運用を見直す契機にもなりました。

段階的な移行

今回、すべてのサービスを一度に移行したわけではありません。

  1. Nextcloudを構築・移行し、動作を確認。
  2. 旧環境に残っていたAdGuard Homeを移行するという順序を取りました。

Nextcloudはファイル共有基盤ですから、移行後の動作確認も比較的わかりやすいものです。一方、AdGuard HomeはDNSという、自室のネットワークにおける重要な役割を担っています。

ここが停止すると、ネットワークそのものは生きているのに、名前解決ができず、普段利用しているサービスにアクセスできなくなるという状況が発生します。いわば、自室のネットワークにおける単一障害点の一つです。

そのため、先にNextcloudを移し、最後にAdGuard Homeを移行するという段階的な手順を取りました。そして、ようやく両サービスの移行が完了。

旧PCに残っていた役割を、すべて新しいミニPCへと引き継ぐことができました。

最大の功労者は、過去の自分

さて、今回の移行作業で特に役立ったものがあります。それは、新しいツールでも、最新のAIでもありません。

過去に自分が書き残した構築・運用メモです。

Nextcloudの構築に際しては、以前の環境で記録していた設定や手順が役立ちました。AdGuard Homeについても同様です。過去の構築記録を参照しながら、必要な設定や作業内容を確認し、移行を進めることができました。

このとき改めて実感したのが、記録というものの価値です。構築した当時は、目の前の問題を解決するために調べ、コマンドを実行し、動作を確認していました。

そして、その結果をメモとして残していたわけです。時間が経ち、環境が変わり、再び同じような作業をすることになったとき、その記録は立派な引き継ぎ資料になっていました。

しかも、引き継ぎ元と引き継ぎ先は同一人物です。

過去の自分から、現在の自分への引き継ぎ。

これほど話が早い引き継ぎも、なかなかありません。何しろ、記録を書いた本人が、記録を読む本人の癖を熟知しているのですから。

なぜメモを残すのか

筆者は日頃から、サーバの構築や障害対応、アップデート作業などを記録しています。その際に意識しているのは、単に実行したコマンドを並べることではありません。

  • 何を目的とした作業なのか
  • どのような環境で実施したのか
  • どの順番で作業したのか
  • どのように動作を確認したのか
  • どのような問題があり、どう解決したのか

こうした情報を、後から読み返せる形で残しています。理由は単純です。

未来の自分が、今の自分と同じことを覚えている保証はないからです。

人間の記憶は、案外あてになりません。そのときは理解していた設定も、数か月、数年経てば忘れているものです。ましてや、日々さまざまなシステムに触れていれば、個々の設定内容まで記憶し続けることは現実的ではありません。

だからこそ、記録を残す。そして、記録があるからこそ、次の作業では調査や試行錯誤を減らすことができます。今回の移行は、その効果を実感できる機会となりました。

技術的負債ではなく、技術的資産

システム運用では「技術的負債」という言葉をよく耳にします。過去の設計や実装、あるいは先送りした判断が、将来の作業を難しくするというものです。

しかし、今回の経験は、その逆を考える契機になりました。

  • 過去に残した記録が、将来の作業を容易にする。
  • 当時の調査や検証に費やした時間が、次の作業で再利用できる。

つまり、過去の作業が、未来の自分にとっての資産になっているわけです。

  • 一度調べたことを、もう一度最初から調べ直す必要はありません。
  • 一度経験した問題を、もう一度同じように試行錯誤する必要もありません。
  • 記録を残しておけば、その経験を次の作業の出発点にできます。

もちろん、OSやアプリケーションのバージョンが変われば、手順も変わります。だからこそ、過去の記録を参照し、現在の環境との差分を確認しながら作業することになります。

そして、その差分もまた、新しい記録として蓄積されていきます。こうして経験が積み重なっていくことこそ、筆者が技術メモを残し続ける理由の一つです。

おわりに

Nextcloudに続き、AdGuard Homeの移行も完了。

これで、長らく自室のネットワークを支えてくれたLet's note CF-XZは、その役目を新しいBOSGAME E5へと譲ることになりました。

中古のノートPCをサーバとして転用し、長年運用してきた環境。今回の移行を支えてくれたのは、ほかならぬ過去の自分が残した記録でした。

かつて構築した環境が役目を終えても、そこで得た知識や経験は、記録として残り続けます。

  • ハードウェアには寿命があります。
  • OSにもサポート期限があります。
  • アプリケーションも、いつかは更新や置き換えが必要になります。

しかし、そこで得た経験を記録しておけば、次の環境へと引き継ぐことができます。

機材は世代交代しても、記録は世代を超えて役に立つ。

今回の移行で得た、何よりの実感です。

こんな状況を一番表す言葉がこれです。『ユミアのアトリエ』主人公、ユミア・リースフェルトに曰く

人が記憶を紡ぐのは過去に縋るためじゃない! 未来へ進むためだ!

この記憶を紡ぐため、VPSやWordpressにメモを残しておいてよかったと思うことしきりです。

ボードゲーム『六華』感想。

背後に麻雀が透けていながらも、ゲーム性は異なり、更に麻雀の純粋な楽しさである「面子を揃える」に特化させた、言葉通りの意味で「華がある」ボードゲームでした。

ルール概要

牌を合わせていく麻雀系ゲーム。通常の麻雀と異なり、上下異なる/同じドミノ牌を自摸っていき、捨てるときは表にする。

大きく違うのは「表にした捨て牌」を利用できるという点です。

役もたった三種類。

  • 一色(1点): 手牌6枚の下の数をすべて同じ数字に揃える。
  • 三連(3点): 「上の数が連番・下の数が1種類」の3枚セットを2組揃える。
  • 六華(実質7点の6点): 下の数を1種類に揃え、上の数を1〜6の完全連番で揃える(最高役・一発逆転)。
  • (※★マーク付き牌による「輝きボーナス(追加点)」あり)

このゲームの好きなところ

「揃える楽しさ」に特化したルール。

麻雀がある程度分かるプレイヤーであれば、サマリーカードを見せて「捨て牌でも自摸れる」点と「ついでに完成(聴牌+捨て牌で完成)ルール」を教えるだけ。

ボドゲ初心者や子供でも分単位で理解できます。

麻雀の楽しさ(自摸とツモ上がりの快感)だけを純度高く抽出したルールと言えます。

とても質が良いコンポーネント

上下で数字・スートが分かれた「ドミノ牌(リッカ牌)」は適度な重さと質感があり、洗牌しやすいです。同作者の金字塔的作品『タイガー&ドラゴン』の裏表の区別がつきにくい欠点が著しく改善されています。

牌スタンドも同梱されているため、振動で牌を取りこぼすと言うこともありません。

上下異なる牌による劇的な手牌の変化。

本作最大のギミックです。牌の上下をひっくり返すことで、上の数字・下のスートの組み合わせが変化するため、

「ん? この一枚を逆にしただけで手役が完成する!」となるのはちょっとしたアハ体験です。

誰かが和了った後に「あー、こっち残してれば!」のたらればも頻発。

これにより、たった42枚の牌でも毎回異なるゲーム体験が可能。「1000回遊べる」という看板は伊達ではないと思いました。

ダウンタイムがほぼない

手配が5枚、6枚で完成。裏目を引いても「取り返せる」し、10点先取はかなり早く決着がつきます。更に高得点の『六華』にこだわらずとも逆転可能なのでサクサク進みます。

フリテン・流局がない世界

本作の更なる特徴として「捨てた牌を自摸れる」点にあります。これによって「手配が変化した結果、切った牌を利用したくなった」が可能な点にあります。

そのため、フリテンが存在せず、どんな状況でも(それこそ全ての牌が表になっても)役の完成を狙うことができます。

やや評価が分かれると思ったところ

運要素の強さ

6枚という短さゆえに配牌や引きの偏りが大きく、ガチガチの読み合いを求めたい場合は「引き運ゲー」と感じられるそうな点です。

人数によるプレイ感の違い

2人だとあっさり終わりやすく、一方的な展開になりがちでした。読み合いや捨て牌のジレンマが本格化するのは3〜4人程度という形。

追加ルールが麻雀に寄りすぎる。

上述した流局・フリテンなしはひりつく勝負が至高という方には向きません。

リーチ、ロン、無双などの追加ルールを全部盛りにすると「それなら麻雀でよくないか?」というのは冷静に思いました。

個人的に思ったこと

麻雀未経験者への導入としての優秀さ

これに尽きます。極端な話、下の数字だけを一致させれば完成するので、ほとんどの年齢層をカバーします。

また、これで牌に慣れればその派生形のゲームにもつなげやすいというのもポイントです。(なお、それ系で筆者が好きなのは『ひらがじゃん』と『すずめ雀』です)

アイスブレイクや人数時間調整にぴったり

インスト、セットアップ、ゲームが手短。そのため、重いゲームの息抜きだったりボドゲ会の人数が揃うまでの時間あわせにも都合が良いゲーム。ずっしりとした牌でありながら、割とコンパクトなパッケージも好感が持てます。

まとめ

  • 単純で覚えやすいルール
  • それでいて奥深いルール展開
  • 小気味の良いコンポーネント

などが揃った傑作。長らく入手困難だったことも、ファンが多いことも納得。麻雀系ゲームが好きな方もあまり興味がない方も楽しめる傑作でした。

ピボット旅行2026-終章『Finish the Story』

はじめに

岡山駅から新幹線に乗り込み、東京へ。4泊4日にわたるピボット旅行2026も、いよいよ終わりを迎えようとしていました。

指定された座席に腰を下ろし、荷物を整理してやったことはSNSの更新です。今回の旅行中、筆者は意識的にSNSから距離を置いていました。

  • 旅先で見たもの
  • 食べたもの
  • 感じたこと。

それらを逐一SNSに投稿するのではなく、その場での体験を優先していたのです。とはいえ、写真を撮らなかったわけではありません。むしろ、その逆です。

カメラやスマートフォンには、4日間の記録が大量に残されていました。帰りの新幹線は、それらを整理し、写真をアップロードするための時間。

そして、写真を見返すうちに、今回の旅行がいったい何だったのかを考える時間にもなりました。

そもそも、何をピボットしたのか

今回の旅行は、もともとブロンプトンを携行し、しまなみ海道を走ることを大きな目的としていました。

しかし、出発前から気になる天気予報。秋雨前線の影響によって、予定していた日程は雨に見舞われる可能性が高くなっていました。そこで下した決断。

ブロンプトンを置いていく。

10年以上にわたって旅の相棒としてきた折りたたみ自転車。それを置いていくという選択は、単なる荷物の削減ではありませんでした。旅のスタイルそのものを変える決断です。自転車で走ることを前提に組み立てた旅程を捨て、徒歩、鉄道、船を中心とした旅へと切り替える。

つまり、ピボット。

この決断を振り返ると、どうしても思い出す人物がいます。ジョン・シナです。

You Can't See Me.

2025年、ジョン・シナは長年築き上げてきたベビーフェイスとしての立場を捨て、衝撃的なヒールターンを果たしました。それまでの自分を否定するかのような、大胆なギミックチェンジ。

しかし、その試みは必ずしも期待された結果には結びつきませんでした。そして、再びフェイスターンへ。ここで重要なのは、ヒールターンが失敗したという事実そのものではありません。

一度変えたギミックを、もう一度変えることができた。

ということです。筆者もまた、今回の旅行で自分のギミックを変えました。自転車で走る旅行者から、公共交通機関を利用して各地を巡る旅行者へ。

もっとも、筆者の場合は悪役になったわけではありません。ブロンプトンを置いてきたからといって、突然観光客に向かって椅子を振り回すようになったわけでもありませんし。ただし、自分の中では相当に大きな転換でした。

そして、旅を終えようとしている今、もう一度考えます。このギミックチェンジは、果たして成功だったのか。

天候運という現象

筆者は以前から、自分の天候運について一種の確信を持っていました。それは単なる願望ではなく、これまでの経験から得られたものです。

例えば2018年の尾道旅行。台風が接近するという、普通ならば旅行の中止や変更を検討するような状況でしたが、実際に台風の影響を受けたのは夜間。日中は驚くほどの晴天に恵まれ、旅程を楽しむことができました。

しかも、筆者の心境としては「当然」とか「この私が旅をしている以上、それは絶対だ」でした。

それでも今回の旅行では、雨が降りました。それも、実に容赦なく。尾道では雨の中を歩き、金刀比羅宮への参拝にも雨の予報がつきまといました。

従来の自分であれば、こう考えたかもしれません。

「こんなはずじゃなかったのに」

ですが、今回の旅行を振り返ってみると、少し違った景色が見えてきます。

天運の矜恃

確かに、今回の天候運は全面的に味方してくれたわけではありませんでした。

一番降ってほしくない場面では、雨が止んでいた。

まず、海路です。今回の旅行は、東京から徳島へ向かうフェリーによって幕を開けました。そして、瀬戸内海を渡る移動も旅程の重要な一部でした。

船という交通手段を旅の柱に据えた以上、悪天候によって航行や移動そのものに支障が出ることは避けたいところ。その肝心な場面では、天候が大きな障害になることはありませんでした。

そして、もう一つ。金刀比羅宮です。海上交通の守り神として信仰を集めてきた、こんぴらさん。その参拝に際して、雨が止んだこと。筆者にとっては、これが何よりも印象的でした。

海路と、海路を司る神様。そこだけは譲らなかった。まるで、自分の天候運が最後の矜恃を見せてくれたような出来事でした。

すべてを晴れにすることはできませんでした。しかし、守るべきところは守ってくれました。今回の天候運もなかなか味な仕事をしてくれたものです。

雨が見せてくれたもの-That is not a Prediction, That is a SPOILER!!-

そして、今回の旅行で得られた最大の発見の一つ。

雨の中の旅行にも、得られるものがある。

こちらにも記したように、iPhone Airによるノールック撮影。ファインダーを覗き込んで構図を練るのではなく、文字通り、画面を確認せずに撮影したものです。

結果を見るまでも無く、シャッターを切ったときに脳内に響いた

That is not a Prediction, That is a SPOILER!!(これは予言では無い、ネタバレだ!!)

事実、その写真は最終的にブログのバナーにまで採用されました。旅行中に撮影した数々の写真。ブログの顔となったものがノールックで撮影した一枚だったというのですから、何とも出来すぎた話です。

  • 雨があったからこそ撮影できたもの。
  • ノールックだったからこそ得られたもの。

事前に計画して撮影したものではありません。旅の中で、その場の状況を受け入れ、シャッターを切った結果です。そして、そうして残された写真が、旅を終えた今、何よりも雄弁に今回の旅行を物語っています。

SPOILER!

最初から結末を知っていたのは、案外、筆者ではなく写真の方だったのかもしれません。

崩れたバイアス

今回の旅行では、いくつもの先入観が崩れました。

まず、高松という街に対する認識。当初、筆者が高松に期待していたのは、四国や中国地方を巡るための交通拠点としての利便性でした。

  • うどんが美味しい。
  • 鉄道や船の接続がよい。

それだけでも十分に魅力的な街だと思っていました。しかし、実際に滞在してみると、それだけではありませんでした。

  • 商店街を歩く楽しさ。
  • 地元の食文化。
  • 思いがけない発見。

旅の終わりに近づくにつれ、また訪れたいと思うようになっていたこと。単なる拠点として選んだ街が、旅の目的地そのものになっていたのです。

また、自転車がなければ行動範囲が狭まるという認識も変わりました。

  • 長距離移動を鉄道に任せる。
  • 船に乗る。
  • 歩きたい場所で歩く。
  • 疲れたら休む。

そして、天候に応じて行き先を変える。自転車を持たないことは、行動の制限ではなく、別の選択肢を手に入れることでもあったのです。

食事についても同様でした。事前に綿密な計画を立てなくても、その場で自分の食べたいものを選ぶ。時には予定を変更する。その結果、思いがけない美味しいものに出会う。

徳島ラーメン、うどん、骨付き鶏、そして最後の岡山でのえび飯。特にえび飯は、会計時に現金が足りるかどうかという、今回の旅でも最大級のピンチを伴いました。

このように、今回の旅行では、自分が当然だと思っていたものが次々と覆されました。

しかし、そのどれもが不快なものではありませんでした。むしろ、これまでの自分が持っていなかった視点を与えてくれたのです。

記録するということ

そして、今回の旅行で得られた最大の収穫。それは、記録です。筆者は普段からWordPressでブログを更新しています。

技術的な作業記録、日々の出来事、趣味の話、旅行記。興味を持ったことを調べ、実際に体験したことを文章にする。

それが、長年続けてきた習慣です。今回の旅行でも、同じことを続けました。4泊4日も旅先での出来事を記録し、帰宅後も記事としてまとめ続けました。

しかも、一つの出来事から複数の記事が生まれることもありました。

  • 何気ない食事。
  • 移動中の出来事。
  • 天候による予定変更。
  • 買い物。
  • 写真。
  • それらの出来事から派生する、自分自身の考察。

気がつけば、今回の旅行は、当初想定していた以上の分量の旅行記になっていました。単に記事の本数が増えたことではありません。

体験を記録することで、その体験から得られるものが増えていった。

ということです。旅先では気づかなかったことが、文章にする過程で見えてくる。別々の出来事だと思っていたものが、後から一つの流れとしてつながる。そして、記録を読み返すことで、自分が何を考え、どのような判断を下したのかが分かる。

これは、普段のサーバ運用にも通じるものがあります。

  • 何が起きたのか。
  • なぜ、その判断をしたのか。
  • 結果はどうだったのか。

次に同じような状況が起きたとき、どうすればよいのか。

ログを残すことの意味は、単に過去を保存することではありません。未来の自分が判断するための材料を残すことです。

今回の旅行記も、まさにそのような記録になりました。

  • 雨に降られた。
  • 予定を変えた。
  • 想定外の出来事が起きた。
  • それでも、旅を続けた。

そして、その一つ一つを記録することができた。筆者にとって、これ以上の収穫はありません。

Finish the Story

新幹線の車内。写真のアップロードを続けながら、今回の旅行を振り返ります。当初の予定通りにしまなみ海道を走っていたら、どのような旅になっていたでしょうか。

それは、それで楽しい旅だったと思いますが、今回訪れた場所や、出会ったものの多くは経験できなかったでしょう。

  • ブロンプトンを置いていくという決断。
  • 天候に応じて旅程を変更するという判断。
  • 雨の中でも楽しめるものを見つけるという発見。

そのすべてが、今回のピボット旅行を形作っていました。ここで、冒頭のジョン・シナの話に戻ります。

一度ギミックを変えたからといって、そのギミックに固執する必要はありません。うまくいかなければ、また変えればいい。もちろん、自分が納得する範囲で。

今回の旅を終えたからといって、筆者がブロンプトンに乗らなくなるわけではありません。

  • また自転車で旅をしたくなったら、そうすればいい。
  • 徒歩や鉄道で旅をしたくなったら、そちらを選べばいい。

大切なのは、過去の自分が決めたスタイルを守り続けることではなく、その時々で自分が納得できる選択をすることです。

つまり、今回のピボット旅行は、ブロンプトンを置いていくことで始まりましたが、ブロンプトンを否定する旅ではなかったのです。むしろ、これまでの旅の経験に、新しい選択肢を加える旅でした。

そして、今回の旅を通じて得た経験は、すべて記録として残っています。

  • 天候運への確信。
  • 崩れたバイアス。
  • 自分の判断。
  • 思いがけない出会い。

その一つ一つが、次の旅へとつながっていくことでしょう。

旅は終わります。

しかし、旅によって得られたものは終わりません。

新幹線は東京へ向かって走り続けます。写真のアップロードを終え、筆者は改めて今回の旅を思い返しました。

最初に思い描いていた旅とは、まったく違うものになりました。ですが、

これが、筆者の選んだピボット旅行2026です。

そして、そのすべてを書き残すことができました。物語を終わらせるために必要だったのは、当初の計画を完遂することではありません。自分で選び、自分で歩き、自分で記録すること。

その積み重ねによって、初めて自分の物語が完成するのです。

Finish the Story.

ピボット旅行2026、これにて終幕です。

ピボット旅行2026-断章『ロープ際のカウント2.99』

はじめに

ピボット旅行2026、最終日。ここまでの旅では、実に様々なピンチに遭遇してきました。

天候による旅程変更。雨の中での移動。予想外の出来事。そして、その都度行われた脳内ゴリラルームによる判断。

しかし、今回の旅における最大のピンチは、そんなものではありませんでした。それは、岡山で昼食を食べ終えた直後のこと。しかも、その危機を救ったのは、ほんの数時間前の何気ない判断だったのです。

雨の後楽園

最終日の目的地の一つ、岡山後楽園。あいにくの雨模様でしたが、ここで筆者の目を引いたものがあります。

彼岸花です。

今回の旅行では、尾道でも雨に濡れた彼岸花を撮影していました。秋の訪れを告げる鮮やかな赤。雨に濡れることで、その色彩はいっそう際立ちます。晴天の下で見る花も美しいものですが、雨の中だからこそ見られる景色というものもあります。

尾道に続き、岡山でも出会えた雨の彼岸花。結果的に、今回の旅を象徴する被写体の一つとなりました。

そんな後楽園への入場時、ちょっとした出来事がありました。入場料の支払いにSuicaが使えたのです。これまでの旅行でも、交通系ICカードやデビットカードを活用してきた筆者。

現金を取り出す必要もなく、いつものように支払いを済ませました。このときは、単に便利だと思っただけでした。

これが後になって、とんでもない伏線だったことが判明します。

岡山名物、えびめし

後楽園の散策を終えてのランチタイム。岡山に来たからには、やはり地元の名物を食べたいところです。そこで選んだのが、岡山名物の「えびめし」。

名前だけ聞けば、海老の入った炒飯のようなものを想像するかもしれません。実際に目の前に現れたのは、独特の黒褐色をしたご飯でした。カレーの風味を感じさせる、カラメルソースを使った味付け。

一見すると濃厚そうな色合いですが、口に運んでみると、香ばしさと旨味が広がります。そこに加わる、プリプリとした海老の食感。

これだけでも十分に満足できる一皿ですが、今回の食事には更なる主役がいました。有頭海老フライです。サクッとした衣の香ばしさ。海老そのものの甘味。そして、頭の部分から感じられる海老味噌の濃厚な旨味。

えびめしの香ばしさと、海老フライの旨味。

同じ海老を使いながら、それぞれ異なる方向から味覚を楽しませてくれます。そして、これらを口の中で綺麗に洗い流してくれたのが、ニルギリ茶。すっきりとした飲み口が、濃厚な食事の後に実に心地よい。

旅の最後に、また一つ美味しいものを引き当てることができました。大満足です。

この時点では。

お会計

食事を終え、余韻に浸りながらお会計へ。そこで、店員さんから告げられた一言。

「お支払いは現金かPayPayになります」

……。

…………。

現金、そんなに持っていない。

今回の旅行では、基本的にSuicaとデビットカードで支払いを済ませてきました。現金が必要になる場面は限られており、財布の中身をそれほど気にしていなかったのです。

ここで提示された選択肢。

現金かPayPay。

筆者が普段使っている決済手段が、見事に両方とも外れました。

……財布の中に、いくら残っていた?

とりあえず財布を開きます。千円札がある。よし。しかし、これだけでは足りません。

小銭入れを開きます。

100円。
200円。
300円。

頼む。あと少し。ここで小銭を数える手が止まりました。

支払いを済ませた結果、残金40円。

…………。

危なかった。本当に、危なかった。ここで「これからお金下ろしてきます」とかは相当に格好が悪い状況です。しかも、新幹線まで2時間を切っている状況です。

狂乱の貴公子、再び

ここで、ふと思い出したことがあります。この日の朝食です。朝に食べたうどんを、プロレス界のレジェンド、リック・フレアーになぞらえていたのです。

「狂乱の貴公子」の異名を持つその試合運びといえば、観客の感情を巧みに操り、絶体絶命の状況からでも生き残る老獪さ。そして、何よりも印象的なのが、カウント2.99でのキックアウトです。

レフェリーの手がマットを叩く。「スリー……!」と思った瞬間、肩が上がる。あるいは、レフェリーが3カウントを数え終わったというのに、よく見れば片足がしれっとロープにかかっていてロープブレイク。

  • 観客は騒然。
  • 対戦相手は抗議。
  • そして当の本人は、何食わぬ顔で生き残っている。

これぞ、リック・フレアー。

朝食のうどんを喩えるために狂乱の貴公子を持ち出したら、昼食でその試合運びを再現するとは誰が思いますか。

今回の旅における最大のピンチ。それは、雨でも怪我や体調不良でもなければ、旅程の変更でもありませんでした。昼食代が払えるかどうか。

しかも、その決着は残金40円という、まさしくカウント2.99の世界。筆者、この時の会計の記録に「カウント2.99のキックアウト」と項目名につけたほどです。

最高の伏線

そして、ここで思い出したのが、後楽園での支払いです。入場料をSuicaで支払っていたこと。もし、あのとき現金で支払っていたら?答えは明白です。

えびめしのお会計で、現金が足りなくなっていました。

何の気なしに選んだSuica決済。それが、数時間後の自分を救っていたのです。

  • 尾道から続く雨の彼岸花。
  • 岡山後楽園での散策。
  • 岡山名物のえびめし。

それぞれが旅の思い出として独立しているはずだったのに、最後の最後で思わぬ形につながりました。まさか、後楽園の入場料をSuicaで払ったことが、昼食代を支払えるかどうかの分岐点になっていたとは。

これもまた、今回のピボット旅行らしい展開です。

試合終了

こうして、無事に支払いを終えました。財布に残された現金は40円。レフェリーの3カウントは成立せず。ロープ際で、辛うじて生き残った格好です。

そして、お店を後にしてようやく、先ほど食べたえびめしの味が蘇ってきました。

  • カレーの風味をまとったご飯の香ばしさ。
  • プリプリとした海老の食感。
  • 有頭海老フライの香ばしさと、海老味噌の旨味。
  • それらをすっきりと流してくれたニルギリ茶。

今回のピボット旅行は、天候や交通事情に合わせて予定を変更し、その都度、別の楽しみを見つけてきた旅でした。

しかし、最終日の昼食に至っては、ピボットする余地すらありません。あるのは、財布の中身だけ。

そこで生き残れたのは、後楽園でのSuica決済という、本人すら意識していなかった伏線のおかげでした。

朝食でリック・フレアーを持ち出し、昼食でリック・フレアーの試合をする。

そして、財布には40円が残った。カウント2.99。狂乱の貴公子、岡山にて生還。

Woooo!

CVE-2026-98432対応・解決編『サーバ管理者は眠りたい』(Ubuntuの先行パッチ適用によるカーネルアップデート)

はじめに

2026年10月31日、Linuxカーネルの脆弱性「CVE-2026-98432」に対して、nftablesによる暫定緩和策を実施しました。

このときの方針は、修正版カーネルが公開されるまでの間、攻撃経路を少しでも狭めるというものです。ここで問題となったのがUbuntu側の修正版の提供状況でした。

脆弱性の存在は明らかになっている。修正パッチも存在している。しかし、Ubuntuの通常の更新経路には、まだ修正版が配信されていない。そんな中、2026年11月2日にCanonicalから発表がありました。

Fixes available in -proposed pocket for CVE-2026-98432

修正版カーネルが -proposed ポケットで利用可能になった、というものです。

-proposed は、Ubuntuの更新パッケージが正式公開される前に検証される領域です。つまり、修正版は手に入る。しかし、通常の更新として配信するための検証はまだ終わっていない。

ここで筆者は、正式公開を待つのではなく、修正版カーネルを先行適用することにしました。今回は、その適用手順と、再起動後の確認、通常の更新経路への復帰までを記録します。

1. 対応環境と修正版の確認

今回の対象はUbuntu 24.04 LTSのVPSです。

まず、現在稼働しているカーネルを確認します。

uname -r

結果:

6.8.0-147-generic

インストール済みのカーネルパッケージも確認します。

dpkg -l | grep linux-image

続いて、APTで利用可能なバージョンを確認します。

apt-cache policy linux-generic
インストールされているバージョン: 6.8.0-147.147
候補: 6.8.0-147.147

この時点では、通常の noble-updates および noble-security に修正版は存在していません。

一方、Canonicalが公開したUbuntu 24.04 LTS向けの修正版は以下のとおりです。

6.8.0-149.149

そこで、noble-proposed を一時的に利用することにします。

2. noble-proposedの登録

まず、APTに noble-proposed を追加します。

echo 'deb http://archive.ubuntu.com/ubuntu noble-proposed main' | sudo tee /etc/apt/sources.list.d/noble-proposed.list

次に、-proposed のパッケージが通常の更新で無差別に選択されないよう、優先度を明示します。

sudo tee /etc/apt/preferences.d/99-noble-proposed <<'EOF'
Package: *
Pin: release a=noble-proposed
Pin-Priority: 100
EOF

通常の更新リポジトリの優先度500より低くすることで、-proposed に存在するパッケージを通常のアップグレード対象として優先させないようにします。なお、Ubuntuの -proposed は標準でも優先度100として扱われます。今回は設定を明示しています。

パッケージリストを更新します。

sudo apt update

続いて、修正版が認識されているか確認します。

apt-cache policy linux-generic

結果:

linux-generic:
  インストールされているバージョン: 6.8.0-147.147
  候補:               6.8.0-147.147
  バージョンテーブル:
     6.8.0-149.149 100
        100 http://archive.ubuntu.com/ubuntu noble-proposed/main amd64 Packages
 *** 6.8.0-147.147 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
        100 /var/lib/dpkg/status

ここで、修正版の 6.8.0-149.149 が認識されました。ただし、候補は依然として 6.8.0-147.147 のままです。

これは意図した挙動です。

3. インストール前のシミュレーション

いきなりカーネルを更新するのは避けたいところです。特に今回は、正式公開前のパッケージを本番VPSへ導入します。

そこで、APTのシミュレーション機能を利用します。

sudo apt-get -s install -t noble-proposed --only-upgrade linux-generic

-s はシミュレーション、-t noble-proposed は対象のリポジトリを指定するオプションです。

今回の結果は以下のとおりでした。

アップグレード: 8 個
新規インストール: 7 個
削除: 0 個
保留: 21 個

更新対象には以下が含まれていました。

  • linux-generic
  • linux-image-generic
  • linux-virtual
  • linux-image-virtual
  • linux-headers-generic
  • linux-headers-virtual
  • linux-libc-dev
  • linux-tools-common

また、カーネルイメージ、モジュール、ヘッダー、ツール類が 6.8.0-149 として新規導入されます。特に確認したかったのは、パッケージ削除が0件であることです。

4. 修正版カーネルの適用

シミュレーションに問題がなかったため、実際の更新を実施します。

sudo apt-get install -t noble-proposed --only-upgrade linux-generic

今回の環境では、linux-generic に加えて linux-virtual 系のメタパッケージも依存関係として更新対象になりました。

インストール後、カーネルを切り替えるために再起動します。

sudo reboot

再起動後、稼働カーネルを確認します。

uname -r

結果:

6.8.0-149-generic

修正版カーネルでの起動に成功しました。

これでCVE-2026-98432に対するカーネル側の修正は適用できました。

……と、ここで終われば話は簡単だったのですが。

5. 再起動後のサービス確認

カーネルが更新できたからといって、システム全体が正常に動いているとは限りません。

そこで、systemdの状態を確認します。

systemctl --failed

結果:

UNIT LOAD ACTIVE SUB DESCRIPTION

0 loaded units listed.

失敗しているユニットがあった場合は、カーネル更新との関連を含めて原因を確認し、必要に応じて関係者と調整した上で対処します。

6. noble-proposedの登録解除

修正版カーネルの適用と再起動後の確認が完了したため、最後にAPTの設定を元に戻します。noble-proposed は正式公開前のパッケージを提供する領域です。

今回必要だったのは修正版カーネルの先行適用であり、継続して有効にしておく必要はありません。

追加した設定ファイルを削除します。

sudo rm /etc/apt/sources.list.d/noble-proposed.list
sudo rm /etc/apt/preferences.d/99-noble-proposed

パッケージリストを更新します。

sudo apt update

続いて、カーネルの状態を確認します。

apt-cache policy linux-generic

結果:

linux-generic:
  インストールされているバージョン: 6.8.0-149.149
  候補:               6.8.0-149.149
  バージョンテーブル:
 *** 6.8.0-149.149 100
        100 /var/lib/dpkg/status
     6.8.0-147.147 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
     6.8.0-31.31 500
        500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages

修正版の 6.8.0-149.149 はインストール済みとして維持されています。通常の更新リポジトリに存在するバージョンは 6.8.0-147.147 ですが、APTが自動的にダウングレードすることはありません。

最後に、noble-proposed の設定が残っていないことを確認します。

grep -R 'noble-proposed' /etc/apt/sources.list /etc/apt/sources.list.d/ /etc/apt/preferences.d/ 2>/dev/null

結果は出力なし。これでAPTの設定も通常の状態へ戻りました。

7. 暫定緩和策について

10月31日に実施したnftablesによる暫定緩和策については、今回は撤去せず、そのまま維持することにしました。今回のカーネル更新によってCVE-2026-98432の修正は適用されていますが、既存のフィルタリングルールを急いで取り除く必要もありません。

筆者の環境ではGoを使用しておらず、現在のルールによる運用上の問題も確認されていません。そのため、今回の対応ではnftablesのルールと永続化用のsystemdサービスを変更せず、現状維持とします。

8. 対応結果

今回の対応結果をまとめます。

項目結果
CVE-2026-98432修正版適用完了
稼働カーネル6.8.0-149-generic
noble-proposed登録解除済み
systemd失敗ユニット0件
nftables暫定緩和策維持

これで、今回のCVE対応は一段落となりました。

おわりに

今回、改めて実感したのは、脆弱性対応における判断の難しさです。Canonicalが修正版を -proposed に公開したのは、正式な更新経路へ投入する前に、十分な検証を行うためです。

その判断には合理性がありますが、実際にサーバを運用する立場からすれば、脆弱性が明らかになっているにもかかわらず、正式な更新を待ち続けることにもリスクがあります。

  • 正式公開まで待つのか。
  • 検証中の修正版を先行適用するのか。
  • 暫定緩和策でどこまで対応できるのか。

どの選択にも、それぞれのリスクと運用コストがあります。この場合、筆者が選べる道は2つです。

  • 正式公開まで待ち、日々、脆弱性チェックに怯えて眠れない時間を継続するのか?
  • 少々のリスクを承知でカーネルアップデートを行い、(少なくともその問題は)解決させてぐっすり眠る日を確保するのか?

筆者の性分は後者だったというお話です。

ピボット旅行2026-29『交叉点』

はじめに

いよいよ迎えた、ピボット旅行2026の最終日。高松を拠点に四国・中国地方を巡った旅も、この日に東京に戻る日です。

そんな最終日の朝食については、旅行前から決めていたことがあります。

朝5時から営業しているうどん屋で、朝うどんを食べる。

向かう先は、高松駅からほど近い『味庄』。平日のみの営業ながら、朝5時から店を開けているという、なかなかに尖った営業時間のお店です。

筆者にとって朝5時という時間は、それほど珍しいものではありません。むしろ、この時間だからこそ味わえるものがあります。

朝という名の交叉点

筆者は、どちらかといえば朝型の人間です。

仕事の都合によっては始発電車で職場へ向かうこともありますし、休日であっても早朝から行動することに抵抗はありません。そして、何よりも好きなのが、この早朝という時間帯そのものです。

理由は単純。

朝という時間は、様々な人々の生活が交叉する時間だからです。

  • これから仕事へ向かう人。
  • 夜勤を終えてようやく一息つく人。
  • 深夜の営業を終え、仮眠を取ってから次の仕事へ向かうタクシードライバー。
  • 一晩働いたキャストを労う飲食店のママさん。

同じ朝5時であっても、その意味するところは人によって全く異なります。

ある人にとっては一日の始まり。またある人にとっては、一日の終わり。

そして、そのどちらでもない、仕事の合間に訪れる束の間の休息。時計の針が指す時刻は同じでも、そこに流れている時間は決して同じではありません。

そんな人々が、同じ場所に集まり、同じものを食べる。筆者は、そういう光景が大好きなのです。

観光名所を訪れるだけでは、なかなか見えてこない土地の生活。そこに少しだけお邪魔できるのが、早朝営業のお店というわけです。

朝5時10分の光景

というわけで、朝起きてすぐに宿を出発。目的地は、宿泊しているJRクレメントイン高松からもほど近い味庄です。

時刻は朝5時10分。いくら朝5時から営業しているとはいえ、まだ開店して10分ほど。

さすがに、この時間からそんなに人がいるわけが……

それなりにいる。

思わず二度見する程度には、お客さんが入っていました。もっとも、ここまでは筆者の想定内です。

早朝営業をしているということは、それだけの需要があるということ。そして、この時間帯に訪れる人々の顔ぶれこそ、今回の朝食で楽しみにしていたものです。

ただ、一つだけ予想と違っていたことがありました。

妙に身なりがパリッとしている方が目立つのです。

いかにも仕事帰りという方もいる一方で、きちんとした服装で、これから仕事へ向かうのであろう方々の姿。朝5時過ぎという時間を考えると、少々不思議な光景です。

その理由にはすぐに思い当たりました。

時刻表が教えてくれたもの

高松駅に到着した際、筆者は駅の時刻表を写真に収めていました。旅先での移動計画に使うためでもありますが、こうした「なんてことない」記録が後になって役立つことがあります。

そして、その写真に写っていたもの。マリンライナー、朝4時台から走っているのです。高松から岡山へ向かい、そこから新幹線に乗り継ぐ。

そう考えれば、この時間に行動を始めることで、遠方であっても朝9時の始業に間に合う可能性が見えてきます。

以前の記事でも触れた、高松という土地の位置関係。四国の玄関口であり、瀬戸大橋を渡れば本州へとつながる交通の要衝。

筆者にとっては旅の拠点として選んだ高松ですが、そこに暮らす人々にとっては、日々の通勤や仕事を支える場所でもあるわけです。

朝5時のうどん屋に、きちんとした身なりの人がいる。それ自体は何の変哲もない光景ですが、時刻表という別の情報と結びついた瞬間、その背景が見えてきました。

観光客にとっての早朝は、地元の人にとっての通常営業。そんな「なんてことない(大事二言)」日常にお邪魔できるのは感慨深いもの我があります。

脳内シャア、ようやく起床

人間観察に夢中になっている場合ではありません。本来の目的は、うどんを食べることです。

今回注文したのは、釜揚げうどん。香川県といえば讃岐うどん。そして讃岐うどんといえば、強いコシを連想する方も多いでしょう。

もっとも、筆者は今回の旅行で、そうした先入観を何度となく覆されてきました。味庄について事前に目にした口コミとやらには、麺のコシが弱いという評価もありました。

ならば、ようやく起床してきた筆者の脳内シャアの出番です。

「さて、楽しませてもらおうか」

ロープ際の攻防

運ばれてきた釜揚げうどん。まずは一口。確かに、柔らかい。

一般的にイメージされる、噛み応えの強い讃岐うどんとは少し異なる歯ごたえです。

しかし、柔らかいと簡単に噛み切れは両立しません。

歯を入れると、確かに麺は素直に沈み込みます。ところが、噛み切ろうとする寸前で、ふっと粘りを見せるのです。抵抗がないようで、最後の最後に抵抗する。

この絶妙な粘りは何かに似ていると思ったら、筆者がYouTubeなどで見てきた、往年のプロレスラー、リック・フレアーの試合でした。

ロープ際まで追い詰められ、今にも決着がつきそうな場面。そこで簡単には終わらない。粘り、耐え、最後の最後まで勝負を続ける。あのロープ際の攻防です。

まさか朝5時の釜揚げうどんを食べながら、「狂乱の貴公子」の試合を思い出すことになるとは。

もっとも、うどんに足四の字固めを仕掛けられても困りますし、朝からWoooo!の叫びを聞きたいわけでもありません。

さておき。この柔らかさと粘りの両立こそが、筆者にとっては実に好ましいものでした。

コシの善し悪しの単純な物差しでは測れない食感が、そこにあります。何せ起き抜けの朝の身体に、この温かい釜揚げうどんが実によく馴染むのです。

チョイスした卵天にマイタケの天ぷらも、絶妙なコシを担保してくれました。

またしても、大満足。今回の旅行、うどんに関しては最後まで期待を裏切られませんでした。

もう一つの交叉点

今回、味庄で感じた交叉点には、もう一つの意味がありました。それは、社会的な立場の異なる人々が、同じ場所に集まるということです。

高松という土地には、様々な人が暮らしています。島や船団を所有するような富裕層もいれば、年金を頼りに慎ましく暮らす方々もいます。

若い人も、年配の人も。そして、その人々が同じうどん屋に集まってきます。

ここでは、どれほどの資産を持っているかも、どのような肩書を持っているかも関係ありません。あらゆる階級の人々が、同じうどんを食べるために集まってくるのです。

セルフサービスのうどん店であれば、なおさらです。同じデポの前に並び、同じトングを手に取り、思い思いの一杯を仕上げていく。

社会的な立場も、収入も、生活の時間帯も異なる人々が、同じ道具を共有する。それぞれが何を考え、どのような人生を送っているのかは筆者にとってはNone of my businessです。

それでも、同じ店で同じものを食べるという、ごく当たり前の行為によって、それぞれの生活がほんの一瞬だけ交わります。そこには、特別な演出もなければ、誰かが用意した物語もありません。

ただ、日常があるだけです。この日、筆者はこの宿を引き払います。言い換えるまでもなく、旅はもうすぐ終わります。

しかし、この店に集まっていた人々にとっては、今日もまた、いつも通りの一日が続いていきます。ある人は仕事へ向かい、ある人は家路につく。

そして筆者もまた、旅の最終日へと歩き出します。日常に戻るために。

ピボット旅行2026-28『Chicken in the Station』

はじめに

高松の夜もいよいよ最終日、3日目の夕飯。この日は、外で食べると決めていました。

というのも、母からLINEでこんな提案があったからです。

「後は骨付き鶏だね」

骨付き鶏。

名前からして、鶏肉を骨付きのまま調理したものなのでしょう。わざわざ母が勧めてくるということは、香川ならではの何かがあるはずです。

そこで調べてみたところ、香川県丸亀市発祥のご当地グルメであることが判明。

鶏の骨付きもも肉を、ニンニクや塩コショウなどのスパイスで豪快に焼き上げた料理とのこと。

これは食べておきたい。そう思ったものの、ここで一つ問題が発生しました。

持ち帰りという選択肢

当初は、骨付き鶏を持ち帰って宿でいただくことを考えていました。

何しろ、今回の旅では夕飯を宿で済ませることが多く、これならば食後すぐに休むことができます。

しかし、調べれば調べるほど、持ち帰りという選択肢に疑問が生じてきました。

  • ニンニクをふんだんに使用した強烈な味付け
  • 皮をパリパリに焼き上げた、油たっぷりの肉
  • 骨付き肉ならではの食べにくさ

……これ、ホテルの客室で食べるものなのでしょうか。特に問題となるのは、ニンニクの香りと油です。

翌日も使う客室を、自分一人の夕飯でバイオハザード状態にするわけにはいきません。

となれば、店内で食べるしかありません。

しかし、もう一度高松の商店街まで足を運ぶだけの体力は残っていませんでした。

何よりも、この時点で筆者が使い果たしていたものがあります。

対人リソースです。

対人リソースの枯渇

旅行中、筆者は一人で行動することを好みます。

自分のペースで歩き、自分の判断で目的地を変え、気になった場所があれば立ち寄る。

この自由度こそが一人旅の醍醐味です。

その一方で、店員さんとのやり取りや、慣れない店での注文など、人とのコミュニケーションには相応の気力を使います。

この日は既に、その気力を使い果たしていました。

とはいえ、せっかく高松まで来ているのですから、骨付き鶏は食べたい。

となると、条件は次のようになります。

  • 宿から近いこと
  • 店員さんとのやり取りが極力少なく済むこと
  • 本場の骨付き鶏を食べられること
  • 納得できる価格であること

そんな都合のいい場所があるのでしょうか。ありました。

駅ビルです。

Chicken in the Station

高松駅の駅ビルならば、宿からの移動距離はごくわずか。

飲食店も複数入っているため、店の雰囲気を見て判断することができます。

何より、駅ビルの飲食店ならば注文から会計までの流れも分かりやすい。そして、この選択は大正解でした。

しっかりと骨付き鶏を提供しているお店があったのです。

メニューを確認すると、焼き上がりまで15分以上かかるとの注意書き。全く問題ありません。

むしろ、注文を受けてからじっくり焼き上げるのであれば、待つだけの価値があります。

こうして、今回の旅行で初めてとなる「外でいただく夕飯」と相成りました。

もっとも、フェリーの船室やホテルの客室でいただいた食事も、広義の意味では外食です。

……そのあたりは、言葉の定義ということで。

どーん。

注文を終えて待つこと、およそ20分。

運ばれてきた骨付き鶏を見て、思わず変な笑いが出ました。

でかい。

いや、骨付き鶏なのですから、ある程度の大きさは予想していました。

実物は想像を超えていました。

その大きさを比較する対象として、皿の上にはキッチン鋏が置かれています。

肉を切り分けるための鋏なのですが、これが比較対象として実に分かりやすい。

普段、家庭で使うような鋏と並べてなお、この存在感。

そして、付け合わせは生キャベツ。セットの白むすびと味噌汁。実に潔い構成です。

ガツンとくる味

まずはキッチン鋏で肉を切り分け、一口。

表面には、ニンニク、塩コショウ、スパイスがしっかりと効いています。

一口目からガツンとくる味付け。そして、パリパリに焼き上げられた皮。その下には、しっかりとした噛み応えのある肉が待っています。

そして何よりも。

肉汁です。

噛むたびに肉の旨味と油が口の中に広がります。なるほど、これは強烈です。

ここで、付け合わせが生キャベツだけだった理由が分かりました。この濃厚な味付けと油を受け止めるのに、余計な味付けは必要ありません。

生キャベツの水分とさっぱりした食感が、口の中をリセットしてくれます。

そして、もう一つ重要な役割を果たすのが白むすび。これも、単に肉と一緒にご飯を食べるという話ではありません。

鶏油を吸わせて食べるのです。

肉から染み出した油には、ニンニクやスパイス、鶏の旨味がたっぷりと含まれています。それを白むすびに吸わせる。
これがまた、美味しい。

白むすびがセットである理由が、ここで完全に理解できました。下手に味の付いたご飯では、この油を受け止めきれません。

白いご飯だからこそ、鶏の旨味を余すところなく楽しめるわけです。

合理的な食事

ここから先は、ほとんど作業のようなものでした。

  1. キッチン鋏で鶏肉を切り分ける
  2. パリパリの皮と肉をいただく
  3. 白むすびで鶏油と旨味を吸い取る
  4. お味噌汁で口の中を整える
  5. 再び鶏肉へ

この繰り返しです。肉を食べれば油が出る。油が出れば米が進む。米を食べれば、また肉が欲しくなる。お味噌汁が次の一口への準備を整えてくれます。

何とも合理的な永久機関の完成です。気がつけば、あっという間に完食していました。

いやはや、これは美味しい。

そして、ここで新たな興味が湧いてきました。今回いただいたのは、駅ビルの飲食店で提供されている骨付き鶏です。

それでこの美味しさなのですから、骨付き鶏の代表格である『一鶴』をはじめとした名店では、一体どれほどのものが出てくるのでしょうか。

これは、次回の高松訪問に向けた宿題としましょう。

また一つ、この街に戻ってくる理由ができました。

回避されたバイオハザード

満腹になって宿へと戻ります。

そして、ここで気づいたことがありました。

ニンニクの香りが、しっかりと漂っています。

食事を終えて店を出たというのに、衣服にはあの強烈な香りが残っていました。

これが名店の骨付き鶏だったら、服は一体どうなっていたのでしょうか。そして、もし持ち帰りを選んでいたら。

宿のエレベーターに乗り込み、客室へと向かう間、あのニンニクの香りが漂い続けていたことでしょう。

下手をすれば、エレベーター内に残留する香りで、他の宿泊客にまで影響が及んでいたかもしれません。

そして、客室で容器を開けた瞬間。バイオハザード、発生。危ないところでした。

持ち帰りをやめ、店内で食べると判断したのは正解だったようです。

食べる前に考えていた懸念が、食べ終わった後に実証されるという、何とも分かりやすい結果となりました。

撤収準備

宿に戻ってきたところで、この日の行動は終わりです。

しかし、まだやるべきことが残っています。翌日は旅行最終日。つまり、撤収のためのパッキングです。

これまでに購入したものを整理し、荷物をまとめ、翌朝の行動に支障が出ないよう準備する必要があります。

普段ならば、疲れ切った状態での荷造りは面倒な作業です。この日は違いました。

骨付き鶏をしっかり食べ、肉と油と炭水化物を補給したおかげで、気力が戻ってきたのです。

先ほどまで枯渇していた行動リソースが、ここに来て回復しました。

骨付き鶏とは、食事であると同時に、撤収作業のための燃料でもあったわけです。

母の一言から始まった、この日の夕飯。

結果として、香川の名物を堪能し、宿の衛生環境を守り、翌日の準備に必要な気力まで手に入れることができました。

そして、次回の高松訪問に向けた宿題も一つ追加。

最後まで、無駄のない夕飯となりました。

ピボット旅行2026-27『il vento d’oro』

はじめに

このタイトルを聞いて、ピンとくる方は多いと思います。

アニメ『ジョジョの奇妙な冒険 黄金の風』、そのイタリア語タイトルが『Vento Aureo』。そして『il vento d'oro』といえば、敵へのトドメで流れる、いわゆる「処刑用BGM」として知られるあの曲です。

MLBオールスターでも大谷翔平選手が入場曲としてリクエストしたことで話題になりました。そんな曲が、今回のエントリーの鍵となります。

……鍵というよりは、契機と呼んだ方が正確でしょうか。なにしろ、今回立ち向かう相手は敵スタンド使いではありません。自分自身が溜め込んだ、ある種の負債です。

記録負債という言葉

筆者には、日課と呼べるものがいくつかあります。

  • 毎日のWordPress公開
  • ほぼ日手帳への記録
  • ZENタイルの記録

こう並べると、いかにも毎日きっちりと記録をこなしているように見えるかもしれません。しかし、実態は少し違います。

大事なのは、必ずしもその日のうちに全部を終わらせることではありません。最終的に帳尻が合えばいい、というのが筆者のスタンスです。記録を溜めておいて、後からまとめて処理することもあります。

その結果として発生するのが、記録負債。記録するべき事柄がなくなるわけではありません。単に未来の自分へ仕事を先送りしているだけです。

そして、未来の自分は大抵、別のことをしています。こうして発生した負債を返済するため、筆者は定期的に時間を設けています。

お金の記録は、ライフログである

今回の返済対象は、旅行中のお金の記録です。宿に戻ったら、まずは大事な記帳作業が待っています。お金といっても、ここで記録するのは入出金です。

お金の動きは、単なる家計簿の数字ではなく、自分がどのように生活していたかを物語るライフログでもあります。

  • 臨時収入。めったにありません。
  • 衝動買い。こちらは、とてもよくあります。
  • 急遽、病院に行くことになった記録。

普段の生活で何にお金を使い、何が予定外に発生し、どこで判断を変えたのか。そうした出来事が、金額とともに残ります。下手に感情だけを記録するよりも、よほど生々しいものが見えてくることもあります。

筆者がこの記録に使っているのが、セルフホストしている家計管理アプリのFirefly IIIです。

比較的シンプルな操作で記帳でき、検索も速い。口座単位で管理できるため、現金で支払ったのか、カードを使ったのかといった違いも追跡できます。今回の旅行では、これが実に重要な意味を持ちます。

  • どこで、何に、いくら使ったのか。
  • それだけでなく、いつ使ったのか。

記録を積み上げていけば、旅行中のお金の動きを完全に物語る指標になります。 ……問題は、その物語に登場する数字を、自分自身で支払っていることです。

自分の血液が流出する瞬間

旅行中の出費を記録するということは、レシートや領収証を確認しながら、自分が使った金額を改めて直視するということです。言い換えなくても:お金という自分の血液が流出した事実を、わざわざ自分の手で再確認する作業でもあります。

精神にくる作業です。一泊や二泊程度の旅行であれば、帰宅してからまとめて記録しても何とかなります。しかし、三泊ともなると話が変わります。

レシートも領収証も増えます。記録する項目も増えます。何より、時間が経過するほど「これは何の支払いだったか」を思い出す負担が増していきます。

どこかで、途中で、やらなくてはいけません。しかし、やりたくない。

この二つは、何の矛盾もなく両立します。

そして、両方やらなくっちゃあいけないのが辛いところです。

覚悟はいいか? 俺はできてる

それならば、なぜ朝一番でやらなかったのでしょうか。

旅行記を書いているときには、筆者はしばしば「自動書記」とでも呼ぶべき状態に入ります。記憶が新鮮なうちに、思い出したことを勢いのまま文章へ変換していくのです。

ならば、朝のうちに記帳も済ませてしまえばよかった。ところが、お金の記録は勝手が違います。

旅行記ならば、多少の感情の揺れや記憶の細部が前後したところで、文章としての勢いを優先できます。金額はそうはいきません。

  • レシートに書かれた金額と入力した金額が一致するか。
  • 現金で払ったのか、カードで払ったのか。
  • 記録した取引に抜けがないか。

起き抜けの頭で、これらを正確に突き合わせるのは無理があります。自動書記の勢いだけでは乗り切れない。かといって、先延ばしにすれば負債が膨らんでいく。

そこで必要になるのが、作業を始めるためのスイッチです。

「覚悟はいいか? 俺はできてる」

ここで選ばれたのが、『il vento d'oro』でした。

ミュージックスタート。

トラベラーズノート、マスキングテープ、そしてFirefly III

曲を流しながら、レシートと領収証を一気にまとめていきます。

この作業で役に立ったのが、前回の記事でも登場したトラベラーズノートです。レシートを貼り付け、必要に応じて簡単なメモを残し、それを確認しながらFirefly IIIへ記帳していく。

単にレシートを保管するだけではありません。旅先での支出を振り返り、記録と記憶を結びつけるための作業台として機能してくれました。そして、ここでもう一つ、思わぬ援軍が登場します。

マスキングテープです。

今回、輪行を諦めたことで、当初の予定とは少し違う荷物を携行することになりました。その中に入っていたマスキングテープ群が、ここで役に立ったのです。

レシートを貼り付け、整理し、必要な情報を残す。旅先での記録という観点では、非常に相性のよい組み合わせでした。もっとも、これらを持ってこなかったとしても、筆者はおそらくロフトでほぼ日手帳と一緒に買っていたでしょう。

必要な道具がなければ、現地調達すればいい。旅先での買い物には、そういう側面もあります。

……そして、そうやって増えていく出費もまた、いずれFirefly IIIに記録されるわけです。

無駄無駄無駄ラッシュ、そして17時

『il vento d'oro』の勢いを借りて、次々とレシートを処理していきます。金額を確認し、支払い方法を確認し、取引を登録する。

無駄無駄無駄無駄無駄無駄無駄無駄ッ!

もちろん、ここで言う「無駄」は、記帳作業そのものを指しているわけではありません。あくまで、積み上がった消費金額に対する感想です。

曲の勢いに乗って、記録負債を一気に返済していきます。

そして、作業開始から約一時間。

ついに、旅行中の支出記録が完成しました。

これで、どこで、何に、いくら使ったのかを振り返るための記録が揃いました。レシートも整理され、Firefly IIIへの入力も完了。先送りにしていた仕事が、ようやく片付きました。

そして時計を見ると、17時。

「つけの…… 領収証だぜ」

と言いながらの次の出費へ向かうため、財布を持って宿を後にしました。

...To Be Continued

ピボット旅行2026-断章『自分へのマウント』

はじめに

この旅行の0日目、つまりフェリーに乗った日に、トラベラーズノートを購入しました。

そして、「あるのがいけない!」でお茶を買っても、高松商店街の探索は続きます。

ルピシアからそう遠くないところにロフトがある。せっかくだから行ってみよう。そうして立ち寄った店内で、筆者はほぼ日手帳を見つけました。翌年分のアベック版です。

そこで、ふと思ったわけです。

「これ、旅先で買うの?」

いや、旅先だから買うのです。トラベラーズノートに続いて、ほぼ日手帳まで旅先で購入する。今回は、そんなお話です。

未来の自分にマウントを取る

筆者は2021年1月から、ほぼ日手帳の全日付を埋め続けています。

毎日欠かさず書いているわけではありません。ある程度たまったところでまとめて消化する、いわば積み残しの一括処理方式です。それでも、日付に空白を残さず続けていることには変わりありません。

そんな性分ですから、毎年の手帳購入は、いつしか楽しみではなくなっていました。

翌年版の発売に合わせて購入する。毎年決まった時期に発生する、避けては通れない定例作業です。たとえるなら、サブスクリプションの更新でしょうか。必要なのはわかっている。やらなければ困る。しかし、いざその時期が来ると、なんとなく面倒くさい。

筆者にとって、ほぼ日手帳の購入はそんな作業の筆頭になっていました。しかし、高松のロフトで商品を眺めているうちに、考えが変わりました。

これ、未来の自分にどや顔を決められるのでは?毎年、翌年のほぼ日手帳が発売されるたびに、筆者はこう考えることができます。

  • 「2026年の俺は、旅先で新しいものを買ったぞ?」
  • 「お前はどうなんだ?」
  • 「その時の自分に負けていいのか?」

……これは強い。毎年の手帳購入という、どうしても発生するイベント。そのたびに、過去の自分から挑戦状を突きつけられるわけです。

しかも、相手は自分自身。勝ち負けを決める審判も自分自身です。いくらでも言い訳はできますが、いくらでも言い返されます。

これほど面倒で、これほど長続きしそうな仕掛けもありません。

ほぼ日以外の選択肢

とはいえ、今回の買い物は、ほぼ日手帳から別の手帳へ乗り換えようという話ではありません。

筆者が当初考えていたのは、ほぼ日以外にも、ある程度規格化されていて、商品としての姿が明確で、さらに自分好みにカスタマイズできる手帳を持つことでした。

もうひとつ、忘れてはいけない条件があります。母が作ってくれた、特製の手帳ポーチです。これがある以上、手帳だけを別のものに替えれば済むというわけにはいきません。今さら、このポーチを使わない選択肢は端っからありません。

今回は、翌年分のほぼ日手帳アベック版を購入しました。ついでに、カスタマイズ用のパーツも。

いつもの手帳を、いつもとは違う場所で買う。

たったそれだけのことですが、筆者にとっては毎年の定例作業に、新しい意味を与える買い物になりました。

記憶にフックを仕込む

ここで重要なのは、単に翌年分の手帳を早めに手に入れたことではありません。

その手帳を、どこで、どんな経緯で買ったのか。

この記憶こそが、今回の買い物の本体です。心理学には、エピソード記憶という概念があります。自分が経験した出来事を、そのときの状況や場所、感情などと結びつけて覚える記憶です。

今回の手帳には、高松の商店街を歩き、ルピシアの近くにあるロフトへ立ち寄り、そこで「旅先だから買う」という結論に至った一連の出来事が付随しています。

毎年、決まった時期に購入する手帳とは違います。

2026年の手帳には、2026年の旅先で買ったという固有のエピソードがあるのです。そして、この記憶は、手帳を使い続ける限り、何度も思い出す機会があります。

  • 翌年分の手帳を購入するとき。
  • 分冊になっているアベック版を切り替える、半年ごとのタイミング。
  • 何より、文章を書いていて筆が止まってしまったとき。

今回の買い物は、そんな場面で記憶を呼び起こすフックになるはずです。

手帳を開けば、高松で買ったことを思い出す。高松で買ったことを思い出せば、あのときの自分が、未来の自分に向けて仕掛けを施したことも思い出す。そして、あの言葉が蘇ります。

「2026年の俺は、旅先で新しいものを買ったぞ?」

毎年の手帳購入を、単なる義務的な更新作業で終わらせない。過去の自分が、未来の自分を動かすための仕組みを作っておく。手帳という、日常的に使う道具だからこそ、この仕掛けには意味があります。

おわりに

筆者は今回、翌年分のほぼ日手帳を買いました。ただ、それだけではありません。

未来の自分に向けて、挑戦状を残しました。来年、手帳を更新するとき。半年後、新しい冊子を開くとき。あるいは、何も書けずに机の前で固まっているとき。

そこには、高松で手帳を買った自分がいます。

「2026年の俺は、旅先で新しいものを買ったぞ?」

さて、未来の筆者は、この問いにどう答えるのでしょうか。

Linuxカーネルの脆弱性 CVE-2026-98432 続報:nftablesによる暫定緩和策と永続化

概要

先日、Linuxカーネルの脆弱性「CVE-2026-98432」について、原因と暫定対策を記事にしました。

その後、2026年10月30日付で、Red HatおよびCIQからnftablesを利用した緩和策が公開されました。

今回の脆弱性は、IPv4 TCP接続の処理中に解放済みメモリへアクセスするUse-After-Free(UAF)に起因するものです。

攻撃者がIPv4オプションを含むTCPパケットを送信することで、問題のある処理経路に到達する可能性があります。

そこで、IPv4オプション付きTCPパケットをカーネルのTCP処理に到達する前に破棄するというのが、今回の緩和策です。

参考資料:

CIQの資料では、MPTCPを無効化した状態でも通常のTCP通信から脆弱な処理経路に到達できることが確認されています。そのため、MPTCPの無効化だけに頼らず、nftablesによる通信制御を追加することにしました。

今回は、実際に運用しているサーバに暫定ルールを追加し、systemdによる永続化の設定まで行った記録です。

環境

  • OS:Ubuntu 24.04 LTS
  • Webサーバ:Apache
  • ファイアウォール:UFW
  • IPアドレス制御:ipset
  • 不正アクセス対策:fail2ban
  • iptables:v1.8.10(nf_tables)
  • 作業日:2026年10月31日

筆者環境では、UFWとipsetを組み合わせたアクセス制御を行っています。

今回の作業前に、nftablesのルールセットを確認しました。

sudo nft list ruleset | wc -l

結果は、

6089

6,089行。

この時点で、今回の作業方針はほぼ決まりました。既存のファイアウォールには、できる限り手を加えないことです。

実際、iptablesのバージョンを確認すると、

sudo iptables -V
iptables v1.8.10 (nf_tables)

となっていました。また、nftablesのテーブル一覧は以下のとおりです。

sudo nft list tables
table ip6 filter
table ip filter
table ip nat
table ip6 nat
table ip raw
table inet f2b-table

UFWなどがiptables-nftを通じて管理しているテーブルに加え、fail2ban用の独立したテーブルも存在しています。

今回の緩和策は、これらとは別に専用テーブルを作成する方針としました。

フェイズゼロ:政治交渉

以前の記事でも触れましたが、システムの保守作業には技術的な準備だけでなく、作業時間の確保や関係者との調整が必要です。

今回も例外ではありません。

ただし、今回の作業では、もう一つ交渉相手がいました。

自分自身です。

既に稼働しているファイアウォールの設定を変更するのは、できれば避けたい作業です。

しかも、SSHで接続しているサーバのネットワーク制御を変更するとなれば、設定を間違えた瞬間に自分自身を締め出す可能性があります。

そこで、今回の作業では以下を徹底しました。

  • 既存のUFW・ipset・fail2banの設定は変更しない。
  • nftablesにCVE対策専用のテーブルを作成する。
  • 変更前のルールセットを保存する。
  • シリアルコンソールを確保する。
  • 問題が発生した場合は、専用テーブルだけを削除する。

特に重要なのが、シリアルコンソールです。

SSH接続を失った場合でも、ネットワーク経由ではない復旧手段を確保してから作業に入りました。

退路を確保してから前進する。

今回は、これが最も重要な準備でした。

さっくりとした手順

  1. 作業ディレクトリへ移動 cd /home/hoge/work/cve-2026-98432

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

  1. 既存ルールセットをバックアップ sudo nft -a list ruleset > nftables-before-cve-2026-98432.txt
  2. テーブル一覧をバックアップ sudo nft list tables > nftables-tables-before.txt
  3. 既存のCVE対策用テーブルを確認 sudo nft list table inet cve_2026_98432
  4. 暫定ルールの設定ファイルを作成 nano cve-2026-98432.nft
  5. 構文チェック sudo nft --check --file cve-2026-98432.nft
  6. 暫定ルールを適用 sudo nft --file cve-2026-98432.nft
  7. 適用結果を確認 sudo nft -a list table inet cve_2026_98432
  8. 永続化用の設定ファイルを作成 sudo nano /etc/nftables/cve-2026-98432.nft
  9. systemdユニットを作成 sudo nano /etc/systemd/system/cve-2026-98432-nft.service
  10. 永続化用設定の構文チェック sudo nft --check --file /etc/nftables/cve-2026-98432.nft
  11. systemdユニットの検証 sudo systemd-analyze verify /etc/systemd/system/cve-2026-98432-nft.service
  12. systemdの設定を再読み込み sudo systemctl daemon-reload
  13. 自動起動を有効化 sudo systemctl enable cve-2026-98432-nft.service
  14. 自動起動の登録状態を確認 systemctl is-enabled cve-2026-98432-nft.service
  15. 既存の防御機構を確認 sudo ufw statussudo ipset list -namesudo fail2ban-client status

作業詳細

1. 既存のルールセットをバックアップ

まずは、作業ディレクトリを用意しました。

今回の作業ディレクトリは以下です。任意のディレクトリを指定してください。

cd /home/hoge/work/cve-2026-98432

現在のルールセットを保存します。

sudo nft -a list ruleset > nftables-before-cve-2026-98432.txt

続いて、行数を確認しました。

wc -l nftables-before-cve-2026-98432.txt
6089 nftables-before-cve-2026-98432.txt

既存の6,089行を保存できています。

次に、テーブル一覧も保存します。

sudo nft list tables > nftables-tables-before.txt

ファイルの状態は以下でした。

nftables-before-cve-2026-98432.txt  239547 bytes
nftables-tables-before.txt              94 bytes

これで、変更前の状態を記録できました。なお、これらのファイルは復旧時の参照用です。

iptables-nftで管理されているテーブルも含まれるため、バックアップ全体を無条件に読み戻すことはしません。

2. nftablesの専用テーブルを作成

まず、同名のテーブルが存在しないことを確認します。

sudo nft list table inet cve_2026_98432

続いて、作業ディレクトリに設定ファイルを作成しました。

nano cve-2026-98432.nft

内容は以下です。

table inet cve_2026_98432 {
    chain prerouting {
        type filter hook prerouting priority -300; policy accept;
        ip hdrlength > 5 meta l4proto tcp counter drop
    }
}

それぞれの意味は以下のとおりです。

  • table inet cve_2026_98432:今回のCVE対策専用テーブル
  • hook prerouting:受信パケットの早い段階で評価
  • priority -300:raw優先度
  • ip hdrlength > 5:IPv4ヘッダーが通常の20バイトを超えるパケットを対象
  • meta l4proto tcp:TCP通信を対象
  • counter drop:該当パケットをカウントして破棄

ここで重要なのは、IPv4のIPオプションとTCPオプションは異なるという点です。

今回のルールは、TCPタイムスタンプなどの一般的なTCPオプションを一律に遮断するものではありません。

一方、IPv4オプションを使用する正当なTCP通信は遮断されるため、適用先の通信要件を考慮する必要があります。

3. 構文チェック

設定ファイルを保存したら、構文チェックを実施します。

sudo nft --check --file cve-2026-98432.nft

エラーは表示されませんでした。終了ステータスも確認します。

echo $?
0

構文チェック成功です。この段階では、まだ通信制御は変更されていません。

4. シリアルコンソールを確保

実際に適用する前に、vpsのシリアルコンソールへ接続しました。

今回の作業で最も避けたいのは、SSH接続を失ってサーバへアクセスできなくなることです。

現在のUFWでは、以下のポートを許可しています。

80/tcp
443/tcp
22/tcp

今回のnftablesルールはポート番号による判定ではないため、これらのポートにも条件が一致すれば適用されます。

そのため、SSHセッションを維持したまま作業し、必要になればシリアルコンソールから切り戻せるようにしました。

5. 暫定ルールを適用

準備ができたところで、設定を適用します。その前に:深く深呼吸を3回ぐらいしましょう。ここから先、タイポ、コマンド忘れ、全てが致命的になり得ます。

sudo nft --file cve-2026-98432.nft

エラーは表示されませんでした。続いて、適用結果を確認します。

sudo nft -a list table inet cve_2026_98432

結果は以下です。

table inet cve_2026_98432 { # handle 10
        chain prerouting { # handle 1
                type filter hook prerouting priority raw; policy accept;
                ip hdrlength > 5 meta l4proto tcp counter packets 0 bytes 0 drop # handle 2
        }
}

設定ファイルではpriority -300と指定しましたが、表示上はpriority rawとなっています。これはnftablesが数値を定義済みの優先度名で表示しているためです。

また、

counter packets 0 bytes 0

となっています。この時点では、遮断条件に一致したパケットはありませんでした。

6. Webサイトの動作確認

適用後、自サイトへアクセスし、記事の登録まで行いました。

HTTPSによるアクセス、ログイン状態の維持、記事の登録と保存が正常に行えています。

単純なHTTP応答だけでなく、普段利用しているWebアプリケーションの操作が継続できることを確認しました。

少なくとも、今回確認した範囲ではWebサイトの利用に支障は発生していません。

永続化

1. 永続化用の設定ファイルを作成

暫定ルールの動作を確認できたため、再起動後にも読み込めるようにします。ただし、既存のUFWやipsetを管理している仕組みには手を加えません。

今回は、CVE対策専用の設定ファイルとsystemdユニットを作成しました。

sudo mkdir -p /etc/nftables
sudo nano /etc/nftables/cve-2026-98432.nft

内容は以下です。

add table inet cve_2026_98432
delete table inet cve_2026_98432

table inet cve_2026_98432 {
    chain prerouting {
        type filter hook prerouting priority -300; policy accept;
        ip hdrlength > 5 meta l4proto tcp counter drop
    }
}

冒頭の、

add table inet cve_2026_98432
delete table inet cve_2026_98432

は、既存の専用テーブルが存在する場合でも、同じ名前のテーブルを作り直せるようにするためのものです。

削除対象はcve_2026_98432テーブルに限定しています。

UFWやfail2banのテーブルには触れません。

2. systemdユニットを作成

続いて、専用のsystemdユニットを作成します。

sudo nano /etc/systemd/system/cve-2026-98432-nft.service

内容は以下です。

[Unit]
Description=Temporary nftables mitigation for CVE-2026-98432
Wants=network-pre.target
Before=network-pre.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/nft -f /etc/nftables/cve-2026-98432.nft
ExecStop=-/usr/sbin/nft delete table inet cve_2026_98432

[Install]
WantedBy=multi-user.target

このユニットでは、起動時に専用のnftables設定ファイルを読み込みます。停止時には、今回追加したテーブルだけを削除します。

RemainAfterExit=yesを指定しているため、ルールの読み込みが完了した後もsystemd上ではサービスを有効な状態として扱います。

3. 設定ファイルの構文チェック

まず、nftables設定ファイルを検証します。

sudo nft --check --file /etc/nftables/cve-2026-98432.nft

終了ステータスを確認しました。

echo $?
0

正常終了です。

続いて、systemdユニットも検証します。

sudo systemd-analyze verify /etc/systemd/system/cve-2026-98432-nft.service

4. systemdに登録

ユニット定義を再読み込みします。この作業の前に、もう4回ほど深呼吸をして、飲み物を何か飲みましょう。お茶菓子などがあれば更に最高です。

システムをいじる作業は全て自分の指先に全責任が伴います。

sudo systemctl daemon-reload

続いて、自動起動を有効化します。

sudo systemctl enable cve-2026-98432-nft.service

ここでは--nowを付けませんでした。

既に手動で適用したルールが動作しているため、現時点で専用テーブルを作り直す必要がないからです。

最後に、自動起動の登録状態を確認します。

systemctl is-enabled cve-2026-98432-nft.service

結果は、

enabled

となりました。

これで、systemdによる自動起動の登録まで完了です。

なお、再起動後に実際にルールが復元されるかは、まだ確認していません。

既存の防御機構を確認

今回の作業で最も気になっていたのは、既存のUFW・ipset・fail2banへの影響です。

設定ファイルを作成し、自動起動を登録した後、改めて状態を確認しました。

1. nftables

sudo nft list table inet cve_2026_98432
table inet cve_2026_98432 {
        chain prerouting {
                type filter hook prerouting priority raw; policy accept;
                ip hdrlength > 5 meta l4proto tcp counter packets 0 bytes 0 drop
        }
}

専用テーブルは維持されています。

2. UFW

sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
22/tcp                  ALLOW       Anywhere

UFWはアクティブのままです。

既存の許可ポートにも変更はありません。

3. ipset

sudo ipset list -name
ufw-blocklist

既存のipsetが存在していることを確認できました。

4. fail2ban

sudo fail2ban-client status
Status
|- Number of jail:      2
`- Jail list:   sshd, ufw

fail2banも、既存の2つのjailを維持しています。

これらの確認から、少なくともサービスの状態と設定の一覧については、作業前の構成が維持されていることを確認できました。

切り戻し

今回の暫定ルールに問題が発生した場合は、専用テーブルを削除します。

一時的にルールを撤去する場合

sudo nft delete table inet cve_2026_98432

この操作で、今回追加したテーブルとチェーンを削除できます。

ただし、systemdの自動起動設定は残るため、次回起動時には再び読み込まれます。

永続化設定も撤去する場合

まず、自動起動を無効化します。

sudo systemctl disable cve-2026-98432-nft.service

続いて、専用テーブルを削除します。

sudo nft delete table inet cve_2026_98432

systemdユニットを削除します。

sudo rm /etc/systemd/system/cve-2026-98432-nft.service

nftables設定ファイルも削除します。

sudo rm /etc/nftables/cve-2026-98432.nft

最後に、systemdの設定を再読み込みします。

sudo systemctl daemon-reload

今回追加した設定だけを撤去するため、既存のUFW・ipset・fail2banの設定はそのまま維持できます。

今後の確認事項

今回の作業では、以下まで完了しています。

  • 既存ルールセットのバックアップ
  • シリアルコンソールによる復旧経路の確保
  • nftables専用テーブルの追加
  • 設定ファイルの構文チェック
  • Webサイトの動作確認
  • systemdユニットの作成
  • 自動起動の有効化
  • UFW・ipset・fail2banの状態確認

残っているのは、再起動後の動作確認です。

次回の再起動後には、以下を確認します。

systemctl is-active cve-2026-98432-nft.service
sudo nft list table inet cve_2026_98432

activeと表示されるだけでなく、実際に専用テーブルが存在していることを確認します。

また、今回のルールはIPv4オプション付きTCPパケットを遮断する暫定措置です。

CIQが公開した検証結果はRocky Linux系の環境を対象としており、筆者環境のUbuntu 24.04 LTSで同等の攻撃パケットを用いた遮断試験までは実施していません。

そのため、今回確認できたのはルールの登録と通常通信の継続までです。

修正済みカーネルが提供された段階で更新を行い、不要になった暫定ルールを撤去する予定です。

おわりに

今回の作業で、最も神経を使ったのはnftablesの設定そのものではありません。

既に稼働している防御機構を壊さずに、新しい防御を追加することでした。

筆者環境では、UFW・ipset・fail2banを組み合わせてアクセス制御を行っています。その結果、nftablesのルールセットは6,089行に達していました。

そこへ緊急の脆弱性対策を追加するのですから、作業を始める前から気が重くなるのも無理はありません。

そこで、今回は既存のルールセットを編集せず、専用テーブルを追加する方式を採用しました。

さらに、シリアルコンソールを確保し、問題が発生した場合には今回追加したテーブルだけを削除できるようにしています。

結果として、既存のUFW・ipset・fail2banの設定を変更することなく、暫定緩和策の導入と永続化の登録まで進められました。

今回の作業で改めて感じたのは、システムの保守とは、何かを変更する技術だけでなく、変更しなくてよいものを見極める判断でもあるということです。

脆弱性を塞ごうとして、既存の防御機構を壊してしまっては意味がありません。

そして、その判断を支えるのがバックアップであり、切り戻し手順であり、シリアルコンソールという最後の退路です。

作業を終えた後の感想を一言で表すなら、

「心臓に悪い作業だった」

でしょうか。

とはいえ、これで修正済みカーネルが提供されるまでの間、攻撃経路を減らすための対策を一つ追加できました。

今後もカーネルの修正状況を確認しながら、必要な対応を続けていきます。

Page 1 of 310

次

Powered by WordPress & Theme by Anders Norén