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 включен. Каждое правило должно содержать пять полей.
rule
определяет тип правила. Возможные значения:allow
,deny
иreject
.from
определяет исходный IP-адрес. Установитеfrom
вany
, если нет ограничения по исходному IP.to
определяет конечный IP-адрес. Установитеto
вany
, если нет ограничения по конечному IP.port
определяет конечный порт.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.
ansible-galaxy install hanru/ansible-debianinit