投稿

2025の投稿を表示しています

CentOS Stream 10 + libavif-toolsでJPEG→AVIF一括変換

CentOS Stream 10の環境で、JpegからAVIFに変換したときの覚書。 環境: CentOS Stream 10 1. ImageMagickをインストールして試す → AVIF未対応 ImageMagickで対応しているか確認。 # dnf install libheif libaom ImageMagick バージョン確認 # magick --version Version: ImageMagick 7.1.1-47 Q16-HDRI aarch64 22763 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI Modules OpenMP(4.5) Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zip zlib zstd Compiler: gcc (14.2) AVIFサポートを確認 # magick identify -list format | grep AVIF 対応していない。 ImageMagickはアンインストール。 # dnf remove libheif libaom ImageMagick 2. libavif-toolsをインストール 前の記事で試したlibavif-toolsをインストール。 参考:  libavif-toolsをインストールしてJpegからAVIFへ一括変換。 # dnf install libavif-tools バージョン確認。 # avifenc --version Version: 1.0.4 (dav1d [dec]:1.5.1, aom [enc/dec]:v3.12.0...

FreeBSD14 + Nginx + fail2banで不正なアクセスを自動ブロック

ウェブサーバーへの攻撃が増えてきたので対策したときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, nginx 1.28.0 Gemini 2.5 Proと対話しながら作業している。 1. fail2banとは? Fail2banは、サーバーのログファイルを監視し、特定のパターン(ブルートフォース攻撃、スキャン活動など)を検知すると、その攻撃元のIPアドレスを自動的にファイアウォールでブロックする、侵入防止ソフトウェア。 動作の仕組み 監視 (Monitor): Nginxのアクセスログやエラーログ、SSHの認証ログなどをリアルタイムで監視。 検知 (Detect): フィルタと呼ばれる正規表現ルールに基づき、ログの中から「存在しないページへの連続アクセス」といった不正な兆候を探します。 ブロック (Block): 不正な兆候が一定回数(例: 5分以内に3回)見つかると、アクションを実行して、OSのファイアウォール(FreeBSDの場合はpf)にそのIPアドレスを一時的にブロックするよう命令。 解除 (Unban): 設定された時間が経過すると(例: 1時間後)、自動的にブロックを解除。 fail2banとSSHGuardの違い 項目 fail2ban SSHGuard 主な用途 ログを監視し、不正アクセスをiptables/pf等でブロック SSHや各種サービスのログを監視し、攻撃元IPをブロック サービス対応範囲 汎用的(Nginx, Postfix, Dovecot, SSH など多数のfilter用意) 主にSSH向け(追加対応も可能だが限定的) 設定の柔軟性 高い(正規表現でログ解析ルールをカスタマイズ可) 比較的シンプル、細かいカスタマイズは難しい 導入・設定難易度 やや高い(filter/jail設定が必要) 低い(導入して有効化するだけで基本動作) FreeBSDでの利用実績 ports/packages で提供、Nginx対策にもよく使われる FreeBSD標準での利用実績が多く軽量 リソース消費 やや重い(Python製) 軽量(Cで実装) 特徴 多機能でNginxなど幅広いサービスを守れる シンプルで軽量、主にSSH向けに効果的 2.fail2banのインストールと設定 pkgでインストール。 # pkg s...

MariaDB Serverのチューニング設定(2025年8月版)

MariaDB Serverのチューニング設定を見直したときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, MariaDB Server 10.11.13 1. MySQLTunerを実行 git cloneして実行。 # cd /home/software/ # git clone https://github.com/major/MySQLTuner-perl.git # cd MySQLTuner-perl/ # perl mysqltuner.pl 実行結果をGemini 2.5 Proに貼り付けて提案を聞く。 2. 設定変更する前にデータをバックアップ 全データをバックアップ。 # cd  # mysqldump -u root -p --all-databases --single-transaction --routines --events --default-character-set=utf8mb4 | gzip > ./hoge01_20250818.sql.gz 設定ファイルをコピーしてGemini先生が提案した新設定を記述。 # cd /usr/local/etc/mysql/conf.d/ # cp server.cnf server.cnf.bak20250818 # less /usr/local/etc/mysql/conf.d/server.cnf [server] # Basic Settings character-set-server          = utf8mb4 collation-server              = utf8mb4_general_ci user                          = mysql basedir                ...

CentOS Stream 9 + PHP 8.1 + OPcache

CentOS Stream 9の環境でPHP OPcacheをインストールしたときの覚書。 CentOSの環境ではPHP OPcacheが自動でオンになると思ったらなってなかった。 参考:  FreeBSD14 + PHP8.3 + OPcache 環境: CentOS Stream 9, nginx 1.20.1, PHP 8.1.27 1. OPcacheのインストール まずはインストールされているか確認。 # php -i | grep opcache dnfでインストール。 # dnf search opcache # dnf install php-opcache iniファイルの場所を確認。 # php --ini php infoでも確認。 # php -i | grep opcache opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklist opcache.consistency_checks => 0 => 0 opcache.dups_fix => Off => Off opcache.enable => On => On opcache.enable_cli => On => On opcache.enable_file_override => Off => Off opcache.error_log => no value => no value opcache.file_cache => no value => no value opcache.file_cache_consistency_checks => On => On opcache.file_cache_only => Off => Off opcache.file_update_protection => 2 => 2 opcache.force_restart_timeout => 180 => 180 opcache.huge_code_pages => Off...

FreeBSD14 + PHP8.3 + OPcache

PHP Opcacheをインストールしたときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, Nginx 1.28.0, PHP 8.3.23 1. PHP OPcacheとは? OPcacheは、PHPスクリプトを一度コンパイルした結果をメモリにキャッシュすることで、次からのリクエストを高速に処理する仕組み。 OPcacheはPHP 5.5(2023年6月リリース)からバンドル。 CentOS Stremのyumやdnfでインストールするとデフォルトで有効になる。 FreeBSDではpkgでインストールしてもデフォルトで有効にならない。 OPcacheが有効か確認するコマンド。 # php -i | grep opcache 各レイヤーごとにキャッシュ機能を導入することで相乗効果が期待できる。 Web Serverのキャッシュ: Nginx fastcgi_cache PHPのキャッシュ: OPcache OSのキャッシュ: ZFS ただしメモリを消費するので正しく設定しないと逆効果。 OPcacheとJIT JIT(Just-In-Time)コンパイラはPHP8から導入された機能で、OPcacheを高速化のための拡張機能。 JITは、アプリケーションの実行を監視し、頻繁に使われるコード(ホットコード)を特定し、ネイティブなマシンコードに変換し、専用のメモリ領域(JITバッファ)にキャッシュする。 JITはOPcacheが前提の機能。 Zend VMというインタープリタを挟まないため、特にCPU負荷の高い処理が劇的に高速化される。 WordPressだと頻繁に呼び出されるアクションとフィルターフックが高速化され、体感速度が向上する。 2.OPcacheをインストール。 まずはインストールされているか確認。 # php -i | grep opcache pkg でインストール。 # pkg install php83-opcache php --versionを打つとOPcacheがインストールされているか確認できる。 # php --version PHP 8.3.23 (cli) (built: Jul  5 2025 03:29:14) (NTS) Copyright (c) The PHP Group...

CentOS Stream 10 + Nginx + PHP8.3 + MariaDBの仮想マシンを構築する手順まとめ(2025年版)

Mac mini 2024を購入して、VMware Fusionの仮想マシンとしてCentOS Stream 10の開発環境を構築しているときの覚書。 旧Mac mini 2018とCPUのアーキテクチャが違うので仮想マシンを作り直さなければならない。 環境: Mac mini 2024, VMware Fusion 13.6.3, CentOS Stream 10 ARM64版 OSインストールするまでは前の記事を参考に。 記事とは違い「Software Selection: Minimal」で構築した。 参考:  CentOS Stream 10を仮想マシンにインストールして初期設定 カーネルのバージョン表示。 # uname -a Linux vm-dev4.hoge.co.jp 6.12.0-116.el10.aarch64 #1 SMP PREEMPT_DYNAMIC Fri Aug  1 22:25:48 UTC 2025 aarch64 GNU/Linux 1. Nginxのインストール 検索してインストール。 # dnf search nginx # dnf install nginx ビルドオプションを確認。 # nginx -V nginx version: nginx/1.26.3 built with OpenSSL 3.2.2 4 Jun 2024 (running with OpenSSL 3.5.1 1 Jul 2025) TLS SNI support enabled configure arguments:  --prefix=/usr/share/nginx  --sbin-path=/usr/sbin/nginx  --modules-path=/usr/lib64/nginx/modules  --conf-path=/etc/nginx/nginx.conf  --error-log-path=/var/log/nginx/error.log  --http-log-path=/var/log/nginx/access.log ...  --pid-path=/run/nginx.pid  --lock-pa...

Mac mini 2024をWindowsからVNCで操作

Mac mini 2024を買ったので設定しているときの覚書。 Mac環境: Apple M4 Pro, Memory 24GB, macOS Sequoia(セコイア) 15.6 Windows環境: Windows 11 Pro 24H2, VNC viewer 6.17.1113 1. VNCでログインすると画面が真っ黒(真っ暗)になる 設定 → 共有 → 画面共有 画面共有を一旦オフにしてオンにすると表示されるようになった。 2. Mac本体でログインしないとVNCでログインできない このMac miniは仮想マシンを起動させる母艦として利用しているので、起動させてから本体でログインせずWindowsから操作したい。 FileVaultを無効 にする。 FileVaultはログインパスワードでユーザーのホームディレクトリを暗号化している。 設定 → プライバシーとセキュリティ → FileVault → オフにする 再起動。 これでMac本体でログインしなくてもVNCでログインできるようになった。 MacのSambaが完全に起動して、NetBIOS名で名前解決できるようになって、VNC Serverも起動する。 3. FileVault, BitLocker, T2チップ, TPM FileVaultがオフでもT2チップで暗号化してるよね?と思って引き続き調査。 セキュリティチップ名: T2チップ(Mac), TPM(Windows) 暗号化機能: FileVault(Mac), BitLocker(Windows) MacはFileVaultがオフの場合でもT2チップによってストレージを暗号化する。 そのため SSDだけ抜き出してもペアになっていたT2チップ経由でないと複合化できない 。 別のMacに繋げてもT2チップが違うので複合不可。 Windowsの場合は、TPM(Trusted Platform Module)がマザーボードに搭載されていても BitLockerがオフの場合ストレージを暗号化しない。 そのためSSDだけ抜き出して他のPCに繋げてデータを読み取れる。 Surfaceや一部のWindowsノートPCはDevice Encryptionが自動有効化されるらしい。 MacとWindowsのストレージ暗号化の違い。 項目 Mac(T2...

CentOS Stream 9 + firewalld + SSHGuardで不正な攻撃を自動ブロック

FreeBSDでSSHGuardを導入したのをCentOSのサーバーでもやったときの覚書。 Gemini 2.5 Proに教えてもらっている。 環境: CentOS Stream 9, SSHGuard 2.4.2-7.el9 1.firewalldをインストールして設定 このサーバーはサービス提供ホストのファイヤーウォールに頼っていたので、firewalldをインストールするところから。 # dnf install firewalld firewalldを起動 # systemctl start firewalld # systemctl status firewalld firewalldが再起動したときでも有効になっているか確認。 # systemctl list-unit-files -t service firewalldの登録内容確認、サービスの確認。 # firewall-cmd --list-all # firewall-cmd --list-services この段階ではhttpとhttpsが遮断されているはず。 運用しているウェブサイトをブラウザで表示して確認。 firewalldへサービスの削除と登録。 # firewall-cmd --get-services # firewall-cmd --remove-service=cockpit --permanent # firewall-cmd --add-service=http --permanent # firewall-cmd --add-service=https --permanent # firewall-cmd --reload # firewall-cmd --list-services 運用しているウェブサイトが表示できるか確認。 2.SSHGuardをインストールして設定 dnfでインストール。 # dnf install sshguard sshguard-firewalldもインストールされる。 設定を確認。 # less /etc/sshguard.conf THRESHOLD=20 BLOCK_TIME=1200 DETECTION_TIME=1800 BLACKLIST_FILE=/var/lib...

FreeBSD14 + SSHGuard + PF(Packet Filter)で不正な攻撃を自動ブロック

SSHGuardを導入した方がssh攻撃を放っておくより圧倒的にリソース消費を抑えるとのことなので導入したときの覚書。 Gemini 2.5 Proに教えてもらっている。 環境: FreeBSD 14.3-RELEASE-p2, SSHGuard 2.5.1,1 1. SSHへの攻撃を放置しておいた場合のリソース消費 仮想マシン提供側のファイアウォール(ConoHaだとセキュリティグループ)だけだとリソースを消費し続ける。 ネットワークリソースの消費: 攻撃者が送りつけてくる不正なパケットを、ネットワークインターフェースがすべて受信します。これだけでネットワーク帯域とCPUの割り込み処理リソースを消費します。 sshdプロセスの生成: SSHへの接続試行があるたびに、OSは新しいsshdのプロセスをフォーク(生成)します。プロセスの生成自体がCPUとメモリを消費します。 ログにはsshd[19312], sshd[19314], sshd[19317]... と大量のプロセスIDが記録されており、これが頻繁に発生している証拠です。 認証処理の実行: 生成されたsshdプロセスは、ユーザー名が存在するかどうかを確認し、パスワード認証の準備をします。これには、/etc/passwdへのアクセス、暗号化関連のライブラリの呼び出しなどが含まれ、CPUリソースを消費します。 ログの書き込み: 認証失敗のたびに、sshdはログ(/var/log/auth.logなど)に詳細を書き込みます。頻繁なディスクI/Oが発生し、ディスク性能やCPUリソースを消費します。 PFとsshguardを導入すると、攻撃元IPアドレスごとに最初の数回の試行に対してはリソースを消費するが、ブロックされた後はそのIPからの攻撃による負荷はほぼゼロ。 定常的に動作するPFとsshguard自体のリソース消費量は、 放置した場合の負荷に比べて圧倒的に軽微 。 2. SSHGuardとは sshdなどのログファイルをリアルタイムで監視し、短時間に繰り返される認証失敗を検知すると、その攻撃元IPアドレスをOSのファイアウォール(PF, IPFWなど)と連携して動的にブロックする。 公式サイト:  SSHGuard 特徴 動作原理: ログファイル(例: /var/log/auth.log)をt...

日本の医療制度、地域医療

診療情報管理士の勉強をしているときの覚書。 社会保障制度の4つの柱 社会保険・・・生活上のリスクに対する相互扶助(そうごふじょ)。 国家扶助・・・生存権を保障する最後のセーフティーネット。 公衆衛生・・・病気を未然に防ぐ取り組み。 社会福祉・・・特別な支援を必要とする人々への援助制度。 社会保険の生活上のリスクには、病気以外にも分娩/死亡/失業(雇用保険)も含まれる。 保険という名前だが約5割は国の税金で賄われている。 医療保障制度 1961年(昭和36年)国民皆保険制度が開始。 高度経済成長期の真っ只中。 「行く(19)無医(61)村)」と覚えるらしい。 日本の医療史に関しては下記サイトを参考に。 参考:  日本医療史の概要 | 病院ウェブリク 日本の医療の特徴 疾病構造はがん、心臓病、脳血管障害、糖尿病といった慢性化しやすい生活習慣病が増加傾向。 死因別疾患では悪性新生物が1位 5疾病5事業+新興感染症 5疾病:がん、脳卒中、急性心筋梗塞、糖尿病、精神疾患 5事業:救急医療、災害時医療、へき地医療、周産期医療、小児医療 医療分類 レベルが上がれば病院機能、病気の進行段階、救急度も上がる。 医療提供体制(一次〜三次医療): 医療機関の機能や役割による分類。 「どこで(どのレベルの病院で)医療を受けるか」という話です。 予防医学(一次〜三次予防): 病気の進行段階に応じたアプローチの分類。 「いつ(どの段階で)病気に関わるか」という話。 救急医療(一次〜三次救急): 救急患者の重症度に応じた対応の分類。 「どのくらい緊急で重い症状か」という話。 医療計画 1985年に法律が改正され、日本で初めて「医療計画」が制度化。 参考:  医療法改正の歴史 | 病院ウェブリク 医療の量を増やすから「適切に配置する」への発想の転換。 都道府県が 二次医療圏 というエリアを設定し、ベッド数のコントロール(病床規制)を開始。 医療分類の二次医療(入院や手術が必要な、より専門的な医療)は、「二次医療圏(=複数の市町村ブロック)」で完結することを目指す。 二次医療圏は 医療サービスの自己完結を目指すエリア で医療計画の中心的な単位。 医療と消費税 消費税は1989年(平成元年)から開始。 高齢化が進む日本の 社会保障の安定確保 を目的として開始された。 消費税は社会保障...

Certbotをアップデートしたら「No certificates found.」

certbotをアップデートしたらcertbot renewコマンドで何を表示されなくなったので調査したときの覚書。 Gemini先生(Gemini 2.5 Pro)に教えてもらっている。 環境: FreeBSD 14.2-RELEASE-p1, Python 3.11, certbot 4.11 1.certbotのconfig-dirを設定 certbotのconfig-dirを確認。 参考:  User Guide — Certbot 4.2.0 documentation # certbot --help all | grep -A 2 -- --config-dir   --config-dir CONFIG_DIR                         Configuration directory. (default: /etc/letsencrypt)   --work-dir WORK_DIR   Working directory. (default: /var/lib/letsencrypt) デフォルトで参照する場所にcli.iniファイルを設置。 # vim /etc/letsencrypt/cli.ini # CertbotのパスをFreeBSDの標準に合わせる config-dir = /usr/local/etc/letsencrypt work-dir = /usr/local/var/lib/letsencrypt 確認。 # certbot certificates 2.ログローテーション(log lotate)を設定 /var/log/letsencrypt/に大量のログファイルがあった。 certbotはdefaultで1000個のログバックアップを作るので変更する。 # less /etc/letsencrypt/cli.ini # CertbotのパスをFreeBSDの標準に合わせる config-dir = /usr/local/etc/letsencrypt work-dir = /usr/local/...

日本国以外からのPOSTを拒否するNginx設定をGeoIPで自動化

今まで手動でやってきた日本のIPアドレス一覧を自動化したときの覚書。 日本国外からのPOSTを拒否するNginx設定は前の記事を参考に。 参考:  日本国外からのPOSTを拒否するNginx設定 環境: FreeBSD 14.2-RELEASE-p4, nginx 1.28.0(※geoモジュールは未インストール), python 3.11.13 基本的にAI(Gemini 2.5 Pro)と対話してスクリプトを生成してもらった。 まずはMaxMindのGeoLite2データベースファイル(MMDB形式)を解析するPythonライブラリのインストール。 # pkg install py311-maxminddb バッチスクリプトはAI(Gemini 2.5 Pro)に作ってもらった。 AIへの指示概要(実際は対話しながら何度か修正) データベースファイル(MMDB形式)から日本からのIPアドレスを許可するnginxのconfファイルを生成するスクリプトを教えてください。 環境: 14.2-RELEASE-p4, python 3.11 cronで定期実行できるようにデータベースを更新する処理を加えてください。 Nginxのgeoモジュールはインストールしていない。 「allow 1.0.1.0/24;」のような形式 ファイル名は「JP.inc」(COUNTRY_CODEを使って".inc"の拡張子を追加) 保存するパスは「/usr/local/etc/nginx/conf.d/include/allow/JP.inc」(設定で指定可能) 生成されたシェルスクリプトはGistで公開。 https://gist.github.com/DaikiSuganuma/feec839c3fade0053044aa39d2fe0261 MaxMindのライセンスキーは公式サイトにログインして生成する。 生成されたIPアドレス一覧を確認。 # less /usr/local/etc/nginx/conf.d/include/allow/JP.inc 最後にcronを設定。 # cd /etc/cron.d/ # vim update_geoip MAILTO="info@hoge.jp" # [at Sunday 3am] ...

FreeBSDのPython3.9をアンインストール(Python 3.11だけにする)

Python3.9が2025年10月にend-of-lifeになるので、アンインストールしてみたときの覚書。 既に Python 3.11はインストール済み。 環境: FreeBSD 14.2-RELEASE-p4, Python 3.9.23, Python 3.11.13 1. 依存関係を調査 Python 3.9に依存しているパッケージを確認。 # pkg info -r python39 python39-3.9.23:         py39-sqlite3-3.9.23_10         py39-setuptools-63.1.0_3         py39-packaging-25.0         py39-psycopg-pool-3.2.1         py39-requests-2.32.2         py39-charset-normalizer-3.3.2         py39-urllib3-1.26.18,1         py39-pysocks-1.7.1         py39-psutil-5.9.8         py39-clang-11.0         py39-trio-0.25.0         py39-importlib-metadata-7.1.0         py39-pylsqpack-0.3.18         py39-sortedcontainers-2.4.0         py39-outcome-1.3.0_1   ...

医療資源1・2

診療情報管理士の勉強をしているときの覚書。 医療施設 保健所: 都道府県が設置。 許認可や監視・指導、調査などの行政的な権限を持つ。 感染症の拡大防止のための対策を主導。 市町村保健センター: 市町村が設置。 対人サービスが中心で、健康相談や保健指導を直接行う。 ワクチン接種の会場運営や住民への案内など。 ちなみに犬や猫の殺処分を管轄しているのは、主に保健所または動物愛護センター。 近年、多くの自治体で保健所から動物愛護センターに機能が移管・集約されています。 自治体は所有者不明の犬猫や、飼い主から引き取りを求められた犬猫を収容する義務がある。 病院: 20床以上の医療施設。約8,000施設、減少傾向。200床未満が8割。 一般診療所: 19床以下の医療施設。約100,000施設、無床診療所が増加傾向。 歯科診療所: 約67,000施設、微減傾向。 病院は全国の鉄道の駅(約9,000駅)の数と同じくらい。 一般診療所はコンビニの約2倍。 コンビニは約56,000施設なので「歯科診療所はコンビニより多い」は事実。 美容室は270,000施設なので「美容室は信号機(全国21万機)よりも多い」も事実。 総病床数は157万床。 これは日本の人口あたりの病床数は、世界的に見てもトップクラスに多い。 国民約80人に1床の割合。 医師・看護師の守秘義務 医療者の守秘義務違反は「親告罪(しんこくざい)」(刑法第135条)。 これは、被害者本人(患者さんなど)からの告訴がなければ、起訴・処罰することができないという制度。 患者さん個人のプライバシー保護が最優先のため。 弁護士の守秘義務違反は親告罪。 その他の税理士、公務員、情報処理安全確保支援士などの守秘義務違反は非親告罪で、秘密が漏れたこと自体が社会的な損害と見なされ、国が主体となって処罰することができる。 非親告罪の方が社会への影響の大きさから罰則も重い。 親告罪: 被害者が警察に「この人を罰してください」と告訴(被害届とは別)をしなければ、原則として警察は捜査を開始しませんし、検察も起訴できない。 捜査の「スイッチ」を被害者が持っているイメージ。 非親告罪: 警察は、被害者からの告訴がなくても、犯罪の事実を知れば(例えば、第三者からの通報、内部告発、報道、サイバーパトロールなどで)、自らの判断で捜査を開始することができる。 捜...