投稿

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

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   ...