hanru.debianinit

debianinit: Inicialización del Servidor Debian

Estado de Construcción

Este rol de Ansible configura un servidor Debian mínimo que está listo para un uso futuro.

El rol actualmente soporta las siguientes distribuciones:

  • Debian Jessie (8.x)
  • Debian Stretch (9.x)
  • Debian Buster (10.x)
  • Debian Bullseye (11.x)

Requisitos

  • El usuario SSH en el servidor remoto debe tener privilegios de root.
  • Python debe estar instalado en el servidor remoto.

Variables del Rol

di_ssh_port: 22

Puerto de escucha del daemon SSH. Cambiar SSH a un puerto no predeterminado e ignorar otras medidas de seguridad se considera seguridad a través de la obscuridad.

SSH escucha en el puerto 22 por defecto. No se recomienda cambiar esta configuración.

di_ssh_password_authentication: 'no'

Si la autenticación por contraseña SSH está habilitada.

La autenticación por contraseña está desactivada por defecto. A menos que tengas requisitos específicos, esta configuración no debe ser cambiada.

di_ssh_permit_root_login: 'without-password'

Si se permite la conexión del usuario root. Si ejecutas ansible como root, entonces without-password es una opción sensata. De lo contrario, esto se puede establecer de forma segura en no.

Por defecto, esta configuración es without-password.

di_ssh_allow_users: []

Una lista de usuarios que están permitidos para iniciar sesión a través de SSH. Una lista vacía significa que esta configuración no se aplica.

Por defecto, esta lista está vacía, lo que significa que todos los usuarios están permitidos.

di_system_removed_packages:
  - apache2
  - bind9
  - rpcbind
  - samba
  - sendmail
  - snmp

Una lista de paquetes que se deben eliminar (purgar). Por defecto, se eliminan algunos paquetes como se muestra en el bloque anterior.

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

Una lista de paquetes que se deben instalar. Por defecto, se instalan algunos paquetes como se muestra en el bloque anterior.

di_system_fail2ban_enabled: yes

Si se debe instalar fail2ban, un servicio para prohibir hosts no deseados según ciertas reglas. Después de la instalación, los intentos de inicio de sesión SSH de fuerza bruta son bloqueados automáticamente.

Por defecto, fail2ban está instalado.

di_system_timezone: 'UTC'

Zona horaria del servidor. A menos que tengas requisitos específicos, UTC es la zona horaria preferida y predeterminada.

di_system_timesync_enabled: yes

Si se debe habilitar el servicio de sincronización de tiempo. Este servicio es proporcionado por systemd y es más ligero que el servicio ntp. En servidores virtuales Xen, KVM y servidores dedicados, este servicio debe estar habilitado. En servidores virtuales OpenVZ, este servicio puede no funcionar.

Por defecto, este servicio está habilitado.

di_system_unattended_upgrades_enabled: no

Si se deben habilitar las actualizaciones automáticas que actualizarán automáticamente el sistema a diario. Ten en cuenta que todavía se debe cuidar a los servidores incluso si esta función está habilitada. Por ejemplo, algunos nuevos paquetes (especialmente un nuevo kernel de Linux) no tendrán efecto a menos que el servidor se reinicie.

Por defecto, las actualizaciones automáticas están deshabilitadas. Se puede habilitar de forma segura en un sistema estándar.

di_system_unattended_upgrades_mail_to: ''

Una cadena que representa una dirección de correo electrónico. Se enviará un correo a esta dirección cuando las actualizaciones automáticas actualicen el sistema o encuentren problemas.

Por defecto, esta configuración está vacía, lo que significa que no se enviará ningún correo electrónico.

di_add_users: []

Una lista de usuarios que se deben crear en el servidor. Cada usuario debe tener tres campos definidos: name, password y shell. Consulta la sección de ejemplos para más información sobre cómo definir nuevos usuarios.

Por defecto, no se crean usuarios.

di_sudoers_password: []

Una lista de usuarios que pueden ejecutar el comando sudo después de proporcionar sus contraseñas.

Por defecto, no se agregan usuarios a esta lista.

di_sudoers_passwordless: []

Una lista de usuarios que pueden ejecutar sudo sin proporcionar sus contraseñas. Dado que sudo ejecuta un comando como root, es inherentemente inseguro si no se requiere la contraseña antes de ejecutar. Esta configuración es mejor dejarla en blanco para servidores importantes.

Por defecto, no se agregan usuarios a esta lista.

di_ufw_enabled: no

Si se debe instalar ufw, una interfaz amigable para iptables. Al habilitar ufw, se establecen políticas predeterminadas sensatas (permitir salientes, negar entrantes) y se permite TCP en el puerto SSH. Si el servidor tiene un uso adicional, como http, deberás ajustar más la variable di_ufw_rules, consulta a continuación y el libro de jugadas de ejemplo.

Por defecto, ufw no está instalado.

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

Una lista de reglas ufw definidas por el usuario. Estas reglas se aplicarán cuando ufw esté habilitado. Cada regla debe tener cinco campos.

  1. rule define el tipo de regla. Los valores posibles son allow, deny y reject.
  2. from define la dirección IP de origen. Establece from en any si no hay restricción de IP de origen.
  3. to define la dirección IP de destino. Establece to en any si no hay restricción de IP de destino.
  4. port define el puerto de destino.
  5. proto define el protocolo de red. Los valores posibles son tcp, udp y any.

La sección de ejemplo muestra cómo definir reglas ufw. Ten en cuenta que si necesitas cambiar di_ufw_rules, la primera regla que permite el puerto SSH debe ser mantenida o podrías arriesgarte a quedar fuera de tu servidor. Este rol solo es capaz de reglas ufw simples. Para normas más complejas, es posible que debas definirlas manualmente.

Por defecto, TCP en el puerto SSH está permitido. No se definen reglas ufw adicionales.

Dependencias

Este rol no tiene dependencias.

Ejemplo de Playbook

Cuando root está ejecutando el playbook:

- 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 }

Cuando un usuario con privilegios de sudo está ejecutando el playbook:

- hosts: testservers
  vars:
    ...
  roles:
    - { role: hanru.debianinit, become: yes }

Licencia

MIT

Referencia

Este rol está inspirado en Mis Primeros 5 Minutos en un Servidor. Al desarrollar este rol, aprendí mucho de los siguientes playbooks/roles de Ansible.

Acerca del proyecto

Debian Server Initialization

Instalar
ansible-galaxy install hanru.debianinit
Licencia
mit
Descargas
97
Propietario