あなたの Linux サーバー への SSH ブルートフォースを止める

SSH Protector は軽量な Linux デーモンで、認証ログをリアルタイムに解析し、カーネル内の nftables/iptables ルールによって不正な IP アドレスを自動的に破棄することで SSH ブルートフォース攻撃を止めます。常駐メモリは 10 MB 未満です。SSH Protector デーモンは systemd-journald を読み取り(rsyslog が動作しているホストでは /var/log/auth.log を読み取り)、Failed password と Invalid user のイベントを送信元アドレスごとに数え、ある送信元が設定したしきい値を超えた時点で、攻撃元の /24 全体を覆う netfilter ルールを 1 本だけ適用します。判定はすべて保護対象ホスト自身の上で計算されるため、コントロールプレーンが停止していても SSH ブルートフォース防御は動き続け、再起動後にはルールセットがディスクから再構築されます。

1 つのコマンドでインストール
curl -fsSL https://sshprotector.com/download/installer | sudo sh

無料版は1台のサーバーの完全な保護を含みます。 Linux サーバー向け SSH ブルートフォース防御

単一の静的バイナリ、systemd ベースのあらゆる Linux ディストリビューション

  • Debian · Ubuntu · Fedora
  • RHEL · Alma · Rocky · Alpine
  • x86-64 · ARM64 · nftables および iptables バックエンド
  • 常駐メモリ 10 MB 未満 · CPU 使用率はほぼゼロ

エージェントをインストール

全員が同じ 1 つのバイナリを使い、ダウンロードにアカウントは不要です。先にインストールして、サーバーの接続は後からでも構いません - エージェントはパネルの登録トークンを求め、貼り付けるまでは何も保護しません。

インストールスクリプトをダウンロード

systemd ベースの最新の Linux - Debian、Ubuntu、RHEL/CentOS/Alma/Rocky、Fedora - の x86-64 または ARM64 に対応。スクリプトは同じサービスをインストールし、多数のサーバーに展開する場合に向いています。

公開された SSH ポートは 24 時間クレデンシャルスタッフィングの通信を受け続けます

スキャン型のボットネットはルーティング可能な IPv4 アドレス空間全体を走査し、TCP/22 で応答するすべてのホストにパスワードリストを試します。インターネットから到達できる SSH デーモンは、そのホストが企業の踏み台であっても単一の VPS であっても、同じ通信を受け取ります。

1 日あたり数千件の認証失敗
TCP/22 で応答する新しいホストは、アドレスがルーティング可能になってから数時間で SSH 認証の失敗を記録し始めます。インターネットに面した一般的なサーバーは、Failed password と Invalid user のイベントを毎日数千件 systemd-journald に書き込みます。しかもそれらは、管理者 1 人が確認できる速度をはるかに超えて入れ替わるアドレス帯から到着します。
決して認証に成功しない通信のために CPU・メモリ・ジャーナル書き込みが消費される
SSH 認証の試行 1 回ごとに、TCP ハンドシェイク、SSH 鍵交換、/etc/pam.d/sshd を経由する PAM 参照、そして systemd-journald への同期書き込みが発生します。したがって持続的なブルートフォースの流れは、ホストに恒常的なバックグラウンド負荷をかけ、ジャーナルの保存容量を膨らませ、本来の管理用ログインを sshd の MaxStartups キューの後ろへ押しやります。そのいずれも、攻撃者は認証に成功しなくても引き起こせます。
パスワードを 1 つ言い当てられれば完全な侵害
正しいパスワードが 1 つあれば、そのアカウントの権限でインタラクティブシェルが得られます。ランサムウェアの展開、データの持ち出し、ホスト自身のアドレスから送信される迷惑メールなどです。脆弱なパスワードや公開された漏洩データから使い回されたパスワードは、辞書攻撃の前に数日で破られ、認証ログはその成功した試行を他の行とまったく同じように記録します。
pam_faillock は攻撃を本物の管理者のロックアウトに変えてしまいます
/etc/pam.d/sshd に設定された PAM スタックは pam_faillock で連続失敗を数え、deny のしきい値に達するとアカウントをロックします。したがって、有効なユーザー名だけを言い当てた攻撃者は — パスワードは一度も当てていなくても — そのカウンターを意図的に作動させ、本物の管理者をホストから締め出せます。結果として、防御機構そのものが生み出すサービス妨害が成立します。

SSH Protector は判定をユーザー空間から netfilter の input フックへ移します

SSH Protector デーモンは認証失敗イベントを送信元ネットワーク単位で相関させ、攻撃元の /24 全体を破棄する nftables ルールを 1 本適用します。そのルールが存在した時点から、netfilter はカーネルの input フックでパケットを破棄します — sshd が接続を受け付ける前、PAM 参照が走る前、そしてジャーナルに何かが書かれる前です。CPU 負荷、ジャーナル量、パスワード検証まで到達する試行回数が同時に下がります。

サーバー数による追加課金のない定額プラン

Free は永久無料でカード不要。有料プランは定額で、含まれるサーバー数が決まっています。

Free

サーバー 1 台
$0/月

1 台のサーバー向けの基本的な SSH 保護。

  • SSH 総当たり対策
  • ソフトホワイトリスト
  • 最小限の統計

Solo

サーバー 1 台
$9/月

本番サーバー 1 台の完全な保護。

  • Free のすべて
  • FTP 総当たり対策
  • 完全な統計
  • メール通知
  • 基本監査

Pro

人気サーバー 5 台まで
$15/月

チームや小規模なサーバー群に。

  • Solo のすべて
  • 厳格ホワイトリストとグループ
  • エクスポート付き完全監査
  • 拡張統計
  • 共有の行動ブロックリスト

Enterprise

サーバー 50 台まで
$99/月

多数のサーバーを持つ企業向け。

  • Pro のすべて
  • 管理者・モデレーター権限の付与
  • 優先サポート
  • 共有の行動ブロックリスト

プランに含まれる台数をあと 1 台だけ超えたいときは、上位プランに移らず 1 台 $3/月 で追加できます。

Pro を 14 日間無料で - カード不要

登録すればご自身のサーバーでサブネット単位のブロック、Telegram 通知、GeoIP、共有脅威データベースを試せます。期間終了後はアカウントが自動で Free に戻り、保護は動き続けます。請求は発生せず、解約手続きもありません。

無料トライアルを開始

Linux で SSH ブルートフォース攻撃を止める方法(3 つの方法)

sshd に到達する通信を減らす設定変更は 3 つあり、互いに積み重なります。最初の 2 つは OpenSSH とホストのファイアウォール以外に何も必要としません。3 つ目こそ Fail2ban、CrowdSec、SSHGuard、SSH Protector が競う領域です。この順序で進めるのが妥当です。

  1. 01sshd_config でパスワード認証を無効にする

    sshd がパスワードを完全に受け付けなくなれば、パスワード推測攻撃には推測する対象が残りません。/etc/ssh/sshd_config.d/ 配下の drop-in ファイルに PasswordAuthentication no と KbdInteractiveAuthentication no を設定すれば、資格情報を推測する攻撃面はすべて消えます。さらに PermitRootLogin prohibit-password は鍵による root アクセスを残しつつ、最も攻撃されるアカウント名を閉じます。ディレクティブそのものより順序が重要です。まず公開鍵を配置し、次に開いたままの 2 つ目のセッションで鍵による認証が通ることを確認し、それから初めて sshd をリロードします。順序を誤ったときの打ち間違いは、戻る手段のないまま管理者をリモートホストから締め出します。

    # /etc/ssh/sshd_config.d/10-keys-only.conf
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PermitRootLogin prohibit-password
    詳しいガイド
  2. 02そのポートに到達できるインターネットの範囲を狭める

    Port ディレクティブで sshd を非標準ポートへ移すと、無差別なスキャン通信は消えますが、それ以外の効果はありません。全ポート範囲のスキャンは数秒でデーモンを見つけ直すため、ポート変更が買えるのは静かなログであって安全性ではありません。一方でポートをフィルタすれば、消えるのは攻撃者そのものです。SSH ポートを VPN のレンジや固定のオフィスプレフィックスからのみ受け付ける nftables ルールがあれば、リストにない送信元は TCP ハンドシェイクすら完了できません。sshd_config の AllowGroups は同じ露出をデーモン側で狭め、そもそも認証できるローカルアカウントを制限します。管理者の顔ぶれが決まっているホストでは、どちらも設定に含めるべきです。

    # /etc/ssh/sshd_config.d/20-exposure.conf
    Port 2202
    AllowGroups ssh-admins
    
    # nftables: only the VPN and the office reach it at all
    nft add rule inet filter input tcp dport 2202 \
      ip saddr { 10.8.0.0/24, 203.0.113.7 } accept
    詳しいガイド
  3. 03送信元ネットワークが十分な試行回数を貯める前に遮断する

    Fail2ban は標準的な最初の答えであり、妥当な答えでもあります。fail2ban-server プロセスが認証ログを解析し、findtime の中で失敗回数を数え、bantime の長さだけ iptables または nftables を設定する action を呼び出します。この設計の限界は偶発的なものではなく構造的なものです。既定の jail は一度に 1 アドレスしか遮断せず、遮断はタイマーで失効し、ホスト間では何も共有されず、正規表現ベースの jail はログ形式の変更後に静かに一致しなくなることがあります — 防御が止まったという合図は一切ありません。CrowdSec は共有の問題にコミュニティのブロックリストと独立した bouncer プロセスで答えます。SSHGuard は状態をメモリ上に保持します。DenyHosts は /etc/hosts.deny に書き込みますが、これは現在の OpenSSH ビルドがもうリンクしていない TCP wrappers に依存します。SSH Protector デーモンは攻撃元の /24 全体を nftables ルール 1 本で遮断し、ルールセットを再起動をまたいで保持し、1 台の保護対象ホストが学んだことを他のすべてのホストと共有します。

    # /etc/fail2ban/jail.d/sshd.local
    [sshd]
    enabled  = true
    backend  = systemd
    maxretry = 4
    findtime = 10m
    bantime  = 1h
    詳しいガイド

サブネット 1 規則で覆える範囲

スライダーを動かしてください。これはベンチマークではなく算数です。

1 アドレスずつ遮断する場合

32 個のファイアウォール規則

128 回の試行が今も sshd に届く

/24 全体を遮断する場合

1 個のファイアウォール規則

4 回の試行が今も sshd に届く

/24 には 256 個のアドレスが入ります。アドレス単位で遮断すると、ボットは次のアドレスへ移るたびに割り当てを取り戻します。範囲ごと遮断すれば一度も取り戻せません。ここに測定値は 1 つもなく、エージェントが行うのと同じ計算です。

SSH Protector、Fail2ban、CrowdSec、SSHGuard、DenyHosts、Wazuh

Linux ホスト上で同じ問いに答える 6 つのツールです。表はそれぞれを既定の設定で説明しています。誰かが追加の作業をしない限り、ホストが実際に動かすのはその既定の設定だからです。

ツール遮断の単位再起動後の状態ログの取得元適用される位置ホスト間のレピュテーション
SSH Protector/24 全体、ASN を考慮ルールセットをディスクから再構築systemd-journald の API、auth.log、FTP デーモンのログnetfilter の input フックにある nftables セットあり — すべての保護対象ホストで集約
Fail2ban既定の jail では 1 度に 1 アドレスSQLite データベース。bantime が切れるまで再起動後も復元auth.log のポーリング、pyinotify、または backend = systemdaction 経由で iptables、nftables、ipsetなし — 各ホストが単独で判断
CrowdSecシナリオに応じてアドレスまたはレンジローカルの判定データベース。復元される設定済みパーサーによるログ収集独立した bouncer プロセス経由で nftables または iptablesあり — コミュニティのブロックリスト
SSHGuard1 アドレスメモリ上に保持。明示的なブロックリストファイルがある場合のみ永続化journald または syslog ファイルからのログパイプnftables、iptables、pf、ipfw のバックエンドなし
DenyHosts1 アドレス/etc/hosts.deny。ファイルとして永続化auth.log のみ、SSH のみTCP wrappers。現在の OpenSSH ビルドはもうリンクしていない任意の中央同期サーバー
Wazuh1 アドレスアクティブレスポンスは独自のタイムアウトで失効エージェントのログコレクタが中央マネージャーへ送信エージェント上の firewall-drop アクティブレスポンススクリプト中央マネージャー — それを運用する手間と引き換え

各セルは既定の挙動を説明しています。Fail2ban は独自の action で CIDR プレフィックスを遮断させられますし、CrowdSec の bouncer は ipset に向けられますし、SSHGuard にはブロックリストファイルを与えられます — この列が述べているのは、その作業をしない場合に何が起きるかです。SSH Protector の行は、このサイトが内側から検証できる唯一の行です。ほかの行は各プロジェクト自身のドキュメントから読み取ったもので、下のガイドで詳しく扱っています。

Fail2ban との詳細な比較を読む

SSH ブルートフォースの試行が Linux で実際に止められる場所

この分野のツール — Fail2ban、CrowdSec、SSHGuard、DenyHosts、Wazuh、そして SSH Protector デーモン — はすべて同じログを読み、同じファイアウォールに書き込みます。違いを生むのは、Linux の認証経路のどの段階でそれぞれが動くか、そしてその時点でホストがすでにどれだけ費やしているかです。

sshd と PAM スタック
受信接続は sshd に到達します。sshd は資格情報を調べる前に TCP ハンドシェイクと SSH 鍵交換を完了し、その後 /etc/pam.d/sshd に宣言された PAM スタックへ資格情報を渡します。pam_unix がパスワードを検証し、pam_faillock が連続失敗を数えます。この経路には通信を拒否する箇所がありません — 最初のパスワードが検証される時点で、sshd はすでにセッションを確保し CPU を消費しています。MaxAuthTries と LoginGraceTime が制限するのは 1 本の接続が試せる範囲であって、攻撃者が開く接続の数ではありません。sshd_config だけでは分散型ブルートフォースに答えられない理由がここにあります。
systemd-journald と /var/log/auth.log
認証の結果はすべて systemd-journald に書き込まれ、rsyslog が動作しているホストでは同じレコードが Debian と Ubuntu の /var/log/auth.log、あるいは RHEL・CentOS・AlmaLinux・Rocky Linux の /var/log/secure にも届きます。「この送信元は 2 分間に 40 回失敗した」と分かるのは認証ログだけです。カーネル内のパケットは認証結果を持たないからです。ログ解析のオーバーヘッドはその知識の代価であり、この分野のどのツールも支払います。SSH Protector デーモンはテキストファイルを追尾するのではなくネイティブ API 経由でジャーナルを読むため、1 行ごとの正規表現コストが消え、ディストリビューションがログ形式を変更して jail が静かに一致しなくなるという種類の障害もなくなります。
netfilter:nftables、iptables、そしてセット
遮断はカーネル内にルールが存在して初めて成立します。nftables も旧来の iptables もどちらも netfilter を設定し、その input フックはパケットが sshd のソケットへキューイングされる前に走ります。したがって破棄されたパケットはユーザー空間のプロセスもセッションもジャーナル書き込みも消費しません。nftables のセット — あるいは iptables の背後にある ipset — は多数のプレフィックスを 1 回のルール参照の後ろに収めます。だからこそ、パケットレートにおける IP ブラックリスト方式の実コストを決めるのは、遮断済みアドレスの数ではなくルールの数です。SSH Protector は遮断した /24 ごとに nftables セットのエントリを 1 つ書き、そのセットを永続化します。結果として、パケットごとの処理を行うのはユーザー空間のデーモンではなくカーネルレベルのパケットフィルタです。
eBPF と XDP、そしてそれらが解決しないこと
XDP に接続された eBPF プログラムはネットワークドライバでパケットを破棄します。netfilter より早く、より高いパケットレートに耐えられるため、eBPF は volumetric なフラッドに対する正しい道具です。しかし XDP プログラムは /var/log/auth.log を読めず、PAM の結果も見えず、誤ったパスワードと正しいパスワードを区別できません。したがってどの設計でも、どのプレフィックスを破棄するかという判断は依然としてユーザー空間のログ解析から生まれます。SSH ブルートフォースの通信は、低いパケットレートで価値の高い認証試行を運ぶものであり、netfilter の input フックはホストが負荷に気づくずっと前にそれを破棄します。工学的な難しさはすべて「何を破棄するか」の判断に集中しています。
IP ブラックリストと、遮断の単位が重要な理由
IP ブラックリストは、攻撃者が遮断を招いたアドレスを保持している間しか持ちません。スキャン型ボットネットは同じ割り当ての内側でアドレスを入れ替えるため、アドレス単位の遮断は同じ /24 の次のアドレスごとに、まるごと新しい試行回数の枠を与えてしまいます — 1 レンジあたり最大 256 枠です。CIDR プレフィックスとして表現された遮断は、その枠をレンジ全体に対してちょうど 1 回だけ与えます。これはベンチマークではなく算術であり、下の計算機は SSH Protector デーモンが行っているのと同じ数え方を示しています。

ダウンロードから保護完了まで数分

設定ファイルもコマンドラインも不要:インストーラーをダウンロードして実行し、sudo の確認を承認するだけです。

  1. アカウントを作成

    メールアドレスまたは Google/GitHub で登録。クレジットカードは不要です。

  2. インストーラーをダウンロード

    アクセストークンが埋め込まれた、あなた専用の署名済みインストーラーが提供されます。

  3. サーバーで実行

    エージェントが SSH ポートを自動検出し、現在の IP をホワイトリストに追加するため、自分自身を締め出す心配はありません。

  4. 完了

    数秒でサーバーがパネルにオンライン表示され、適切な初期設定で攻撃者のブロックを開始します。

ブルートフォース防御、共有レピュテーション、地理ポリシー、そして群管理

認証ログの解析が駆動するカーネルレベルのパケットフィルタリングに、テナント横断の攻撃者レピュテーション、地理ポリシー、ジャストインタイムアクセス、集中的な群管理を重ねています。

SSH・SFTP・FTP のブルートフォース防御

SSH Protector デーモンは systemd-journald と FTP デーモン自身のログから認証失敗イベントを読み取り、送信元プレフィックス単位で相関させ、同じホストの nftables に遮断を書き込みます。判定経路がマシンを離れることはないため、コントロールプレーンに到達できない状態でも遮断はカーネルに適用されます。

アドレス単位ではなく CIDR プレフィックス単位の遮断

スキャン型ボットネットは同じ割り当ての内側でアドレスを入れ替えるため、アドレス単位の遮断は次のアドレスごとに新しい枠を与えてしまいます。SSH Protector は ASN データを用いて送信元をその広告プレフィックスへ解決し、/24 全体を統合された nftables セットの単一エントリとして遮断します。

テナント横断の攻撃者レピュテーション

1 台の保護対象ホストへの攻撃は、その送信元プレフィックスのレピュテーションスコアをプラットフォーム上の他のすべてのホストに対して引き上げます。集約レピュテーションが最も悪いプレフィックスは、特定のサーバーに対して認証を 1 回も試みないうちに netfilter の input フックで破棄されます。

ローカルで評価される地理ポリシー

地理ポリシーは SSH と FTP の認証を、組織が実際に業務を行っている国に限定します。国の参照テーブルはエージェントへ配布されローカルで評価されるため、地理フィルタリングはネットワークの往復を増やさず、コントロールプレーンがオフラインでも動作し続けます。

MFA 付きジャストインタイムアクセス

ジャストインタイムアクセスは SSH ポートを既定でフィルタしたままにし、MFA で確認された要求の後に送信元アドレス 1 つだけへ開放します。有効期限タイマーと自動クローズ付きです。タイマーが終われば nftables ルールは削除されます。誰かが失効を覚えているかどうかに関係なくです。

ホワイトリストと厳格モード

ホワイトリストに載ったアドレスとダイナミック DNS 名はすべての遮断経路から除外され、ホワイトリストはあらゆるブロックルールより先に評価されます。厳格モードでは、nftables のポリシーは保護対象ポートへの接続をホワイトリストの送信元からのみ受け付け、それ以外はレピュテーションを評価することなく破棄します。

アラートと追記専用の監査ログ

遮断レートの急増、エージェントのオフライン化、設定のドリフトは、メール・Telegram・Slack・Webhook で届きます。ポリシー変更、遮断、解除、ホワイトリストの編集はすべて、実行者と送信元アドレスとともに追記専用の監査ログに書き込まれます。

単一の静的バイナリ、常駐 10 MB 未満

エージェントは systemd ユニットとして動作する静的リンクされた実行ファイル 1 つで、常駐メモリは 10 MB 未満、認証イベントの合間の CPU 使用率はほぼゼロのままです。同じバイナリが x86-64 と ARM64 上の systemd ベースディストリビューションすべてを対象とし、インタープリタも Python ランタイムも解決すべきパッケージ依存も必要ありません。

受信ポート不要の集中的な群管理

パネルはサーバー台帳、ポリシーテンプレート、エージェントのバージョン固定とロールバック、グループ、群全体への一括操作を保持します。管理通信はエージェントが開始する送信方向の HTTPS なので、集中管理のために保護対象ホストで受信ポートが開かれることはありません。

常時有効な pam_faillock ロックアウト防御

常時有効なロックアウト防御は、ホストを管理するアカウントに対して pam_faillock が悪用されないことを保証します。SSH Protector デーモンは /etc/pam.d/sshd の deny しきい値に達する前に送信元プレフィックスを遮断し、保護対象アカウントの faillock カウンターを解除します。この挙動は無料プランを含むすべてのプランで既定で有効です。

Linux サーバーの保護が本当に必要になるとき

Linux マシンへのリモートアクセスが、理論上のリスクではなく日常のリスクに変わる15の状況です。このうちのどれかにご自身のサーバーが当てはまるなら、そのパスワードはすでに試されています。

0.0.0.0/022 · 21LISTEN 0.0.0.0$sshduptime 412dno consoleone host · always on

Linux の SSH サーバーを保護する必要があるとき

最初のグループは、マシンそのものについてです。どこに置かれ、誰が到達でき、ほかに何が待ち受けているか。ここに挙げる状況のどれも間違いではありません。いずれも Linux サーバーのごく普通で妥当な運用形態であり、そのすべてがパスワード入力欄をインターネット全体の前に置いています。

  1. 01

    SSH がどこからでも届き、パスワード認証もまだ有効になっている

    ポート 22 が、前段の VPN も踏み台もないまま、世界中のどのアドレスにも応答します。レンタルマシンではこれが既定の状態です。事業者はグローバルアドレスを渡し、サーバーの設定はまさに SSH で行い、設定が終わってもポートはそのまま残ります。しかも多くの場合、鍵認証と並んでパスワード認証が有効なままです。

    IPv4 の全範囲を走査するのに要するのは数日ではなく数分です。割り当てられたばかりのアドレスは、ネットワークに現れてから数時間で接続試行を受け始めます。サーバーに名前も証明書も実在の利用者も存在しないうちからです。その瞬間から、マシンは見知らぬ相手に24時間応答し続けます。

    • グローバルアドレスで到達できる VPS またはクラウドインスタンス
    • ルーターの内側にあり、ポート 22 が転送されているオフィスのマシン
    • 移行作業のため「一時的に」開けたまま閉じ忘れたサーバー
    • アドレスをどこにも公開していないのに、走査対象の範囲に含まれているマシン
  2. 02

    クラウドイメージには、誰もが知っているユーザー名が最初から入っている

    ディストリビューションや事業者のイメージには、既知の最初のアカウントが付いてきます。素の VPS なら root、Ubuntu なら ubuntu、ほかにも ec2-user、debian、admin、pi。推測作業の半分、つまり有効なユーザー名を見つける工程は、マシンが初回起動を終える前にすでに片付いています。

    だからこそ、公開されたサーバーのログには一日中、同じ短い名前の並びが現れます。攻撃者は何も調べる必要がありません。そのアカウントは標準であり、インターネット上の Linux ホストの相当な割合に存在し、その多くでは今も直接ログインに使えるからです。

  3. 03

    借りた VPS 1台にサイトもデータベースもバックアップも載っている

    小規模な会社や個人開発のプロジェクトでは、ウェブサーバー、データベース、キュー、夜間ダンプを1台にまとめていることがよくあります。切り替え先の2台目はなく、専任の管理者もいません。デプロイのためにログインする人が、そのまま保守も担っています。

    事業者側の保護はここまで届きません。ホスティング会社が遮断するのは大量のトラフィックであってパスワード推測ではありません。絶えず入れ替わるアドレスからの毎秒数回の試行は、ネットワークから見ればごく普通の通信であり、不正利用の窓口が気づくことはありません。

    • 余裕がない:侵害されればプロジェクトは遅くなるのではなく止まる
    • バックアップも同じディスク上にあることが多く、ランサムウェアはまさにそこを狙う
    • auth.log を読む担当は誰もおらず、試行は気づかれないまま積み上がる
  4. 04

    その Linux 機はルーター・NAS・機器であって、誰もサーバーだと思っていない

    ファイアウォール機器、ネットワークストレージ、店舗の POS を動かす Raspberry Pi、機械室の制御装置、机の下でバックアップを回すミニ PC--どれも Linux であり、どれも SSH が有効で、そしてどれも誰かの「サーバー一覧」には載っていません。

    忘れられるのは、まさにこういうマシンです。一度設定され、そのまま動き続け、パスワードを決めた日と次に誰かが目を向ける日とのあいだに何年も流れます。その間ずっと、ポートはインターネットに応答し続けています。

  5. 05

    同じホストで FTP も待ち受けている

    Linux サーバーが公開するサービスは1つとは限りません。顧客やデザイナーとファイルをやり取りする FTP と、管理用の SSH が同じアドレスに同居しているのはよくある構成で、しかも FTP のアカウントはたいていマシン上のどれよりも古いものです。

    開いているポートはそれぞれ独立した扉で、それぞれに認証画面があります。攻撃側は分業しません。同じ走査基盤が2つを順に試し、弱いほうがホスト全体の帰趨を決めます。どちらの扉から入っても、立っているのは同じオペレーティングシステムの上だからです。

    • 取引先のために一度作られ、その後見直されていない FTP アカウント
    • 平文の FTP は資格情報をそのままネットワークに流す
    • オフィスの半分がパスワードを知っている共有のアップロード用アカウント
users triedrootadminubuntudeploypostgrestestpassword:PasswordAuthentication yesfailed9 999

アカウントと鍵が管理下から外れていくとき

2つ目のグループは、そのマシンの資格情報を誰が持っているかという話です。鍵、デプロイ用アカウント、取引先、古いパスワードは、誰かが見直す速さより早く積み上がり、そのすべてが同じ入力欄に行き着きます。実際の侵入の多くは、ここから始まります。

  1. 06

    開発者や取引先がそれぞれのログインを持っている

    外部の開発者、ビルドをアップロードする必要のあるデザイナー、サイトを保守する制作会社、業務アプリケーションのベンダー。それぞれがアクセスを求め、それぞれにアカウントが作られるか authorized_keys に鍵が追加され、その大半は作業が終わって何年も経った今も生きています。

    その資格情報がどう保管されているかは見えません。秘密鍵が暗号化されないままノートパソコンに置かれているかもしれませんし、共有のクラウドフォルダーかもしれませんし、1年前にその会社を辞めた社員のホームディレクトリかもしれません。一度与えたアクセスは、たいていプロジェクトよりも、そして与えた相手本人よりも長く生き残ります。

    • 一度のデプロイのために追加され、その後削除されていない鍵
    • 個人ごとのアカウントではなく、取引先全員で共有された1つのアカウント
    • 取引先の担当者が入れ替わっても、こちらには知らされない
  2. 07

    デプロイや自動化のアカウントは二要素認証を使えない

    CI パイプライン、バックアップスクリプト、監視エージェント、rsync のジョブ、構成管理ツールは、人がいない状態でサインインしなければなりません。したがって、人にコードを尋ねる仕組みでは保護できません。そのうえ、これらは通常どの担当者よりも広い権限を持っています。

    そのため、こうしたアカウントはそのまま残ります。予測しやすい名前、何年も変わっていない鍵やパスワード、そして誰にも気づかれずに午前3時でも通るログイン経路。攻撃者が狙うのはまさにここです。決して変わらないからこそです。

  3. 08

    パスワード認証を「念のため」有効なままにしてある

    鍵認証は設定済みで、パスワードは予備として有効なままにしてある--鍵を失くした日のため、鍵を持たない同僚のため、1年誰も試していないコンソールのため。意図は妥当です。しかし結果として、鍵の運用方針は攻撃者から見れば任意のものになります。

    鍵が存在することは、推測攻撃には関係ありません。マシン上のどれか1つのアカウントでも PasswordAuthentication が yes である限り、辞書攻撃には入り口があり、サーバー上でいちばん強い鍵もそれを1秒たりとも遅らせません。

  4. 09

    そのパスワードはすでに流出リストに載っている

    侵入の成功例の多くは、巧妙でも何でもありません。掲示板や通販サイト、古いメールアカウントで使っていたパスワードを使い回していて、それらが流出し、同じ文字列が今、走査ボットのめくる辞書に載っている--それだけです。

    そうなると推測は確率の問題ではなく、時間割の問題になります。正しいパスワードはすでにリストにあり、残る問いはボットがいつあなたのアドレスに到達するかだけです。ここでは複雑さの要件は助けになりません。そのパスワードは、あなたが定めた規則をすべて満たしている可能性が高いからです。

    • サーバーのアカウントと個人サービスで同じにしているパスワード
    • 自社ではなく取引先のシステムから流出した資格情報
    • ポリシーは通すのに辞書にはすでに載っている型:Summer2024!、会社名1
  5. 10

    パスフレーズなしの秘密鍵が誰かのノートパソコンにある

    鍵がパスワードより強いのは、鍵ファイルがコピーされるその瞬間までです。盗まれたノートパソコンの中の暗号化されていない id_rsa、同期されたクラウドフォルダー、公開レジストリに push されたコンテナイメージ、うっかりコミットされたリポジトリ--いずれも、推測する必要すらない有効な資格情報です。

    サーバーには区別がつきません。署名は正当で、アカウントは実在し、セッションは開発者本人のものとまったく同じに見えます。だから有用な問いは、誰が鍵を持っているかだけではなく、その開発者が一度も行ったことのない場所から接続が来たときに何が起きるか、でもあるのです。

/var/log/auth.log22:0023:0124:0225:0326:0427:0528:0629:07this month12 480blockedexported · signed

ログ、監査人、あるいは事業者が問いを突きつけるとき

3つ目のグループは、侵害が起きるより前に届いてしまう影響の話です。成功しなかった試行も、ディスクと CPU と注意力と信用を確実に消費します。そして遅かれ早かれ、技術チームの外にいる誰かが、保証ではなく証拠で答えなければならない問いを投げかけてきます。

  1. 11

    監査人・保険会社・取引先から、リモートアクセスの保護状況を問われる

    サイバー保険の申込書、法人顧客のセキュリティ質問票、決済データや個人データに関する規制。いずれも言葉を変えて同じことを尋ねています。リモートアクセスへの反復的なパスワード推測を何が止めているのか、そしてそれが機能していることをどう確認しているのか。

    「鍵を使っています」は次の一問に耐えません。次に問われるのは、まだパスワードを受け付けるアカウントと、いずれにせよポートまで届いている試行だからです。求められているのは、個々の資格情報とは独立に存在する対策と、対象期間を通じてそれが有効だったことを示す記録です。

    • 保険証券の発行・更新前に提出するサイバー保険の質問票
    • 契約締結前に大口顧客が行う取引先セキュリティ審査
    • リモートアクセスへの総当たり対策を求める決済・個人データの規則
  2. 12

    auth.log とディスクがログイン失敗で埋まっていく

    拒否された試行はすべて記録されます。公開されたサーバーでは1日あたり数万行になり、影響は積み重なります。ローテーションが本物のイベントを数時間で捨て、ログ転送は取り込み量で課金され、小さなルートファイルシステムは、どうせ通すつもりのなかった通信のせいで本当に容量を使い切ることがあります。

    コストは保存領域だけではありません。1回の試行ごとに TCP 接続、鍵交換、資格情報の検証が走るため、マシンは一日のうち計測できるだけの時間を、決して通すつもりのない相手への応答に費やします。1コアの VPS では、その割合はサーバー本来の仕事が体感できるほど大きくなります。

  3. 13

    手作業で維持しているブロックリストが、それ自体保守作業になっている

    最初の対応はたいてい、ローカルのフィルターと膨れていくファイアウォール規則です。しばらくはうまくいきます。やがて規則は数千行になり、半分は何のためにあるのか誰も覚えておらず、忙しい朝に自社の拠点が締め出され、新しいマシンを立てるたびに同じアドレス範囲を一から突き止め直すことになります。

    本当に必要なのは、一度決めてどこにでも適用される方針、記憶ではなく記録として残る例外、そしてサーバーを作り直すたびに手で組み立て直さずに済むブロックです。

  4. 14

    1人の管理者が多くの顧客のサーバーを見ている

    マネージドサービス事業者、フリーランスのシステム管理者、小規模なホスティング会社は、顧客も事業者もネットワーク構成も異なる数十台の Linux マシンを抱えています。それぞれに固有の規則、固有のアカウント、固有の停止許容度があります。

    1台ずつ手で設定するやり方は規模に耐えませんし、顧客からの電話で初めて問題を知るやり方も同じです。こうした台数には、どこにでも適用される共通の基準、顧客が本当に異なる場合のマシン単位の例外、そしてすべてを一望できる1か所が要ります。

    • 複数の事業者とアドレス範囲にまたがるマシン群
    • どれほど不自然に見えても決してブロックしてはならない顧客の拠点
    • 設定した理由を失わずに管理者間で引き継げること
  5. 15

    サーバーへの回線が不安定でも、保護は効き続けなければならない

    回線は落ち、事業者は経路を変え、DNS は壊れ、遠隔のラックにあるマシンは何時間も外への経路を失うことがあります。攻撃はその間も止まりません。むしろネットワーク障害こそ、サーバーが最も見られていない時間帯です。

    したがってログインを守るものは、外部サービスへの到達に依存せず、マシン上でローカルに判断し続けなければなりません。インターネットが使えないと適用が止まるものは、必要がなかった日にだけ守ってくれる保護です。

よくある質問

本番サーバーに SSH Protector を入れても安全ですか?

本番サーバーに SSH Protector を入れても安全ですか?

はい。SSH Protector エージェントは自身のオペレーティングシステムの認証ログを読み、同じホスト上の保護対象ポートへの受信通信をフィルタする nftables ルールを書きます。エージェントは待ち受けソケットを開かず、リモートコマンドのチャネルも持たず、送信方向の HTTPS だけを開始します。エージェントの中に、他のマシンに対して働きかけられるものはありません。

SSH Protector は Fail2ban と何が違いますか?

SSH Protector は Fail2ban と何が違いますか?

Fail2ban は認証ログを解析し、findtime の中で失敗回数を数え、bantime の長さだけファイアウォールを設定します。一度に 1 アドレス、そのホスト単独でです。SSH Protector は送信元をその広告プレフィックスへ解決し、/24 全体を nftables セットのエントリ 1 つとして遮断します。セットはタイマーで失効させるのではなく再起動をまたいで保持し、テキスト行を正規表現で照合するのではなく systemd-journald をネイティブ API 経由で読み、得られたレピュテーションを他のすべての保護対象ホストと共有します。上の表は両者の既定の挙動を並べて示しており、/guides/fail2ban-limitations が違いを余すところなく扱っています。

SSH Protector は iptables と nftables のどちらを使いますか?

SSH Protector は iptables と nftables のどちらを使いますか?

SSH Protector は既定で nftables を設定し、名前付きセットを使うことで多数の遮断済みプレフィックスを netfilter の input フックにおける 1 回のルール参照の後ろに収めます。カーネルやディストリビューションがまだレガシー経路を使っているホストでは、エージェントは iptables と ipset へフォールバックし、パケットレベルでは同じ挙動になります。エージェントはどちらのバックエンドが使われているかを仮定せず検出し、自分が作成していないルールを消去することはありません。

メモリフットプリントと CPU コストはどれくらいですか?

メモリフットプリントと CPU コストはどれくらいですか?

エージェントは静的リンクされた実行ファイル 1 つで、常駐メモリは 10 MB 未満、認証イベントの合間の CPU 使用率はほぼゼロのままです。パケットごとの処理はエージェントではなくカーネルで行われるからです。ログ解析のオーバーヘッドは、/var/log/auth.log を 1 行ずつ追尾して正規表現で照合するのではなく、systemd-journald をネイティブ API 経由で読むことによって抑えられています。

インターネット接続がなくても防御は働きますか?

インターネット接続がなくても防御は働きますか?

はい。遮断の判定はすべて、保護対象ホスト自身の認証ログからそのホスト上で計算されます。したがってコントロールプレーンに到達できない間も、SSH ブルートフォース防御は最後に適用されたポリシーのもとで動き続けます。接続が必要なのは共有レピュテーションだけで、それが失われても低下するのはカバー範囲であり、ローカルの防御が止まるわけではありません。

なぜ代わりに eBPF や XDP を使わないのですか?

なぜ代わりに eBPF や XDP を使わないのですか?

XDP に接続された eBPF プログラムはネットワークドライバでパケットを破棄します。これは volumetric なフラッドに対する正しい答えです。しかし XDP プログラムは /var/log/auth.log を読めず、PAM の結果を観測できず、誤ったパスワードと正しいパスワードを区別できません。したがってどのプレフィックスを破棄するかの判断は、依然としてユーザー空間のログ解析から生まれます。SSH ブルートフォースの通信は、低いパケットレートで価値の高い認証試行を運ぶものであり、netfilter の input フックはパケットレートが制約になるずっと前にそれを破棄します。

SSH ポートを変更していた場合はどうなりますか?

SSH ポートを変更していた場合はどうなりますか?

エージェントは sshd_config、/etc/ssh/sshd_config.d/ 配下の drop-in ファイル、そしてホストの待ち受けソケットから実効ポートを読み取り、そのポートが変わると nftables ルールを再構築します。FTP デーモンのポートも同じ方法で発見されるため、非標準ポートは設定するものではなく検出されるものです。

SSH Protector が管理者を締め出すことはありますか?

SSH Protector が管理者を締め出すことはありますか?

ありません。インストーラは最初のルールを適用する前に、インストールを実行したアドレスをホワイトリストに追加します。ホワイトリストの送信元はあらゆるブロック経路より先に評価されます。さらに常時有効なロックアウト防御は、/etc/pam.d/sshd の pam_faillock の deny しきい値に達する前に攻撃元プレフィックスを遮断するため、ブルートフォースが本物のアカウントをロックすることもできません。

対応している Linux ディストリビューションは?

対応している Linux ディストリビューションは?

x86-64 または ARM64 上の systemd ベースのディストリビューションすべてです。Debian、Ubuntu、RHEL、CentOS、AlmaLinux、Rocky Linux、Fedora、そして systemd を備えた Alpine。エージェントは静的リンクされたバイナリ 1 つとして配布されるため、保護対象ホストでインタープリタも Python ランタイムもパッケージ依存も解決する必要はありません。

支払いはどのように行われますか?

支払いはどのように行われますか?

国際的な支払いは PayPro Global が merchant of record として処理し、ロシア国内の支払いは YooKassa が処理します。暗号通貨も代替手段として利用できます。無料プランは恒久的で、1 台のサーバーを完全なブルートフォース防御でカバーし、カードは不要です。

パスワード認証を有効にした SSH 保護

私の状況では、PasswordAuthentication を有効にしたままにし、SSH は Linux サーバーのパブリック アドレスでリッスンしました。 auth.log には、さまざまな IP やログインからの失敗したパスワードが何千件も記録されており、ポート 22 を移動しても役に立たず、アクセスを完全にブロックすることはできません。ログインに成功する前に、パスワードの総当たり攻撃に対する SSH 保護を設定するにはどうすればよいですか?

私はSSH Protector を使用して、エージェントを systemd サービスとしてインストールします。エージェントはローカルで認証ログを読み取り、実際の sshd ポートを決定し、一定の時間枠のしきい値が経過すると、システム ファイアウォールでソース ネットワークをブロックします。事前にアドレスまたは VPN をホワイトリストに追加し、パネルで履歴を管理し、インターネットに接続できなくなったときに最新のポリシーを保存します。

私はSSH Protector なしで無料 PasswordAuthentication と PermitRootLogin を無効にし、キーを Ed25519 のままにし、AllowUsers/AllowGroups を制限し、VPN または信頼できる CIDR からのポートのみを許可します。一時的にパスワードが必要な場合は、journald/auth.log を使用してfail2ban を構成し、nftables/iptables を確認し、findtime、maxretry、bantime を設定し、バックアップ コンソールから例外を定期的にテストします。

クラウド Linux イメージの標準ログインの保護

私の状況では、Ubuntu/Debian/RHEL をパブリック クラウド イメージからデプロイしたため、ユーザー名 ubuntu、debian、ec2-user、または root は事前にボットに認識されています。たとえ適切なパスワードを使用していても、ログは対象を絞った試行でいっぱいになり、パスワードを 1 つ間違えるとアカウントが脆弱になります。標準ログインを使用してクラウド VPS で SSH を保護するにはどうすればよいですか?

私はSSH Protector を使用すると、どのような名前を試行しても、実際にログインに失敗した場合にソースをブロックし、攻撃者のネットワークまで禁止を拡張できます。見つかった SSH ポートを確認し、管理 VPN をホワイトリストに追加し、保護がパネルの可用性に依存しないようにローカル エージェント ソリューションを使用します。

私は無料で、パスワードと root ログインを無効にし、sudo で別のユーザーを作成し、cloud-init 経由で一意のキーをアップロードし、VPN/ネットワークへのセキュリティ グループを閉じます。未使用のauthorized_keysを削除し、要塞でMFAを有効にし、fail2banと未知のソースに対する承認されたパスワード/公開キーのアラートを構成します。ノイズを減らすためだけにポートの変更を検討します。

Web サイトとデータベースを使用して単一の Linux VPS を保護する

私は Linux VPS を 1 つ持っており、Web サイト、データベース、バックアップが同時に動作し、管理には SSH が必要です。 sudo ユーザーとしてログインに成功すると、攻撃者にすべてのレイヤーへのアクセスが許可され、ローカル バックアップ ファイルを削除できるようになります。最小限の負荷で重要な VPS 上で SSH を保護するにはどうすればよいですか?

SSH Protector を使用して、ローカル イベントを読み取り、アカウントが侵害されるまでファイアウォール内のソースをブロックする静的エージェントをインストールします。私は無料の最初のサーバー保護を使用し、チャンネルをホワイトリストに登録し、エージェントがオフラインで動作し続けることを確認します。バックアップと最小権限は別のレイヤーとして残しておきます。

私は無料で、WireGuard/Tailscale の背後で SSH をロックし、パスワードと root を無効にし、パスフレーズ付きのキーを要求し、sudo に制限します。別の認証情報を使用してバックアップを VPS の外部に保存し、自動セキュリティ更新、fail2ban、成功したログインの監査を有効にしています。ファイアウォールを強化する前に、プロバイダーの緊急コンソールを確認します。

ルーター、NAS、Linux デバイスの SSH 保護

私は Linux ルーター、NAS、または ARM デバイスを管理しています。これらは本格的なサーバーとは考えていませんが、sshd を実行しており、ポートは外部ネットワークからアクセスできます。デバイスはめったに更新されず、リソースが不足しているため、侵害されるとローカル ネットワーク内に足場ができてしまいます。低電力 Linux デバイスで SSH を保護するにはどうすればよいですか?

私はSSH Protector では、適切なアーキテクチャと systemd でサポートされている静的バイナリを使用し、受信制御ポートなしでローカル ログ解析とファイアウォール ブロックを有効にします。インストール前に OS とファイアウォールの互換性をチェックし、管理ホワイトリストを設定して、エージェントが限られたデバイス リソースを圧迫しないようにしています。

私は無料ではありますが、SSH を外部にはまったく公開しません。デバイスを VPN 経由で接続し、パスワードと root を無効にし、1 つのキーと 1 つの制御サブネットを許可します。ファームウェアを更新し、未使用のサービスを無効にし、十分なメモリがある場合にのみ最小のfail2banを設定し、ファイアウォール構成を保存します。サポートされていない OS の場合は、不明なバイナリではなく外部ゲートウェイを選択します。

Linux 上の統合 SSH および FTP セキュリティ

私の状況では、Linux ホストで SSH と FTP を開いていて、ボットが異なるログを介して両方のサービスを行き来しています。 sshd スクリプトによってブロックされた IP が FTP を攻撃し続け、手動の iptables チェーンが分岐します。 SSH および FTP 経由のパスワード推測を一元的にブロックするにはどうすればよいですか?

私はSSH Protector を使用すると、サポートされている SSH および FTP ログの読み取りを有効にし、エージェントにポートを決定させ、ソース ネットワークに単一のローカル ルールを適用します。信頼できる統合をホワイトリストに追加し、ダッシュボードで履歴を確認し、高度な FTP 保護と追加機能が料金に依存する可能性があることを考慮します。

私はプロトコルが本当に必要な場合は、通常の FTP を SFTP over SSH または FTPS に無料で置き換え、インターネット全体からサービスを終了します。 sshd と FTP 用に個別のfail2ban ジェイルを作成し、タイムアウトを設定した 1 つの nftables に誘導し、更新後にログ形式を確認し、共有アカウントを無効にします。

開発者と請負業者の SSH ログインの制御

私の状況では、開発者と請負業者に個別の Linux ログインと SSH キーを発行しましたが、キーの一部は個人のラップトップにコピーされ、所有者のリストは最新のものではありませんでした。総当り攻撃を止め、共通のキーを使用せずに人物をすぐに呼び出し、誰が入力したかを理解する必要があります。マルチユーザー SSH アクセスを保護するにはどうすればよいですか?

私はSSH Protector では、すべての外部ソースに対する自動ネットワーク ブロックをそのままにし、すべてのホーム IP ではなく、制御された VPN のみをホワイトリストに登録します。攻撃にはパネルを使用しますが、ID は別の Unix アカウントとキーに保存します。エージェントが境界を保護し、特定のキーを削除することでアクセスを取り消します。

私は無料で、Ansible を通じてauthorized_keys を一元管理し、明確なコメント付きで個人およびデバイスごとに 1 つのキーを発行し、共有アカウントを無効にして sudo を制限します。要塞で VPN/MFA を有効にし、インベントリでアクセス期間を設定し、SIEM で指紋付きの承認された公開キーを収集し、契約終了時にキーを自動的に削除します。

MFA なしでビジネス SSH アカウントを保護する

私の状況では、CI と自動化で使用されるデプロイメント/バックアップ アカウントがあるため、インタラクティブ MFA はそれらに適用されません。これらのキーはオペレーターなしで機能するはずですが、ランナーを侵害したり、パスワードを繰り返したりすると、サーバーが開く可能性があります。導入を中断せずにマシンの SSH アクセスを保護するにはどうすればよいですか?

SSH Protector を使用すると、正確なホワイトリストを通じて信頼できるランナー アドレスを分離し、失敗したログインによって他のすべてのソースがブロックされたままになります。私はこれがキー制御の代替であるとは考えていません。エージェントは外部からのブルート フォースを軽減しますが、サービス アカウント自体の制限には認証成功の影響が含まれています。

私は無料で、ジョブに別の Ed25519 キーを使用し、それをシークレット ストアに保存し、from=、command=、no-port-forwarding、no-agent-forwarding、および no-pty を介して Authorized_keys で制限します。ランナー ネットワークからの SSH のみを許可し、最小限の sudo コマンドを発行し、キーを定期的にローテーションし、デプロイメント ログにフィンガープリントを記録します。

SSH経由のパスワードログインを安全に無効にする

私の状況では、sshd_config を変更した後にキーを紛失したりロックアウトされたりするのが怖いので、「念のため」SSH ログインのパスワードを残しました。その結果、PasswordAuthentication yes が何年も残り、auth.log には常に選択内容が表示されます。サーバーにアクセスできなくなるリスクを負わずに SSH キーに切り替えるにはどうすればよいですか?

私はSSH Protector では、移行を実行する際に、最初に追加の保護層をインストールし、現在の管理アドレスをホワイトリストに登録します。エージェントはアクティブなブルート フォースをブロックし、実際のポートを自動的に考慮してポリシーをオフラインのままにしますが、キーの検証に成功した後も、パスワード ログインは無効のままです。

私は無料で、2 番目の SSH セッションとプロバイダー コンソールを開き、一意のキーを追加し、~/.ssh 700 とauthorized_keys 600 の権限を確認し、sshd -t を実行して、最初のセッションを閉じずにリロードします。次に、PasswordAuthentication を no、KbdInteractiveAuthentication を no、PermitRootLogin を no に設定し、新しいログインを確認し、緊急キーを個別に保存します。

SSHパスワード漏洩への対応

私の状況では、Linux ユーザーのパスワードが漏洩し、いくつかの国から彼の名前を使った試みが auth.log に記録されていることがわかりました。サーバーが別のネットワークから使用されているため、ログインが成功したかどうかわかりません。 SSH 検索を緊急に終了して侵害を確認するにはどうすればよいですか?

私はSSH Protector を使用すると、アクティブなソースとネットワークを即座にブロックし、攻撃の履歴を確認し、信頼できるホワイトリスト経由でのみアクセスを許可します。次に、パスワード/キーを変更し、セッションを終了し、受け入れられたパスワード/公開キーを個別に分析します。ブロックすると攻撃ウィンドウが短縮されますが、すでに成功したログインがないことは証明されません。

私は無料で、SSH セキュリティ グループまたは VPN への nftable を一時的に閉じ、ユーザーをブロックし、キーを取り消し、関連するシークレットを変更します。 last/lastlog、journalctl、sudo、新しいユーザー/キー、cron/systemd ユニット、プロセス、ネットワーク接続をチェックし、キーのみのアクセスを復元し、再利用されたパスワードを無効にします。

パスフレーズを使用しない SSH 秘密キー保護

私の状況では、従業員のラップトップでパスフレーズのない秘密 SSH キーを見つけました。このキーは複数のサーバーで許可されており、バックアップやマルウェアに組み込まれる可能性があります。このようなログインでは、一連の間違ったパスワードが作成されることはないため、通常のブルート フォース対策では阻止できません。被害を最小限に抑え、SSH キーを適切に保護するにはどうすればよいですか?

SSH Protector を使用して、外部のブルート フォースをブロックし続け、疑わしいソースを確認しますが、正しい盗まれたキーに対してこれに依存しないでください。私はすぐにすべてのサーバーから指紋を削除し、パスフレーズを含む新しいキーを発行し、VPN のみのホワイトリストを残します。成功したエントリについては別途調査します。

私は無料で、すべてのauthorized_keys全体で古い公開鍵を検索し、構成管理によってそれを取り消し、フィンガープリントとソースによって受け入れられた公開鍵を確認します。パスフレーズと ssh エージェント タイムアウトを含むハードウェア FIDO2/ed25519-sk またはキーを発行し、必要な場合を除きエージェント転送を無効にし、所有者、デバイス、ローテーションの日付のレジストリを保持します。

監査用の SSH セキュリティの確認

私は監査人、クライアント、または保険会社に、管理 SSH アクセスがどのように保護されているか、どのポートとホストが制御されているか、自動選択がどのようにブロックされているか、ホワイトリストに誰が含まれているか、インターネットが失われた場合に何が起こるかを示す必要があります。 SSH ブルート フォース保護の検証可能な証拠を収集するにはどうすればよいですか?

私はSSH Protector を使用して、攻撃とブロックの履歴、ポリシー設定、保護されたサービスのリスト、および承認された例外を添付します。エージェントのローカル ソリューション、送信 TLS チャネル、受信制御ポートの欠如を文書化してから、制御された不正なログインを実行し、ログ行、ファイアウォール ルール、および通知を保存します。

無料で、sshd_config、nftables/ufw、fail2banjail、および変更ログを Git からエクスポートし、auth.log/journald を安全なストレージに送信します。私は、PasswordAuthentication、PermitRootLogin、MFA/VPN をチェックし、キーの取り消しを毎月テストし、結果に署名し、証拠を必要な期間保存します。

SSH ブルート フォースによる auth.log ボリュームの減少

私の状況では、auth.log または Journald が失敗したパスワードと無効なユーザーでいっぱいになり、ローテーションにより有用な履歴が失われ、ログ パーサーがリソースを浪費します。成功したログインを調査する必要があるため、監査を無効にしたくありません。 SSH ブルート フォース イベントのフローを減らすにはどうすればよいですか?

SSH Protector では、一連の失敗後にファイアウォールでソースをブロックするため、次の TCP 接続は sshd に到達せず、多くのエントリが作成されません。私はシステム監査を保持し、ジャーナルドのサイズと保持を個別に制御し、パネル内の攻撃履歴を元のログの代わりとしてではなくインデックスとして使用します。

私は無料で、VPN/許可リストへの SSH を閉じ、パスワードと標準ログインを無効にし、タイムアウトを設定した nftables にfail2banを送信します。 SystemMaxUse とjournald/rsyslog ローテーションを構成し、Accepted イベントと主要な Failed イベントを外部 syslog に送信し、LogLevel を調査に必要な値以下に下げません。

手動ブラックリストの代わりに Linux ブロックを自動化

私の状況では、IP を auth.log から ufw/iptables に手動でコピーしますが、アドレスはすぐに変わり、古いルールは削除されず、チェーンは増大し、一歩間違えばアクセスが閉じられてしまう可能性があります。ブラックリストのサポートは、別個の日常業務になりました。 SSH ブルート フォース ブロッキングを安全に自動化するにはどうすればよいですか?

SSH Protector を使用して、しきい値とウィンドウを一度設定すると、エージェントがローカルでロックを作成して解放し、ホワイトリストが優先されます。私は、攻撃者が隣接するアドレスをローテーションするネットワーク禁止を使用し、パネルの変更を確認し、最初のポリシーの前にバックアップ コンソールを保存します。

私は無料で、個々の永続的な iptables ルールを、タイムアウトまたはfail2banアクションが設定されたnftablesに置き換え、VPNのmaxretry/findtime/bantimeとignoreipを設定します。実際のログ行でフィルターをテストし、慎重に recidive を有効にし、設定サイズを制限し、ディストリビューションの更新後のリロード エラーを監視します。

複数のクライアントにわたる SSH セキュリティの管理

私は、Debian、Ubuntu、RHEL、ARM 上で複数の顧客の Linux サーバーを保守しています。それぞれに独自のポート、信頼できるネットワーク、連絡先があります。ローカルのfail2banとファイアウォールの構成が異なり、クライアント間の共通のホワイトリストは受け入れられません。マルチテナント フリートで SSH セキュリティを一元化するにはどうすればよいですか?

SSH Protector を使用すると、サポートされているエージェントにホストを接続し、検出されたポートと攻撃を 1 つのパネルから確認できますが、例外とポリシーは目的のサーバー/クライアントの境界内に保持されます。私はベースライン値を適用し、逸脱を個別に文書化し、担当顧客に通知します。

私は無料で、クライアントごとに個別のインベントリとボールトを使用して、Ansible ロールで sshd、fail2ban、nftables を記述し、CI の変更を確認し、テナント タグ付きの Wazuh/中央 syslog でログを収集します。構成をベースラインと自動的に比較し、異なる顧客からのキー、CIDR、シークレットを組み合わせることはありません。

不安定なインターネット上のオフライン SSH 保護

私の Linux サーバーはブランチ オフィスまたは不安定なチャネルの背後にあります。クラウド パネルと DNS は時々利用できないことがありますが、内部または転送ポートを介した SSH は応答し続けます。セキュリティは、すべてのソリューションのリモート API を待つ必要はありません。 SSH ブルート フォース ブロックをオフラインに保つにはどうすればよいですか?

私はSSH Protector を使用すると、事前にエージェントにポリシーを適用します。パネルとの通信が失われた場合でも、引き続きローカル ログを読み取り、システム ファイアウォールを最新の構成に変更します。シャットダウン前にホワイトリストを同期し、復元後に蓄積された履歴を確認し、受信エージェント制御ポートは開きません。

私は無料で、制御を完全にローカルにします。nftables/ufw は VPN または必要なサブネットからのみ SSH を許可し、fail2ban は外部ネットワークなしで Journald 経由で機能します。ロード用のルールを保存し、通知用のローカル キューを設定し、DNS を使用せずに再起動をテストし、物理/プロバイダー コンソールを離れて、誤ったルールを復元します。

防御を切らさずに fail2ban を置き換える

この Linux サーバーでは fail2ban が 2 年動いていて、sshd の jail も正常です。代わりにマネージドエージェントを試したいのですが、22 番ポートを数分でも無防備にはできませんし、2 つのツールが同じファイアウォール規則を取り合うのも避けたい。停止なしで fail2ban を SSH Protector に置き換えるにはどうしますか。

fail2ban を動かしたまま SSH Protector のエージェントを導入します。エージェントは専用の nftables テーブル(inet sshprotector、古いホストでは接頭辞付きの ipset 名前空間)を持ち、そこだけを再構築するので fail2ban のチェインには一切触れず、どちらも相手を巻き戻しません。導入時にまず自分のアドレスをホワイトリストへ入れ、その後 1 日パネルを見て、jail と同じ送信元をエージェントが捕らえているか確認します。そこまで済んでから fail2ban を停止し、その規則を削除します。気が変わった場合、エージェントをアンインストールすれば自分の規則も一緒に消え、ファイアウォールは元のまま残ります。

エージェントを使わない場合でも、ログを読む 2 つのツールの切り替え方は同じです。古いほうを動かしたまま、新しいほうに独自のチェイン名かテーブル名を与えて規則が衝突しないようにし、丸 1 日の実トラフィックでそれぞれ何を捕らえたか比べ、新しいほうの遮断件数が 2 つのうち少ないほうでなくなってから古いほうを止めます。動いているツールを先に外してはいけません。公開された SSH ポートで無防備な数分間は、すでにあなたを走査しているボットネットには十分です。

CrowdSec とマネージドエージェントの選び方

小規模な Linux 群の SSH ブルートフォース対策を比較していて、CrowdSec が何度も候補に挙がります。オープンソースで、コミュニティのブロックリストがあり、SSH 以外もカバーします。SSH Protector には CrowdSec にない何がありますか。どう選べばよいでしょう。

両者は重なる問題を別の端から解いており、私は点数ではなく形で選びます。CrowdSec はエンジンです。シナリオ言語があり、遮断コンポーネントは自分で導入して接続し、ブロックリストは運用者全員が育てます。射程は SSH をはるかに超えます。SSH Protector は 1 つのことだけを行うバイナリです。SSH・SFTP・FTP の認証ログを読み、攻撃元の /24 全体を自前の nftables テーブルで遮断し、再起動後もその遮断を保ち、22 番と決めつけずに実際の sshd ポートを検出し、保護対象サーバーが沈黙したときに知らせるパネルへ報告します。評判は公開インターネットではなく、保護対象アカウント間で共有されます。

つまり決め手は、手元に実際に何があるかです。HTTP、データベース、任意のログ源、自作の検知シナリオといった広さが要るなら、CrowdSec にはその余地があり、動かすこと自体は無料です。一方、SSH ポートを公開した Linux が数台あるだけで、検知基盤を保守する人がいないなら、設定なしで正しく動く狭い道具のほうが欲しい。同じホストで両者を走らせ比べたことはないので、性能の数字では選びません。その数字を持ち出す人も、そうすべきではありません。

今日、最初のサーバーを保護しましょう

Free プランは永久無料。必要になったらワンクリックでアップグレードできます。

誰が作っているか、誰に支払うのか、エージェントはサーバーで何ができるのか

本番サーバーに管理者権限で何かを入れる前に、答えを知っておく価値のある三つの問いです。

誰が作っているか

SSH Protector を書いているのは Recovery Toolbox の主任サーバーセキュリティスペシャリスト Victor G. Bobrov です。システム開発とセキュリティで20年以上、Microsoft MCSD/MCDBA 認定。検知ルールもブロックのロジックもこのサイトの記事も彼の仕事であり、匿名のブランドではなく本人の名前で公開されています。 著者について →

誰に支払うのか

提供元はブルガリア(EU)登記の File Master LLC です。Bulstat/VAT 180842207、オフィスはヴァルナ、電話とメールで連絡できます。決済は PayPro Global が merchant of record として処理します。利用規約、プライバシーポリシー、データ処理契約は要約ではなく全文を公開しています。 利用規約 · プライバシーポリシー · DPA

エージェントにできること・できないこと

エージェントは自分がいるホストの SSH 認証ログを読み、同じホストに nftables の規則を書きます。受信ポートは開かず、リモートコマンドの経路も持たず、外部との通信は HTTPS のみです。攻撃機能はありません - 他のマシンを攻撃できる仕組みは含まれていません。ブロックの判断はローカルで行われるためクラウドに繋がらなくても保護は続き、インストール時に現在の IP がホワイトリストに入るので、自分のサーバーから締め出されることはありません。インストーラーには署名があります。 仕組み →

リソース:この話が置かれているプロトコル・攻撃・標準

SSH のブルートフォース対策は独立した話題ではなく、プロトコルと攻撃の一類型と公開された標準が交わる場所です。以下はそれぞれを定義している情報源です。

Recovery Toolbox / File Master LLC

Recovery Toolbox へのお問い合わせ

Recovery Toolbox と File Master LLC の連絡先、および同社の主任セキュリティスペシャリスト Victor G. Bobrov のプロフィール。

会社オフィス

File Master LLC は、Recovery Toolbox のオンラインサービスおよびソフトウェア製品を提供する法人です。

File Master LLC
Serena app., office C13
Golden Sands, Varna, 9007
ブルガリア、欧州連合
Bulstat/VAT
180842207

Recovery Toolbox について

File Master LLC は、破損したファイル・データベース・メール保存形式を修復するための Recovery Toolbox のオンラインサービスとソフトウェア製品を開発・サポートしています。当社は、破損データへのアクセスを回復する必要があるユーザー、IT 専門家、企業向けの実用的な復元ツールに注力しています。

ご意見・ご提案を歓迎します。ウェブサイトへのご意見は電子メールでお送りください: webmaster@recoverytoolbox.com

Victor G. Bobrov, server security specialist and author of SSH Protector
セキュリティスペシャリスト

Victor G. Bobrov

サーバーセキュリティスペシャリスト・システム開発とセキュリティで20年以上

Victor G. Bobrov は File Master LLC / Recovery Toolbox でセキュリティ開発を統括しています。SSH Protector の検知とブロックのロジック - SSH 認証ログの解析、ブルートフォースやパスワードスプレーと単なる打ち間違いの判別、nftables の 1 ルールでの攻撃元サブネット遮断、保護対象サーバー群での攻撃者レピュテーション共有 - を設計しています。

  • ブルートフォース対策
  • Linux と SSH の要塞化
  • nftables とネットワークポリシー
  • MCSD
  • MCDBA
著者について →

Microsoft 認定資格

Microsoft Certified Solutions Developer - MCSD。Microsoft Certified Database Administrator - MCDBA。

MCSD MCDBA