hanru.debianinit
debianinit: Debian サーバー初期化
この Ansible ロールは、将来の使用に備えた最小限の Debian サーバーを構成します。
このロールは現在、以下のディストリビューションをサポートしています:
- Debian Jessie (8.x)
- Debian Stretch (9.x)
- Debian Buster (10.x)
- Debian Bullseye (11.x)
要件
- リモートサーバーの SSH ユーザーは root 権限を持っていること。
- リモートサーバーに Python がインストールされていること。
ロール変数
di_ssh_port: 22
SSH デーモンがリッスンするポート。SSHをデフォルト以外のポートに設定し、他のセキュリティ対策を無視することは、「隠すことでセキュリティを確保する」とされています。
デフォルトで SSH はポート 22 でリッスンしています。この設定を変更することはお勧めしません。
di_ssh_password_authentication: 'no'
SSH パスワード認証が有効かどうか。
パスワード認証はデフォルトで無効です。特別な要件がない限り、この設定は変更しないべきです。
di_ssh_permit_root_login: 'without-password'
root
ユーザーがログインできるかどうか。もし root
として ansible を実行するなら、without-password
が妥当な選択です。それ以外の場合、この設定は安全に no
に設定できます。
デフォルトではこの設定は without-password
です。
di_ssh_allow_users: []
SSH 経由でログインを許可されたユーザーのリスト。空のリストはこの設定が強制されないことを意味します。
デフォルトではこのリストは空であり、すべてのユーザーが許可されています。
di_system_removed_packages:
- apache2
- bind9
- rpcbind
- samba
- sendmail
- snmp
削除(パージ)されるパッケージのリスト。デフォルトでは、上のブロックのようにいくつかのパッケージが削除されます。
di_system_installed_packages:
- apt-transport-https
- bzip2
- ca-certificates
- cron
- curl
- dbus
- dnsutils
- haveged
- less
- logrotate
- lsb-release
- mtr-tiny
- openssl
- rsyslog
- screen
- sudo
- time
- vim-tiny
- vnstat
- wget
- whiptail
インストールされるパッケージのリスト。デフォルトでは、上のブロックのようにいくつかのパッケージがインストールされます。
di_system_fail2ban_enabled: yes
特定のルールに従って悪いホストを banning するサービス fail2ban をインストールするかどうか。インストール後、ブルートフォースの SSH ログイン試行が自動的にブロックされます。
デフォルトでは fail2ban がインストールされます。
di_system_timezone: 'UTC'
サーバーのタイムゾーン。特別な要件がない限り、UTC
が推奨されており、デフォルトのタイムゾーンです。
di_system_timesync_enabled: yes
時刻同期サービスを有効にするかどうか。このサービスは systemd によって提供され、ntp サービスよりも軽量です。Xen、KVM 仮想サーバーや専用サーバーでは、このサービスを有効にするべきです。OpenVZ 仮想サーバーでは、このサービスが機能しない場合があります。
デフォルトでは、このサービスは有効です。
di_system_unattended_upgrades_enabled: no
自動的にシステムを毎日アップグレードする無人アップグレードを有効にするかどうか。無人アップグレードを有効にしてもサーバーの管理が必要です。例えば、新しいパッケージ(特に新しいLinuxカーネル)は、サーバーを再起動しない限り効果を持ちません。
デフォルトで無人アップグレードは無効です。標準のシステムでは安全に有効にできます。
di_system_unattended_upgrades_mail_to: ''
無人アップグレードがシステムをアップグレードしたり、問題に遭遇したりするときにメールが送信されるメールアドレスを表す文字列。
デフォルトでは、この設定は空でありメールは送信されません。
di_add_users: []
サーバー上に作成されるユーザーのリスト。すべてのユーザーには、「name」、「password」、および「shell」の三つのフィールドが定義されている必要があります。より詳しくは例のセクションを参照してください。
デフォルトでは、ユーザーは作成されません。
di_sudoers_password: []
パスワードを入力して sudo
コマンドを実行できるユーザーのリスト。
デフォルトでは、このリストにユーザーは追加されません。
di_sudoers_passwordless: []
パスワード無しで sudo
を実行できるユーザーのリスト。sudo
が root としてコマンドを実行するため、重要なサーバーではパスワードが必要ない設定は安全ではありません。この設定は重要なサーバーでは空白のままにしておくのが良いです。
デフォルトでは、このリストにユーザーは追加されません。
di_ufw_enabled: no
人間に優しい iptables フロントエンドである ufw をインストールするかどうか。ufw を有効にすると、合理的なデフォルトポリシー(送信を許可、受信を拒否)が設定され、SSH ポート上の TCP が許可されます。サーバーにさらなる使用(例: http)がある場合は、di_ufw_rules
変数をさらに調整する必要があります。以下と例のプレイブックを参照してください。
デフォルトでは ufw はインストールされていません。
di_ufw_rules:
- { rule: allow, from: any, to: any, port: '{{ di_ssh_port }}', proto: tcp }
ユーザー定義の ufw ルールのリスト。これらのルールは ufw が有効になったときに適用されます。各ルールは五つのフィールドを持つ必要があります。
rule
はルールのタイプを定義します。可能な値はallow
、deny
、reject
です。from
はソース IP アドレスを定義します。ソース IP 制限がない場合はfrom
をany
に設定します。to
は宛先 IP アドレスを定義します。宛先 IP 制限がない場合はto
をany
に設定します。port
は宛先ポートを定義します。proto
はネットワークプロトコルを定義します。可能な値はtcp
、udp
、any
です。
例のセクションには ufw ルールの定義方法が示されています。di_ufw_rules
を変更する必要がある場合は、SSH ポートを許可する最初のルールを維持する必要があります。このロールはシンプルな ufw ルールのみを扱っています。より複雑なルールは手動で定義する必要があるかもしれません。
デフォルトでは、SSH ポート上の TCP は許可されています。追加の ufw ルールは定義されていません。
依存関係
このロールに依存関係はありません。
例のプレイブック
root がプレイブックを実行する場合:
- hosts: testservers
vars:
di_add_users:
- name: test
password: randompassword
shell: /bin/bash
- name: git
password: anotherrandompassword
shell: /usr/bin/git-shell
di_ssh_allow_users:
- root
- test
- git
di_sudoers_password:
- test
di_system_unattended_upgrades_enabled: yes
di_system_unattended_upgrades_mail_to: [email protected]
di_ufw_enabled: yes
di_ufw_rules:
- { rule: allow, from: any, to: any, port: '{{ di_ssh_port }}', proto: tcp }
- { rule: allow, from: any, to: any, port: 80, proto: tcp }
- { rule: allow, from: any, to: any, port: 443, proto: tcp }
- { rule: deny, from: 192.168.1.0/24, to: any, port: 53, proto: any }
roles:
- { role: hanru.debianinit }
sudo 権限を持つユーザーがプレイブックを実行する場合:
- hosts: testservers
vars:
...
roles:
- { role: hanru.debianinit, become: yes }
ライセンス
MIT
参考
このロールは My First 5 Minutes On A Server にインスパイアされています。このロールを開発する際、以下の Ansible プレイブック/ロールから多くのことを学びました。