Divide firewalld zones for FOG server

This commit is contained in:
2026-04-25 19:14:26 -04:00
parent 0aa62d6af9
commit 4603ff67d9
4 changed files with 144 additions and 21 deletions

View File

@@ -56,33 +56,51 @@
state: present
update_cache: true
- name: Assert valid firewalld config
ansible.builtin.assert:
that:
- firewalld is mapping
- firewalld.type is defined
- firewalld.type in ['simple', 'complex']
fail_msg: "firewalld.type must be 'simple' or 'complex'"
when: firewalld is defined
- name: Install firewalld
ansible.builtin.dnf:
name: firewalld
state: present
when: firewalld is defined
- name: Start and enable firewalld service
ansible.builtin.systemd:
name: firewalld
state: started
enabled: true
when: firewalld is defined
- name: Set default zone to drop (deny incoming by default)
ansible.posix.firewalld:
zone: drop
state: enabled
permanent: true
immediate: true
- name: Allow SSH in drop zone with rate limiting via rich rule
- name: Update SSH rule in firewalld drop zone
ansible.posix.firewalld:
zone: drop
rich_rule: 'rule service name="ssh" accept limit value="10/m"'
permanent: true
immediate: true
state: enabled
state: "{{ 'enabled' if (firewalld.drop_ssh | default(true)) else 'disabled' }}"
when: firewalld is defined
- name: Set drop as the default zone
ansible.builtin.command:
cmd: firewall-cmd --set-default-zone=drop
changed_when: false
register: default_zone_result
changed_when: "'ZONE_ALREADY_SET' not in default_zone_result.stderr"
when: firewalld is defined
- name: Install Cockpit
ansible.builtin.dnf:
name: cockpit
state: present
- name: Enable and start Cockpit socket
ansible.builtin.systemd:
name: cockpit.socket
enabled: true
state: started

View File

@@ -25,11 +25,11 @@
state: directory
mode: "0755"
- name: Clone FOG stable branch
- name: Clone FOG at specified version
ansible.builtin.git:
repo: https://github.com/FOGProject/fogproject.git
dest: /usr/local/src/fogproject
version: stable
version: "{{ fog.version | default('stable') }}"
update: true
- name: Run FOG installer first time
@@ -38,16 +38,88 @@
chdir: /usr/local/src/fogproject/bin
creates: /opt/fog/.fogsettings
- name: Allow required FOG firewall ports
- name: Create admin zone
ansible.posix.firewalld:
zone: admin
state: present
permanent: true
register: admin_zone
when:
- firewalld is defined
- firewalld.type == 'complex'
- name: Create fog zone
ansible.posix.firewalld:
zone: fog
state: present
permanent: true
register: fog_zone
when:
- firewalld is defined
- firewalld.type == 'complex'
- name: Reload firewalld if zones were created
ansible.builtin.command: firewall-cmd --reload
changed_when: true
when:
- firewalld is defined
- firewalld.type == 'complex'
- admin_zone.changed or fog_zone.changed
- name: Bind admin source to admin zone
ansible.posix.firewalld:
zone: admin
source: "{{ firewalld.zones.admin.source }}"
permanent: true
immediate: true
state: enabled
when:
- firewalld is defined
- firewalld.type == 'complex'
- name: Bind fog interface to fog zone
ansible.posix.firewalld:
zone: fog
interface: "{{ firewalld.zones.fog.interface }}"
permanent: true
immediate: true
state: enabled
when:
- firewalld is defined
- firewalld.type == 'complex'
- name: Allow admin services
ansible.posix.firewalld:
zone: admin
service: "{{ item }}"
permanent: true
immediate: true
state: enabled
loop: "{{ firewalld.zones.admin.services | default([]) }}"
when:
- firewalld is defined
- firewalld.type == 'complex'
- name: Allow fog services
ansible.posix.firewalld:
zone: fog
service: "{{ item }}"
permanent: true
immediate: true
state: enabled
loop: "{{ firewalld.zones.fog.services | default([]) }}"
when:
- firewalld is defined
- firewalld.type == 'complex'
- name: Allow fog ports
ansible.posix.firewalld:
zone: fog
port: "{{ item }}"
permanent: true
immediate: true
state: enabled
loop:
- 80/tcp
- 69/udp
- 111/tcp
- 111/udp
- 2049/tcp
- 2049/udp
loop: "{{ firewalld.zones.fog.ports | default([]) }}"
when:
- firewalld is defined
- firewalld.type == 'complex'