2014-08-16 23:35:57 +02:00
|
|
|
---
|
2021-09-27 09:31:31 +02:00
|
|
|
# Debian 10 will use firewalld with the iptables backend.
|
2021-07-26 12:09:41 +02:00
|
|
|
# Debian 11 will use nftables directly, with no firewalld.
|
2015-06-07 11:42:03 +02:00
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- block:
|
2019-10-26 16:36:07 +02:00
|
|
|
- name: Set Debian firewall packages
|
2021-07-26 12:09:41 +02:00
|
|
|
when: ansible_distribution_major_version is version('10', '<=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.set_fact:
|
2019-10-26 16:36:07 +02:00
|
|
|
debian_firewall_packages:
|
|
|
|
- firewalld
|
|
|
|
- tidy
|
|
|
|
- fail2ban
|
|
|
|
- python3-systemd # for fail2ban systemd backend
|
|
|
|
|
2021-07-26 12:09:41 +02:00
|
|
|
- name: Set Debian firewall packages
|
|
|
|
when: ansible_distribution_major_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.set_fact:
|
2021-07-26 12:09:41 +02:00
|
|
|
debian_firewall_packages:
|
|
|
|
- fail2ban
|
|
|
|
- libnet-ip-perl # for aggregate-cidr-addresses.pl
|
|
|
|
- nftables
|
|
|
|
- python3-systemd
|
2021-07-29 09:24:32 +02:00
|
|
|
- curl # for nftables update scripts
|
2021-07-26 12:09:41 +02:00
|
|
|
|
|
|
|
- name: Install firewall packages
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.apt: pkg={{ debian_firewall_packages }} state=present cache_valid_time=3600
|
2018-04-26 15:58:35 +02:00
|
|
|
|
2021-09-27 09:35:38 +02:00
|
|
|
- name: Remove iptables on newer Debian
|
|
|
|
when: ansible_distribution_major_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.apt: pkg=iptables state=absent
|
2021-09-27 09:35:38 +02:00
|
|
|
|
2021-07-29 09:10:04 +02:00
|
|
|
- name: Copy nftables.conf
|
2021-07-26 12:09:41 +02:00
|
|
|
when: ansible_distribution_major_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.template: src=nftables.conf.j2 dest=/etc/nftables.conf owner=root mode=0644
|
2021-07-29 09:10:04 +02:00
|
|
|
notify:
|
2021-09-07 14:43:33 +02:00
|
|
|
- restart nftables
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2021-07-26 12:09:41 +02:00
|
|
|
|
|
|
|
- name: Create /etc/nftables extra config directory
|
|
|
|
when: ansible_distribution_major_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.file: path=/etc/nftables state=directory owner=root mode=0755
|
2021-07-26 12:09:41 +02:00
|
|
|
|
|
|
|
- name: Copy extra nftables configuration files
|
|
|
|
when: ansible_distribution_major_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.copy: src={{ item.src }} dest=/etc/nftables/{{ item.src }} owner=root group=root mode=0644 force={{ item.force }}
|
2021-07-26 12:09:41 +02:00
|
|
|
loop:
|
2021-09-08 08:58:13 +02:00
|
|
|
- { src: "spamhaus-ipv4.nft", force: "no" }
|
|
|
|
- { src: "spamhaus-ipv6.nft", force: "no" }
|
|
|
|
- { src: "abusech-ipv4.nft", force: "no" }
|
|
|
|
- { src: "abuseipdb-ipv4.nft", force: "yes" }
|
|
|
|
- { src: "abuseipdb-ipv6.nft", force: "yes" }
|
2021-07-26 12:09:41 +02:00
|
|
|
notify:
|
2021-09-07 14:43:33 +02:00
|
|
|
- restart nftables
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2021-07-26 12:09:41 +02:00
|
|
|
|
2019-10-26 19:34:25 +02:00
|
|
|
- name: Use iptables backend in firewalld
|
2021-07-24 22:09:33 +02:00
|
|
|
when: ansible_distribution_major_version is version('10', '==')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.lineinfile:
|
2019-10-18 18:02:17 +02:00
|
|
|
dest: /etc/firewalld/firewalld.conf
|
2019-10-26 19:34:25 +02:00
|
|
|
regexp: '^FirewallBackend=nftables$'
|
|
|
|
line: 'FirewallBackend=iptables'
|
2019-10-18 18:02:17 +02:00
|
|
|
notify:
|
|
|
|
- restart firewalld
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2019-10-18 18:02:17 +02:00
|
|
|
|
2019-10-18 21:49:29 +02:00
|
|
|
# firewalld seems to have an issue with iptables 1.8.2 when using the nftables
|
|
|
|
# backend. Using individual calls seems to work around it.
|
|
|
|
# See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931722
|
|
|
|
- name: Use individual iptables calls
|
2021-07-24 22:09:33 +02:00
|
|
|
when: ansible_distribution_major_version is version('10', '==')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.lineinfile:
|
2019-10-18 21:49:29 +02:00
|
|
|
dest: /etc/firewalld/firewalld.conf
|
2019-12-10 12:45:00 +01:00
|
|
|
regexp: '^IndividualCalls=no$'
|
|
|
|
line: 'IndividualCalls=yes'
|
2019-10-18 21:49:29 +02:00
|
|
|
notify:
|
|
|
|
- restart firewalld
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2019-10-18 21:49:29 +02:00
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- name: Copy firewalld public zone file
|
2021-07-26 12:09:41 +02:00
|
|
|
when: ansible_distribution_major_version is version('10', '<=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.template: src=public.xml.j2 dest=/etc/firewalld/zones/public.xml owner=root mode=0600
|
2015-06-07 11:42:03 +02:00
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- name: Format public.xml firewalld zone file
|
2021-07-26 12:09:41 +02:00
|
|
|
when: ansible_distribution_major_version is version('10', '<=')
|
2018-04-26 15:58:35 +02:00
|
|
|
command: tidy -xml -iq -m -w 0 /etc/firewalld/zones/public.xml
|
|
|
|
notify:
|
2019-10-05 11:29:30 +02:00
|
|
|
- restart firewalld
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2019-10-05 11:28:30 +02:00
|
|
|
|
2021-07-26 12:09:41 +02:00
|
|
|
- name: Copy firewalld ipsets of abusive IPs
|
|
|
|
when: ansible_distribution_major_version is version('10', '<=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.copy: src={{ item }} dest=/etc/firewalld/ipsets/{{ item }} owner=root group=root mode=0600
|
2019-10-05 11:28:30 +02:00
|
|
|
loop:
|
|
|
|
- abusers-ipv4.xml
|
|
|
|
- abusers-ipv6.xml
|
2021-07-24 22:09:33 +02:00
|
|
|
- spamhaus-ipv4.xml
|
|
|
|
- spamhaus-ipv6.xml
|
|
|
|
notify:
|
|
|
|
- restart firewalld
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2021-07-24 22:09:33 +02:00
|
|
|
|
2021-07-26 12:09:41 +02:00
|
|
|
- name: Copy Spamhaus firewalld update script
|
|
|
|
when: ansible_distribution_version is version('10', '<=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.copy: src=update-spamhaus-lists.sh dest=/usr/local/bin/update-spamhaus-lists.sh mode=0755 owner=root group=root
|
2021-07-24 22:09:33 +02:00
|
|
|
|
2021-07-26 12:09:41 +02:00
|
|
|
- name: Copy Spamhaus firewalld systemd units
|
|
|
|
when: ansible_distribution_version is version('10', '<=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.copy: src={{ item }} dest=/etc/systemd/system/{{ item }} mode=0644 owner=root group=root
|
2021-07-24 22:09:33 +02:00
|
|
|
loop:
|
|
|
|
- update-spamhaus-lists.service
|
|
|
|
- update-spamhaus-lists.timer
|
2021-07-26 12:09:41 +02:00
|
|
|
register: spamhaus_firewalld_systemd_units
|
|
|
|
|
|
|
|
- name: Copy Spamhaus nftables update scripts
|
|
|
|
when: ansible_distribution_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.copy: src={{ item }} dest=/usr/local/bin/{{ item }} mode=0755 owner=root group=root
|
2021-07-26 12:09:41 +02:00
|
|
|
loop:
|
|
|
|
- update-spamhaus-nftables.sh
|
|
|
|
- aggregate-cidr-addresses.pl
|
2021-07-29 09:16:00 +02:00
|
|
|
- update-abusech-nftables.sh
|
2021-07-26 12:09:41 +02:00
|
|
|
|
2021-07-29 09:16:00 +02:00
|
|
|
- name: Copy nftables systemd units
|
2021-07-26 12:09:41 +02:00
|
|
|
when: ansible_distribution_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.copy: src={{ item }} dest=/etc/systemd/system/{{ item }} mode=0644 owner=root group=root
|
2021-07-26 12:09:41 +02:00
|
|
|
loop:
|
|
|
|
- update-spamhaus-nftables.service
|
|
|
|
- update-spamhaus-nftables.timer
|
2021-07-29 09:16:00 +02:00
|
|
|
- update-abusech-nftables.service
|
|
|
|
- update-abusech-nftables.timer
|
|
|
|
register: nftables_systemd_units
|
2021-07-24 22:09:33 +02:00
|
|
|
|
|
|
|
# need to reload to pick up service/timer/environment changes
|
|
|
|
- name: Reload systemd daemon
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.systemd: daemon_reload=yes
|
2021-07-26 12:09:41 +02:00
|
|
|
when: spamhaus_firewalld_systemd_units is changed or
|
2021-07-29 09:16:00 +02:00
|
|
|
nftables_systemd_units is changed
|
2021-07-24 22:09:33 +02:00
|
|
|
|
2021-07-26 12:09:41 +02:00
|
|
|
- name: Start and enable Spamhaus firewalld update timer
|
|
|
|
when: ansible_distribution_version is version('10', '<=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.systemd: name=update-spamhaus-lists.timer state=started enabled=yes
|
2019-10-05 11:28:30 +02:00
|
|
|
notify:
|
2019-10-05 11:29:30 +02:00
|
|
|
- restart firewalld
|
2021-09-28 09:45:51 +02:00
|
|
|
- restart fail2ban
|
2019-10-26 16:36:07 +02:00
|
|
|
|
2021-07-29 09:16:00 +02:00
|
|
|
- name: Start and enable nftables update timers
|
2021-07-26 12:09:41 +02:00
|
|
|
when: ansible_distribution_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.systemd: name={{ item }} state=started enabled=yes
|
2021-07-29 09:16:00 +02:00
|
|
|
loop:
|
|
|
|
- update-spamhaus-nftables.timer
|
|
|
|
- update-abusech-nftables.timer
|
2021-07-26 12:09:41 +02:00
|
|
|
|
2021-07-29 09:10:04 +02:00
|
|
|
- name: Start and enable nftables
|
2021-07-29 09:05:15 +02:00
|
|
|
when: ansible_distribution_major_version is version('11', '>=')
|
2022-09-10 17:09:12 +02:00
|
|
|
ansible.builtin.systemd: name=nftables state=started enabled=yes
|
2021-07-29 09:05:15 +02:00
|
|
|
|
2022-09-10 17:09:12 +02:00
|
|
|
- ansible.builtin.include_tasks: fail2ban.yml
|
2020-03-09 14:20:51 +01:00
|
|
|
when: ansible_distribution_major_version is version('9', '>=')
|
2018-04-25 17:58:31 +02:00
|
|
|
tags: firewall
|
2018-04-25 17:55:22 +02:00
|
|
|
|
|
|
|
# vim: set sw=2 ts=2:
|