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 プレイブック/ロールから多くのことを学びました。
