<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Linux on Blackratel Blog</title>
    <link>https://blackratel.com/blog/tags/linux/</link>
    <description>Recent content in Linux on Blackratel Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 blackratel</copyright>
    <lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blackratel.com/blog/tags/linux/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>git commit で Hugo ローカルサーバへの自動デプロイを実現する</title>
      <link>https://blackratel.com/blog/posts/git-hook-ansible-auto-deploy.ja/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/git-hook-ansible-auto-deploy.ja/</guid>
      <description>&lt;p&gt;このブログは Hugo で構築している。記事作成時は Ansible でローカルの Hugo を更新してプレビューし、確認後に本番へアップロードするフローで運用している。&lt;/p&gt;&#xA;&lt;p&gt;これまではコミット後に &lt;code&gt;ansible-playbook&lt;/code&gt; コマンドを手動で実行していたが、コミットしたら自動で Hugo が更新されプレビューに集中できる環境を作りたかった。&lt;/p&gt;&#xA;&lt;p&gt;この記事では、&lt;strong&gt;git の post-commit hook と Ansible を組み合わせた自動デプロイの仕組み&lt;/strong&gt;を紹介する。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;構成の概要&#xA;    &lt;div id=&#34;構成の概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a7%8b%e6%88%90%e3%81%ae%e6%a6%82%e8%a6%81&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;このブログは以下の構成で運用している。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;役割&lt;/th&gt;&#xA;          &lt;th&gt;内容&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;記事管理&lt;/td&gt;&#xA;          &lt;td&gt;git リポジトリの &lt;code&gt;files/*.md&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ローカルデプロイ&lt;/td&gt;&#xA;          &lt;td&gt;Ansible Playbook (&lt;code&gt;ansible_connection=local&lt;/code&gt;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;プレビュー&lt;/td&gt;&#xA;          &lt;td&gt;ローカルの Hugo サーバ&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;自動化の対象は「コミット → Ansible 実行」の部分だ。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;なぜ git hook を選んだか&#xA;    &lt;div id=&#34;なぜ-git-hook-を選んだか&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%81%aa%e3%81%9c-git-hook-%e3%82%92%e9%81%b8%e3%82%93%e3%81%a0%e3%81%8b&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;git hook にした理由は以下の通りだ。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>git push で本番サーバへの自動同期を実現する</title>
      <link>https://blackratel.com/blog/posts/git-push-production-sync.ja/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/git-push-production-sync.ja/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blackratel.com/blog/posts/git-hook-ansible-auto-deploy.ja/&#34; &gt;前回の記事&lt;/a&gt;では &lt;code&gt;git commit&lt;/code&gt; をトリガーに Ansible でローカルの Hugo を自動更新する仕組みを構築した。今回はその続きで、&lt;strong&gt;&lt;code&gt;git push&lt;/code&gt; のタイミングで本番サーバへの同期も自動化&lt;/strong&gt;した話を紹介する。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;やりたいこと&#xA;    &lt;div id=&#34;やりたいこと&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;これまでは本番反映を手動で実行していたが、&lt;code&gt;git push&lt;/code&gt; に統合し、push するだけで本番まで反映されるようにしたかった。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;git に post-push フックはない&#xA;    &lt;div id=&#34;git-に-post-push-フックはない&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#git-%e3%81%ab-post-push-%e3%83%95%e3%83%83%e3%82%af%e3%81%af%e3%81%aa%e3%81%84&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;git には &lt;code&gt;post-commit&lt;/code&gt; のように「push 後」に処理を実行する &lt;code&gt;post-push&lt;/code&gt; フックが存在しない。&lt;/p&gt;&#xA;&lt;p&gt;代わりに &lt;strong&gt;&lt;code&gt;pre-push&lt;/code&gt; フック&lt;/strong&gt;を使う。これは push が実行される直前に呼ばれるフックで、処理が失敗（exit 1）すると push 自体を中止できる。&lt;/p&gt;&#xA;&lt;p&gt;本番同期に失敗したまま GitHub へ push されるのを防げるため、むしろ都合がいい。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;実装&#xA;    &lt;div id=&#34;実装&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%ae%9f%e8%a3%85&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;.githooks/pre-push&lt;/code&gt; に本番同期の処理を記述し、実行権限を付与してコミットする。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Let&#39;s Encrypt / Certbot 運用チートシート</title>
      <link>https://blackratel.com/blog/posts/certbot-cheatsheet.ja/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/certbot-cheatsheet.ja/</guid>
      <description>&lt;p&gt;HTTPS 対応サイトを運用していると、「証明書が増えてきた」「更新テストをしたい」「自動更新の設定が合っているか不安」といった場面が定期的にやってくる。&lt;/p&gt;&#xA;&lt;p&gt;この記事では、Certbot の日常運用でよく使う操作を一か所にまとめた。セットアップ手順ではなく、&lt;strong&gt;運用フェーズで実際に使うコマンドと設定&lt;/strong&gt;に絞っている。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. 証明書の確認・削除&#xA;    &lt;div id=&#34;1-証明書の確認削除&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e7%a2%ba%e8%aa%8d%e5%89%8a%e9%99%a4&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;まず現状把握から。取得済みの証明書は一覧で確認できる。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot certificates&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;有効期限・ドメイン・証明書名が表示されるので、不要なものがあれば削除する。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 対話形式で選択&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot delete&#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:#75715e&#34;&gt;# 証明書名を直接指定&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot delete --cert-name example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;削除すると &lt;code&gt;/etc/letsencrypt/live/&lt;/code&gt;・&lt;code&gt;archive/&lt;/code&gt;・&lt;code&gt;renewal/&lt;/code&gt; 配下のファイルが一括で消え、自動更新の対象からも外れる。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. dry-run で事前テスト&#xA;    &lt;div id=&#34;2-dry-run-で事前テスト&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-dry-run-%e3%81%a7%e4%ba%8b%e5%89%8d%e3%83%86%e3%82%b9%e3%83%88&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;証明書の取得・更新に失敗し続けると Let&amp;rsquo;s Encrypt のレート制限に引っかかる。本番実行の前に &lt;strong&gt;dry-run&lt;/strong&gt; でテストしておくのが鉄則だ。&lt;/p&gt;&#xA;&lt;p&gt;dry-run ではステージング環境が使われるため、レート制限の心配なく何度でも試せる。&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;新規取得のテスト&#xA;    &lt;div id=&#34;新規取得のテスト&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%96%b0%e8%a6%8f%e5%8f%96%e5%be%97%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot certonly --dry-run --webroot &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -w /var/www/acme-challenge &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -d example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;既存証明書の更新テスト（推奨）&#xA;    &lt;div id=&#34;既存証明書の更新テスト推奨&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%97%a2%e5%ad%98%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e6%9b%b4%e6%96%b0%e3%83%86%e3%82%b9%e3%83%88%e6%8e%a8%e5%a5%a8&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;既存の &lt;code&gt;.conf&lt;/code&gt; 設定（&lt;code&gt;authenticator = webroot&lt;/code&gt; など）を読み込んで実行される。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>apt update の警告: PPA への接続タイムアウトが出たときの対処法</title>
      <link>https://blackratel.com/blog/posts/aptupdatewarn.ja/</link>
      <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/aptupdatewarn.ja/</guid>
      <description>&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt; を実行すると、次のような警告が表示されることがあります。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;W: Failed to fetch https://ppa.launchpadcontent.net/gns3/ppa/ubuntu/dists/...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   connection timed out&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;警告の原因&#xA;    &lt;div id=&#34;警告の原因&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e8%ad%a6%e5%91%8a%e3%81%ae%e5%8e%9f%e5%9b%a0&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;追加済みの PPA（Personal Package Archive）リポジトリへの接続がタイムアウトしたことを示しています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;W:&lt;/code&gt; プレフィックスは &lt;strong&gt;Warning（警告）&lt;/strong&gt; であり、エラー（&lt;code&gt;E:&lt;/code&gt;）ではありません。パッケージのインストールや更新など、通常の &lt;code&gt;apt&lt;/code&gt; 操作への影響は軽微です。ただし、&lt;code&gt;apt update&lt;/code&gt; のたびに表示されるため、放置すると煩わしくなります。&lt;/p&gt;&#xA;&lt;p&gt;タイムアウトが発生する主な原因は次の2つです。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Launchpad サーバー側の一時的な障害・メンテナンス&lt;/li&gt;&#xA;&lt;li&gt;PPA を追加したままにしており、サーバーへの疎通が取れなくなっている&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;対処法&#xA;    &lt;div id=&#34;対処法&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%af%be%e5%87%a6%e6%b3%95&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;一時的な問題の場合&#xA;    &lt;div id=&#34;一時的な問題の場合&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e4%b8%80%e6%99%82%e7%9a%84%e3%81%aa%e5%95%8f%e9%a1%8c%e3%81%ae%e5%a0%b4%e5%90%88&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;時間をおいてから再度 &lt;code&gt;sudo apt update&lt;/code&gt; を実行してください。サーバー側の問題であれば自然に解消されます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>メールサーバー(Postfix / Dovecot / Roundcube)</title>
      <link>https://blackratel.com/blog/posts/mailserverdesign.ja/</link>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/mailserverdesign.ja/</guid>
      <description>&lt;blockquote&gt;&lt;p&gt;Ubuntu 24.04 / Postfix / Dovecot / Roundcube / SpamAssassin による受信専用メールサーバー&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. 要件&#xA;    &lt;div id=&#34;1-要件&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-%e8%a6%81%e4%bb%b6&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;機能要件&#xA;    &lt;div id=&#34;機能要件&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a9%9f%e8%83%bd%e8%a6%81%e4%bb%b6&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;項目&lt;/th&gt;&#xA;          &lt;th&gt;内容&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;メールドメイン&lt;/td&gt;&#xA;          &lt;td&gt;blackratel.com&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;受信&lt;/td&gt;&#xA;          &lt;td&gt;外部メールサーバーから SMTP port 25 で受信&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;メール閲覧&lt;/td&gt;&#xA;          &lt;td&gt;IMAP port 143（localhost のみ）/ Roundcube WebUI&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;スパムフィルタ&lt;/td&gt;&#xA;          &lt;td&gt;SpamAssassin（content_filter 方式）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;送信&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;対象外&lt;/strong&gt;（受信専用）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;認証&lt;/td&gt;&#xA;          &lt;td&gt;Dovecot 認証（IMAP・Roundcube ログイン）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;メールボックス形式&lt;/td&gt;&#xA;          &lt;td&gt;Maildir&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ユーザー管理&lt;/td&gt;&#xA;          &lt;td&gt;バーチャルユーザー（OS ユーザーと分離）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;非機能要件&#xA;    &lt;div id=&#34;非機能要件&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e9%9d%9e%e6%a9%9f%e8%83%bd%e8%a6%81%e4%bb%b6&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;項目&lt;/th&gt;&#xA;          &lt;th&gt;内容&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;OS&lt;/td&gt;&#xA;          &lt;td&gt;Ubuntu 24.04 LTS&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;TLS 証明書&lt;/td&gt;&#xA;          &lt;td&gt;Postfix（port 25 STARTTLS）と Apache（HTTPS）のみ使用。Dovecot は localhost のみのため SSL 不要&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;パスワード保存&lt;/td&gt;&#xA;          &lt;td&gt;ARGON2ID ハッシュ&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ホスティング&lt;/td&gt;&#xA;          &lt;td&gt;OCI Free Tier（アウトバウンド port 25 はブロックのため送信不可）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;スコープ外&#xA;    &lt;div id=&#34;スコープ外&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97%e5%a4%96&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;メール送信（OCI Free Tier のためアウトバウンド port 25 が利用不可）&lt;/li&gt;&#xA;&lt;li&gt;SPF / DKIM / DMARC 設定（送信しないため不要）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. 環境・構成情報&#xA;    &lt;div id=&#34;2-環境構成情報&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-%e7%92%b0%e5%a2%83%e6%a7%8b%e6%88%90%e6%83%85%e5%a0%b1&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;ミドルウェア&#xA;    &lt;div id=&#34;ミドルウェア&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%83%9f%e3%83%89%e3%83%ab%e3%82%a6%e3%82%a7%e3%82%a2&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;ソフトウェア&lt;/th&gt;&#xA;          &lt;th&gt;役割&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Postfix&lt;/td&gt;&#xA;          &lt;td&gt;MTA（外部からの受信）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Dovecot&lt;/td&gt;&#xA;          &lt;td&gt;MDA + MRA（メール保存・IMAP 提供）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;SpamAssassin&lt;/td&gt;&#xA;          &lt;td&gt;スパムフィルタ（content_filter 方式）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Roundcube&lt;/td&gt;&#xA;          &lt;td&gt;WebUI（ブラウザでのメール閲覧）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Apache2&lt;/td&gt;&#xA;          &lt;td&gt;Roundcube のリバースプロキシ&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;ポート構成&#xA;    &lt;div id=&#34;ポート構成&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%83%9d%e3%83%bc%e3%83%88%e6%a7%8b%e6%88%90&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;ポート&lt;/th&gt;&#xA;          &lt;th&gt;プロトコル&lt;/th&gt;&#xA;          &lt;th&gt;用途&lt;/th&gt;&#xA;          &lt;th&gt;接続元&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;25&lt;/td&gt;&#xA;          &lt;td&gt;SMTP&lt;/td&gt;&#xA;          &lt;td&gt;外部メールサーバーからの受信&lt;/td&gt;&#xA;          &lt;td&gt;外部（OCI Security List + UFW で開放）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;143&lt;/td&gt;&#xA;          &lt;td&gt;IMAP&lt;/td&gt;&#xA;          &lt;td&gt;Roundcube → Dovecot（メール取得）&lt;/td&gt;&#xA;          &lt;td&gt;localhost のみ&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;443&lt;/td&gt;&#xA;          &lt;td&gt;HTTPS&lt;/td&gt;&#xA;          &lt;td&gt;Roundcube WebUI&lt;/td&gt;&#xA;          &lt;td&gt;外部&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;blockquote&gt;&lt;p&gt;port 110 / 465 / 587 / 993 / 995 は無効化。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
