Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/dev-sec/ansible-ssh-hardening
クラウドインフラストラクチャセキュリティ構成監査ネットワークセキュリティDevSecOps認証Archived
GitHubdev-sec/ansible-ssh-hardening

ansible-ssh-hardening

このAnsibleロールは、セキュリティ関連のssh設定を多数提供し、全体的な基本保護を実現します。

リポジトリを見る
785190105年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

ssh-hardening (Ansible Role)

注意: このロールは hardening-collection に移行されました:

  • https://github.com/dev-sec/ansible-os-hardening/
  • https://galaxy.ansible.com/devsec/hardening

問題やプルリクエストはそちらでお願いします!

要件

  • Ansible > 2.5

ロール変数

  • network_ipv6_enable
    • デフォルト: false
    • 説明: IPv6 が必要な場合は true。ssh_listen_to も IPv6 アドレス (例: [::]) をリッスンするように設定する必要があります。
  • ssh_server_ports
    • デフォルト: ['22']
    • 説明: ssh-server がリッスンするポート
  • ssh_client_port
    • デフォルト: '22'
    • 説明: ssh-client が接続するポート
  • ssh_listen_to
    • デフォルト: ['0.0.0.0']
    • 説明: ssh-server がリッスンする 1 つ以上の IP アドレス。デフォルトはすべての IPv4 アドレスですが、セキュリティ上の理由から特定のアドレスに設定する必要があります!
  • ssh_host_key_files
    • デフォルト: []
    • 説明: sshd 用のホストキー。空の場合、インストールされている sshd バージョンでサポートされている限り、['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'] が使用されます。
  • ssh_host_key_algorithms
    • デフォルト: []
    • 説明: サーバーが提供するホストキーアルゴリズム。空の場合は デフォルトリスト が使用され、それ以外の場合は指定されたアルゴリズムのリストで設定を上書きします。
  • ssh_client_alive_interval
    • デフォルト: 600
    • 説明: キープアライブメッセージを送信する間隔を指定します。
  • ssh_client_alive_count
    • デフォルト: 3
    • 説明: キープアライブメッセージが送信される回数を定義します。
  • ssh_permit_tunnel
    • デフォルト: false
    • 説明: SSH ポートトンネリングが必要な場合は true
  • ssh_remote_hosts
    • デフォルト: []
    • 説明: ssh-client 用の 1 つ以上のホストとそのカスタムオプション。デフォルトは空です。例は defaults/main.yml を参照してください。
  • ssh_permit_root_login
    • デフォルト: no
    • 説明: root ログインを無効にします。root ログインを有効にするには without-password または yes に設定します。
  • ssh_allow_tcp_forwarding
    • デフォルト: no
    • 説明: TCP フォワーディングを無効にするには 'no'。TCP フォワーディングを許可するには 'yes' に設定します。OpenSSH >= 6.2 バージョンを使用している場合は、'yes'、'no'、'all'、または 'local' を指定できます。
      注: この変数に渡す値は文字列である必要があるため、'yes' および 'no' の値は引用符で囲んで渡す必要があります。
  • ssh_gateway_ports
    • デフォルト: false
    • 説明: 転送ポートを非ループバックアドレスにバインドしないようにするには false。ワイルドカードアドレスへのバインドを強制するには true に設定します。クライアントがバインドするアドレスを指定できるようにするには clientspecified に設定します。
  • ssh_allow_agent_forwarding
    • デフォルト: false
    • 説明: エージェントフォワーディングを無効にするには false。エージェントフォワーディングを許可するには true に設定します。
  • ssh_x11_forwarding
    • デフォルト: false
    • 説明: X11 フォワーディングを無効にするには false。X11 フォワーディングを許可するには true に設定します。
  • ssh_pam_support
    • デフォルト: true
    • 説明: SSH が PAM をサポートしている場合は true。
  • ssh_use_pam
    • デフォルト: true
    • 説明: pam 認証を無効にするには false。
  • ssh_gssapi_support
    • デフォルト: false
    • 説明: SSH が GSSAPI をサポートしている場合は true。
  • ssh_kerberos_support
    • デフォルト: true
    • 説明: SSH が Kerberos をサポートしている場合は true。
  • ssh_deny_users
    • デフォルト: ''
    • 説明: 指定した場合、パターンのいずれかに一致するユーザー名のログインは拒否されます。
  • ssh_allow_users
    • デフォルト: ''
    • 説明: 指定した場合、パターンのいずれかに一致するユーザー名のみログインが許可されます。
  • ssh_deny_groups
    • デフォルト: ''
    • 説明: 指定した場合、プライマリグループまたは補助グループリストがパターンのいずれかに一致するユーザーのログインは拒否されます。
  • ssh_allow_groups
    • デフォルト: ''
    • 説明: 指定した場合、プライマリグループまたは補助グループリストがパターンのいずれかに一致するユーザーのみログインが許可されます。
  • ssh_authorized_keys_file
    • デフォルト: ''
    • 説明: ユーザー認証に使用できる公開鍵を含むデフォルトファイルを変更します。
  • ssh_trusted_user_ca_keys_file
    • デフォルト: ''
    • 説明: ユーザー証明書の署名に使用される信頼された認証局の公開鍵を含むファイルを指定します。
  • ssh_trusted_user_ca_keys
    • デフォルト: []
    • 説明: ユーザー証明書の署名に使用される信頼された認証局の公開鍵を設定します。ssh_trusted_user_ca_keys_file が設定されている場合のみ使用されます。
  • ssh_authorized_principals_file
    • デフォルト: ''
    • 説明: 許可されるプリンシパルを含むファイルを指定します。ssh_trusted_user_ca_keys_file が設定されている場合のみ使用されます。
  • ssh_authorized_principals
    • デフォルト: []
    • 説明: ファイルパスと許可されたプリンシパルを含むハッシュのリスト。すべてのオプションについては default_custom.yml を参照してください。ssh_authorized_principals_file が設定されている場合のみ使用されます。
  • ssh_print_motd
    • デフォルト: false
    • 説明: MOTD の表示を無効にするには false
  • ssh_print_pam_motd
    • デフォルト: false
    • 説明: pam を介した MOTD の表示を無効にするには false (Debian および Ubuntu)
  • ssh_print_last_log
    • デフォルト: false
    • 説明: 最終ログイン情報の表示を無効にするには false
  • sftp_enabled
    • デフォルト: false
    • 説明: sftp 設定を有効にするには true
  • sftp_umask
    • デフォルト: '0027'
    • 説明: sftp の umask を指定します。
  • sftp_chroot
    • デフォルト: true
    • 説明: sftp の chroot を無効にするには false
  • sftp_chroot_dir
    • デフォルト: /home/%u
    • 説明: デフォルトの sftp chroot の場所を変更します。
  • ssh_client_roaming
    • デフォルト: false
    • 説明: 実験的なクライアントローミングを有効にします。
  • sshd_moduli_file
    • デフォルト: '/etc/ssh/moduli'
    • 説明: SSH moduli ファイルへのパス
  • sshd_moduli_minimum
    • デフォルト: 2048
    • 説明: logjam を軽減するために、定義されたサイズより小さい Diffie-Hellman パラメータを削除します。
  • ssh_challengeresponseauthentication
    • デフォルト: false
    • 説明: チャレンジレスポンス認証が許可されるかどうかを指定します (例: PAM 経由)。
  • ssh_client_password_login
    • デフォルト: false
    • 説明: ssh クライアントでのパスワードベースの認証を許可するには true
  • ssh_server_password_login
    • デフォルト: false
    • 説明: ssh サーバーでのパスワードベースの認証を許可するには true
  • ssh_banner
    • デフォルト: false
    • 説明: ログイン時にバナーを表示するには true
  • ssh_banner_path
    • デフォルト: '/etc/sshd/banner.txt'
    • 説明: SSH バナーファイルへのパス
  • ssh_client_hardening
    • デフォルト: true
    • 説明: クライアントのハードニングを停止するには false
  • ssh_client_port
    • デフォルト: '22'
    • 説明: リモートホストへの接続に使用するポート番号を指定します。
  • ssh_client_compression
    • デフォルト: false
    • 説明: クライアントが圧縮を要求するかどうかを指定します。
  • ssh_compression
    • デフォルト: false
    • 説明: ユーザーが正常に認証された後にサーバー側の圧縮が有効になるかどうかを指定します。
  • ssh_login_grace_time
    • デフォルト: 30s
    • 説明: SSH サーバーへの正常な認証に許可される時間を指定します。
  • ssh_max_auth_retries
    • デフォルト: 2
    • 説明: 接続ごとに許可される最大認証試行回数を指定します。
  • ssh_max_sessions
    • デフォルト: 10
    • 説明: 特定の接続から許可される最大オープンセッション数を指定します。
  • ssh_print_debian_banner
    • デフォルト: false
    • 説明: debian 固有のバナーを表示するには true
  • ssh_server_enabled
    • デフォルト: true
    • 説明: opensshd サーバーを無効にするには false
  • ssh_server_hardening
    • デフォルト: true
    • 説明: サーバーのハードニングを停止するには false
  • ssh_server_match_address
    • デフォルト: ''
    • 説明: 条件付きブロックを導入します。Match 行のすべての基準が満たされた場合、後続の行のキーワードは、別の Match 行またはファイルの終わりに達するまで、設定ファイルのグローバルセクションで設定されたものを上書きします。
  • ssh_server_match_group
    • デフォルト: ''
    • 説明: 条件付きブロックを導入します。Match 行のすべての基準が満たされた場合、後続の行のキーワードは、別の Match 行またはファイルの終わりに達するまで、設定ファイルのグローバルセクションで設定されたものを上書きします。
  • ssh_server_match_user
    • デフォルト: ''
    • 説明: 条件付きブロックを導入します。Match 行のすべての基準が満たされた場合、後続の行のキーワードは、別の Match 行またはファイルの終わりに達するまで、設定ファイルのグローバルセクションで設定されたものを上書きします。
  • ssh_server_match_local_port
    • デフォルト: ''
    • 説明: 条件付きブロックを導入します。Match 行のすべての基準が満たされた場合、後続の行のキーワードは、別の Match 行またはファイルの終わりに達するまで、設定ファイルのグローバルセクションで設定されたものを上書きします。
  • ssh_server_permit_environment_vars
    • デフォルト: no
    • 説明: ~/.ssh/environment および ~/.ssh/authorized_keys の environment= オプションが sshd によって処理されることを指定するには yes。openssh バージョン 7.8 以降では、グローバルな "yes" または "no" 設定に加えて、環境変数名のホワイトリストを指定できます。
  • ssh_server_accept_env_vars
    • デフォルト: ''
    • 説明: クライアントから送信された環境変数のうち、セッションの環境にコピーされるものを指定します。複数の環境変数は空白で区切ることができます。
  • ssh_use_dns
    • デフォルト: false
    • 説明: sshd がリモートホスト名を検索し、リモート IP アドレスの解決されたホスト名が同じ IP アドレスにマップされることを確認するかどうかを指定します。
  • ssh_server_revoked_keys
    • デフォルト: []
    • 説明: ssh サーバーが常に拒否する失効した公開鍵のリスト。既知の脆弱な鍵や侵害された鍵を失効させるのに役立ちます。
  • ssh_max_startups
    • デフォルト: '10:30:100'
    • 説明: SSH デーモンへの同時未認証接続の最大数を指定します。
  • ssh_macs
    • デフォルト: []
    • 説明: macs を上書きするにはこのリストを変更します。デフォルトは defaults/main.yml にあります。
  • ssh_kex
    • デフォルト: []
    • 説明: kexs を上書きするにはこのリストを変更します。デフォルトは defaults/main.yml にあります。
  • ssh_ciphers
    • デフォルト: []
    • 説明: ciphers を上書きするにはこのリストを変更します。デフォルトは defaults/main.yml にあります。
  • ssh_custom_options
    • デフォルト: []
    • 説明: SSH クライアント設定用のカスタム行
  • sshd_custom_options
    • デフォルト: []
    • 説明: SSH デーモン設定用のカスタム行
  • sshd_syslog_facility
    • デフォルト: 'AUTH'
    • 説明: sshd からのメッセージのロギングに使用されるファシリティコード。
  • sshd_log_level
    • デフォルト: 'VERBOSE'
    • 説明: sshd からのメッセージのロギングに使用される詳細レベル。
  • sshd_strict_modes
    • デフォルト: true
    • 説明: ログインを受け入れる前に、ユーザーのファイルとホームディレクトリのファイルモードと所有権を確認します。
  • sshd_authenticationmethods
    • デフォルト: publickey
    • 説明: ユーザーがアクセスを許可されるために正常に完了する必要がある認証方法を指定します。選択した認証方法に必要なすべての変数を必ず設定してください。デフォルトは defaults/main.yml にあります。

ロール変数にリストされていない設定の構成

上記にリストされていない ssh オプションを設定する場合は、ssh_custom_options (/etc/ssh/ssh_config 用) または sshd_custom_options (/etc/ssh/sshd_config 用) を使用して設定できます。これらのオプションはファイルの先頭に設定されるため、ファイルの後半でオプションを上書きできます。

プレイブックの例:

root@kitploit:~
- hosts: localhost
  roles:
    - dev-sec.ssh-hardening
  vars:
    ssh_custom_options:
      - "Include /etc/ssh/ssh_config.d/*"
    sshd_custom_options:
      - "AcceptEnv LANG"

デフォルトポートの変更と冪等性

このロールは、デフォルトポート 22 またはインベントリで設定されたポートを使用してサーバーに接続します。デフォルトの ssh ポートが ssh_server_ports で変更された場合、ssh サーバーが再起動されると、以前のポートを使用して接続を試み続けます。同じサーバーでこのロールを再度実行するには、新しい ssh ポートを使用するようにインベントリを更新する必要があります。

冪等性が重要な場合は、このロールのラッパーであり、設定されたポートに到達できない場合にポート 22 にフォールバックする ssh-hardening-fallback ロールの使用を検討してください。

プレイブックの例

root@kitploit:~
- hosts: localhost
  roles:
    - dev-sec.ssh-hardening

ローカルテスト

ロールをローカルでテストする推奨方法は Docker を使用することです。システムに Docker をインストールする必要があります。システムに適した Docker パッケージについては Get started を参照してください。

vagrant と Virtualbox または VMWare を使用してローカルでテストを実行することもできます。システムに Virtualbox と Vagrant をインストールする必要があります。システムに適した vagrant パッケージについては Vagrant Downloads を参照してください。すべてのテストで test-kitchen を使用します。test-kitchen に慣れていない場合は、そのガイド を参照してください。

次に test-kitchen をインストールします:

root@kitploit:~
# 依存関係のインストール
gem install bundler
bundle install

Docker でのテスト

root@kitploit:~
# 1 台のマシンでの高速テスト
bundle exec kitchen test ssh-ubuntu1804-ansible-latest

# すべてのマシンでのテスト
bundle exec kitchen test

# 開発用
bundle exec kitchen create ssh-ubuntu1804-ansible-latest
bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
bundle exec kitchen verify ssh-ubuntu1804-ansible-latest

# クリーンアップ
bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest

Virtualbox でのテスト

root@kitploit:~
# 1 台のマシンでの高速テスト
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804

# すべてのマシンでのテスト
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test

# 開発用
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804

詳細については test-kitchen を参照してください。

FAQ / 落とし穴

アカウントにログインできません。クライアントキーを登録しましたが、それでもログインできません。

一般的な問題 (ファイアウォール、ネットワーク、キー不足、キー間違い、アカウント無効化など) をすべて確認した場合、アカウントがロックされている可能性があります。最も早い確認方法は、ユーザーのパスワードハッシュを確認することです:

root@kitploit:~
sudo grep myuser /etc/shadow

ハッシュに ! が含まれている場合、アカウントはロックされています:

root@kitploit:~
myuser:!:16280:7:60:7:::

これを解決する正しい方法は、アカウントのロックを解除することです (passwd -u myuser)。ユーザーにパスワードがない場合は、次の方法でロックを解除できます:

root@kitploit:~
usermod -p "*" myuser

または、PAM を使用する予定がある場合は、ssh_use_pam: true で有効にしました。PAM はロックされたユーザーがキーでログインすることを許可します。

アプリケーションが SSH 経由で接続できなくなりました。なぜですか?

まず常にログファイルを確認し、可能であれば接続時に完了するクライアントとサーバー間のネゴシエーションを確認してください。

python および ruby ベースのアプリケーションで、古い暗号セットを使用しているために発生する問題をいくつか確認しています。これは、暗号、メッセージ認証コード (MAC)、および鍵交換 (KEX) アルゴリズムのリストをより安全な選択に減らしたこのハードニングモジュールと衝突します。

ロールを使用した後、Ansible の template/copy/file モジュールが機能しなくなりました!

このロールはデフォルトで SFTP を無効にします。Ansible はデフォルトで SFTP を使用してファイルをリモートホストに転送します。ansible.cfg で scp_if_ssh = True を設定する必要があります。これにより、Ansible は SCP を使用してファイルをコピーします。または、sftp_enabled を true に設定して SFTP を再度有効にすることもできます。

権限不足のため sshd サービスを再起動できません

ハンドラー "restart sshd" の実行時に次のエラーが発生した場合

root@kitploit:~
Unable to restart service ssh: Failed to restart ssh.service: Access denied

または

root@kitploit:~
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory

プレイブックを root として実行するか (プレイブックレベルで become: yes を使用せずに)、ハンドラーに become: yes を追加してください。

これは Ansible のバグです: 詳細については こちら と こちら を参照してください。

貢献

コントリビューターガイドライン を参照してください。

ライセンスと作者

  • Author:: Sebastian Gumprich
  • Author:: Christoph Hartmann [email protected]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

root@kitploit:~
http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

ツールをダウンロード