2015-08-23 11:06:25 +02:00
|
|
|
---
|
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- block:
|
2019-10-26 16:36:07 +02:00
|
|
|
- name: Set Ubuntu firewall packages
|
|
|
|
set_fact:
|
|
|
|
ubuntu_firewall_packages:
|
|
|
|
- firewalld
|
|
|
|
- tidy
|
|
|
|
- fail2ban
|
|
|
|
- python3-systemd # for fail2ban systemd backend
|
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- name: Install firewalld and deps
|
2020-03-09 14:20:51 +01:00
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
2019-10-26 16:36:07 +02:00
|
|
|
apt: pkg={{ ubuntu_firewall_packages }} state=present
|
2018-04-26 15:58:35 +02:00
|
|
|
|
2020-04-25 12:54:50 +02:00
|
|
|
- name: Remove ufw
|
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
|
|
|
apt: pkg=ufw state=absent
|
|
|
|
|
2020-04-25 13:21:17 +02:00
|
|
|
# I'm not sure why, but you can use firewalld with the nftables backend even
|
|
|
|
# if nftables itself is not installed. In that case the only way to see the
|
|
|
|
# currently active rules is with firewall-cmd. I prefer installing nftables
|
|
|
|
# so that we can have somewhat of a parallel with iptables:
|
|
|
|
#
|
|
|
|
# nft list ruleset
|
|
|
|
#
|
|
|
|
# See: https://firewalld.org/2018/07/nftables-backend
|
|
|
|
- name: Install nftables
|
|
|
|
when: ansible_distribution_version is version('20.04', '==')
|
|
|
|
apt: pkg=nftables state=present
|
|
|
|
|
|
|
|
- name: Use nftables backend in firewalld
|
|
|
|
when: ansible_distribution_version is version('20.04', '==')
|
|
|
|
lineinfile:
|
|
|
|
dest: /etc/firewalld/firewalld.conf
|
|
|
|
regexp: '^FirewallBackend=iptables$'
|
|
|
|
line: 'FirewallBackend=nftables'
|
|
|
|
notify:
|
|
|
|
- restart firewalld
|
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- name: Copy firewalld public zone file
|
2020-03-09 14:20:51 +01:00
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
2018-04-26 15:58:35 +02:00
|
|
|
template: src=public.xml.j2 dest=/etc/firewalld/zones/public.xml owner=root mode=0600
|
2015-08-23 11:06:25 +02:00
|
|
|
|
2018-04-26 15:58:35 +02:00
|
|
|
- name: Format public.xml firewalld zone file
|
2020-03-09 14:20:51 +01:00
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
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
|
2019-10-05 11:28:30 +02:00
|
|
|
|
|
|
|
- name: Copy ipsets of abusive IPs
|
2020-07-27 13:23:58 +02:00
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
2019-10-05 11:28:30 +02:00
|
|
|
copy: src={{ item }} dest=/etc/firewalld/ipsets/{{ item }} owner=root group=root mode=0600
|
|
|
|
loop:
|
|
|
|
- abusers-ipv4.xml
|
|
|
|
- abusers-ipv6.xml
|
2021-07-21 08:34:51 +02:00
|
|
|
- spamhaus-ipv4.xml
|
|
|
|
- spamhaus-ipv6.xml
|
|
|
|
notify:
|
|
|
|
- restart firewalld
|
|
|
|
|
|
|
|
- name: Copy Spamhaus update script
|
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
|
|
|
copy: src=update-spamhaus-lists.sh dest=/usr/local/bin/update-spamhaus-lists.sh mode=0755 owner=root group=root
|
|
|
|
|
|
|
|
- name: Copy Spamhaus systemd units
|
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
|
|
|
copy: src={{ item }} dest=/etc/systemd/system/{{ item }} mode=0644 owner=root group=root
|
|
|
|
loop:
|
|
|
|
- update-spamhaus-lists.service
|
|
|
|
- update-spamhaus-lists.timer
|
|
|
|
register: spamhaus_systemd_units
|
|
|
|
|
|
|
|
# need to reload to pick up service/timer/environment changes
|
|
|
|
- name: Reload systemd daemon
|
|
|
|
systemd: daemon_reload=yes
|
|
|
|
when: spamhaus_systemd_units is changed
|
|
|
|
|
|
|
|
- name: Start and enable Spamhaus update timer
|
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
|
|
|
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
|
2019-10-26 16:36:07 +02:00
|
|
|
|
|
|
|
- include_tasks: fail2ban.yml
|
2020-03-09 14:20:51 +01:00
|
|
|
when: ansible_distribution_version is version('16.04', '>=')
|
2018-04-25 17:58:31 +02:00
|
|
|
tags: firewall
|
2018-04-25 17:55:22 +02:00
|
|
|
|
|
|
|
# vim: set sw=2 ts=2:
|