mirror of
https://github.com/fscotto/infra.git
synced 2026-09-27 19:03:47 +00:00
138 lines
4.3 KiB
YAML
138 lines
4.3 KiB
YAML
---
|
|
|
|
- name: Require supported server firewall backend
|
|
tags: [services, packages]
|
|
ansible.builtin.assert:
|
|
that:
|
|
- server_firewall_backend == 'firewalld'
|
|
fail_msg: >-
|
|
server_firewall_backend must be firewalld for the Rocky server profile.
|
|
|
|
- name: Configure DuckDNS updater
|
|
tags: [dotfiles, dotfiles:server, duckdns]
|
|
ansible.builtin.import_tasks: duckdns.yml
|
|
|
|
- name: Ensure server directories exist
|
|
tags: [dotfiles, services]
|
|
ansible.builtin.file:
|
|
path: "{{ item.path }}"
|
|
state: directory
|
|
owner: "{{ item.owner }}"
|
|
group: "{{ item.group }}"
|
|
mode: "{{ item.mode }}"
|
|
loop: "{{ server_directories | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item.path }}"
|
|
|
|
- name: Copy server dotfiles
|
|
tags: [dotfiles, dotfiles:server]
|
|
ansible.builtin.copy:
|
|
src: "{{ playbook_dir }}/../dotfiles/server/{{ item.src }}"
|
|
dest: "{{ server_user_home }}/{{ item.dest }}"
|
|
owner: "{{ server_username }}"
|
|
group: "{{ server_user_group }}"
|
|
mode: "{{ item.mode }}"
|
|
loop: "{{ server_dotfiles | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item.dest }}"
|
|
|
|
- name: Render server templates
|
|
tags: [dotfiles, dotfiles:server]
|
|
ansible.builtin.template:
|
|
src: "{{ item.src }}"
|
|
dest: "{{ item.dest if item.dest.startswith('/') else server_user_home ~ '/' ~ item.dest }}"
|
|
owner: "{{ item.owner | default(server_username) }}"
|
|
group: "{{ item.group | default(server_user_group) }}"
|
|
mode: "{{ item.mode }}"
|
|
loop: "{{ server_templates | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item.dest }}"
|
|
no_log: "{{ item.no_log | default(false) }}"
|
|
|
|
- name: Manage Podman Compose stack
|
|
tags: [services, podman]
|
|
ansible.builtin.include_tasks: podman-compose.yml
|
|
|
|
- name: Ensure server SSH authorized key fragments directory exists
|
|
tags: [services, ssh]
|
|
ansible.builtin.file:
|
|
path: "{{ server_ssh_authorized_key_directory }}"
|
|
state: directory
|
|
owner: "{{ server_username }}"
|
|
group: "{{ server_user_group }}"
|
|
mode: "0700"
|
|
when: server_ssh_authorized_keys | length > 0
|
|
|
|
- name: Manage server SSH authorized key fragments
|
|
tags: [services, ssh]
|
|
ansible.builtin.copy:
|
|
content: "{{ item.key }}\n"
|
|
dest: "{{ server_ssh_authorized_key_directory }}/{{ item.name }}"
|
|
owner: "{{ server_username }}"
|
|
group: "{{ server_user_group }}"
|
|
mode: "0600"
|
|
loop: "{{ server_ssh_authorized_keys }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
when: server_ssh_authorized_keys | length > 0
|
|
|
|
- name: Configure server SSH authorized key fragments
|
|
tags: [services, ssh]
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/ssh/sshd_config
|
|
regexp: '^\s*AuthorizedKeysFile\s+'
|
|
line: >-
|
|
AuthorizedKeysFile {{ server_ssh_authorized_keys | map(attribute='name')
|
|
| map('regex_replace', '^', '%h/.ssh/authorized_keys.d/') | join(' ') }}
|
|
state: present
|
|
validate: "sshd -t -f %s"
|
|
notify: Reload SSH service
|
|
when: server_ssh_authorized_keys | length > 0
|
|
|
|
- name: Disable SSH root login on server
|
|
tags: [services]
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/ssh/sshd_config
|
|
regexp: '^\s*PermitRootLogin\s+'
|
|
line: "PermitRootLogin {{ server_sshd_settings.PermitRootLogin }}"
|
|
state: present
|
|
validate: "sshd -t -f %s"
|
|
notify: Reload SSH service
|
|
|
|
- name: Restrict SSH login to allowed users on server
|
|
tags: [services]
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/ssh/sshd_config
|
|
regexp: '^\s*AllowUsers\s+'
|
|
line: "AllowUsers {{ server_sshd_allow_users | join(' ') }}"
|
|
state: present
|
|
validate: "sshd -t -f %s"
|
|
notify: Reload SSH service
|
|
when: (server_sshd_allow_users | default([])) | length > 0
|
|
|
|
- name: Allow server services through firewalld
|
|
tags: [services, packages]
|
|
ansible.posix.firewalld:
|
|
service: "{{ item }}"
|
|
zone: "{{ server_firewalld_zone }}"
|
|
state: enabled
|
|
permanent: true
|
|
immediate: true
|
|
loop: "{{ server_firewalld_services | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
when: server_firewall_backend == 'firewalld'
|
|
|
|
- name: Allow server ports through firewalld
|
|
tags: [services, packages]
|
|
ansible.posix.firewalld:
|
|
port: "{{ item }}"
|
|
zone: "{{ server_firewalld_zone }}"
|
|
state: enabled
|
|
permanent: true
|
|
immediate: true
|
|
loop: "{{ server_firewalld_ports | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
when: server_firewall_backend == 'firewalld'
|