raspbian

ansible-raspbian

Ansible Role Travis (.org)

Эта роль настраивает безопасную базовую среду Raspbian с разумными настройками по умолчанию.

Она выполняет:

  • Устанавливает указанные системные пакеты.
  • Настраивает имя хоста.
  • Настраивает локализацию.
  • Монтирует tmpfs в директориях с интенсивной записью для увеличения срока службы SD-карты.
  • Меняет пароль для пользователя по умолчанию.
  • Устанавливает редактор по умолчанию.
  • Настраивает безопасную конфигурацию SSH.
  • Настраивает UFW (Uncomplicated Firewall).
  • Настраивает /boot/config.txt.
  • Запускает raspi-config.
  • Конфигурирует Postfix для отправки электронной почты через SMTP реле.
  • Включает автоматическое обновление.
  • Устанавливает Fail2ban.
  • Настраивает Logwatch для отправки еженедельных отчетов.

Она не выполняет:

  • Обновление системных пакетов.
  • Выполняет apt-get update. Пожалуйста, сделайте это в pre_task. См. Пример Playbook.
  • Устанавливает патчи безопасности, но автоматическое обновление должно решать эту проблему.

Установка

  • Установите зависимости Python, выполнив pip install -r requirements.txt.
  • Установите sshpass, выполнив sudo apt-get install sshpass.
  • Запишите образ SD-карты с Raspbian Stretch Lite.
  • Добавьте пустой файл с именем ssh в загрузочный раздел записанной SD-карты.
  • Опционально: чтобы включить Wi-Fi, разместите файл под названием wpa_supplicant.conf в загрузочном разделе записанной SD-карты со следующим содержимым:
network={
        ssid="ваш ssid"
        psk="ваш пароль"
}
  • Запустите playbook.

Инвентарь

sshpass необходим для первого запуска Ansible с паролем по умолчанию raspberry. Аутентификация по паролю через SSH будет отключена в пользу аутентификации по публичному ключу с ключами, указанными в ssh_public_keys. Ваш инвентарь должен содержать следующее:

[all:vars]
ansible_connection=ssh
ansible_user=pi
ansible_ssh_pass=raspberry

Переменные

# Устанавливает имя хоста системы
system_hostname: "raspberrypi"
# Пароль системы для ansible_ssh_user (должен быть настроен как pi).
# ПРИМЕЧАНИЕ: Должен быть изменен на что-то безопасное.
system_ssh_user_password: "raspberry"
# Соль для пароля.
# ПРИМЕЧАНИЕ: Должна быть изменена на что-то безопасное и случайное.
system_ssh_user_salt: "salt"
# Локализация системы
system_locale: "en_US.UTF-8"
# Часовой пояс системы
system_timezone: "Europe/Stockholm"
# Список словарей желаемых монтирований tmpfs.
system_tmpfs_mounts:
  - { src: "/run", size: "10%", options: "nodev,noexec,nosuid" }
  - { src: "/tmp", size: "10%", options: "nodev,nosuid" }
  - { src: "/var/log", size: "10%", options: "nodev,noexec,nosuid" }
# Список пакетов для установки с помощью apt-get
system_packages: []
# Путь к редактору по умолчанию
system_default_editor_path: "/usr/bin/vi"

# Каталог кэша Logwatch
logwatch_tmp_dir: /var/cache/logwatch
# Электронная почта, которая получает отчеты Logwatch
logwatch_mailto: "root"
# Уровень детализации отчета Logwatch
logwatch_detail: "Low"
# Как часто получать отчет Logwatch, можно установить на еженедельно и ежедневно
logwatch_interval: "weekly"

postfix_hostname: "{{ ansible_hostname }}"
postfix_mailname: "{{ ansible_hostname }}"
postfix_mydestination:
  - "{{ postfix_hostname }}"
  - localdomain
  - localhost
  - localhost.localdomain
postfix_relayhost: smtp.gmail.com
postfix_relayhost_port: 587
# Обязательное поле, установите это на ваш адрес Gmail
postfix_sasl_user:
# Обязательное поле, установите это на ваш пароль Gmail
postfix_sasl_password:
postfix_smtp_tls_cafile: /etc/ssl/certs/ca-certificates.crt

# Обновляет /boot/config.txt с `{{ key }}: {{ value }}`
rpi_boot_config: {}
# Запускает raspi-config -noint do_{{ key }} {{ value }]. Опции: https://github.com/raspberrypi-ui/rc_gui/blob/master/src/rc_gui.c#L23-L70
rpi_cmdline_config: {}

ssh_sshd_config: "/etc/ssh/sshd_config"
# Обязательное поле, список публичных ключей ssh для обновления ~/.authorized_keys.
# Примечание: Один из этих ключей должен быть тем, который использует Ansible.
ssh_public_keys: []
# Строка, которая будет отображаться при подключении к хосту через ssh
ssh_banner:

# Правила UFW всегда должны разрешать SSH, чтобы Ansible продолжал функционировать
ufw_rules:
  - { rule: "allow", port: "22", proto: "tcp" }
# Конфигурирует, разрешен ли трафик igmp
ufw_allow_igmp: false

# Получатель отчета автоматических обновлений
unattended_upgrades_email_address: root
# Должны ли мы перезагрузить, когда найдена /var/run/reboot-required?
unattended_upgrades_auto_reboot: false

# Внутренняя переменная, используемая при запуске тестов - не должна использоваться.
ansible_raspbian_testing: false

Пример Playbook

- hosts: servers
  become: true
  pre_tasks:
    - name: обновить кэш apt
      apt:
        cache_valid_time: 600
  roles:
    - role: hannseman.raspbian
  vars:
    system_packages:
      - apt-transport-https
      - vim
    system_default_editor_path: "/usr/bin/vim.basic"
    system_ssh_user_password: hunter2
    system_ssh_user_salt: pepper
    postfix_sasl_user: [email protected]
    postfix_sasl_password: hunter2

    ssh_public_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJXTGInmtpoG9rYmT/3DpL+0o/sH2shys+NwJLo8NnCj
О проекте

Setup a secure basic Raspbian environment with sensible defaults.

Установить
ansible-galaxy install hannseman/ansible-raspbian
Лицензия
mit
Загрузки
235
Владелец