geerlingguy.security
Ansibleロール: セキュリティ(基本)
まず最初に、大切な注意点です: サーバーのセキュリティはあなたの責任です。このロールを含めてファイアウォールを追加するだけでサーバーが安全だと思っているなら、間違いです。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_reboot
がtrue
の場合に、必要に応じて再起動をトリガーする時間。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_error
をfalse
に設定すると、パッケージインストールごとにメールが届きます。
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