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

是否安装 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: []

要在服务器上创建的用户列表。每个用户 必须 定义三个字段:namepasswordshell。有关如何定义新用户的更多信息,请参见示例部分。

默认情况下,不创建用户。

di_sudoers_password: []

一份用户列表,能够在提供密码后执行 sudo 命令。

默认情况下不向此列表添加用户。

di_sudoers_passwordless: []

一份用户列表,能够在不提供密码的情况下执行 sudo。由于 sudo 以 root 身份运行命令,如果不需要密码,安全性本质上受到影响。因此,对于重要服务器,最好将此设置留空。

默认情况下不向此列表添加用户。

di_ufw_enabled: no

是否安装 ufw,一个人性化的 iptables 前端。启用 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 限制,将 from 设置为 any
  3. to 定义目标 IP 地址。如果没有目标 IP 限制,将 to 设置为 any
  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

参考

该角色受 我第一次在服务器上的 5 分钟 的启发。在开发此角色时,我从以下 Ansible 剧本/角色中学到了很多。

关于项目

Debian Server Initialization

安装
ansible-galaxy install hanru.debianinit
许可证
mit
下载
97
拥有者