<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Raspberry Pi (Linux) on リタイア放浪記</title>
    <link>https://retiredlog.pages.dev/categories/raspberry-pi-linux/</link>
    <description>Recent content in Raspberry Pi (Linux) on リタイア放浪記</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Fri, 05 Jun 2026 07:00:00 +0900</lastBuildDate>
    <atom:link href="https://retiredlog.pages.dev/categories/raspberry-pi-linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>DKIMおよびDMARC導入</title>
      <link>https://retiredlog.pages.dev/posts/2026-06-05-0700/</link>
      <pubDate>Fri, 05 Jun 2026 07:00:00 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-06-05-0700/</guid>
      <description>&lt;p&gt;これまで長らくSPFのみでメールサーバーを運用してきたが、最近になってYahooメールなど一部のメールサービスで到達性に不安を感じる場面が増えてきた。&lt;br&gt;&#xA;そこで、送信ドメイン認証を強化するため、DKIMおよびDMARCを追加導入することにした。&lt;/p&gt;&#xA;&lt;p&gt;これにより、SPF・DKIM・DMARCの主要なメール認証方式が揃い、なりすまし対策やメールの信頼性向上が期待できる。&lt;/p&gt;&#xA;&lt;p&gt;以下、その導入手順を備忘録としてまとめておく。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;必要なパッケージのインストール&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;まず、OpenDKIM本体と鍵生成ツールをインストールします。&lt;/p&gt;&#xA;&lt;p&gt;sudo apt update&lt;br&gt;&#xA;sudo apt install opendkim opendkim-tools&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;OpenDKIMの設定&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;/etc/opendkim.conf の編集&lt;br&gt;&#xA;設定ファイルを開き、以下の項目を変更または追記します。&lt;br&gt;&#xA;今回は確実でパーミッション問題の起きない TCPソケット（ポート8891） でSendmailと通信させます。&lt;/p&gt;&#xA;&lt;p&gt;● ログ出力の設定&lt;br&gt;&#xA;Syslog                  yes&lt;br&gt;&#xA;SyslogSuccess           yes&lt;/p&gt;&#xA;&lt;p&gt;● 動作モード（s = 署名、v = 検証）&lt;br&gt;&#xA;Mode                    sv&lt;/p&gt;&#xA;&lt;p&gt;● 鍵やドメインのマッピング設定&lt;br&gt;&#xA;KeyTable                /etc/opendkim/KeyTable&lt;br&gt;&#xA;SigningTable            refile:/etc/opendkim/SigningTable&lt;br&gt;&#xA;ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts&lt;br&gt;&#xA;InternalHosts           refile:/etc/opendkim/TrustedHosts&lt;/p&gt;&#xA;&lt;p&gt;● Sendmailと通信するためのTCPソケット設定&lt;br&gt;&#xA;Socket                  inet:8891@localhost&lt;/p&gt;&#xA;&lt;p&gt;関連ファイルの作成&lt;/p&gt;&#xA;&lt;p&gt;設定用のディレクトリを作成。&lt;/p&gt;&#xA;&lt;p&gt;sudo mkdir -p /etc/opendkim/keys&lt;/p&gt;&#xA;&lt;p&gt;① /etc/opendkim/TrustedHosts の作成&lt;/p&gt;&#xA;&lt;p&gt;信頼する送信元（自分自身）を指定。&lt;/p&gt;&#xA;&lt;p&gt;127.0.0.1&lt;br&gt;&#xA;localhost&lt;br&gt;&#xA;::1&lt;br&gt;&#xA;sky.0t0.jp&lt;/p&gt;&#xA;&lt;p&gt;② /etc/opendkim/KeyTable の作成&lt;/p&gt;&#xA;&lt;p&gt;使用する鍵のセレクタ名（今回は dkim260605）と、ドメイン、秘密鍵のパスを紐付け。&lt;/p&gt;&#xA;&lt;p&gt;dkim260605._domainkey.sky.0t0.jp sky.0t0.jp:dkim260605:/etc/opendkim/keys/sky.0t0.jp/dkim260605.private&lt;/p&gt;</description>
    </item>
    <item>
      <title>ハニーポット切り替え合理化</title>
      <link>https://retiredlog.pages.dev/posts/2026-05-06-0900/</link>
      <pubDate>Wed, 06 May 2026 09:00:00 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-05-06-0900/</guid>
      <description>&lt;p&gt;海外からのアクセスは、その大半が攻撃やスキャンであるため、ハニーポットへ振り分けるという方針を基本としている。&lt;br&gt;&#xA;これまで、主要サーチエンジン以外の海外アクセスについては、下記のように別ホストへ転送していた。&lt;/p&gt;&#xA;&lt;p&gt;●これまでの振り分けイメージ&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Internet&#xD;&#xA;   |&#xD;&#xA;   v&#xD;&#xA;+----------------------------+&#xD;&#xA;|        Router              |&#xD;&#xA;|     iptables / NAT         |&#xD;&#xA;+----------------------------+&#xD;&#xA;   |                      |&#xD;&#xA;   |                      |&#xD;&#xA; Normal                 Suspicious&#xD;&#xA; / Allowed              / Unknown&#xD;&#xA;   |                      |&#xD;&#xA;   v                      v&#xD;&#xA;+----------------+   +----------------+&#xD;&#xA;| 192.168.1.1    |   | 192.168.1.2    |&#xD;&#xA;| Main Server    |   | Honeypot       |&#xD;&#xA;+----------------+   +----------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;従来は、Web以外のプロトコルも含めて転送可能とするため、ハニーポットを別ホストとして分離していた。&lt;br&gt;&#xA;しかし最近では、対象をWebアクセスのみに限定しているため、この構成を見直した。&lt;br&gt;&#xA;その結果、別ホストを維持するメリットが薄れたため、Apacheのリッスンポートを追加し、単一ホスト上のバーチャルホスト構成でハニーポットを実現する方式へ変更した。&lt;/p&gt;&#xA;&lt;p&gt;●新しい振り分けイメージ&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Internet&#xD;&#xA;   |&#xD;&#xA;   v&#xD;&#xA;+----------------------------+&#xD;&#xA;|        Router              |&#xD;&#xA;|     iptables / NAT         |&#xD;&#xA;+----------------------------+&#xD;&#xA;   |                      |&#xD;&#xA;   |                      |&#xD;&#xA; Normal                 Suspicious&#xD;&#xA; / Allowed              / Unknown&#xD;&#xA;   |                      |&#xD;&#xA;   v                      v&#xD;&#xA;+----------------+   +----------------+&#xD;&#xA;| 192.168.1.1:80 |   |192.168.1.1:9080|&#xD;&#xA;| 192.168.1.1:443|   |192.168.1.1:9443|&#xD;&#xA;| Main Server    |   | Honeypot       |&#xD;&#xA;+----------------+   +----------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;この構成により、物理・仮想ホストの分離を廃しつつ、ポート単位で役割を分離するシンプルな設計となる。&lt;br&gt;&#xA;また、ログ管理や証明書運用も一元化できるため、運用負荷の低減にも寄与する。&lt;/p&gt;</description>
    </item>
    <item>
      <title>正規サイトとハニーポット切り替え詳細</title>
      <link>https://retiredlog.pages.dev/posts/2026-04-10-0600/</link>
      <pubDate>Fri, 10 Apr 2026 06:00:00 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-04-10-0600/</guid>
      <description>&lt;p&gt;4月2日より、「&lt;a href=&#34;https://sky.0t0.jp/retiredlog/posts/2026-04-02-1600/&#34;&gt;深淵 迎賓館 仕様変更&lt;/a&gt;」、「&lt;a href=&#34;https://sky.0t0.jp/retiredlog/posts/2026-04-04-0600/&#34;&gt;シュレディンガーのサーバー&lt;/a&gt;」&lt;br&gt;&#xA;の内容にてサーバー公開を行っているが、その後 iptables の改良を重ね、構成がほぼFIXしたため、その内容を覚書として記す。&lt;/p&gt;&#xA;&lt;p&gt;●本構成の振り分けイメージ&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Internet&#xD;&#xA;   |&#xD;&#xA;   v&#xD;&#xA;+----------------------------+&#xD;&#xA;|        Router              |&#xD;&#xA;|     iptables / NAT         |&#xD;&#xA;+----------------------------+&#xD;&#xA;   |                      |&#xD;&#xA;   |                      |&#xD;&#xA; Normal                 Suspicious&#xD;&#xA; / Allowed              / Unknown&#xD;&#xA;   |                      |&#xD;&#xA;   v                      v&#xD;&#xA;+----------------+   +----------------+&#xD;&#xA;| 192.168.1.1    |   | 192.168.1.2    |&#xD;&#xA;| Main Server    |   | Honeypot       |&#xD;&#xA;+----------------+   +----------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上記の振り分けを、PREROUTINGチェインに集約した。&lt;br&gt;&#xA;現在はPREROUTINGを確認するだけで、流入トラフィックの性質がほぼ把握できる状態となっている。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)&#xA;num   pkts bytes target     prot opt in     out     source               destination         &#xA;1       44  2492 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set firehol_level3 src to:192.168.1.2:25&#xA;2        0     0 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set firehol_level2 src to:192.168.1.2:25&#xA;3        5   228 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set firehol_level1 src to:192.168.1.2:25&#xA;4        2   120 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set gcloud src to:192.168.1.2:25&#xA;5        0     0 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set other_block src to:192.168.1.2:25&#xA;6      126  6626 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set firehol_level3 src to:192.168.1.2:80&#xA;7       50  2592 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set firehol_level2 src to:192.168.1.2:80&#xA;8       12   580 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set firehol_level1 src to:192.168.1.2:80&#xA;9        2   100 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set gcloud src to:192.168.1.2:80&#xA;10       0     0 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set other_block src to:192.168.1.2:80&#xA;11     255 13436 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set firehol_level3 src to:192.168.1.2:443&#xA;12      15   784 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set firehol_level2 src to:192.168.1.2:443&#xA;13      17   920 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set firehol_level1 src to:192.168.1.2:443&#xA;14       4   200 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set gcloud src to:192.168.1.2:443&#xA;15       0     0 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set other_block src to:192.168.1.2:443&#xA;16      13   760 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:ssh match-set jpnet src to:192.168.1.1:22&#xA;17       1    60 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set jpnet src to:192.168.1.1:25&#xA;18       0     0 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp match-set searchengines src to:192.168.1.1:25&#xA;19       1    40 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set jpnet src to:192.168.1.1:80&#xA;20       3   180 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http match-set searchengines src to:192.168.1.1:80&#xA;21      16   988 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set jpnet src to:192.168.1.1:443&#xA;22     176  9872 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https match-set searchengines src to:192.168.1.1:443&#xA;23       0     0 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:submission match-set jpnet src to:192.168.1.1:587&#xA;24       1    60 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:imaps match-set jpnet src to:192.168.1.1:993&#xA;25       7   356 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:smtp to:192.168.1.2:25&#xA;26     150  7602 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:http to:192.168.1.2:80&#xA;27     305 18288 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:https to:192.168.1.2:443&#xA;28       8   480 DNAT       tcp  --  ppp0   any     anywhere             anywhere             tcp dpt:2222 match-set jpnet src to:192.168.1.2:22&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;・firehol_level1～3 : FireHOLで公開されているブラックリストIPからのアクセスを Honeypot（192.168.1.2）へ振り分け&lt;br&gt;&#xA;・jpnet : 日本国内からのアクセスを Main Server（192.168.1.1）へ振り分け&lt;br&gt;&#xA;・searchengines : 主要サーチエンジンからのアクセスを Main Server（192.168.1.1）へ振り分け&lt;br&gt;&#xA;・gcloud : スパムアクセスの多い Google Cloud からのアクセスを Honeypot（192.168.1.2）へ振り分け&lt;br&gt;&#xA;・other_block : その他、不審と判断したアクセス（主に国内）を Honeypot（192.168.1.2）へ振り分け&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugoへ移行しての所感</title>
      <link>https://retiredlog.pages.dev/posts/2026-02-01-0600/</link>
      <pubDate>Sun, 01 Feb 2026 06:03:57 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-02-01-0600/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://sky.0t0.jp/&#34;&gt;当サイト&lt;/a&gt;のブログを&lt;a href=&#34;https://retiredlog.pages.dev/posts/hugo-migration/&#34;&gt;Hugoへ移行&lt;/a&gt;して10日ほど経過し、テーマも最終の形態に落ち着いてきた。&lt;br&gt;&#xA;サイトの使い勝手や見た目もblogn時代と比べ無駄を排除した上でかなり向上した。&lt;br&gt;&#xA;特にphpの処理が無いため、記事数の多い&lt;a href=&#34;https://sky.0t0.jp/weblog/&#34;&gt;weblog&lt;/a&gt;でも瞬時に表示される。&lt;br&gt;&#xA;以前、&lt;a href=&#34;https://sky.0t0.jp/weblog/&#34;&gt;weblog&lt;/a&gt;を記事数2935で公開していた時は、表示されるまでに2秒近くかかっていた。&lt;/p&gt;&#xA;&lt;p&gt;もう一点、運用面で大きいのは精神的な負担が減ったことだ。&lt;br&gt;&#xA;phpやDB、CMSの脆弱性を気にする必要がなく、壊れないものを淡々と置いておく感覚に近い。&lt;br&gt;&#xA;個人ブログとしては、これが一番のメリットかもしれない。&lt;/p&gt;&#xA;&lt;p&gt;また、Raspberry Pi上での運用という点でも、Hugoの相性は非常に良い。&lt;br&gt;&#xA;ビルドは別環境で行い、サーバー側は単なる静的ファイル置き場として振る舞うだけなので、CPU負荷やメモリ使用量をほとんど気にしなくて済む。&lt;/p&gt;&#xA;&lt;p&gt;Hugoへ移行して気になる点といえば、やはり投稿時の手間と、サーバー側ディスクの負担増である。&lt;br&gt;&#xA;記事一点を追加する度にブログ全体をビルドして全ファイル差し替えとなるため、例えば本ブログ（retiredlog）の場合、下記ディスク占有容量である5.3Mバイト以上の書き換えが必要となる。&lt;br&gt;&#xA;これは、記事数が増えればそれに伴い増加していく。&lt;/p&gt;&#xA;&lt;p&gt;・&lt;a href=&#34;https://sky.0t0.jp/retiredlog/&#34;&gt;retiredlog&lt;/a&gt;&lt;br&gt;&#xA;記事数 88&lt;br&gt;&#xA;pagefind 1.3Mバイト&lt;br&gt;&#xA;ディスク占有容量 5.3Mバイト&lt;/p&gt;&#xA;&lt;p&gt;もっとも、ディスク容量については記事数が数千規模になっても数百MB程度で収まる見込みであり、現実的には大きな問題にはならないだろう。&lt;br&gt;&#xA;むしろ速度と単純さを優先した結果として、納得して受け入れている。&lt;/p&gt;&#xA;&lt;p&gt;なお、写真やファイルについては、転送容量とディスク書き込み負担軽減のため、毎回全ファイルを転送する訳ではなく、サーバー側で別途ファイル専用ディレクトリーを用意して、下記(files)のようにシンボリックリンクを張っている。&lt;/p&gt;&#xA;&lt;p&gt;/mnt/data/sky/retiredlog&lt;br&gt;&#xA;合計 352&lt;br&gt;&#xA;drwxr-xr-x 11 pi pi   4096  1月 29 06:51 .&lt;br&gt;&#xA;drwxr-xr-x 14 pi pi   4096  1月 26 20:03 ..&lt;br&gt;&#xA;-rw-r&amp;ndash;r&amp;ndash;  1 pi pi   8863  1月 31 15:23 404.html&lt;br&gt;&#xA;-rw-r&amp;ndash;r&amp;ndash;  1 pi pi    111  1月 18 07:19 apple-touch-icon.png&lt;br&gt;&#xA;drwxr-xr-x  2 pi pi   4096  1月 20 20:22 archives&lt;br&gt;&#xA;drwxr-xr-x  8 pi pi   4096  1月 18 07:49 categories&lt;br&gt;&#xA;drwxr-xr-x  2 pi pi   4096  1月 24 07:35 css&lt;br&gt;&#xA;-rw-r&amp;ndash;r&amp;ndash;  1 pi pi  16958 10月 11 15:24 favicon.ico&lt;br&gt;&#xA;lrwxrwxrwx  1 pi pi     41  1月 26 13:18 files -&amp;gt; /mnt/data/sky/blog_data/retiredlog/files/&lt;br&gt;&#xA;drwxr-xr-x  2 pi pi   4096  1月 18 07:49 img&lt;br&gt;&#xA;-rw-r&amp;ndash;r&amp;ndash;  1 pi pi  44360  1月 31 15:23 index.html&lt;br&gt;&#xA;-rw-r&amp;ndash;r&amp;ndash;  1 pi pi 213825  1月 31 15:23 index.xml&lt;br&gt;&#xA;drwxr-xr-x  2 pi pi   4096  1月 18 07:49 js&lt;br&gt;&#xA;drwxr-xr-x 20 pi pi   4096  1月 30 13:38 page&lt;br&gt;&#xA;drwxr-xr-x  4 pi pi   4096  1月 31 14:38 pagefind&lt;br&gt;&#xA;drwxr-xr-x 89 pi pi   4096  1月 30 14:59 posts&lt;br&gt;&#xA;-rw-r&amp;ndash;r&amp;ndash;  1 pi pi  12890  1月 31 15:23 sitemap.xml&lt;br&gt;&#xA;drwxr-xr-x  3 pi pi   4096  1月 24 07:35 tags&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugoテーマ Mainroad 改善</title>
      <link>https://retiredlog.pages.dev/posts/mainroad-setup-260125/</link>
      <pubDate>Sun, 25 Jan 2026 13:18:47 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/mainroad-setup-260125/</guid>
      <description>&lt;p&gt;今日は朝から冷え込んで、路面にはうっすらと雪が積もっている。&lt;br&gt;&#xA;こんな日は外に出ず、暖かい部屋でゆっくり過ごすに限る。&lt;/p&gt;&#xA;&lt;p&gt;暇な日曜日の時間つぶしとして、このブログのHugoテーマ「Mainroad」の改善に着手した。&lt;br&gt;&#xA;デザインは気に入っているが、一点だけ不便を感じていた「個別記事ページでの前後ナビゲーション」を追加することにする。&lt;/p&gt;&#xA;&lt;p&gt;以下、自分用の備忘録を兼ねたカスタマイズ手順だ。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;個別記事に「過去記事・未来記事」ボタンを追加&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Mainroadの layouts/_default/single.html を編集し、記事のヘッダー部分にナビゲーションを配置した。&lt;br&gt;&#xA;blogn時代のように、記事の冒頭で前後の流れを確認できるようにしている。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;nav class=&amp;#34;post-nav flex&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ &lt;span style=&#34;color:#ae81ff&#34;&gt;with .PrevInSection }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;div class=&amp;#34;post-nav__item post-nav__item--prev&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;a class=&amp;#34;post-nav__link&amp;#34; href=&amp;#34;{{ .RelPermalink }}&amp;#34; rel=&amp;#34;prev&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;span class=&amp;#34;post-nav__caption&amp;#34;&amp;gt;≪&amp;amp;nbsp;過去の記事&amp;lt;/span&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;p class=&amp;#34;post-nav__post-title&amp;#34;&amp;gt;{{ .Title }}&amp;lt;/p&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ &lt;span style=&#34;color:#ae81ff&#34;&gt;end }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ &lt;span style=&#34;color:#ae81ff&#34;&gt;with .NextInSection }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;div class=&amp;#34;post-nav__item post-nav__item--next&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;a class=&amp;#34;post-nav__link&amp;#34; href=&amp;#34;{{ .RelPermalink }}&amp;#34; rel=&amp;#34;next&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;span class=&amp;#34;post-nav__caption&amp;#34;&amp;gt;新しい記事&amp;amp;nbsp;≫&amp;lt;/span&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;p class=&amp;#34;post-nav__post-title&amp;#34;&amp;gt;{{ .Title }}&amp;lt;/p&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ &lt;span style=&#34;color:#ae81ff&#34;&gt;end }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;メタ情報の整理（日付とカテゴリー）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;境界線が二重にならないよう、テーマ標準の post_meta.html を活かしつつ、hugo.toml で表示を制御。&lt;br&gt;&#xA;これで日付とカテゴリーがスッキリ一行に収まった。&lt;/p&gt;&#xA;&lt;p&gt;[Params]&lt;br&gt;&#xA;post_meta = [&amp;ldquo;date&amp;rdquo;, &amp;ldquo;categories&amp;rdquo;]&lt;/p&gt;</description>
    </item>
    <item>
      <title>トップページへ戻るボタン追加</title>
      <link>https://retiredlog.pages.dev/posts/mainroad-setup-260124/</link>
      <pubDate>Sat, 24 Jan 2026 06:57:10 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/mainroad-setup-260124/</guid>
      <description>&lt;p&gt;早起きは暇の元(笑)&lt;br&gt;&#xA;土日は相変わらず暇だし・・・ということで、またhugoネタ。&lt;/p&gt;&#xA;&lt;p&gt;分割ビューやアーカイブリストなど、順次下の方を閲覧したところでトップページに戻る場合、上にスクロールしてサイトタイトルをクリックする必要があった。&lt;br&gt;&#xA;これはかなり不便なので、フッターに「トップページへ戻る」ボタン追加。&lt;/p&gt;&#xA;&lt;p&gt;下記はその忘備録。&lt;br&gt;&#xA;1). layouts\partials\footer.html&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;footer class=&amp;#34;footer&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;div class=&amp;#34;container footer__container flex&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;{{ &lt;span style=&#34;color:#ae81ff&#34;&gt;partial &amp;#34;footer_links.html&amp;#34; . }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;div class=&amp;#34;footer__copyright&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;amp;copy;&lt;/span&gt; {{ &lt;span style=&#34;color:#ae81ff&#34;&gt;now.Format &amp;#34;2006&amp;#34; }} {{ .Site.Params.copyright | default .Site.Title }}.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;span class=&amp;#34;footer__copyright-credits&amp;#34;&amp;gt;{{ T &amp;#34;footer_credits&amp;#34; | safeHTML }}&amp;lt;/span&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* 以下を追加 */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;div class=&amp;#34;footer-home-nav&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;a href=&amp;#34;/&amp;#34; class=&amp;#34;home-button&amp;#34;&amp;gt;トップページへ戻る&amp;lt;/a&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2). static\css\custom.css&lt;/p&gt;&#xA;&lt;p&gt;以下を末尾に追加&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* ===== Home Button Style ===== */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.footer-home-nav {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;text-align&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;center;      /* 中央寄せ */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;margin&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5px 0 5px;     /* 上下に余白をとる */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0px;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.home-button {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;inline-block !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#333 !important; /* ボタンの色（白ベースなら赤 #e22d30 もおすすめ） */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#ffffff !important;         /* 文字色（白） */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10px 20px !important;    /* 押しやすいように大きめに */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;text-decoration&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;none !important;  /* 下線を消す */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50px !important;    /* 角を丸くしてボタンらしく */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;font-weight&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;bold !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;font-size&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1rem !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;box-shadow&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4px 6px rgba(0,0,0,0.2); /* 少し浮かせて「押せる感」を出す */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;transition&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;transform 0.2s, background-color 0.2s;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.home-button:hover {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#7aa2ff !important; /* ホバー時は青系に */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;transform&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;translateY(-2px);           /* 軽く浮き上がる演出 */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#ffffff !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mainroad ダークモードセットアップ</title>
      <link>https://retiredlog.pages.dev/posts/hugo-dark-mode-260122/</link>
      <pubDate>Thu, 22 Jan 2026 16:48:53 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/hugo-dark-mode-260122/</guid>
      <description>&lt;p&gt;以前、blognでブログを運用していた頃も、最終的には背景がブラックのダークモードで落ち着いていた。&lt;br&gt;&#xA;Hugo + Mainroad に移行後はホワイトベースがデフォルトだったが、やはり自分にはダーク系の方がしっくりくる。&lt;/p&gt;&#xA;&lt;p&gt;今日は株取引の日でもあるのだが、相場を眺めていると、たまに阿保らしくなってくる（笑）&lt;/p&gt;&#xA;&lt;p&gt;そこで今日は、相場チェックはそこそこにして、AIに相談しながら Mainroad のダークモード化をセットアップしてみた。&lt;/p&gt;&#xA;&lt;p&gt;変更点は custom.css のみ。&lt;br&gt;&#xA;テーマ本体には一切手を入れていない。&lt;/p&gt;&#xA;&lt;p&gt;下記はその具体内容&lt;/p&gt;&#xA;&lt;p&gt;● サイトをダーク系配色にする場合の custom.css 追記分&lt;br&gt;&#xA;/static/css/custom.css&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* ===== Mainroad Dark Base ===== */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;html, body, .container, .wrapper, .main, .sidebar, .post, .widget {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#202020 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#d6d6d6 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* サイトタイトル・本文 */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.logo a, p, li {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#d6d6d6 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* 見出し */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;h1, h2, h3, h4, h5, h6 {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#e6e6e6 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* リンク */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;a {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#7aa2ff !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;a:hover {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#a5c0ff !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* ウィジェットタイトル下のライン：少し暗くして馴染ませる */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.widget__title {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border-bottom&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2px solid #444 !important; /*&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#cccから変更 */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* コードブロック：背景を少しだけ明るくして認識しやすくする */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;pre, code {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#2b2b2b !important; /* 全体背景より少し明るいグレー */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#e6e6e6 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2em 0.4em;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3px;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* ===== Header &amp;amp; Titles ===== */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.header, .header * {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#ADDFB3 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.header svg {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;fill&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;currentColor;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.post__title, .post__title a {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#90D7EC !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* ===== Search Widget (Final Optimized) ===== */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* 1. 検索フォーム全体の枠組み */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.widget-search__form {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;flex !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#202020 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;align-items&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;stretch !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;none !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* 2. 入力欄（テキストボックス） */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.widget-search__field {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;flex-grow&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; !&lt;span style=&#34;color:#ae81ff&#34;&gt;important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#2b2b2b !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#d6d6d6 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1px solid&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#444 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;4px 0 0 4px !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10px !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;outline&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;none;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* プレースホルダー（Search...の文字） */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.widget-search__field::placeholder {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#888 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* 3. 検索ボタン */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.widget-search__submit {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;flex !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;align-items&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;center !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;justify-content&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;center !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;width&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;60px !important;       /* 幅をスリムに固定 */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;min-width&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;40px !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; !&lt;span style=&#34;color:#ae81ff&#34;&gt;important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;flex-shrink&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; !&lt;span style=&#34;color:#ae81ff&#34;&gt;important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#444 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;fill&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#ffffff !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#ffffff !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;none !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4px 4px 0 !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;margin-left&lt;/span&gt;: -&lt;span style=&#34;color:#ae81ff&#34;&gt;1px !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;cursor&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;pointer;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;transition&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;background-color 0.2s;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;/* 4. マウスを乗せた時の反応 */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.widget-search__submit:hover {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#75715e&#34;&gt;#7aa2ff !important;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>hugo &#43; Mainroad でのブログ再構築内容（覚え書き）</title>
      <link>https://retiredlog.pages.dev/posts/hugo-setup-260121/</link>
      <pubDate>Wed, 21 Jan 2026 07:31:48 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/hugo-setup-260121/</guid>
      <description>&lt;p&gt;Raspberry Pi 上のサーバーで処理するには重すぎるなど制約が多いため、Windows 版 Hugo を使用し、Windows 上でビルドする方法を採用した。&lt;/p&gt;&#xA;&lt;p&gt;Hugo の静的サイトでは、記事を 1 件追加するたびにサイト全体をビルドし、サーバーへ同期コピーする必要がある。&lt;br&gt;&#xA;一見手間に思えるが、リソースの限られた Raspberry Pi を前提とすれば、合理的な運用方法だと思われる。&lt;/p&gt;&#xA;&lt;p&gt;ただし、記事の追加がやや面倒になるため、更新頻度は自然と下がるはず。&lt;br&gt;&#xA;もっとも、つぶやきのような無駄な投稿が減ると考えれば、それはそれで良いのかもしれない（笑）。&lt;/p&gt;&#xA;&lt;p&gt;以下、覚え書き。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Windows版　hugo&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gohugoio/hugo/releases/hugo_extended_0.154.5_windows-amd64.zip&#34;&gt;https://github.com/gohugoio/hugo/releases/hugo_extended_0.154.5_windows-amd64.zip&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;テーマ Mainbord&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Linux機で下記&lt;br&gt;&#xA;git clone &lt;a href=&#34;https://github.com/Vimux/Mainroad.git&#34;&gt;https://github.com/Vimux/Mainroad.git&lt;/a&gt; ./mainroad&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;hugoサイト 追加ファイル&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;① layouts\partials\post_meta.html&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;$root := . -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;with .Param &amp;#34;post_meta&amp;#34; -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;range $field := . -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;$p := printf &amp;#34;post_meta/%s.html&amp;#34; $field -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;partial $p $root -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;end -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;end -}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ &lt;span style=&#34;color:#ae81ff&#34;&gt;with .Date }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;time datetime=&amp;#34;{{ .Format &amp;#34;2006-01-02&amp;#34; }}&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ &lt;span style=&#34;color:#ae81ff&#34;&gt;.Format &amp;#34;2006-01-02&amp;#34; }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ &lt;span style=&#34;color:#ae81ff&#34;&gt;end }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;② アーカイブリスト表示関連&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugoへの移行記録</title>
      <link>https://retiredlog.pages.dev/posts/hugo-migration/</link>
      <pubDate>Sun, 18 Jan 2026 07:54:09 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/hugo-migration/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;移行のきっかけ&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;長年使ってきた PHPスクリプトであるBlogn+ がOSのアップデートと共に動作しなくなってしまった・・・&lt;/p&gt;&#xA;&lt;p&gt;PHP8に対応したブログスクリプトなども検討したが、今後の手間やセキュリティー向上のためPHPは削除し、流行りの「静的サイトジェネレーター（Hugo）」を選択。&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;苦闘したポイント&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;テーマ選び: 最初はAnankeを試したが、記事リストが出ず苦戦。最終的にアーカイブ機能に強い「Mainroad」へ。&lt;/p&gt;&#xA;&lt;p&gt;hugo.tomlの呪文: Hugoのバージョンアップによる仕様変更や、サイドバーが表示されない「Warning」との戦い。&lt;/p&gt;&#xA;&lt;p&gt;画像表示の壁: サブディレクトリ運用（/retiredlog/）特有のパス問題や、Markdown内の生HTMLを表示するための unsafe = true 設定など、一つずつパズルを解くような作業だった。&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Hugo移行後のメリット&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;圧倒的な速さ: ラズパイ 2Bとは思えないほどページが瞬時に開く。&lt;/p&gt;&#xA;&lt;p&gt;メンテナンスフリー: PHPもDBも不要なので、ハッキングの心配やアップデートの不安がゼロに。&lt;/p&gt;&#xA;&lt;p&gt;運用スタイル: Windows側でビルドしてラズパイへ転送。大きな画像はラズパイ側で直接管理して効率化。&lt;/p&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;結び&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;記事を一件追加するごとにビルドが必要な「不便さ」はあるが、それ以上に「一生壊れない安心感」を手に入れた。&lt;/p&gt;&#xA;&lt;p&gt;記事数が3000近い、更新停止した「海辺の放浪記」についても移植していこうと思う。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PPPoEマルチセッションとRaspberry Piの役割整理</title>
      <link>https://retiredlog.pages.dev/posts/2026-01-12-095548/</link>
      <pubDate>Mon, 12 Jan 2026 09:55:48 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-01-12-095548/</guid>
      <description>&lt;p&gt;― 余ったB+を「使わない」という選択 ―&lt;/p&gt;&#xA;&lt;p&gt;祭日で相場も動かず暇なので、現在の自宅ネットワーク構成を整理しておく。&lt;/p&gt;&#xA;&lt;p&gt;昨日まで、B+のサブルーター配下に攻撃やスキャンのLOGを集めるサーバーを置いてたけど、あほらしくなって廃止した(笑)&lt;br&gt;&#xA;その関係で機器の役割を整理。&lt;/p&gt;&#xA;&lt;p&gt;■ PPPoEマルチセッションの意義&lt;/p&gt;&#xA;&lt;p&gt;PPPoEマルチセッションは、目的がはっきりしている場合にのみ意味がある。&lt;/p&gt;&#xA;&lt;p&gt;・回線の論理分離&lt;br&gt;&#xA;・実験・検証用トラフィックの隔離&lt;br&gt;&#xA;・監視や観測時の挙動切り分け&lt;/p&gt;&#xA;&lt;p&gt;単に「2セッション張れるから張る」では無意味だが、静かに分離するという思想には非常に相性が良い。&lt;/p&gt;&#xA;&lt;p&gt;■ サブルーターとしてのRaspberry Pi B+&lt;/p&gt;&#xA;&lt;p&gt;昨日まで、サブルーターには Raspberry Pi B+ を使用していた。&lt;/p&gt;&#xA;&lt;p&gt;・上下とも実効22Mbps程度&lt;br&gt;&#xA;・PPPoEマルチセッション配下&lt;/p&gt;&#xA;&lt;p&gt;性能的には低いが、普段の用途では体感的な不足はない。&lt;/p&gt;&#xA;&lt;p&gt;■ Pi2Bは「余剰」ではなく「予備」&lt;/p&gt;&#xA;&lt;p&gt;一方、Pi2Bは LIVA-Z ルーターの完全な予備機として、&lt;/p&gt;&#xA;&lt;p&gt;・等価設定&lt;br&gt;&#xA;・定期メンテナンスのみ&lt;br&gt;&#xA;・通常は電源OFF&lt;/p&gt;&#xA;&lt;p&gt;という状態で維持していた。&lt;br&gt;&#xA;このPi2Bは、出番が無い＝価値が無いではない。&lt;br&gt;&#xA;むしろ、出番が無い状態を維持できている → 主系が安定している証拠である。&lt;/p&gt;&#xA;&lt;p&gt;■ ではサブルーターはPi2Bの方が合理的では？&lt;/p&gt;&#xA;&lt;p&gt;結論としては YES。&lt;/p&gt;&#xA;&lt;p&gt;・サブルーターをPi2Bに変更&lt;br&gt;&#xA;・B+は2台余る&lt;/p&gt;&#xA;&lt;p&gt;という構成の方が、全体として無駄が少ない。&lt;/p&gt;&#xA;&lt;p&gt;理由は単純で、&lt;/p&gt;&#xA;&lt;p&gt;・サブルーターは「忘れていられる方が良い」&lt;br&gt;&#xA;・Pi2Bの方がかなり余裕があり、100MbpsのVDSLサービス下ではボトルネックにならない。&lt;br&gt;&#xA;・消費電力はB+と同等（軽負荷時2W程度）&lt;br&gt;&#xA;・B+は予備や実験機として割り切れる&lt;/p&gt;&#xA;&lt;p&gt;というわけで、今日からPi2Bの予備ルーターをB+のサブルーターと置き換え、メンテしながら継続使用することにした。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/IMG_20260112_095412.jpg&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/IMG_20260112_095412.jpg&#34; width=&#34;180&#34; height=&#34;240&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;■ 余ったB+をどうするか&lt;/p&gt;&#xA;&lt;p&gt;答えは拍子抜けするほど単純。&lt;/p&gt;&#xA;&lt;p&gt;・何もしない&lt;br&gt;&#xA;・電源を入れない&lt;br&gt;&#xA;・役割を与えない&lt;br&gt;&#xA;・ノイズを増やさない&lt;/p&gt;&#xA;&lt;p&gt;1台は非常用の保険、もう1台は実験用、あるいは完全放置。&lt;br&gt;&#xA;「余ったから使う」という発想は、設計を劣化させる原因になる。&lt;/p&gt;&#xA;&lt;p&gt;■LIVA-Z（主系）とPi2B（サブ系）での役割の分離&lt;/p&gt;&#xA;&lt;p&gt;主系のWebサーバー等をWAN側からチェックする様な場合や、単に気分転換に、クライアントからDOSコマンドでルーターやDNSサーバーを切り替えて使用。&lt;br&gt;&#xA;あるいは、主系ルーターのアップデート時に主系をpoffして、デフォルトルートにサブ系ルーターを充ててアップデート。&lt;/p&gt;&#xA;&lt;p&gt;■ サブルーターのもう一つの役割&lt;/p&gt;&#xA;&lt;p&gt;―「一般ユーザー」を装った自己アクセス―&lt;/p&gt;&#xA;&lt;p&gt;実はサブルーターには、もう一つ明確な用途がある。&lt;br&gt;&#xA;それは、メインサイトに実アクセスが無い状態でも、一般ユーザーと同じ経路・条件で自分自身がアクセスすることである。&lt;/p&gt;&#xA;&lt;p&gt;■ なぜ自分でアクセスするのか&lt;/p&gt;</description>
    </item>
    <item>
      <title>静かなるインフラと、出番のない予備機</title>
      <link>https://retiredlog.pages.dev/posts/2026-01-07-051131/</link>
      <pubDate>Wed, 07 Jan 2026 05:11:31 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-01-07-051131/</guid>
      <description>&lt;p&gt;ルーターとして運用している LIVA-Z の傍らに、予備機として Raspberry Pi 2B を据えている。&lt;br&gt;&#xA;設定も済ませ、いつでも切り替えられる状態だ。&lt;/p&gt;&#xA;&lt;p&gt;しかし、ふと思う。&lt;br&gt;&#xA;「この予備機に、本当に出番は来るのだろうか？」 そもそも、これを用意した意味はあったのか。&lt;br&gt;&#xA;そう考えて LIVA-Z の構成と運用状況を冷静に見つめ直すと、疑問の矛先は意外な方向へと向かっていった。&lt;/p&gt;&#xA;&lt;p&gt;●LIVA-Z の寿命感：現実的な見積もり&lt;/p&gt;&#xA;&lt;p&gt;小型PCを長期間運用するうえで、「結局、何年もつのか？」という問いは避けて通れない。&lt;br&gt;&#xA;感情や期待値を排し、スペックと用途から冷静に寿命を見積もると、LIVA-Z は驚くほど長生きしやすい条件を満たしている。&lt;/p&gt;&#xA;&lt;p&gt;ファンレス構造： 可動部ゼロ。&lt;br&gt;&#xA;物理故障のリスクが極めて低い。&lt;/p&gt;&#xA;&lt;p&gt;低TDP（Atom / Celeron系）： 熱ストレスが小さく、基板へのダメージが蓄積しにくい。&lt;/p&gt;&#xA;&lt;p&gt;用途（ルーター／軽サーバー）： CPUもメモリも酷使せず、常に低負荷。&lt;/p&gt;&#xA;&lt;p&gt;この条件なら、10年超えは余裕で射程圏内、15年生存も決して珍しくない。&lt;/p&gt;&#xA;&lt;p&gt;実際、産業用PCや店舗用端末、組み込みLinux機といった「壊れないこと」を最優先に設計された同系統のハードウェアは、15?20年と稼働し続ける例がザラにある。&lt;/p&gt;&#xA;&lt;p&gt;●本当の「故障ポイント」はどこか&lt;/p&gt;&#xA;&lt;p&gt;もし LIVA-Z が先に死ぬとしたら、その原因は本体ではない可能性が高い。&lt;/p&gt;&#xA;&lt;p&gt;電源周り： ACアダプタの劣化やDCジャックの接触不良。&lt;/p&gt;&#xA;&lt;p&gt;ストレージ： eMMCの寿命（ただし、リードオンリー + OverlayFsでの運用なので負荷は極小）。&lt;/p&gt;&#xA;&lt;p&gt;電解コンデンサ： 低発熱環境下では劣化が非常に遅い。&lt;/p&gt;&#xA;&lt;p&gt;結論として、「本体より先に、外付け要素が逝く」のが現実的なシナリオだ。&lt;/p&gt;&#xA;&lt;p&gt;●「何年もつか？」への正直な答え&lt;/p&gt;&#xA;&lt;p&gt;今の低負荷（ほぼアイドル状態）での運用を前提とするなら、予測はこうなる。&lt;/p&gt;&#xA;&lt;p&gt;あと5年： 余裕。&lt;/p&gt;&#xA;&lt;p&gt;あと10年： 普通にあり得る。&lt;/p&gt;&#xA;&lt;p&gt;あと15年： 条件次第だが否定できない。&lt;/p&gt;&#xA;&lt;p&gt;しかし、ここでより重要な事実が浮かび上がる。&lt;/p&gt;&#xA;&lt;p&gt;●先に来るのは「故障」ではない&lt;/p&gt;&#xA;&lt;p&gt;多くの場合、ハードウェアの物理的な限界よりも先に訪れるのはこれだ。&lt;/p&gt;&#xA;&lt;p&gt;「ハードが壊れる」よりも「興味が完全に消える」方が圧倒的に早い。&lt;/p&gt;&#xA;&lt;p&gt;技術的な好奇心が他へ移るか、ネットワーク環境の規格そのものが変わるか。&lt;br&gt;&#xA;そのスピードに比べれば、LIVA-Z の物理寿命はあまりに長い。&lt;/p&gt;&#xA;&lt;p&gt;●完成されたインフラの皮肉&lt;/p&gt;&#xA;&lt;p&gt;現状を整理すると、皮肉なほどに美しい構図が見えてくる。&lt;/p&gt;&#xA;&lt;p&gt;LIVA-Z： 沈黙を守り続ける、本命の主役。&lt;/p&gt;&#xA;&lt;p&gt;Pi 2B： 出番を待ち続ける予備役（おそらく、永遠に呼ばれない）。&lt;/p&gt;&#xA;&lt;p&gt;この「予備機に出番がない」という状態こそ、インフラとしては理想的だ。&lt;br&gt;&#xA;正常運転が続いている何よりの証拠なのだから。&lt;/p&gt;&#xA;&lt;p&gt;●結論：Pi 2B という「お守り」の価値&lt;/p&gt;</description>
    </item>
    <item>
      <title>無駄が無駄を呼ぶ</title>
      <link>https://retiredlog.pages.dev/posts/2026-01-03-162840/</link>
      <pubDate>Sat, 03 Jan 2026 16:28:40 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-01-03-162840/</guid>
      <description>&lt;p&gt;暇だから、シングルコアのラズパイB＋をPPPoEマルチセッションでルーターにして、クライアントPCからスループットを測定した。&lt;br&gt;&#xA;100Mbpsのサービスではボトルネックにはなるが、十分使えるレベル。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/speed_gw1.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/speed_gw1.png&#34; width=&#34;320&#34; height=&#34;171&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;クライアントからこのルーターにデフォルトルートを切り替えて使う意味は無いので、配下にDNATで攻撃LOG収集用のサーバーでもぶら下げるかな・・・それにしても暇だな(笑)&lt;/p&gt;&#xA;&lt;p&gt;自宅ネットワークの入り口が二つになったが、意味あるのか？(笑)&lt;/p&gt;&#xA;&lt;p&gt;一応VPNサーバーも載せてる。&lt;br&gt;&#xA;firehol level1～3のipsetも問題なく載せられた。&lt;br&gt;&#xA;Pi2Bと比べると、起動時間はかなり長い。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/gw1_view.jpg&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/gw1_view.jpg&#34; width=&#34;180&#34; height=&#34;240&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;午後も暇だから攻撃収集用サーバーを組むか(笑)&lt;/p&gt;&#xA;&lt;p&gt;B+がもう一台余っており、今後使うことはないんで、無駄な攻撃収集用サーバーとして無駄に活用するか・・・ これぞ、無駄が無駄を呼ぶ典型パターン(笑)&lt;/p&gt;&#xA;&lt;p&gt;というわけで、正規サーバーのSDカードをベースにB+で攻撃収集用サーバーをセットアップした・・・&lt;br&gt;&#xA;それにしても暇な一日であった(笑)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/pacific2.jpg&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/pacific2.jpg&#34; width=&#34;180&#34; height=&#34;240&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;正規サーバーは国内限定にしており、殆どアクセスが無くつまらないんで、暇に任せて用意した・・・&lt;br&gt;&#xA;このようなスキャンや、その他攻撃を眺めるのが趣味なのか？(笑)&lt;/p&gt;&#xA;&lt;p&gt;163.5.148.15 - - [03/Jan/2026:14:52:11 +0900] &amp;ldquo;GET /workspace/drupal/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1&amp;rdquo; 404 497 &amp;ldquo;-&amp;rdquo; &amp;ldquo;libredtail-http&amp;rdquo;&lt;br&gt;&#xA;163.5.148.15 - - [03/Jan/2026:14:52:12 +0900] &amp;ldquo;GET /panel/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1&amp;rdquo; 404 497 &amp;ldquo;-&amp;rdquo; &amp;ldquo;libredtail-http&amp;rdquo;&lt;br&gt;&#xA;163.5.148.15 - - [03/Jan/2026:14:52:12 +0900] &amp;ldquo;GET /public/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1&amp;rdquo; 404 497 &amp;ldquo;-&amp;rdquo; &amp;ldquo;libredtail-http&amp;rdquo;&lt;br&gt;&#xA;163.5.148.15 - - [03/Jan/2026:14:52:13 +0900] &amp;ldquo;GET /apps/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1&amp;rdquo; 404 497 &amp;ldquo;-&amp;rdquo; &amp;ldquo;libredtail-http&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;別室のデスクの下にあるスペースに、メインサーバーと並べて配置。&lt;br&gt;&#xA;無駄が無駄を呼ぶ構成の完成(笑)&lt;br&gt;&#xA;メインサーバーは冷却効率を上げるためにアルミ板の上に置いてあるのが面白い。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/twin.jpg&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/twin.jpg&#34; width=&#34;320&#34; height=&#34;177&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Predictable namingを無効化するメモ</title>
      <link>https://retiredlog.pages.dev/posts/2026-01-02-135706/</link>
      <pubDate>Fri, 02 Jan 2026 13:57:06 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-01-02-135706/</guid>
      <description>&lt;p&gt;ヘッドレスでラズパイのSDカードを使いまわす場合、Predictable Network Interface Namesの命名ルールが邪魔になるので、無効化する。&lt;/p&gt;&#xA;&lt;p&gt;① predictable naming を無効化&lt;/p&gt;&#xA;&lt;p&gt;sudo nano /boot/cmdline.txt&lt;/p&gt;&#xA;&lt;p&gt;1行の末尾に追記（改行しない）：&lt;/p&gt;&#xA;&lt;p&gt;net.ifnames=0 biosdevname=0&lt;/p&gt;&#xA;&lt;p&gt;② オンボードLANを eth0 に固定する udev ルール作成（必須ではない）&lt;/p&gt;&#xA;&lt;p&gt;sudo nano /etc/udev/rules.d/70-onboard-eth.rules&lt;/p&gt;&#xA;&lt;p&gt;中身（Pi 2 / 3 / B+ 共通）&lt;/p&gt;&#xA;&lt;p&gt;SUBSYSTEM==&amp;ldquo;net&amp;rdquo;, ACTION==&amp;ldquo;add&amp;rdquo;, DRIVERS==&amp;ldquo;smsc95xx&amp;rdquo;, NAME=&amp;ldquo;eth0&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;③ /etc/network/interfacesを編集&lt;/p&gt;&#xA;&lt;p&gt;オンボードNICのデバイス名をeth0に変更&lt;/p&gt;&#xA;&lt;p&gt;④ SDカード移植後、machine-id を再生成&lt;/p&gt;&#xA;&lt;p&gt;rm -f /etc/machine-id&lt;br&gt;&#xA;systemd-machine-id-setup&lt;/p&gt;&#xA;&lt;p&gt;●machine-idを直接生成して書き込む場合&lt;/p&gt;&#xA;&lt;p&gt;・例として、別システムの /mnt/media/ にシステムディスクをマウントして書き込む場合&lt;br&gt;&#xA;cat /proc/sys/kernel/random/uuid | tr -d &amp;lsquo;-&amp;rsquo; | sudo tee /mnt/media/etc/machine-id&lt;/p&gt;&#xA;&lt;p&gt;⑤ まとめ（実務視点）&lt;/p&gt;&#xA;&lt;p&gt;・/etc が書ければ今回の作業は全部できる&lt;br&gt;&#xA;・/boot は初回だけ&lt;br&gt;&#xA;・SD 移植後は /etc だけ触れば復旧可能&lt;br&gt;&#xA;・ヘッドレス運用でも詰まない&lt;/p&gt;</description>
    </item>
    <item>
      <title>LIVA-Z故障後を見据えたルーター代替検討</title>
      <link>https://retiredlog.pages.dev/posts/2026-01-01-093423/</link>
      <pubDate>Thu, 01 Jan 2026 09:34:23 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2026-01-01-093423/</guid>
      <description>&lt;p&gt;2016年4月頃からは、本サーバーのみならずルーターもRaspberry Pi 2B（以下 Pi2B）で運用していたが、偶然見つけたNICが二式実装されている小型PC、LIVA-Zを衝動買い(笑)&lt;br&gt;&#xA;2020年10月に、LIVA-Z をルーターとして入れ替えで導入し、すでに5年以上が経過している。&lt;/p&gt;&#xA;&lt;p&gt;overlayfs を使ってシステムディスクを読み取り専用化しているため、ストレージ寿命の不安は小さいが、一般的にこの手の小型PCは電源周りが先に逝くことが多い。&lt;/p&gt;&#xA;&lt;p&gt;負荷が低い用途なので、トータルで10年程度は持ちそうではあるものの、「いつかは壊れる」という前提で、次の置き換え候補を考えておくのは無駄ではない。&lt;/p&gt;&#xA;&lt;p&gt;現状は&lt;a href=&#34;https://sky.0t0.jp/docs/router_article.html&#34; target=&#34;_blank&#34;&gt;Raspberry Pi によるWi-Fi AP付 PPPoEルーターの構成&lt;/a&gt;にある記事の構成となっているが、暇な年末年始の時間を使い、現在LIVA-Z で運用しているルーター構成をほぼそのまま移植してみた。&lt;/p&gt;&#xA;&lt;p&gt;●移植した構成&lt;/p&gt;&#xA;&lt;p&gt;・iptables / ipset を用いたフィルタリング&lt;br&gt;&#xA;・各種スクリプト類（更新・定期処理含む）&lt;br&gt;&#xA;・常時稼働前提の最低限構成&lt;/p&gt;&#xA;&lt;p&gt;LIVA-Z 側と極力差が出ないようにし、「置き換えたらどうなるか」をそのまま再現する形にしている。&lt;/p&gt;&#xA;&lt;p&gt;●処理能力の差は明確&lt;/p&gt;&#xA;&lt;p&gt;まず感じたのは、純粋な処理能力の差。&lt;/p&gt;&#xA;&lt;p&gt;特に、&lt;/p&gt;&#xA;&lt;p&gt;・ipset のアップデート所要時間&lt;br&gt;&#xA;・大量ルールを一気に適用する場面&lt;/p&gt;&#xA;&lt;p&gt;では、LIVA-Z の方が明らかに速い。&lt;/p&gt;&#xA;&lt;p&gt;この点については ARM SoC の Pi2B が劣るのは当然で、性能面では割り切りが必要になる。&lt;/p&gt;&#xA;&lt;p&gt;●それでも問題にならない理由&lt;/p&gt;&#xA;&lt;p&gt;一方で、実運用において重要な スループット に関しては、結果は意外だった。&lt;/p&gt;&#xA;&lt;p&gt;100Mbps クラスのサービス環境下では、Pi2B でも LIVA-Z と体感上ほとんど差がない&lt;/p&gt;&#xA;&lt;p&gt;回線速度がボトルネックになる以上、ルーター側のCPU パワーは余剰になりがちだ。&lt;br&gt;&#xA;USB NIC を追加した Pi2B でも、スループット面で不満を感じる場面はなかった。&lt;/p&gt;&#xA;&lt;p&gt;●Pi2Bを代替候補として見る理由&lt;/p&gt;&#xA;&lt;p&gt;Pi2B をあらためて「LIVA-Z の代替」として見ると、以下の点が大きい。&lt;/p&gt;&#xA;&lt;p&gt;・低コスト&lt;/p&gt;&#xA;&lt;p&gt;本体も周辺部品も安価で、壊れても精神的ダメージが少ない。&lt;/p&gt;&#xA;&lt;p&gt;・構造がシンプル&lt;/p&gt;&#xA;&lt;p&gt;電解コンデンサレスのボード構成で、経年劣化要因が少ない。&lt;/p&gt;&#xA;&lt;p&gt;・バックアップと復旧が容易&lt;/p&gt;&#xA;&lt;p&gt;SDカードを丸ごとバックアップしておけば、故障時も即リカバリ可能。&lt;/p&gt;&#xA;&lt;p&gt;この 復旧性の高さ は、小型PCにはない安心感がある。&lt;/p&gt;&#xA;&lt;p&gt;結論：LIVA-Zが止まったら、素直にPiで行く&lt;/p&gt;&#xA;&lt;p&gt;処理能力では LIVA-Z に及ばないものの、100Mbps 環境でのルーター用途に限れば Pi2B でも十分現実的だという結論になった。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi2Bが10年連続稼働</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-31-081159/</link>
      <pubDate>Wed, 31 Dec 2025 08:11:59 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-31-081159/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://sky.0t0.jp/docs/pacific.html&#34; target=&#34;_blank&#34;&gt;2016年1月から常時稼働している Raspberry Pi 2 Model Bで構成したサーバー&lt;/a&gt;、以後一度も停止させることなく 現在に至る。&lt;/p&gt;&#xA;&lt;p&gt;気がつけば、早くも 連続稼働10年。&lt;br&gt;&#xA;しかも本体だけでなく、電源アダプタ（Chicony W12-010N3A）も同一個体のままだ。&lt;/p&gt;&#xA;&lt;p&gt;ラズパイは「安価な実験用ボード」というイメージが強いが、この実機の稼働実績を見る限り、少なくとも Pi2B はその枠を大きく超えている。&lt;/p&gt;&#xA;&lt;p&gt;では、なぜここまでもっているのか。&lt;br&gt;&#xA;改めて条件を整理してみる。&lt;/p&gt;&#xA;&lt;p&gt;●電解コンデンサレスという設計&lt;/p&gt;&#xA;&lt;p&gt;Pi2B のボード上には、いわゆる寿命部品である 電解コンデンサが存在しない。&lt;/p&gt;&#xA;&lt;p&gt;・液漏れ&lt;br&gt;&#xA;・容量抜け&lt;br&gt;&#xA;・経年劣化&lt;/p&gt;&#xA;&lt;p&gt;といった、時間で確実に進行する要素がない。&lt;br&gt;&#xA;これは長期稼働において決定的に大きい。&lt;/p&gt;&#xA;&lt;p&gt;ボード故障の多くは電源周りから始まるが、その最大要因がそもそも存在しない設計というのは強い。&lt;/p&gt;&#xA;&lt;p&gt;●発熱が少なく、温度サイクルが穏やか&lt;/p&gt;&#xA;&lt;p&gt;Pi2B（Cortex-A7 ×4）は性能こそ控えめだが、&lt;/p&gt;&#xA;&lt;p&gt;・常時フルクロック&lt;br&gt;&#xA;・サーマルスロットリングなし&lt;br&gt;&#xA;・ファンレスでも温度が安定&lt;/p&gt;&#xA;&lt;p&gt;という特性を持つ。&lt;/p&gt;&#xA;&lt;p&gt;結果として、&lt;/p&gt;&#xA;&lt;p&gt;・急激な温度変化がない&lt;br&gt;&#xA;・半導体へのストレスが小さい&lt;/p&gt;&#xA;&lt;p&gt;「性能を削ってでも安定を取った」 世代と言える。&lt;/p&gt;&#xA;&lt;p&gt;●連続稼働という“優しい使い方”&lt;/p&gt;&#xA;&lt;p&gt;電源の ON / OFF を繰り返さないことも大きい。&lt;br&gt;&#xA;電子機器にとって最も負担がかかるのは、&lt;/p&gt;&#xA;&lt;p&gt;・電源投入時&lt;br&gt;&#xA;・温度が一気に変化する瞬間&lt;/p&gt;&#xA;&lt;p&gt;この Pi2B は、&lt;/p&gt;&#xA;&lt;p&gt;・落とさない&lt;br&gt;&#xA;・再起動しない&lt;br&gt;&#xA;・常に同じ環境（空調のない部屋なので、それなりの温度変化はある）で動き続けている&lt;/p&gt;&#xA;&lt;p&gt;という、機器にとって理想的な条件に置かれている。&lt;/p&gt;&#xA;&lt;p&gt;●負荷をかけない用途&lt;/p&gt;&#xA;&lt;p&gt;用途は軽量なサーバーで、&lt;/p&gt;&#xA;&lt;p&gt;・CPU負荷は低い&lt;br&gt;&#xA;・I/Oも控えめ&lt;br&gt;&#xA;・書き込みは最小限（システムディスクは読み取り専用）&lt;/p&gt;&#xA;&lt;p&gt;無理をさせていない。&lt;br&gt;&#xA;これは「10年持たせる」運用としては正解だったと思う。&lt;/p&gt;&#xA;&lt;p&gt;●電源品質がすべてを左右する&lt;/p&gt;&#xA;&lt;p&gt;意外に思われるかもしれないが、10年無事に動いている最大の要因は電源かもしれない。&lt;/p&gt;&#xA;&lt;p&gt;・定格に余裕のあるACアダプタ&lt;br&gt;&#xA;・発熱しない配置&lt;br&gt;&#xA;・抜き差しをほとんどしない&lt;/p&gt;&#xA;&lt;p&gt;電源が安定している限り、Pi2B 本体は驚くほど粘る。&lt;/p&gt;&#xA;&lt;p&gt;●現時点での結論&lt;/p&gt;&#xA;&lt;p&gt;・Pi2B 本体：異常なし&lt;br&gt;&#xA;・電源：10年経過でも兆候なし&lt;br&gt;&#xA;・SDカード：消耗品だが交換可能&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webサーバーアクセス制限を更に強化</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-19-054841/</link>
      <pubDate>Fri, 19 Dec 2025 05:48:41 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-19-054841/</guid>
      <description>&lt;p&gt;これまで、googlebotを許可するためにAS15169を許可していた。&lt;/p&gt;&#xA;&lt;h1 id=&#34;googlebot-as15169&#34;&gt;Googlebot (AS15169)&lt;/h1&gt;&#xA;&lt;p&gt;echo &amp;ldquo;? - Fetching Googlebot ranges (AS15169)&amp;hellip;&amp;rdquo;&lt;/p&gt;&#xA;&lt;h1 id=&#34;whoisの出力を直接一時ファイルにリダイレクト&#34;&gt;whoisの出力を直接一時ファイルにリダイレクト&lt;/h1&gt;&#xA;&lt;p&gt;timeout 60 whois -h whois.radb.net -- &amp;lsquo;-i origin AS15169&amp;rsquo; &lt;br&gt;&#xA;| grep -Eo &amp;lsquo;([0-9]{1,3}.){3}[0-9]{1,3}/[0-9]+&amp;rsquo; &amp;raquo; &amp;ldquo;$TMP_IPLIST&amp;rdquo; || true&lt;/p&gt;&#xA;&lt;p&gt;これだと、下記のようにbc.googleusercontent.comからのスキャンを通してしまう・・・&lt;/p&gt;&#xA;&lt;p&gt;162.15.169.34.bc.googleusercontent.com - - [18/Dec/2025:16:27:32 +0900] &amp;ldquo;GET //wp-includes/wlwmanifest.xml HTTP/1.1&amp;rdquo; 404 501 &amp;ldquo;-&amp;rdquo; &amp;ldquo;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36&amp;rdquo;&lt;br&gt;&#xA;162.15.169.34.bc.googleusercontent.com - - [18/Dec/2025:16:27:32 +0900] &amp;ldquo;GET //xmlrpc.php?rsd HTTP/1.1&amp;rdquo; 404 500 &amp;ldquo;-&amp;rdquo; &amp;ldquo;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36&amp;rdquo;&lt;br&gt;&#xA;162.15.169.34.bc.googleusercontent.com - - [18/Dec/2025:16:27:32 +0900] &amp;ldquo;GET / HTTP/1.1&amp;rdquo; 200 897 &amp;ldquo;-&amp;rdquo; &amp;ldquo;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.193 Safari/537.36&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>MyDNS×Certbot(DNS-01)でSSL証明書を全自動更新</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-17-140843/</link>
      <pubDate>Wed, 17 Dec 2025 14:08:43 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-17-140843/</guid>
      <description>&lt;p&gt;■ はじめに：なぜDNS-01認証なのか&lt;br&gt;&#xA;通常、Certbotでよく使われるのは80番ポートを利用した http-01 認証（ACMEチャレンジ）だが、本環境ではセキュリティ対策として 80番ポートおよび443番ポートへのアクセスを国内限定に絞っている。&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s Encryptの認証サーバーは海外からもアクセスしてくるため、この制限下では通常のWeb認証が通らない。&lt;br&gt;&#xA;そこで、ポート開放状況に左右されずに証明書を発行・更新できる DNS-01チャレンジ を採用した。&lt;/p&gt;&#xA;&lt;p&gt;また、ハニーポット（迷い込み用サイト）運用において、あえて正規ドメイン（sky.0t0.jp）用の証明書をハニーポット側にセットすることで、アクセス者に「ドメイン不一致の警告」を見せ、意図的に隙があるように演出している。&lt;br&gt;&#xA;この正規証明書の更新プロセスを自動化した際の記録。&lt;/p&gt;&#xA;&lt;p&gt;■ 1. 構築環境と課題&lt;br&gt;&#xA;・対象ドメイン: sky.0t0.jp, deepsky.0t0.jp&lt;/p&gt;&#xA;&lt;p&gt;・手法: Certbotの manual モード ＋ &lt;a href=&#34;https://github.com/disco&amp;#45;v8/DirectEdit/&#34; target=&#34;_blank&#34;&gt;MyDNS DirectEdit（PHPスクリプト）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;・直面した課題: certbot renew を実行すると、設定ファイル (.conf) に dns と記述していても、なぜかhttp-01 認証（Web 経由のチャレンジ）を試行してしまい、更新に失敗する。&lt;/p&gt;&#xA;&lt;p&gt;■ 2. なぜ設定ファイルの記述だけでは不十分なのか&lt;br&gt;&#xA;検証の結果、Certbotの仕様による以下の挙動が原因であることが判明した。&lt;/p&gt;&#xA;&lt;p&gt;・設定ファイルの限界: /etc/letsencrypt/renewal/xxx.conf 内に preferred_challenges = dns と書いても、コマンドライン引数で明示的に上書きしない限り http-01 認証が実行されてしまう。&lt;br&gt;&#xA;Certbot 1.12.0 では、renew 実行時に認証方式が明示されていない場合、manual 認証であっても http-01 が選択される挙動が確認された。&lt;br&gt;&#xA;renewal 設定ファイル内の preferred_challenges = dns だけでは、この挙動を抑止できないケースがある。&lt;/p&gt;&#xA;&lt;p&gt;・解決策: challenge 選択の曖昧さを回避するため、実行コマンド側に直接オプションを付与する必要がある。&lt;/p&gt;&#xA;&lt;p&gt;■ 3. 運用のポイント：certbot.timer に頼らない自動化&lt;br&gt;&#xA;certbot.timer はディストリビューション標準の ExecStart 設定で certbot renew を実行するため、&lt;br&gt;&#xA;認証方式を上書きするオプションを注入できない。&lt;br&gt;&#xA;そのため、上述した「履歴優先」の仕様によって http-01 に戻ってしまい、DNS-01認証が動かない。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webサーバーアクセス制限を再度強化</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-13-054004/</link>
      <pubDate>Sat, 13 Dec 2025 05:40:04 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-13-054004/</guid>
      <description>&lt;p&gt;しつこい嫌がらせアクセスが止まらない原因の一つは、こちらも暇に任せて相手の動きを弄んでしまったことかもしれない（笑）&lt;/p&gt;&#xA;&lt;p&gt;このままでは延々終わりそうにないので、もう無視する方針に転換。&lt;br&gt;&#xA;アクセスがほぼゼロになるのは寂しいが、なんとか我慢してDNATでのサーバー公開を 国内限定 にして放置することにした。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/iptable_jp_only.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/iptable_jp_only.png&#34; width=&#34;320&#34; height=&#34;114&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;・jpnet（国内IP）だけを 80/443 に許可&lt;br&gt;&#xA;・Google / Bing など主要検索エンジンは個別に許可&lt;br&gt;&#xA;・25 / 587 / 993（メール関連）だけ国外からも許可&lt;br&gt;&#xA;・FireHOL level1/2/3 は DROP&lt;br&gt;&#xA;・SMB / NetBIOS / port111 などは完全遮断&lt;/p&gt;&#xA;&lt;p&gt;問題は……&lt;br&gt;&#xA;「アクセス激減」をどこまで我慢できるか。&lt;br&gt;&#xA;結局は自分との闘いである（笑）&lt;/p&gt;</description>
    </item>
    <item>
      <title>FireHOL だけで完成する最小＆強固な iptables 構成</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-11-142148/</link>
      <pubDate>Thu, 11 Dec 2025 14:21:48 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-11-142148/</guid>
      <description>&lt;p&gt;今回は、FireHOL の不正アクセス判定（firehol_level1～3）を軸にした 「シンプルかつ堅牢」な iptables の実例を紹介します。&lt;/p&gt;&#xA;&lt;p&gt;最終的には、“iptables は FireHOL の結果を DROP するだけでよい”という構成に落ち着きました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/20251211142158.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/20251211142158.png&#34; width=&#34;320&#34; height=&#34;188&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;以下は最終的なルール（INPUT / FORWARD / OUTPUT）と、その解説です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;chain-inputデフォルト-drop&#34;&gt;Chain INPUT（デフォルト DROP）&lt;/h2&gt;&#xA;&lt;p&gt;1  ACCEPT   state RELATED,ESTABLISHED&lt;br&gt;&#xA;2  ACCEPT   in br0&lt;br&gt;&#xA;3  DROP     match-set firehol_level1 src&lt;br&gt;&#xA;4  DROP     match-set firehol_level2 src&lt;br&gt;&#xA;5  DROP     match-set firehol_level3 src&lt;br&gt;&#xA;6  ACCEPT   udp dpt:500&lt;br&gt;&#xA;7  ACCEPT   udp dpt:4500&lt;br&gt;&#xA;8  ACCEPT   in lo&lt;/p&gt;&#xA;&lt;p&gt;● 解説&lt;/p&gt;&#xA;&lt;p&gt;FireHOL の3段階ブロックを上から順に DROP&lt;br&gt;&#xA;軽度 → 重度 の攻撃元を自動的に分類し、自動的に遮断。&lt;/p&gt;&#xA;&lt;p&gt;LAN（br0）は信頼区画として全許可。&lt;/p&gt;&#xA;&lt;p&gt;IPsec（500/4500）と lo を明示的に許可。&lt;/p&gt;&#xA;&lt;p&gt;INPUT は “FireHOL + 必要最小限の許可” に徹しているため、無駄がない構成です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>iptables のアクセス制限を緩和</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-09-062118/</link>
      <pubDate>Tue, 09 Dec 2025 06:21:18 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-09-062118/</guid>
      <description>&lt;p&gt;先日iptablesの制限を強化したところ、公開サーバーのアクセスが極端に少なくなり、面白みに欠ける状態になったため、今回一部緩和しました。&lt;/p&gt;&#xA;&lt;p&gt;・ブログ「海辺の放浪記」の公開停止&lt;br&gt;&#xA;その代償として、20年以上続けていたブログ「海辺の放浪記」は、特定者からしつこくアクセスされ、古い記事まで大量に取得される動きがあったため、公開停止としました。&lt;/p&gt;&#xA;&lt;p&gt;「海辺の放浪記」は既に更新を停止し、当ブログに引き継いでいます。&lt;br&gt;&#xA;この公開停止には、過去をきっぱり忘れるという意味も込めています。&lt;/p&gt;&#xA;&lt;p&gt;・iptables 運用の本質は「観察」&lt;br&gt;&#xA;設定を見直していて改めて気づいたのですが、私にとってブログ等を公開するよりも、毎日ログを読むことが最も重要な目的だったのだと理解しました。&lt;/p&gt;&#xA;&lt;p&gt;今回の記事は、その “観察対象” でもある iptables の現行フィルタリングルールを、番号ごとに解説した備忘録です。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/iptable&amp;#45;251209.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/iptable&amp;#45;251209.png&#34; width=&#34;320&#34; height=&#34;199&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;・INPUT ルール解説&lt;br&gt;&#xA;既存通信 (RELATED, ESTABLISHED) の全面許可&lt;/p&gt;&#xA;&lt;p&gt;戻りパケットはすべて通す。基本中の基本。&lt;/p&gt;&#xA;&lt;p&gt;LAN（br0）からのアクセスを許可&lt;/p&gt;&#xA;&lt;p&gt;LAN 内は信頼できるため、広めに許可。&lt;/p&gt;&#xA;&lt;p&gt;FireHOL Level1?3 の悪性 IP の DROP (ルール3?5)&lt;/p&gt;&#xA;&lt;p&gt;ppp0（WAN）からのアクセスをチェックし、ブラックリストに載っている IP を即時 DROP。&lt;br&gt;&#xA;ここは今後も厳格に運用します。&lt;/p&gt;&#xA;&lt;p&gt;IPsec（UDP 500 / 4500）の許可 (ルール6?7)&lt;/p&gt;&#xA;&lt;p&gt;VPN 用。必要最低限のポートのみ開放。&lt;/p&gt;&#xA;&lt;p&gt;lo（ループバック）の許可 (ルール8)&lt;/p&gt;&#xA;&lt;p&gt;ローカルプロセス連携に必要。&lt;/p&gt;&#xA;&lt;p&gt;・FORWARD ルール解説（要点のみ）&lt;br&gt;&#xA;RELATED, ESTABLISHED の許可&lt;/p&gt;&#xA;&lt;p&gt;FireHOL IP を br0 側へ通さない (ルール2?4)&lt;/p&gt;&#xA;&lt;p&gt;Windows ファイル共有（137?139 / 445）や portmap（111）を完全ブロック (ルール5?10)&lt;/p&gt;&#xA;&lt;p&gt;LAN 192.168.1.0/24 → ppp0 の通信を許可 (ルール11)&lt;/p&gt;&#xA;&lt;p&gt;jpnet（日本のアドレス帯）からの SSH を許可 (ルール12)&lt;/p&gt;</description>
    </item>
    <item>
      <title>FireHOL Level3 導入</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-08-055331/</link>
      <pubDate>Mon, 08 Dec 2025 05:53:31 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-08-055331/</guid>
      <description>&lt;p&gt;ルーターでのDNAT構成において、FORWARDチェインでのルールを一部変更。&lt;/p&gt;&#xA;&lt;p&gt;FireHOL Level1・Level2 だけでは、中国系からの SMTP SPAM が一部漏れてくる為、これまで中国全域（CN zone）を丸ごと DROP していました。&lt;/p&gt;&#xA;&lt;p&gt;しかし、メールサーバ側で zen.spamhaus による強力なフィルタリングが効くため、国単位（CN zone）の大味なブロックは必ずしも必要ではない状況になっていた。&lt;/p&gt;&#xA;&lt;p&gt;そこで、IP国家ブロックではなく、より精度の高い “悪性アドレス集合ベースの防御” に切り替える方針へ変更。&lt;/p&gt;&#xA;&lt;p&gt;変更点&lt;/p&gt;&#xA;&lt;p&gt;CN zone（中国 IP 全域 DROP）を廃止&lt;/p&gt;&#xA;&lt;p&gt;代わりに FireHOL Level3 を追加&lt;/p&gt;&#xA;&lt;p&gt;FireHOL Level3 は、既知のスパム・ボットネット・脆弱性スキャンなど&lt;br&gt;&#xA;“より積極的に悪性と判定されているアドレス” を対象に含むため、&lt;br&gt;&#xA;国家単位のブロックよりも 必要十分で副作用の少ないブロック を実現できます。&lt;/p&gt;&#xA;&lt;p&gt;現行のフィルタ構成（説明付き）&lt;/p&gt;&#xA;&lt;p&gt;以下は現在の iptables ルールセットに、解説を付加したものです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/iptable_firehol.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/iptable_firehol.png&#34; width=&#34;320&#34; height=&#34;211&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;■ INPUT チェーン（WAN→自サーバの防御）&lt;br&gt;&#xA;Chain INPUT (policy DROP)&lt;/p&gt;&#xA;&lt;p&gt;→ 基本は DROP。必要な通信だけを例外許可する「ホワイトリスト方式」。&lt;/p&gt;&#xA;&lt;p&gt;1 ACCEPT RELATED,ESTABLISHED&lt;/p&gt;&#xA;&lt;p&gt;既存の通信の戻りはすべて許可（最重要ルール）。&lt;br&gt;&#xA;接続中の HTTP/HTTPS や SSH の応答を止めないため。&lt;/p&gt;&#xA;&lt;p&gt;2 ACCEPT all br0&lt;/p&gt;&#xA;&lt;p&gt;LAN 内（192.168.1.x）からのアクセスは完全許可。&lt;br&gt;&#xA;管理用のローカル接続を遮断しないようにするため。&lt;/p&gt;&#xA;&lt;p&gt;3 DROP firehol_level1&lt;/p&gt;&#xA;&lt;p&gt;外部からの新規接続で、FireHOL Level 1（悪性度高）に該当するホストを遮断。&lt;br&gt;&#xA;→ 基本のマルウェア・スパム送信元の大半を撃退。&lt;/p&gt;</description>
    </item>
    <item>
      <title>サーバーアクセス制限を強化</title>
      <link>https://retiredlog.pages.dev/posts/2025-12-06-061514/</link>
      <pubDate>Sat, 06 Dec 2025 06:15:14 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-12-06-061514/</guid>
      <description>&lt;p&gt;半年近く続いている不審なアクセスについて、現在のところ原因は特定できていないものの、個人的には以前の人間関係や環境が影響している可能性も否定できないと感じている。&lt;/p&gt;&#xA;&lt;p&gt;ただし、技術的には海外クラウドやスキャナーによる通常の自動アクセスである可能性も高く、どちらとも断定はできない。&lt;br&gt;&#xA;とはいえ、同じパターンが長期にわたって続くことや、アクセスの時間帯・性質に一定の特徴があることから、単なる一般的なトラフィック以上の何かを感じてしまうのも正直なところだ。&lt;/p&gt;&#xA;&lt;p&gt;この数か月、アクセス動向を観察するために、あえて設定を変えて反応を見てきたが、期待したような建設的な兆候は得られず、むしろ予測しづらい動きが多かった。&lt;br&gt;&#xA;また、海外アクセスを数日間だけ開放した際には、20年以上続けているブログ「海辺の放浪記」の古い記事まで一気に取得される動きがあり、さすがに気味の悪さを感じた。&lt;/p&gt;&#xA;&lt;p&gt;そこで今回、海外からの不審な接続を減らす目的で、ルーター側のDNATや iptables/ipset ルールを大幅に見直し、より厳格なアクセス制御に切り替えた。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/forward_chain.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/forward_chain.png&#34; width=&#34;320&#34; height=&#34;136&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;① ブラックリスト → 国別ブロックが先頭&lt;br&gt;&#xA;2 DROP firehol_level1　（FireHOLで公開されているIPブラックリスト）&lt;br&gt;&#xA;3 DROP firehol_level2　（FireHOLで公開されているIPブラックリスト）&lt;br&gt;&#xA;4 DROP cn_block　　（中国全域）&lt;br&gt;&#xA;5 DROP other_block　（その他、しつこく不審アクセスがあったネットワーク）&lt;/p&gt;&#xA;&lt;p&gt;→ 海外 AWS/GCP/中国/その他 が最初に落ちる。&lt;/p&gt;&#xA;&lt;p&gt;② LAN → WAN を許可&lt;br&gt;&#xA;12 ACCEPT br0→ppp0 192.168.1.0/24 → ANY&lt;/p&gt;&#xA;&lt;p&gt;→ 家庭内のPCやスマホの外向き通信は全部通る。&lt;/p&gt;&#xA;&lt;p&gt;③ WAN → LAN（サーバー）を「国内限定」許可&lt;br&gt;&#xA;13 SSH (22) 国内&lt;br&gt;&#xA;15 HTTP (80) 国内&lt;br&gt;&#xA;16 HTTP (80) サーチボット&lt;br&gt;&#xA;17 HTTPS (443) 国内&lt;br&gt;&#xA;18 HTTPS (443) サーチボット&lt;/p&gt;</description>
    </item>
    <item>
      <title>やはり中国・・・</title>
      <link>https://retiredlog.pages.dev/posts/2025-11-29-064936/</link>
      <pubDate>Sat, 29 Nov 2025 06:49:36 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-11-29-064936/</guid>
      <description>&lt;p&gt;FireHOL Level 1-&amp;gt; FireHOL Level 2 の順にDROP条件を追加していったが、やはりSPAMメールのアクセスが漏れてくるので、結局中国全域のDROPを追加。&lt;/p&gt;&#xA;&lt;p&gt;中国は野良サーバーの排除を行わないと、国として信頼できないですよ！(笑)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/FORWARD.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/FORWARD.png&#34; width=&#34;320&#34; height=&#34;148&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://retiredlog.pages.dev/files/DROP.png&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://retiredlog.pages.dev/files/DROP.png&#34; width=&#34;320&#34; height=&#34;37&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ここまでやれば、殆どSPAMメールのアクセスが漏れてくることは無いが、全ての攻撃を消すことは不可能。&lt;/p&gt;&#xA;&lt;p&gt;順序　ipset　　　　　　　　説明&lt;br&gt;&#xA;1　　　firehol_level1　　　広範囲かつ静的な脅威をブロック&lt;br&gt;&#xA;2　　　firehol_level2　　　最新かつ動的な脅威をブロック&lt;br&gt;&#xA;3　　　cn_block　　　　　　中国全域をブロック&lt;br&gt;&#xA;4　　　other_block　　　　その他のブロックリスト&lt;/p&gt;</description>
    </item>
    <item>
      <title>システムリブートでのiptables/ipset自動復旧</title>
      <link>https://retiredlog.pages.dev/posts/2025-11-02-063034/</link>
      <pubDate>Sun, 02 Nov 2025 06:30:34 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-11-02-063034/</guid>
      <description>&lt;p&gt;停電や再起動のあと、PPPoEが自動接続されてもiptablesがデフォルトのままではセキュリティレベルが低い状態でサーバが公開されます。&lt;/p&gt;&#xA;&lt;p&gt;そこで、リブート時にipsetによる制限などを自動復旧する内容を実装しました。&lt;/p&gt;&#xA;&lt;p&gt;overlayfs環境などで設定復元を安定させるには工夫が必要です。&lt;/p&gt;&#xA;&lt;p&gt;そこで、PPPoE確立後に自動でiptables/ipsetを初期化し、ブート後一度だけ外部リストをDL更新する構成を組みました。&lt;br&gt;&#xA;結果として、停電やリブートが起きても、何もしなくても通信制御が完全に復元されます。&lt;/p&gt;&#xA;&lt;p&gt;?? 背景&lt;/p&gt;&#xA;&lt;p&gt;PPPoEは起動時に自動接続されるよう設定済み（/etc/network/interfaces）&lt;/p&gt;&#xA;&lt;p&gt;iptables・ipsetの設定は /mnt/data/sh/restore_japan_only.sh にまとめてある&lt;/p&gt;&#xA;&lt;p&gt;外部サイトから更新リストをDLする重い処理（update_ipset.sh）は再接続のたびに実行したくない&lt;/p&gt;&#xA;&lt;p&gt;/etc/ppp/ip-up.d/ は overlayfsで直接編集できない&lt;/p&gt;&#xA;&lt;p&gt;解決策の方針&lt;/p&gt;&#xA;&lt;p&gt;/etc/ppp/ip-up.d/ にラッパースクリプトを1本だけ置く&lt;/p&gt;&#xA;&lt;p&gt;まず軽量な restore_japan_only.sh を即実行して通信ルールを復元&lt;/p&gt;&#xA;&lt;p&gt;ブート後の最初の接続時だけ update_ipset.sh をバックグラウンドで走らせる&lt;/p&gt;&#xA;&lt;p&gt;/run/update_ipset_done で再実行を防止（再起動時に自動リセット）&lt;/p&gt;&#xA;&lt;p&gt;実際のスクリプト&lt;/p&gt;&#xA;&lt;p&gt;/etc/ppp/ip-up.d/99boot_update_ipset&lt;/p&gt;&#xA;&lt;p&gt;#!/bin/bash&lt;/p&gt;&#xA;&lt;h1 id=&#34;run-restore_japan_onlysh-immediately-and-update_ipsetsh-only-once-after-boot&#34;&gt;Run restore_japan_only.sh immediately and update_ipset.sh only once after boot&lt;/h1&gt;&#xA;&lt;p&gt;FLAG_FILE=&amp;quot;/run/update_ipset_done&amp;quot;&lt;br&gt;&#xA;LOGFILE=&amp;quot;/var/log/update_ipset.log&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;echo &amp;ldquo;$(date &amp;lsquo;+%Y-%m-%d %H:%M:%S&amp;rsquo;) [ip-up] PPPoE connected&amp;rdquo; &amp;raquo; &amp;ldquo;$LOGFILE&amp;rdquo;&lt;/p&gt;&#xA;&lt;h1 id=&#34;軽量な初期化スクリプトiptablesipsetの空構築&#34;&gt;軽量な初期化スクリプト（iptables/ipsetの空構築）&lt;/h1&gt;&#xA;&lt;p&gt;echo &amp;ldquo;Running restore_japan_only.sh&amp;hellip;&amp;rdquo; &amp;raquo; &amp;ldquo;$LOGFILE&amp;rdquo;&lt;br&gt;&#xA;bash /mnt/data/sh/restore_japan_only.sh &amp;raquo; &amp;ldquo;$LOGFILE&amp;rdquo; 2&amp;gt;&amp;amp;1&lt;/p&gt;&#xA;&lt;h1 id=&#34;ブート後初回のみipset更新処理をバックグラウンドで実行&#34;&gt;ブート後初回のみ、ipset更新処理をバックグラウンドで実行&lt;/h1&gt;&#xA;&lt;p&gt;if [ ! -f &amp;ldquo;$FLAG_FILE&amp;rdquo; ]; then&lt;br&gt;&#xA;echo &amp;ldquo;First PPPoE connection detected ? running update_ipset.sh&amp;hellip;&amp;rdquo; &amp;raquo; &amp;ldquo;$LOGFILE&amp;rdquo;&lt;br&gt;&#xA;/mnt/data/sh/update_ipset.sh &amp;raquo; &amp;ldquo;$LOGFILE&amp;rdquo; 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br&gt;&#xA;touch &amp;ldquo;$FLAG_FILE&amp;rdquo;&lt;br&gt;&#xA;else&lt;br&gt;&#xA;echo &amp;ldquo;update_ipset.sh already executed, skipping.&amp;rdquo; &amp;raquo; &amp;ldquo;$LOGFILE&amp;rdquo;&lt;br&gt;&#xA;fi&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spamhaus DROPリストを利用した ipset によるスパム対策</title>
      <link>https://retiredlog.pages.dev/posts/2025-10-02-054317/</link>
      <pubDate>Thu, 02 Oct 2025 05:43:17 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-10-02-054317/</guid>
      <description>&lt;p&gt;不眠症による早起きで、暇なんでまとめた(笑)&lt;/p&gt;&#xA;&lt;p&gt;●はじめに&lt;/p&gt;&#xA;&lt;p&gt;サーバをインターネットに公開していると、常に海外からの不正アクセスやスパムメールの試行が行われています。&lt;br&gt;&#xA;特に SMTP (port25) はボットネットや踏み台サーバからの接続が多く、メールサーバ管理者にとって大きな負担となります。&lt;/p&gt;&#xA;&lt;p&gt;そこで有効なのが Spamhaus の DROP/EDROP リストを活用したフィルタリングです。&lt;br&gt;&#xA;このリストは「正規用途が一切ない、完全に不正利用されているネットレンジ」だけを収録しており、誤判定のリスクが極めて低いのが特徴です。&lt;/p&gt;&#xA;&lt;p&gt;これを ipset に取り込み、iptables と組み合わせることで効率的にスパム元を遮断できます。&lt;/p&gt;&#xA;&lt;p&gt;MTAのDB参照にて拒否することを併用しますが、LOGが汚れがちになるのでリストに登録分はあらかじめルーターやホストでDROPする内容です。&lt;/p&gt;&#xA;&lt;p&gt;●ipset と Spamhaus DROP リスト&lt;/p&gt;&#xA;&lt;p&gt;・iptables はルールが多くなると管理や処理が重くなる&lt;br&gt;&#xA;・ipset を使うと「大量のIPレンジ」を一つの集合として扱えるため、効率的なフィルタリングが可能&lt;br&gt;&#xA;・Spamhaus DROPリストは数千?数万の不正レンジを提供しており、これを ipset にまとめるのが最適&lt;/p&gt;&#xA;&lt;p&gt;●実装手順&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ipset作成&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;sudo ipset create spamhaus_drop hash:net family inet hashsize 1024 maxelem 65536&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;自動取得スクリプト作成&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;/usr/local/bin/update_spamhaus_ipset.sh&lt;/p&gt;&#xA;&lt;p&gt;#!/bin/bash&lt;br&gt;&#xA;IPSET_NAME=&amp;ldquo;spamhaus_drop&amp;rdquo;&lt;/p&gt;&#xA;&lt;h1 id=&#34;ipsetが存在しない場合は作成&#34;&gt;ipsetが存在しない場合は作成&lt;/h1&gt;&#xA;&lt;p&gt;if ! ipset list -n | grep -q &amp;ldquo;^${IPSET_NAME}$&amp;rdquo;; then&lt;br&gt;&#xA;ipset create ${IPSET_NAME} hash:net family inet hashsize 1024 maxelem 65536&lt;br&gt;&#xA;fi&lt;/p&gt;</description>
    </item>
    <item>
      <title>443ポートを塞いだまま Let’s Encrypt 更新</title>
      <link>https://retiredlog.pages.dev/posts/2025-09-05-060859/</link>
      <pubDate>Fri, 05 Sep 2025 06:08:59 +0900</pubDate>
      <guid>https://retiredlog.pages.dev/posts/2025-09-05-060859/</guid>
      <description>&lt;p&gt;ここ最近、ストーカーのような海外アクセスが多く、&lt;br&gt;&#xA;サーバーの 443 ポートを「日本＋検索ボット限定」に絞り込んでいました。&lt;/p&gt;&#xA;&lt;p&gt;ところが、思わぬ副作用が。&lt;br&gt;&#xA;Let’s Encrypt（certbot）で証明書を更新しようとしたところ、&lt;/p&gt;&#xA;&lt;p&gt;Timeout during connect (likely firewall problem)&lt;/p&gt;&#xA;&lt;p&gt;というエラー。&lt;br&gt;&#xA;原因は 認証サーバーが海外から 443 にアクセスしてくるのに、こちらで塞いでいたため。&lt;/p&gt;&#xA;&lt;p&gt;試行錯誤の記録&lt;/p&gt;&#xA;&lt;p&gt;preferred-challenges = http を設定してみた&lt;br&gt;&#xA;→ でも /.well-known/acme-challenge/ が https にリダイレクトされてしまうため、やはり失敗。&lt;/p&gt;&#xA;&lt;p&gt;ログに outbound1.letsencrypt.org のアクセスを発見！&lt;br&gt;&#xA;→ これで「確かに来ているのに 301 リダイレクトされてる」ことが判明。&lt;/p&gt;&#xA;&lt;p&gt;RewriteCond で acme-challenge を例外扱い に修正&lt;/p&gt;&#xA;&lt;p&gt;RewriteEngine On&lt;/p&gt;&#xA;&lt;h1 id=&#34;lets-encrypt-用は例外&#34;&gt;Let&amp;rsquo;s Encrypt 用は例外&lt;/h1&gt;&#xA;&lt;p&gt;RewriteCond %{REQUEST_URI} ^/.well-known/acme-challenge/ [NC]&lt;br&gt;&#xA;RewriteRule ^ - [L]&lt;/p&gt;&#xA;&lt;h1 id=&#34;それ以外は-https-強制--正規ドメイン以外拒否&#34;&gt;それ以外は HTTPS 強制 &amp;amp; 正規ドメイン以外拒否&lt;/h1&gt;&#xA;&lt;p&gt;RewriteCond %{HTTP_HOST} !^(www.|pacific.)?sky.0t0.jp$ [NC,OR]&lt;br&gt;&#xA;RewriteCond %{HTTPS} off&lt;br&gt;&#xA;RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
