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 входить в систему. Если вы запускаете ansible как root, то вариант 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 kernel) не вступят в силу, если сервер не будет перезагружен.

По умолчанию автоматические обновления отключены. Их можно смело включить на стандартной системе.

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

Следует ли установить ufw, дружественный интерфейс для iptables. Включив ufw, будут установлены разумные политики по умолчанию (разрешить исходящие, запретить входящие), и TCP на порту SSH будет разрешен. Если сервер будет использоваться дополнительно, например, для http, вам нужно будет дополнительно настроить переменную di_ufw_rules, смотрите ниже и пример плейбука.

По умолчанию ufw не установлен.

di_ufw_rules:
  - { rule: allow, from: any, to: any, port: '{{ di_ssh_port }}', proto: tcp }

Список пользовательских правил ufw. Эти правила будут применены, когда ufw включен. Каждое правило должно содержать пять полей.

  1. rule определяет тип правила. Возможные значения: allow, deny и reject.
  2. from определяет исходный IP-адрес. Установите from в any, если нет ограничения по исходному IP.
  3. to определяет конечный IP-адрес. Установите to в any, если нет ограничения по конечному IP.
  4. port определяет конечный порт.
  5. proto определяет сетевой протокол. Возможные значения: tcp, udp и any.

Раздел примеров показывает, как определить правила ufw. Обратите внимание, что если вам нужно изменить di_ufw_rules, первое правило, разрешающее порт SSH, должно оставаться, иначе вы рискуете заблокировать доступ к вашему серверу. Эта роль способна управлять только простыми правилами ufw. Для более сложных правил вам, возможно, потребуется определить их вручную.

По умолчанию TCP на порту SSH разрешен. Дополнительные правила 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/ansible-debianinit
Лицензия
mit
Загрузки
85
Владелец