geerlingguy.security

Ansibleロール: セキュリティ(基本)

CI

まず最初に、大切な注意点です: サーバーのセキュリティはあなたの責任です。このロールを含めてファイアウォールを追加するだけでサーバーが安全だと思っているなら、間違いです。Linux、ネットワーク、およびアプリケーションのセキュリティについて学び、知識がどれほどあっても、常にすべての部分をより安全にすることができることを理解してください。

このロールは、RedHatおよびDebianベースのLinuxシステムでいくつかの基本的なセキュリティ設定を行います。以下を試みます:

  • 不正なSSHアクセスを監視するソフトウェア(fail2ban)をインストール
  • より安全にSSHを設定する(rootログインを無効にし、鍵認証を要求し、カスタムSSHポートを設定する)
  • 自動更新を設定(設定されている場合)

他にも、サーバーをより安全にするために行うかもしれないことがあります(このロールには含まれていませんが):

  • logwatchや中央ログサーバーを使ってログファイルを分析・監視する
  • ユーザーアカウントやSSHキーを安全に設定する(このロールでは、パスワード認証を使っていないことを前提としています)
  • 適切に設定されたファイアウォールを持つ(柔軟な例として、Ansible Galaxyのgeerlingguy.firewallロールを確認してください)

繰り返しになりますが、サーバーのセキュリティはあなたの責任です。

要件

明らかな理由から、sudoを使用する場合、このロールでsudoersファイルを管理できるようにしておく必要があります。

RedHat/CentOSシステムの場合、EPELリポジトリがインストールされていることを確認してください(geerlingguy.repo-epelロールを利用してインストールできます)。

Debian/Ubuntuシステムには特別な要求はありません。

ロール変数

利用可能な変数は以下に示され、デフォルト値も記載されています(defaults/main.ymlを参照):

security_ssh_port: 22

SSHにアクセスするためのポートです。デフォルトはポート22ですが、インターネットに公開されたサーバーでポート22へのアクセスをブロックするファイアウォールがない場合、毎日数千回のログイン試行が発生するのが珍しくありません。このような自動的な侵入試行を避けたい場合は、ポートを標準外のポート(例:2849)に変更できます。

security_ssh_password_authentication: "no"
security_ssh_permit_root_login: "no"
security_ssh_usedns: "no"
security_ssh_permit_empty_password: "no"
security_ssh_challenge_response_auth: "no"
security_ssh_gss_api_authentication: "no"
security_ssh_x11_forwarding: "no"

SSH認証のためのセキュリティ設定です。これらはすべて"no"のままにしておくのがベストですが、サーバーの初期設定中や鍵認証が未導入の時など、特定の状況では'yes'に設定しても安全です。注意: 'yes'や'no'の値は必ず引用符で囲むことが重要です。そうしないと、サーバーにアクセスできなくなる可能性があります。

security_ssh_allowed_users: []
# - alice
# - bob
# - charlie

SSHを通じてホストに接続することを許可されているユーザーのリストです。リストにユーザーが定義されていない場合、そのタスクはスキップされます。

security_ssh_allowed_groups: []
# - admins
# - devs

SSHを通じてホストに接続することを許可されているグループのリストです。リストにグループが定義されていない場合、そのタスクはスキップされます。

security_sshd_state: started

SSHデーモンの状態です。通常はstartedのままにします。

security_ssh_restart_handler_state: restarted

restart sshハンドラーの状態です。通常はrestartedのままにします。

security_sudoers_passwordless: []
security_sudoers_passworded: []

それぞれ、パスワードなしまたはパスワードが必要な状態で、rootとして任意のコマンドを実行できるようにsudoersファイルに追加されるべきユーザーのリストです。

security_autoupdate_enabled: true

yum-cron(RedHat系)またはunattended-upgrades(Debian系)をインストール/有効にするかどうか。システムの再起動は自動で行われず、セキュリティ対策の一環として自動更新は役立ちますが、適切なパッチとパッケージ管理の代わりにはなりません。

security_autoupdate_blacklist: []

(Debian/Ubuntuのみ)自動更新されるべきでないパッケージのリストです。

security_autoupdate_additional_origins: []
# - "${distro_id}ESM:${distro_codename}-infra-security"
# - "Docker:${distro_codename}"

(Debian/Ubuntuのみ)参照するための起源リストです。

security_autoupdate_reboot: false

(Debian/Ubuntuのみ)自動更新で再起動が必要な場合に再起動を行うかどうか。

security_autoupdate_reboot_time: "03:00"

(Debian/Ubuntuのみ)security_autoupdate_reboottrueの場合に、必要に応じて再起動をトリガーする時間。24時間表示の「hh:mm」形式です。

security_autoupdate_mail_to: ""
security_autoupdate_mail_on_error: true

(Debian/Ubuntuのみ)security_autoupdate_mail_toに空でない値が設定されている場合、自動更新中にエラーが発生すると、そのアドレスにメールが送信されます。この値を完全なメールアドレス(例:[email protected])またはrootのようなもので設定できます。security_autoupdate_mail_on_errorfalseに設定すると、パッケージインストールごとにメールが届きます。

security_fail2ban_enabled: true

fail2banをインストール/有効にするかどうか。一部のログインや侵入検知サービス(例:ConfigServer)を既に使用している場合は、fail2banを使わないことをお勧めします。

security_fail2ban_custom_configuration_template: "jail.local.j2"

fail2banの設定を生成するために使用されるテンプレートファイルの名前です。

依存関係

なし。

例のプレイブック

- hosts: servers
  vars_files:
    - vars/main.yml
  roles:
    - geerlingguy.security

vars/main.yml:

security_sudoers_passworded:
  - johndoe
  - deployacct

ライセンス

MIT(Expat)/ BSD

著者情報

このロールは2014年にJeff Geerlingによって作成されました。彼はAnsible for DevOpsの著者です。

プロジェクトについて

Security software installation and configuration.

インストール
ansible-galaxy install geerlingguy.security
ライセンス
mit
ダウンロード
1.5M
所有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns