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