投稿

ラベル(platform)が付いた投稿を表示しています

SPF, DKIM, DMARC以外のメールサーバーのレピュテーション(評価)

メールを送信するサーバーが迷惑メールのブラックリストに登録されないようにレピュテーション(評価)について調査しているときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2, Postfix 3.10.3 SPF, DKIM, DMARC以外のレプリケーション要素 SPF, DKIM, DMARCは設定済みなので、それ以外でメールを不特定多数に送るときに行っておくべき設定。 参考:  メール送信者のガイドライン - Google Workspace 管理者 ヘルプ 【重要】rDNS(逆引きDNS / PTRレコード)の設定 【重要】PostfixのTLS設定 Google Postmaster Toolsでレプリケーション監視 ARC (Authenticated Received Chain) 対応 送信時はSPFとDKIMを設定しておけばARCがなくても評価が下がることはないと思う。 メールを送ってスパム判定をしてくれる無料サービス。 参考:  Newsletters spam test by mail-tester.com 表示されたアドレスへメール送信して「Then check your score」をクリックする。 rDNS(逆引きDNS / PTRレコード)の設定 メール受信サーバーは、送信元のIPアドレスの逆引き→正引きをしてスパム判定に利用する。 参考:  正引きで確認された逆引きDNSエントリ - Wikipedia メールを送信してきたサーバーのIPアドレスを逆引き PTRレコードに設定されたホスト名を取得 そのホスト名から正引き 最初に接続してきた元のIPアドレスと一致するかどうかを確認 PTRレコードはIPアドレスの管理権限があるサーバーホスティング会社の管理画面で設定できる。 しかしながら、ホスティング会社によっては逆引きDNS(PTRレコード)設定が出来ない所がある。 Conoha VPSは可能。 参考:  IPアドレス|ConoHa VPSサポート さくらVPSは可能。 参考:  DNS逆引きレコードの設定 — さくらの VPS マニュアル WebARENA Indigoは不可。 参考:  IndigoのIPアドレスについて、DN...

NginxのVTSモジュール でパフォーマンス分析(Netdataのインストールは失敗)

nginxのパフォーマンス改善のためにVTSモジュールとNetdataを設定しているときの覚書。 環境: FreeBSD 14.3-RELEASE-p2,  nginx 1.28.0, Netdata 2.5.4, netdata-v2.6.3 1. VTSモジュールとは? Nginx VTS (Virtual Host Traffic Status) モジュールは、Nginxの動作状況をリアルタイムかつ詳細に監視するためのサードパーティ製モジュール。 参考:  vozlt/nginx-module-vts: Nginx virtual host traffic status module 標準のngx_http_stub_status_moduleが提供する基本的な情報よりもはるかに多くのメトリクスを、多彩な粒度とフォーマットで提供する。 Nginx公式の商用版である「Nginx Plus」が提供するライブアクティビティモニタリング機能に匹敵する詳細な情報を、オープンソースで実現できる点が最大の特徴。 2. VTSモジュールの設定 VTSモジュールをオンにしてビルドするのは前の記事を参考に。 参考:  FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える httpディレクティブに統計情報を共有するためのメモリゾーンの定義。 (ファイルを分割して管理している) # cd /usr/local/etc/nginx/ # less conf.d/include/http_tuning.inc #---------------------------------------------------------------------- # 5. VTS #---------------------------------------------------------------------- vhost_traffic_status_zone; 統計情報を表示するエンドポイントの作成。 Basic認証とIP制限をしているディレクティブに記述。 # less conf.d/01_tools.conf     location /vts_status {   ...

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

日本国以外からの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   ...

FreeBSD14にApache+SubversionをインストールしてNginxからリバースプロキシ

Subversionの容量が増えてきたので、複数サーバーにSubversionをインストールしてリポジトリを分けようとしているときの覚書。 環境: FreeBSD 14.0, Apache 2.4.59, Subversion 1.14.3 1. Apacheをインストール pkg経由でインストール。 # pkg search apache # pkg install apache24 ビルドオプションを確認。 # apachectl -V Server version: Apache/2.4.59 (FreeBSD) Server built:   unknown Server's Module Magic Number: 20120211:131 Server loaded:  APR 1.7.3, APR-UTIL 1.6.3, PCRE 10.43 2024-02-16 Compiled using: APR 1.7.3, APR-UTIL 1.6.3, PCRE 10.43 2024-02-16 Architecture:   64-bit Server MPM:     prefork   threaded:     no     forked:     yes (variable process count) Server compiled with....  -D APR_HAS_SENDFILE  -D APR_HAS_MMAP  -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)  -D APR_USE_FLOCK_SERIALIZE  -D APR_USE_PTHREAD_SERIALIZE  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT  -D APR_HAS_OTHER_CHILD  -D AP_HAVE_RELIABLE_PIPED_LOGS  -D DYNAMIC_MODULE_...

FreeBSD 14 + Nginx + PHP + MariaDB + Postfixの環境を構築(2024年版)

ConohaでFreeBSDの仮想マシンを設定しているときの覚書。 環境: Conoha VPS 8GBプラン, FreeBSD 14.0 目次 初期設定 Nginxをインストール php8.3をインストール MariaDBをインストール phpMyAdminをインストール SSL設定 Postfix + DKIM(送信ドメイン認証)をインストール 次回取り込む設定(2025/08/27更新) FreeBSD14 + PHP8.3 + OPcache FreeBSD14 + Nginx + fail2banで不正なアクセスを自動ブロック FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える NginxのVTSモジュール でパフォーマンス分析(Netdataのインストールは失敗) コントロールパネルでPTRレコード(IPアドレスからの逆引きDNS)を設定する。 メールを送信するサーバーの評価(レピュテーション)を高める重要設定。 1.初期設定 keymapが日本語になっているので英語キーボードへ変更する。 管理画面のコンソールから設定する(keymap="jp"をコメントアウト)。 # less /etc/rc.conf #keymap="jp" あとはSSHでログイン。 FreeBSDのシステムアップデート。 # freebsd-update fetch # freebsd-update install パッケージマネージャをアップデート。 インストール済みパッケージを確認。 # pkg update # pkg upgrade # pkg info Timezone確認。 # date 時刻があってなければタイムゾーンを設定。 # bsdconfig シェルを確認してBashをインストール。 # echo $SHELL # pkg search bash # pkg install bash bash-completion 画面の指示通りにする。 ログインシェルなので.bashrcでなくて.bash_profileに記述する。 # vi .bash_profile bashに切り替えてデフォルトをBashにする。 # bash # chsh -s /usr/local/...

FreeBSD + Nginx + PHP + MariaDBの環境を構築

ローカルの仮想マシンにウェブ開発環境を設定しているときの覚書。 初期設定は前の記事を参考に。 参考:  FreeBSD13.1の仮想マシンをインストールして初期設定 環境: FreeBSD 14.0 OSのバージョン確認 # freebsd-version 14.0-RELEASE-p6 インストール済みのパッケージ情報を表示。 # pkg info 自動起動するサービスはbsdconfigが一覧で分かりやすい。 # bsdconfig 1.nginxのインストール 公式リポジトリを検索。 # pkg search nginx インストールしてconfの場所などビルドオプション確認。 # pkg install nginx # nginx -V nginx version: nginx/1.24.0 built with OpenSSL 3.0.12 24 Oct 2023 TLS SNI support enabled configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --user=www --group=www ... 自動起動ON、起動、確認。 # service nginx enable # service nginx start # service nginx status 設定ファイルを編集。 # cd /usr/local/etc/nginx/ # less nginx.conf worker_processes  auto; events {     worker_connections  1024; } http {     include      ...

nginxで国単位のIPアドレス制限

セキュリティのために日本国外からのアクセスをブロックしようとしたときの覚書。 環境: CentOS Stream 8, nginx 1.20.2, PostgreSQL 14.2 IPアドレスから国を判定するためにMaxMind社が提供しているデータを使う。 MaxMind社はIPアドレスの位置情報を提供しているアメリカの会社。 参考:  MaxMind - Wikipedia nginxにGeoIP2モジュールを追加するとパフォーマンスに影響が出そうな気がするので、まずは国ごとのIPアドレスリストを生成することから始めてみた。 MaxMindはAPIを幅広く提供していて使いやすい。 GeoIP2 and GeoLite2 Database Documentation | MaxMind Developer Portal GeoLite2はクリエイティブコモンズライセンスで提供されている。 配布する場合はクレジット表示が必要。 参考:  GeoLite2 Free Geolocation Data | MaxMind Developer Portal 国別IPアドレスリストをPostgreSQLにインポート 公式サイトを参考に。MySQLへのインポート方法もある。 PostgreSQLにはcidrというIPv4とIPv6を格納するデータ型があるので便利。 Importing GeoIP2 and GeoLite2 databases to PostgreSQL | MaxMind Developer Portal PostgreSQL: Documentation: 14: 8.9. Network Address Types 簡単な手順 メールアドレスでサインアップする。 マイページ左メニューの「Download Files」から「GeoLite2-Country-CSV」zipファイルをダウンロード。 ASNはAS番号を割り当てられた組織 参考:  自律システム (インターネット) - Wikipedia PostgreSQLにインポート CSVファイルを開発サーバーに置いて、DBeaverでデータベースを作成して、公式サイトのcreate table文を実行。 参考:  Importing GeoIP2 and GeoLi...

CentOS Stream 8 + Nginx + PHP + MariaDB + Postfixの環境を構築(2021年版)

新規VPSを借りて設定したときの覚書。 環境: さくらVPS、CentOS Stream 8 サーバー作成直後の初期設定は下記記事を参考に。 今回は同じ秘密鍵を使うのでインスタンス作成してすぐSSHログインできる。 【CentOS8】さくらVPSサーバーの初期設定 2020年版 目次 初期設定 nginxのインストール PHPのインストール MariaDBをインストール phpMyAdminをインストール SSLの設定 Postfix + DKIM(送信ドメイン認証)をインストール cron設定 ネットワーク回線速度とベンチマーク測定 1.初期設定 SSHログインしたらまずはアップデート。 # dnf update ホスト名変更 # hostnamectl set-hostname server02.webrec.co.jp # hostnamectl status タイムゾーン確認 # timedatectl status SELinux確認 # getenforce これで再起動 # reboot さくらVPSの管理コンソールでパケットフィルタからsshの他にWeb(http, https)を許可。 DNS(管理用の名前解決)の設定もしておく。 EPELリポジトリ追加 # dnf install epel-release # dnf update certbotをインストール。 python3もインストールされる。 # dnf install certbot pipを最新にする # pip3 install --upgrade pip pipモジュール一覧、アップデート可能な一覧 # pip list # pip list -o 過去の経験 からcertbot周りを最新にしておく。 # pip install -U certbot requests setuptools urllib3  Gitの設定 # git config --global user.name "Hoge" # git config --global user.email "hoge@company.co.jp" GitLabの秘密鍵を登録しておく(他のサーバーからコピペ)。 # vi .ssh/id_r...