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 が有効になったときに適用されます。各ルールは五つのフィールドを持つ必要があります。

  1. rule はルールのタイプを定義します。可能な値は allowdenyreject です。
  2. from はソース IP アドレスを定義します。ソース IP 制限がない場合は fromany に設定します。
  3. to は宛先 IP アドレスを定義します。宛先 IP 制限がない場合は toany に設定します。
  4. port は宛先ポートを定義します。
  5. proto はネットワークプロトコルを定義します。可能な値は tcpudpany です。

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

プロジェクトについて

Debian Server Initialization

インストール
ansible-galaxy install hanru.debianinit
ライセンス
mit
ダウンロード
97
所有者