2026年5月
日
月
火
水
木
金
土
#05月28日 #2026-WN22 #2026-05-28 #2026年05月生活お世話になっている現場の「エンジニアリングお茶会」的な取り組み、今日が最終回ってことで、自然とふりかえりっぽい話になった。チームが機能するとはどういうことか(って書籍もあるね)、場がいい感じってのはどういうことか、に関してさまざまな気付きがあって本当にありがたかった。賞味期限がきのうまで、という卵が 3 つ残っていたので、バーンと熱を通していただいた。そういうランチ。とあるクリニックの予約を取りたくて、ウェブサイトを見たらナビダイヤルで予約を取れそうだったので試してみる。明日以降 6 月 28 日以前の希望の日付を入力しろというので 0603 と入力してみたら、この日は無理らしくて「6 月 11 日ハ、イカガデスカ?」と提案してきた。もうちょっと早い方がうれしいと思って 0604 を指定してみたら、また「6 月 11 日ハ、イカガデスカ?」と言ってきて笑ってしまった。ゴリ押し。コントみたいだ。今日はめずらしく朝から夜まで予定がパンパンに詰まっていた。17:00 前には自宅を出発したかったので、それまでに集中してお仕事やらお打ち合わせやらをこなす。無事に一通りがスムーズに進み、夜の予定へ。自宅を出発してすぐに寄ったコンビニの駐車場で、成人男性に手を引かれながら歩く女児が手からなにかを落っことすのが見えた。アッと思って落下物を拾い上げる。かわいいシールだった。女児に話しかけてシールを返す。成人男性に「ありがとうは?」と促されて「ありがとう」と言ってくれた女児。こちらこそありがとう。友人が「京都でごはんを食べよう」と声をかけてくれていて、数名で夜ごはんを食べる会に参加してきた。ありがたい。アヒージョ、油のプールが小分けになっているタイプじゃなくて、大浴場タイプだった。って書きながら思ったけれど、これがスタンダードなスタイルか。
【東京ヤクルト vs 埼玉西武 第3回戦】 (2026年5月28日/明治神宮野球場) 埼玉西武 2 0 0 1 0 0 0 0 5 8 東京ヤクルト 0 0 0 0 0 0 0 0 0 0 [勝] 武内 4勝2敗0S [敗] 小川 1勝3敗0S [本塁打] 1回表 カナリオ 5号 ソロ (小川) 4回表 長谷川 7号 ソロ (小川) 今日はちゃんと観る手段がないので、XのDAZNアカウントの動画くらいしか観ていないのですが、武内の好投でカード勝ち越しを決めました。バファローズも破れているため、同率首位に浮上です。 明日からはホームでのベイスターズ戦になります。ローテ的に高橋(予告先発発表済み)、隅田、ワイナンスなんですかね。日曜日はベルドに行くのですが、ワイナンスだと長いゲームになりそうだな……w
まだだいぶ前の読書記録です。読むペースより早く書かないと減らないな(別に読んだ本全部書く必要もないのですが)。 以前も取り上げた柞刈湯葉さんの短編集「まず牛を球とします」。
value-domain-dns-utilを更新したので、その記録とか、その感想の怪文章とか。 更新内容 ワイルドカード証明を発行するときに失敗する問題の修正 モジュール化 バージョニングの追加 対処が必要なこと Net::DNS::Digの追加 Certbotの走行コマンドの変更 今回の対応をした理由 あとがき 更新内容 ワイルドカード証明を発行するときに失敗する問題の修正 これまでDNS更新のタイミングの関係で偶々成功していたが、何度もやってると失敗することが多かったので、失敗しないようにした。 変更前 vd-dcr-auth.pl APIからDNSレコードを取得→レコードにACME TXTレコードがなければ追加、あれば上書き→編集後のレコードをAPIに送る 変更後 vd-dcr-auth.pl APIからDNSレコードを取得→レコードにACME TXTレコードを追加 vd-dcr-cleanup.pl cleanup:PIからDNSレコードを取得→レコードから今回登録したACMEレコードを除去→編集後のレコードをAPIに送る モジュール化 lib/VdDnsUtil.plをlib/VdDnsUtil.pmに変更し、shebangを削除。 並びに今回の変更で追加したユーティリティも.pmとして実装。 バージョニングの追加 スクリプトを叩いたときに依存モジュールと本体のバージョンが出るようにした。 対処が必要なこと vd-dcr.plの改修に関わる影響のため、vd-dcr.plを使っている人だけに影響がある。 Net::DNS::Digの追加 rootユーザーで以下を流し、Net::DNS::Digを入れる。既にある場合は不要。 cpan Net::DNS::Dig Certbotの走行コマンドの変更 certbotを以下の書式で再走行させる。具体的には--manual-cleanup-hookが増えてるので、そこを足す。これによってrenewが上書きされ、次回以降、正しく動作するようになる。 sudo certbot certonly --manual -n \ --preferred-challenges dns \ --agree-tos -m \ --manual-auth-hook "/path/to/vd-dcr-auth.pl " \ + --manual-cleanup-hook "/path/to/vd-dcr-cleanup.pl " \ -d また、従来であればValue-DomainのAPIに更新リクエストを投げてから3秒しか待っていなかったところ、今回はDNSの伝播を待ち、更に5秒待つように直しているため、以前より実行時間が伸びているため、もし何かしらのタイミング処理がある場合は見直しが必要。 今回の対応をした理由 切欠としてはモジュール化の作業中に不具合が発覚したところに始まる。 これまで共通部品として.plを使っていたが、Perlの再利用性について考えていた時に.pmの概念を知ったので改修することにした。その動作確認をしていたところ、ワイルドカードドメインの更新がやたらと失敗することに気付き、本格的に調査を始めたのが発端だ。 そして以前は次の順序で処理していた。 初回走行時にルートドメインのTXTレコードを追加する 二回目走行時にこのレコードをワイルドカード用のTXTレコードで上書きする しかし、本来これは正しくなかった。ワイルドカードドメインを指定する場合、プライマリとセカンダリのTXTレコードが両方とも登録されている必要があるようだった。 ではなぜ今まで動いていたのか。これはDNS更新のタイミングの関係で偶々成功していただけと思われる。そして、私がそのことに気付いていなかったわけだ。動作確認で何度も実行しているとやけに失敗するので、今回この不具合に対応することに決めた。 そして前述の更新内容に繋がるわけだが、これまでは--manual-auth-hook向けのスクリプトしか用意しておらず、その中で「既存ACMEレコードがあれば上書きする」という擬似的なクリーンアップ処理を行っていた。これが前述の不具合を引き起こす要因となっていたため、次の改修を施した。 auth側からクリーンアップ処理(既存ACMEレコードの上書き)を除去し、純粋に「TXTレコードを追加する」だけの処理に変更 新たに--manual-cleanup-hook用のスクリプトを追加し、authで登録したレコードをDNSから削除する処理を、こちらに新設した これにより、プライマリ・セカンダリ両方のTXTレコードが正しく揃った状態でLet's Encryptの検証に渡され、検証完了後にきちんと後始末されるようになった。 参考までにコケていたときは次のエラーが出ていた。 Certbot failed to authenticate some domains (authenticator: manual). The Certificate Authority reported these problems: Domain: hogezzz.lycolia.info Type: dns Detail: DNS problem: NXDOMAIN looking up TXT for _acme-challenge.hogezzz.lycolia.info - check that a DNS record exists for this domain Domain: hogezzz.lycolia.info Type: unauthorized Detail: During secondary validation: Incorrect TXT record "tiHFPEdgZ24aejUpmRkkzNvzUoisQn6mDv3d3xqHBNo" found at _acme-challenge.hogezzz.lycolia.info あとがき 二日で15コミット、変更行数は1,397行追加、217行削除という結構大規模な改修を入れたので、どこかにバグが潜んでいる可能性は捨てきれない。 何せ以前開発していたvalue-domain-dns-cert-registerから、このvalue-domain-dns-utilに移行するときにLLMにガっとやらせてから、今回に至るまでコードのメンテはほとんどLLMに任せている。 当然LLMが書いたコードはレビューして明らかに変なところは手直ししているが、精々コード全体の3-4割で、過半数はLLMが書き、LLMが直せる場所は私が直さずLLMに直させている。テストコードに至っては99%くらいLLMに書かせており、正直正しいコードが掛かれているのかまで見切れていない。以前なら血眼になってテストコードを書いていたはずなのに不思議なものである。 まぁでも実コードを手直ししたら落ちたので、たぶん機能していると思う。あとvalue-domain-dns-cert-registerから継承されたテストコードについては一通り見ているので、全く見ていないわけでもない。 LLMにコードを書かせると作るのは楽だがレビューが大変なのが困りものだ。あと私はAnthropicをBANされている関係で地味にお金がかかるのも困りものである。今回の改修には20USDほどかかっており、安くはない。もう少し手でコードを書くべきだとは思う。考える力も徐々に薄れていっている気がしており、人間として危機感を感じることもある。 ボケ防止のためにはAIに頼らず、自分の手を動かすのも大切なことだと思う。こういう話では、よくそろばん論を持ち出して、そろばんを使わなくなったが人類は劣化していない、電卓があるみたいなことを言う人がいるが、実際問題珠算ができる人は非常に速い速度で暗算ができ、頭の回転も速いとされているので、電卓があるから優位と言われれば、それは違うと思う。例えば電卓を取り出す時間で計算が終わっていたり、物事を予測しやすかったりするわけだ。 ある能力が減った分、別の能力が増えるみたいな考えもあるとは思うが、一人の人間としてAIにべったり過ぎるのもやや危険ではないかと思う。第一災害時どうするんだと思うし、登山などでは電波の届かない山の中ではそもそも使えないとかもあるし、ボケるボケないも寿命に影響するみたいな話は聞くので、考える力は大切だと思う。私は管理職とか企画職みたいなところよりは、現場人間でありたい気もしているし…。 なんだかオチが迷走してきたが、とりあえずvalue-domain-dns-utilはワイルドカード証明書も含めて安定して動くようになったはずなので、必要に応じて更新してもらえれば安定性が増すかもしれない。もしバグを踏んだら報告してもらえれば対応するかもしれません。 しかしこのスクリプトは動作確認が非常に面倒なので、できればもう手を入れたくないところではある…。
昭和十七年正月。 正月だったので、帰省した。 帰省と言っても京都市内の移動である。 吾は骨まで冷えるような京都の街を歩く。 靴の中の足の指がしもやけでむずがゆい。 足を前に出すたびにヒヤリと衝撃が足に響いて吾は震える。
Translated by AI (and reviewed by me) from handwritten Japanese text. (日本語が後に続きます) May’s progress As mentioned in the April monthly report, I’ve been developing with significant AI assistance. While I didn’t push any changes in April, I recently...
ホムペちょっと更新
少し前にこのサイトの404をいくつか解消しました。その時のメモと日記です。
Arlo Parks / Ambiguous Desire # イギリスのシンガーソングライター、アーロ・パークスの最新アルバム。真夜中の街を駆けているようなダウナーな雰囲気と、やさしく包み込むようなサウンドがとても心地よい。
無線分割キーボードは初で、キーボードは6台目くらい。
24日にアスターの種を蒔いて4日目。 芽が出ました。 思ったより早い感じですが、前回は6日目に発芽しているので個体差の範囲かも。 等間隔に10粒蒔きましたが、今のところ確認できたのは5個のみ。 新しい土なのでネキリムシはいないと思いますが、ダンゴムシは周辺にうようよしてます。 無事成長してくれますように。 鉢植えにしたアスターの方は4本に間引きました。 ヨコバイの気配が感じられますが、今のところ大丈夫そうです。 ネモフィラの蕾が目立ち始めました。 1個目が枯れないうちに咲いてくれるでしょうか。
スターチスがやられた時には残っていたキャンドルケイトウ。 同じ犯人かどうかわかりませんが、まだ犯行直後のようです。 犯人を調べていてダンゴムシが害虫だったことを初めて知り、衝撃を受けているところです(汗) 今回の犯人はネキリムシっぽいですが。 カモミールの一番花は写真を撮る前にかじられました。 クロウリハムシの食べ方に似ている気がしますが、犯人は不明。 株分けせずに植えた方にも蕾がつきました。 他にも蕾がついているのでもう少しするとに一気に花が増えそうです。 鹿の害が減ったと喜んでいましたが、水仙の葉が枯れ始めると女郎花に食害の跡が。 同じく鹿の好物のキキョウもかじられています。 どこかへ移動したのではなかったようです。 残念。 1週間前に蒔いたヒマワリが芽を出しました。 切り花にする場合は密植せよとあったので、したつもりですが今のところ1本のみ。 種が大きい分、それほと多くなかったので全部蒔いてしまったので追加で蒔くこともできず。 いろんな品種が混じっていたので順次出てくれますように。
最近、自宅サーバーで色々なWebサービスを公開する機会が増えたんですが、ログを見ると怪しいスキャンや脆弱性を狙った不正アクセスの試行が絶えません。 最初はFail2banを使おうかと思ったんですが、ログのパース設定やCloudflareとの連携が思ったより面倒で断念。 代わりに、Go言語製でFail2banより60倍高速に動き、コミュニティ全体で脅威情報を共有して守る次世代の防御エンジン「CrowdSec」を、愛用しているリバースプロキシ「Traefik」と連携させてみることにしました。 この組み合わせは、怪しい動きをしたIPを自動で判別するだけでなく、世界中のユーザーが検知した悪質なIPリスト(CTI)を同期して、リクエストがプロキシを通過する手前でガツンと弾いてくれるのでめちゃくちゃ強力です。 今回構築する仕組み 今回は、Cloudflare(CDN)の後方に配置されたTraefik(リバースプロキシ)に、CrowdSecのプラグイン(Bouncer)を組み込む構成を作ります。すべてベアメタルではなく Docker / Docker Compose で完結させます。 主な役割分担はこんな感じです。 CrowdSec(エージェント): Traefikのアクセスログ(JSON)をリアルタイムに読み込んで、不審な挙動(ボットのスキャンやブルートフォースなど)を検知します。 プラグイン(Bouncer): Traefikのミドルウェアとして動作し、アクセスしてきたIPがBAN対象かどうかをCrowdSecのAPIに問い合わせて遮断します。 中央API(CAPI): 世界中のCrowdSecインスタンスから集まった「既知の悪質IPリスト」をローカルに同期し、攻撃が届く前に先制防御します。 今回は以下のセキュリティルール(コレクション)を一気に100シナリオ以上導入して、HTTPサービスを鉄壁にします。 必須: crowdsecurity/traefik, crowdsecurity/http-cve, crowdsecurity/base-http-scenarios ホスト保護(推奨): crowdsecurity/sshd, crowdsecurity/linux WAF用(将来用): crowdsecurity/appsec-generic-rules など(※今回の記事ではAppSec自体の有効化は扱いません) CrowdSecコンテナの起動と初期設定 まずはCrowdSec本体を起動します。Traefikと同じDockerブリッジネットワーク(例: proxy)に参加させる必要があります。 docker-compose.yml services: crowdsec: image: crowdsecurity/crowdsec:v1.7.8 container_name: crowdsec restart: unless-stopped ports: - 127.0.0.1:9876:8080 # ローカルFirewall用(必要に応じて) expose: - 8080 # Bouncer用HTTP API - 6060 # Prometheusメトリクス用 - 7422 # AppSec WAF用 volumes: - /opt/docker-volumes/crowdsec/data:/var/lib/crowdsec/data - /opt/docker-volumes/crowdsec/etc:/etc/crowdsec # ホストのログとTraefikのログをマウント - /var/log/auth.log:/var/log/auth.log:ro - /var/log/syslog:/var/log/syslog:ro - /opt/docker-volumes/traefik/logs:/var/log/traefik:ro environment: - GID=1000 - COLLECTIONS=crowdsecurity/traefik crowdsecurity/http-cve crowdsecurity/base-http-scenarios crowdsecurity/sshd crowdsecurity/linux crowdsecurity/appsec-generic-rules crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-crs networks: - proxy networks: proxy: external: true コンテナを起動します。 docker compose up -d クラウドコンソールへの登録(Enroll) CrowdSecのWebコンソール(CrowdSec Console)にアカウントを作り、エンジンを登録(Enroll)します。コンテナ内で以下を実行します。 docker exec crowdsec cscli console enroll -e context 実行後、Webコンソール側で「Approve(承認)」ボタンを押すのを忘れないようにしてください。 Bouncer用APIトークンの発行 Traefik(Bouncer)がCrowdSecと通信するためのキーを発行します。 docker exec crowdsec cscli bouncers add traefik-bouncer 画面に一度だけ長いAPIキーが表示されるので、必ずメモして控えておいてください。 ログパースの指定(acquis.yaml) CrowdSecに「どのファイルをどのタイプとしてパースするか」を教えます。 マウントした設定ディレクトリ内の/opt/docker-volumes/crowdsec/etc/acquis.yamlを管理者権限で編集します。 filenames: - /var/log/auth.log - /var/log/syslog labels: type: syslog --- filenames: - /var/log/traefik/*.log labels: type: traefik --- listen_addr: 0.0.0.0:7422 appsec_config: crowdsecurity/appsec-default name: myAppSecComponent source: appsec labels: type: appsec Traefik側の設定 アクセスログの有効化(静的設定:traefik.yml) CrowdSecがリアルタイムに解析できるように、バッファなし(bufferingSize: 0)のJSON形式でアクセスログを吐かせます。悪質ボットを検知するために User-Agent を残す設定が肝です。 accessLog: filePath: "/logs/traefik.log" format: json filters: statusCodes: - "200-299" - "400-599" bufferingSize: 0 fields: headers: defaultMode: drop names: User-Agent: keep ログローテートの罠: Traefikのログは爆速で肥大化するので、ホスト側の/etc/logrotate.d/traefikにローテート設定を書いて、postrotateでdocker kill --signal="USR1" traefikを送るように仕込んでおいた方がいいです。 compress /opt/docker-volumes/traefik/logs/*.log { size 20M daily rotate 14 missingok notifempty postrotate docker kill --signal="USR1" traefik # この行は、ご自身の Traefik コンテナ名に書き換えてください endscript } CloudflareのプロキシIPを信頼する設定 Cloudflareを通している場合、Traefikから見るとすべてのアクセス元がCloudflareのIPになってしまいます。これだと攻撃者の本当のIP(実IP)をCrowdSecが特定できません。 これを解決するため、traefik.ymlの各エントリーポイントにCloudflareのパブリックIP帯をtrustedIPsとして登録します。YAMLのアンカー(&trustedIpsと*trustedIps)を使うとスッキリ書けます。 entryPoints: http: address: :80 forwardedHeaders: trustedIPs: &trustedIps - 103.21.244.0/22 - 103.22.200.0/22 - 103.31.4.0/22 - 104.16.0.0/13 - 104.24.0.0/14 - 108.162.192.0/18 - 131.0.72.0/22 - 141.101.64.0/18 - 162.158.0.0/15 - 172.64.0.0/13 - 173.245.48.0/20 - 188.114.96.0/20 - 190.93.240.0/20 - 197.234.240.0/22 - 198.41.128.0/17 - 2400:cb00::/32 - 2606:4700::/32 - 2803:f800::/32 - 2405:b500::/32 - 2405:8100::/32 - 2a06:98c0::/29 - 2c0f:f248::/32 http: redirections: entryPoint: to: https scheme: https https: address: :443 forwardedHeaders: trustedIPs: *trustedIps http: tls: certResolver: myresolver これでログのClientHostに訪問者の「本当のIP」が記録されるようになります。 プラグインの有効化 traefik.ymlにmaxlerebourg氏が開発しているCrowdSecバウンサープラグインを追加します。 experimental: plugins: bouncer: moduleName: github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin version: v1.6.0 ミドルウェアの定義と適用 ミドルウェアの設定(動的設定:Config.yaml) プラグインを動かすための設定を動的設定ファイルに書きます。先ほど発行したAPIキーをcrowdsecLapiKeyに指定してください。 http: middlewares: crowdsec: plugin: bouncer: enabled: true defaultDecisionSeconds: 60 crowdsecMode: live crowdsecAppsecEnabled: false crowdsecLapiKey: "ここにさっき発行したAPIキーを入れる" crowdsecLapiHost: crowdsec:8080 crowdsecLapiScheme: http crowdsecLapiTLSInsecureVerify: false # プライベートIPレンジを信頼し、かつホワイトリスト化する forwardedHeadersTrustedIPs: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 clientTrustedIPs: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 ホワイトリスト設定: clientTrustedIPsにローカルのIP(LANの範囲など)を指定しておくことで、自分のテストアクセス等でうっかり自分自身を誤BANするのを防げるので設定しておいた方がいいです。 ミドルウェアの適用方法 守りたいサービスに適用する方法は2つあります。環境に合わせて選んでください。 パターンA: コンテナごとに個別に適用(Labels) labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)" - "traefik.http.routers.whoami.middlewares=crowdsec@file" # 動的ファイルから読み込み パターンB: 全サービスに一括で自動適用(Entrypointレベル) すべての公開サービスをデフォルトで守りたい場合は、traefik.ymlのhttpsエントリーポイントの配下に直接ミドルウェアをブチ込むのが一番手っ取り早くて楽です。 https: address: :443 forwardedHeaders: trustedIPs: *trustedIps http: middlewares: - security-headers@file - rate-limit@file - crowdsec@file # これを追加! 動作確認とテスト 設定が終わったら、双方のコンテナを強制再起動して設定を反映させます。 # Traefikの再起動 docker compose -f up -d --force-recreate # CrowdSecの再起動 docker compose -f up -d --force-recreate 攻撃シミュレーション(Gobuster) 実際に攻撃を検知してBANされるかテストします。 ※ホワイトリストに入っていない外部ネットワーク(VPNやスマホのモバイル回線など)から実行してください。 Kali LinuxなどでGobusterを使い、ディレクトリの総当たりスキャン(ブルートフォース)を仕掛けてみます。 gobuster dir -k -e -fr -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u https://service.example.com/ 大量の404エラーが発生した時点で、CrowdSecのhttp-probingやhttp-bad-user-agentシナリオに引っかかり、即座にアクセスが拒否(403)されるはずです。 手動でのBAN / BAN解除コマンド テストや運用中に手動でIPを操作したい時は、コンテナ内でcscliコマンドを使えば一発です。 # 特定のIPを手動でBANする(例: 4時間) docker exec crowdsec cscli decisions add --ip 1.2.3.4 --duration 4h --reason "手動での悪質スキャン検知" # 現在のBANリスト(アクティブな決定)を確認する docker exec crowdsec cscli decisions list # 特定のIPのBANを解除する docker exec crowdsec cscli decisions delete --ip 1.2.3.4 最後に ここまでの設定で、TraefikへのCrowdSec導入は無事に完了です。 これでローカル・リモート両方の判定(decisions)をフルに使って、公開しているWebサービスをいい感じに保護してくれます。 リクエストがWebサービスに届く前に、Traefik内のバウンサーが訪問者のIPを自動でチェック。問題なければそのまま通すし、ブラックリスト入りしていればその場で即座に403を返して弾いてくれます。 同時に、CrowdSecのコンテナ側ではTraefikのアクセスログだけでなく、ホストからマウントしたLinuxのauth.logやsyslogもリアルタイムに監視しています。もし不審な攻撃パターンを検知したら、そのIPを自動的にデータベースへ追加してBANしてくれるので、運用はめちゃくちゃ楽です。 制限事項 ただ、現状の設定だと「IPの遮断がTraefik(Webアクセス)のレイヤーだけでしか動かない」という重要な制限があります。 つまり、守られているのはあくまで「Traefik経由で外に公開しているWebサービスだけ」という点には注意した方がいいです。 例えば、攻撃者がホストのSSHポートを狙ってブルートフォース攻撃を仕掛けてきたとします。 CrowdSecはマウントされたauth.logからそれをきっちり検知して「こいつはBAN!」と判定しますが、そのBAN情報が伝わるのはTraefik側だけです。 結果として、その攻撃者はWebサイトにはアクセスできなくなりますが、SSHポートへのアタックはそのまま通ってしまいます。 この穴を塞ぐには、Webレイヤーだけでなくiptablesやnftablesを直接叩いてパケット自体を落とせる、ホスト側の「ファイアウォール用バウンサー(Firewall Bouncer)」を組み合わせてあげる必要があります。 対策:ホスト側にFirewall Bouncerを仕込む DebianやUbuntu環境なら、ホスト(Dockerの外)へのインストールは一瞬で終わります。 # 1. ホスト側にCrowdSec公式リポジトリを追加 curl -s https://install.crowdsec.net | sudo sh # 2. ファイアウォールバウンサー(今回はnftables用)をインストール sudo apt install crowdsec-firewall-bouncer-nftables # 3. コンテナのCrowdSecに対して、ホスト用バウンサーのAPIキーを発行 docker exec crowdsec cscli bouncers add firewall-bouncer ここで出力されたAPIキーをコピーしたら、ホスト側の設定ファイルを書き換えます。 sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml 変更するのは以下の2点だけでOKです。 # 1. さっきコンテナ側で発行したキーを貼り付け api_key: # 2. Docker Compose側で127.0.0.1:9876にマップしておいたLAPIのURLを指定 api_url: http://127.0.0.1:9876/ 書き換えたら、ホスト側のサービスを再起動してコンテナ側から認識されているか確認します。 # サービスの再起動 sudo service crowdsec-firewall-bouncer restart # バウンサーの一覧に 'firewall-bouncer' が追加されてActiveになってるか確認 docker exec crowdsec cscli bouncers list これでファイアウォールバウンサー側の準備も完了です。 これ以降は、このホスト側のバウンサーが定期的にコンテナのAPI(TCP/9876)を叩きにいって、新規のBANリストや解除されたIPの情報を自動で同期してくれるようになります。あとは環境に合わせてiptablesやnftablesのルールを裏側で勝手に更新してくれます。 ここまでやっておけば、Webサービスはもちろん、SSHなどホスト側の全ネットワークポートがOSのファイアウォールレイヤーでガチガチに保護されるので安心感が違いますね。 参考リンク CrowdSec公式ドキュメント(英語) Traefik公式ドキュメント(英語) LRVTブログ(英語)
hugoブログ環境(導入編とテーマ変更編) golang Installからhugo環境構築、theme、デプロイまでの手順 Volumioの最新事情(bullseye付近で止まっている) 中華Dacが新たに加わったものの、バージョンアップはなーんもしていない moOdeの最新事情(bullseye付近で止まっている) 同上+Ver.8でしかライブラリを正常に更新できない問題があったため更新ストップ中だった raspberrypi含むdebian新環境あれこれ(bullseye付近で止まっている) bookworm以降のboot構成変更やtrixieでのあれこれ、pip(x)やenvエラー対策? OpenWrt関連(Buffaloルータ改造+GL.iNet製品に手を出し始めた) 実験段階 主体はW-WANに対応したロードバランサ的な働きを期待 VPN系のどれかで外出時の不便解消 AdGuardHome+キャッシュでセキュリティ確保と広告除去、通信データ量を削減したい amazonダッシュボタンを中古でいくつか入手し、闘病中の母親用として自宅各所にエマージェンシーボタン設置した 2024~2025父親肺がん治療・死亡でやたらバタバタしていた 母親は過去にくも膜下出血手術の影響で左半身に若干マヒ、乳がん切除リンパ転移で投薬治療中 お風呂やトイレ、ベッドサイドにAmazon Dashボタンを設置し、押したら押された場所をDiscordで送信 上記、急いでraspberrypi4 8GBにamazon-dash機能のみ構築してしまっていてもったいないので、他raspberrypiかOpenWrt機に移植したい できればWRT化したBuffaloルータで処理しつつ、他機能と両立させたい GL.iNet GL-AXT1800を入手したので使い道を探る 光契約やめて楽天モバイル+povoで主回線とIoT回線に分ける?
手書きノートにハマって紙にシャーペンで書く・描くのが心地良い。さすがに予定はスマホのカレンダーを利用してたんだけど、やっぱりカレンダーも紙にした。卓上カレンダーを探しにロフトなんかを覗いてみたものの、もう5月。2025年のカレンダーなんて...
5 月のぶらりスタバの旅、最後に寄ったのは九州まで移動をして大分県までやってきました。移動に関しては別途まとめていますが、地味にこの移動が一番かかった形です。とはいえ、ついでに回るという点では効率よく回れた形です。
今日は、なんとなくすき焼きをしよう!となりました。 すき焼きじゃ 買い出し 牛肉を数年振りに買いに行きました。 せっかくなので、(スーパーの1コーナーにある)肉屋の牛肉を買おうとなり、200gほど購入しました。 すると、肉屋のおっちゃんが
大学のキャンプツーリングから、ロードレース・シクロクロスと軸足を移しながら、グラベルにも足を踏み入れてきた17年のサイクリスト人生。 年間20レース走ってきた生活から、結婚〜子の誕生を経て徐々に減少し、レースと1日ライドはほぼ不可能になっていた。妻に1日子供を任せてイベントに行くことも不可能ではないが、知っての通り、サイクリングイベントはほとんど朝が早い。夜の早い我が子の面倒のピークは17時からス
賃貸マンション2LDKへの引越を機にスマートホームを本格導入。壁内配線不可の制約下で、ネットワーク・IoT・リモートアクセスの全体像とフェーズ導入の考え方をまとめました。
みんカラに書けよという内容で申し訳ない。 日記ですので将来思い出すように。駄生活をむさぼってるのに思い出す必要はあるのか?というのは置いておいて。 スクーターにコンビニフックを付けました。 買い物した時に買い物袋をかける突起物。 こんな感じ。 中央部の黒いやつです。 プラスチックのフック状になっててここにコンビニ袋をひっかける感じ。 何度か日記に書いたりもしたんですが、ここ1~2年DJ1というバリバリ昭和年間にできた2ストのバイクを修理して乗れるようにしてるんですが。 このバイク、メットインができる前の時代のスクーターなので、積載能力というものがが何もないにもほどがある状態。虚無なくらい品物を積む場所がない。 コンビニにバイクで買い物行っても着ている服のポケットに入れる以外の収納方法がまじで何もないんです。冷凍食品とか買うと地獄確定。 というわけで、コンビニ袋をかけるフックを付けました。 もとはDIO110というスクーター用の部品なんですが、要はただのプラスチックの棒っこ(北海道弁)なので流用して無加工でそのまま付けました。ヤフオクで130円(送料230円)にて購入。 注意点としてこの取り付け部分。 なんというかハンドル下の微妙な位置のボルトなんですが、DIOはM6・DJ1はM5。 しかも厚みのあるプラスチックの部品をかませるので、付属のボルトだと径が合わず。最初からついてる標準のボルトだと長さが足りず使えない。 なのでどこのご家庭の工具入れの隅っこに落ちてるM5の50mmくらいの長めのボルトにワッシャーかまして結構無理やりとりつけること、くらいです。 DJ1にコンビニフックとりつける方はご注意を。このご時世に1985年製のバイクをいじるやつがいるとも思えないですが。気まぐれオレンジロードやシティハンターが漫連載してた時期ですぜ。1985年。 これでバイクで荷物を運べるようになったので遠くにも行くことも可能に。 3リットルしか入らないガソリンタンクさえ何とかなれば、ですが。 一応リッター25くらいは走るのでそこそこいけるんですけど。 なんか増槽つけれねーかなあ。
#05月27日 #2026-WN22 #2026-05-27 #2026年05月ハイライトかわいいからこれにしよう。生活【土曜版 #79】超多忙ラジオパーソナリティが独立。そして大学院で「ウェルビーイング」を研究する理由(ゲスト:吉田尚記さん) - News Connect あなたと経済をつなぐ5分間 #ニュースコネクト - LISTENNews Connect 土曜版、今回のゲストは、ラジオアナウンサー・吉田尚記さんです。日本放送に27年間在籍し、アニメ・アイドル・漫画などサブカルチャー全般を軸に活躍。マンガ大賞の立ち上げや著書の出版など、アナウンサーの枠を超えた活動を続けてきた吉田さんが、2026年3月に独立。現在はフリーアナウンサーとして活動しながら、東京大学大学院で「推し活とウェルビーイング」を研究する大学院生でもあります。なぜこのタイミングで独立したのか、その答えは、意外にも「働き方改革」でした。さらに、49歳で挑戦されている東大大学院での研究テーマ「推し活とウェルビーイング」など、吉田さんのキャリアも含め、現代人がどう生きるべきかヒントの詰まった対談です。News Connect の吉田尚記さんゲスト回を聴いた。マンガのラジオのリスナーとしては、吉田尚記さんは「インタビューをする側」のイメージが定着しているので、こうして野村高文さんのインタビューを受けているのは新鮮でおもしろかった。Spotify の macOS アプリがクラッシュして、こういう URL にアクセスしているのか〜という画面が出た。
先に結論を書くと、arXivなどのサイトから直接メモ用のマークダウンファイルを作るChrome extensionを書いた、という話 Zotero + Obsidian 論文のメモはEvernote、Google Docs、Zotero(のノート)、とふらふらしていて、最近は直接マークダウン形式のテキストファイルに書くことに落ち着いている。マークダウンだとなんだかんだChatGPTなどの生成AIと相性がいい。「これって昔読んだっけ」とか「この領域で読んでない重要論文」みたいな雑な質問ができる。多分、EvernoteでもMCPで繋げればできるんだろうけど。
歴代PlayStationとかWindowsの起動画面とかは動画でよく上がっていてたまに見ると懐かしく感じる。でもPCの起動画面って、私がまだWin98機を使う機会があることも影響しているんだろうけど、あまり懐かしさを感じない。特にIBM PCクローンが90年代から現在まであまり変わっていないことが考えられるかもしれない。
AIでプログラマが必要なくなるとかいろいろ未来についての議論がされている昨今だけれども、そんなことはどうでもよくて今を楽しもうと思っている。 むしろAIのおかげで、ほしいと思ったものがサクッと作れる世の中になった。個人的には喜ばしいことだと思う。
さきほど、MFGと関連ソースをオープンソースとして公開しました。
Zed の zed コマンドでファイル・ディレクトリを開くとき、既存ウィンドウで開くか、新しいウィンドウで開くかは cli_default_open_behavior で制御できる。
月曜から妻が東京に行っていて、子と二人で過ごしていた。 なんとなく二人前作ると、ものすごいおなかいっぱいになる。 これまで子が残した食べ物を大人二人で食べていたのが、その負荷が一人に集まってくることで、これまで1.3人前食べればよかったのが、1.7人前食べさせられているような感覚がある。 一人だったら食べなくてもいいかというときにも、子がいると、食べないのは変だという感覚になり、体裁を整えようとしてしまう。 そういうことをやっていたら、月曜から水曜までかけて、慢性的になんかおなかいっぱいな感じがして、だんだん胃もたれしてきている。 張り切ってバーベキューをやっているみたいなことなはなく、たいし…
自分のスマホを機種変更しました。古い方はソニー Xperia で48か月分割払いが終わったばかり。しかし、Androidのバージョンアップデートが13で止まっていて、セキュリティパッチレベルも2023年11月で止まっているので、使い続けるには懸念があった。