Compare commits

..

69 Commits

Author SHA1 Message Date
Jeremy Gardais ce8974c77a
Update git.ipr domain 2023-11-09 10:46:53 +01:00
Jeremy Gardais 4c728cb70a
Release v2.0.1 2021-08-26 09:57:04 +02:00
Jeremy Gardais c7512f7b13
Separate repo update from install task (fix #24) 2021-08-25 15:34:03 +02:00
Jeremy Gardais 97440461df
Merge branch 'VTimofeenko-gentoo_molecule' 2021-08-25 15:28:15 +02:00
Vladimir Timofeenko 542f562c41
Added molecule tests for Gentoo
This commit adds molecule tests for Gentoo.

Since the tests run inside docker and on systemd system, the host system
also needs to run systemd.

The tests create volumes in /srv/ so that artifacts that take a long
time to build and synchronize are reused between test runs.

This specific commit also fixes the error in ipr-cnrs/nftables#24
2021-08-20 16:50:28 -07:00
Jeremy Gardais 2902c9b77e
Release v2.0.0 2021-08-19 16:34:45 +02:00
Jeremy Gardais be2b941e79
Merge branch 'improve-systemd-unit' 2021-08-19 15:24:32 +02:00
Jeremy Gardais 4267dd455e
Add Molecule tests for systemd unit 2021-08-19 13:56:26 +02:00
Jeremy Gardais 68c5d4e9f7
Remove recurse on fail2ban custom directory
Molecule idempotence test
2021-08-18 16:02:22 +02:00
Jeremy Gardais 34c2668912
Fix systemd directories permissions 2021-08-13 11:52:04 +02:00
Jeremy Gardais 1a5e044ebb
Move systemd "Protect" options to override file
Rebase after Gentoo related commits
2021-08-13 11:51:54 +02:00
Jeremy Gardais 477f4f722c
Ensure to disable nftables unit from old target 2021-08-13 11:50:41 +02:00
Jeremy Gardais a34e5441a9
Start nftables systemd unit earlier
Source: nftables 0.9.8-3.1 from Debian Bullseye
Thanks to @kravietz − PR #19
2021-08-13 11:50:41 +02:00
Jeremy Gardais abdc15191b
Add infos about Fail2ban integration 2021-08-13 11:50:41 +02:00
Jeremy Gardais ac61739f91
Automatically add overrides for fail2ban unit 2021-08-13 11:50:40 +02:00
Jeremy Gardais 5001448a81
Drop fail2ban restart from nftables unit
Rebase after Gentoo related commits
2021-08-13 11:50:31 +02:00
Jeremy Gardais 28cf15ee42
Manage Fail2ban in the "systemd way"
Thanks to @FinweVI !

Rebase after Gentoo related commits
2021-08-13 11:48:27 +02:00
Jeremy Gardais 5dbf5b9b1c
Merge branch 'VTimofeenko-master' 2021-08-13 11:37:58 +02:00
Jeremy Gardais fd52a88be0
Merge branch 'master' of https://github.com/VTimofeenko/nftables into VTimofeenko-master 2021-08-13 11:37:44 +02:00
Vladimir Timofeenko a442b8f637
Added ability to specify nft bin location
Gentoo installs nft binary into /sbin/nft in accordance with the
filesystem spec:

https://devmanual.gentoo.org/general-concepts/filesystem/

This commit adds the ability to specify the location of nft binary
through variable nft__bin_location.

By default it is set to "/usr/sbin/nft".
2021-08-11 08:50:37 -07:00
Jeremy Gardais bac335be11 Merge remote-tracking branch 'github/add_molecule' 2021-08-09 17:07:05 +02:00
Paweł Krawczyk e696d9b482
Restore systemd-fedora-latest image 2021-08-09 10:38:07 +01:00
Paweł Krawczyk 40c632734f
Restore systemd-debian-latest image 2021-08-09 10:32:28 +01:00
Paweł Krawczyk 6a491d63f0
Add separate scenario for Archlinux with custom Dockerfile 2021-08-09 10:05:17 +01:00
Paweł Krawczyk ad499e949f
Leave systems that work for now 2021-08-08 23:48:08 +01:00
Paweł Krawczyk a8a41dfc91
Fix syntax 2021-08-08 23:39:52 +01:00
Paweł Krawczyk 0030b9bfcb
Add archlinux platform 2021-08-08 23:37:47 +01:00
Paweł Krawczyk a75f5bc391
Add volumes to all images 2021-08-08 23:27:47 +01:00
Paweł Krawczyk 32c4ab5215
Because we just can't have init in one place... 2021-08-08 23:19:44 +01:00
Paweł Krawczyk c8fd17d52b
Add Debian and Fedora 2021-08-08 22:14:36 +01:00
Paweł Krawczyk 7e31500c36
Fix variable name 2021-08-08 22:14:21 +01:00
Paweł Krawczyk 0669fe1623
Test for key files generated by the role 2021-08-08 21:48:02 +01:00
Paweł Krawczyk a0fd38056a
Adjust test to differences between CentOS and Debian 2021-08-08 21:40:13 +01:00
Paweł Krawczyk d73b5bbc8f
Debug rules prior to verification 2021-08-08 21:27:18 +01:00
Paweł Krawczyk 73bc1c464b
Fix ansible-lint config location 2021-08-08 21:16:06 +01:00
Paweł Krawczyk 95321f21f9
Mute role-name warnings 2021-08-08 21:01:57 +01:00
Paweł Krawczyk 9940f37baa
Mute lint warnings related to testing 2021-08-08 20:55:56 +01:00
Paweł Krawczyk 5e7b20680b
Fix systemd-ubuntu 2021-08-08 20:47:20 +01:00
Paweł Krawczyk 4eb6a5ae3b
Run ubuntu as privileged 2021-08-08 20:09:42 +01:00
Paweł Krawczyk be4f52b728
Use jrei/systemd-ubuntu 2021-08-08 19:43:58 +01:00
Paweł Krawczyk a5aa2c6e4a
Add some actual verification tasks 2021-08-08 19:09:08 +01:00
Paweł Krawczyk a6f7fde29a
Try centos-systemd 2021-08-08 17:59:44 +01:00
Paweł Krawczyk 8bd7607c09
Typo 2021-08-08 15:52:26 +01:00
Paweł Krawczyk 9fabd5a845
Use Molecule provisioned images 2021-08-08 15:41:28 +01:00
Paweł Krawczyk 9fd12fe790
Skip lint for now 2021-08-07 23:37:58 +01:00
Paweł Krawczyk 3b55e70281
Remove empty lines (yamllint) 2021-08-07 23:35:43 +01:00
Paweł Krawczyk 5416e20904
Fix YAML syntax 2021-08-07 23:30:37 +01:00
Paweł Krawczyk 06fecc68b2
Use robertdebock/molecule-action 2021-08-07 23:29:36 +01:00
Paweł Krawczyk da74b7d2b1
Add Debian scenario 2021-08-07 22:40:29 +01:00
Paweł Krawczyk d786479bc1
Try to run with systemd 2021-08-07 14:20:52 +01:00
Paweł Krawczyk 340f4f83e4
Just run on Alpine 2021-08-07 14:15:13 +01:00
Paweł Krawczyk 652863dd97
OS family for CentOS is RedHat 2021-08-07 14:14:39 +01:00
Paweł Krawczyk 85bb753dd4
Use another action 2021-08-07 14:12:13 +01:00
Paweł Krawczyk b96b750f8d
Try centos/systemd 2021-08-07 14:05:10 +01:00
Paweł Krawczyk 811bd11e9d
Do not remove iptables on test instances 2021-08-07 14:01:35 +01:00
Paweł Krawczyk 26eb76412f
Add config for Arch and Alpine 2021-08-07 13:53:23 +01:00
Paweł Krawczyk 574d9c46b8
Disable other images for now 2021-08-07 13:33:10 +01:00
Paweł Krawczyk 06c594f11b
Debug os family detection in GitHub Actions 2021-08-07 13:32:43 +01:00
Paweł Krawczyk 37919bb428
Do not create inventory 2021-08-07 13:28:36 +01:00
Paweł Krawczyk 9dae659fec
Init Ansible dir 2021-08-07 13:06:08 +01:00
Paweł Krawczyk 933cf1df4e
Create inventory file 2021-08-07 13:04:49 +01:00
Paweł Krawczyk 5df70d971f
Try using matrix with action-molecule 2021-08-07 12:44:26 +01:00
Paweł Krawczyk 6084cfce83
Add task names as required by ansible-lint 2021-08-07 12:18:09 +01:00
Paweł Krawczyk 8fad9d75fd
Update cache on package install 2021-08-07 11:47:32 +01:00
Paweł Krawczyk 82270dc5ef
Specify namespace to allow automatic role path resolution in Molecule 2021-08-07 11:41:14 +01:00
Vladimir Timofeenko 97044bc28f
Added default variables for Gentoo
Gentoo package name for nftables is 'net-firewall/nftables'
2021-08-06 16:20:49 -07:00
Jeremy Gardais adc627ebc0 Merge remote-tracking branch 'github/add_molecule' 2021-08-06 16:09:20 +02:00
Paweł Krawczyk 564038c06e
Add Molecule test scenario 2021-08-06 10:28:16 +01:00
Paweł Krawczyk eafc04a360
Version should be string (ansible-lint) 2021-08-06 10:27:44 +01:00
26 changed files with 584 additions and 15 deletions

4
.ansible-lint Normal file
View File

@ -0,0 +1,4 @@
skip_list:
- command-instead-of-module
- no-changed-when
- role-name

23
.github/workflows/main.yml vendored Normal file
View File

@ -0,0 +1,23 @@
---
name: ipr-cnrs.nftables.molecule
on:
push:
branches: [master]
pull_request:
branches: [master]
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/molecule-action@2.6.17

33
.yamllint Normal file
View File

@ -0,0 +1,33 @@
---
# Based on ansible-lint config
extends: default
rules:
braces:
max-spaces-inside: 1
level: error
brackets:
max-spaces-inside: 1
level: error
colons:
max-spaces-after: -1
level: error
commas:
max-spaces-after: -1
level: error
comments: disable
comments-indentation: disable
document-start: disable
empty-lines:
max: 3
level: error
hyphens:
level: error
indentation: disable
key-duplicates: enable
line-length: disable
new-line-at-end-of-file: disable
new-lines:
type: unix
trailing-spaces: disable
truthy: disable

View File

@ -1,14 +1,27 @@
## v1.X.Y ## v2.0.1
### Added
* Molecule tests for Gentoo (many thanks to @VTimofeenko ! PR #25).
### Fixed
* Separate repositories update from installation task (fix #24).
## v2.0.0
### Added ### Added
* New examples usecases (mostly for playbooks) in README.md. * New examples usecases (mostly for playbooks) in README.md.
* New rules (disable by default) can be define in *forward* chain (thanks to * New rules (disable by default) can be define in *forward* chain (thanks to
@p-rintz PR #14). @p-rintz PR #14).
* Possibility to toggle file's backup (thanks to @p-rintz PR #15). * Possibility to toggle file's backup (thanks to @p-rintz PR #15).
* Gentoo-specific variables (thanks to @VTimofeenko PR #22).
* Ability to specify nft binary path through **nft__bin_location** (thanks to @VTimofeenko PR #22).
* Manage Fail2ban in the "systemd way" (thanks to @FinweVI PR #16). * Manage Fail2ban in the "systemd way" (thanks to @FinweVI PR #16).
* Molecule tests (on Archlinux, Ubuntu, CentOS, Debian and Fedora) (many thanks to @kravietz ! PR #23).
* Support for Debian Bullseye (everything should now works fine).
### Removed ### Removed
* Remove everything related to **in_udp_accept** (see conversation in PR #13). * Remove everything related to **in_udp_accept** (see conversation in
[Github PR #13](https://github.com/ipr-cnrs/nftables/pull/13)).
Cause it was empty by default and the role currently doesn't manage it very Cause it was empty by default and the role currently doesn't manage it very
well. Take a look to new examples in README.md to find your preferred solution well. Take a look to new examples in README.md to find your preferred solution
(re-adding it, new simple/multi-ports filter rule,…). (re-adding it, new simple/multi-ports filter rule,…).
@ -16,8 +29,8 @@
### Fixed ### Fixed
* Ansible-lint: Fix line longer than 160 chars. * Ansible-lint: Fix line longer than 160 chars.
* Start nftables systemd unit earlier (thanks to @kravietz PR #19). * Start nftables systemd unit earlier (thanks to @kravietz PR #19).
* Ensure to disable nftables systemd unit from old target. * Ensure to disable nftables systemd unit from old target (PR #20).
* Move systemd "Protect" options for nftables to specific override.conf file. * Move systemd "Protect" options for nftables to specific override.conf file (PR #20).
## v1.7.0 ## v1.7.0

View File

@ -89,6 +89,7 @@ complexify his philosophy… (I'm pretty sure, i now did complexify it :D) ^^
Please see default value by Operating System file in [vars][vars directory] directory. Please see default value by Operating System file in [vars][vars directory] directory.
* **nft_pkg_list**: The list of package(s) to provide `nftables`. * **nft_pkg_list**: The list of package(s) to provide `nftables`.
* **nft__bin_location** : Path to `nftables` executable. [default : `/usr/sbin/nft`]
### Rules Dictionaries ### Rules Dictionaries
@ -599,7 +600,7 @@ Jérémy Gardais
* [IPR][ipr website] (Institut de Physique de Rennes) * [IPR][ipr website] (Institut de Physique de Rennes)
[gogs to github hook]: https://stackoverflow.com/a/21998477 [gogs to github hook]: https://stackoverflow.com/a/21998477
[nftables source]: https://git.ipr.univ-rennes1.fr/cellinfo/ansible.nftables [nftables source]: https://git.ipr.univ-rennes.fr/cellinfo/ansible.nftables
[nftables github]: https://github.com/ipr-cnrs/nftables [nftables github]: https://github.com/ipr-cnrs/nftables
[wtfpl website]: http://www.wtfpl.net/about/ [wtfpl website]: http://www.wtfpl.net/about/
[ipr website]: https://ipr.univ-rennes1.fr/ [ipr website]: https://ipr.univ-rennes1.fr/

View File

@ -609,3 +609,13 @@ nft_backup_conf: True
# ]]] # ]]]
# ]]] # ]]]
# ]]] # ]]]
# OS specific variables defaults [[[
# ----------------------------------
# .. envvar:: nft__bin_location [[[
#
# Specify Nftables executable location.
#
nft__bin_location: '/usr/sbin/nft'
# ]]]
# ]]]

View File

@ -4,15 +4,31 @@ dependencies: []
galaxy_info: galaxy_info:
author: "Jérémy Gardais" author: "Jérémy Gardais"
namespace: ipr-cnrs
role_name: nftables
description: "Manage Nftables rules and packages" description: "Manage Nftables rules and packages"
license: WTFPL license: WTFPL
company: IPR company: IPR
issue_tracker_url: https://git.ipr.univ-rennes1.fr/cellinfo/ansible.nftables/issues issue_tracker_url: https://git.ipr.univ-rennes.fr/cellinfo/ansible.nftables/issues
min_ansible_version: 2.5 min_ansible_version: '2.5'
platforms: platforms:
- name: Debian - name: Debian
versions: versions:
- bullseye
- buster
- stretch - stretch
- name: Archlinux
versions:
- all
- name: Fedora
versions:
- all
- name: Gentoo
versions:
- all
- name: Ubuntu
versions:
- focal
galaxy_tags: galaxy_tags:
- system - system
- nftables - nftables

View File

@ -0,0 +1,7 @@
FROM archlinux:latest
ENV container=docker
RUN pacman -Sy --noconfirm python
VOLUME ["/sys/fs/cgroup", "/tmp", "/run"]
CMD ["/usr/sbin/init"]

View File

@ -0,0 +1,9 @@
---
- name: Converge
hosts: all
gather_facts: yes
roles:
- role: ipr-cnrs.nftables
nft_debug: true
# can't remove iptables on an instance with docker
nft_old_pkg_manage: false

View File

@ -0,0 +1,19 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: archlinux
image: archlinux:latest
command: /usr/sbin/init
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /run
- /tmp
provisioner:
name: ansible
verifier:
name: ansible

View File

@ -0,0 +1,92 @@
---
# This is an example playbook to execute Ansible tests.
- name: Verify
hosts: all
gather_facts: false
tasks:
- name: check for nftables.d
stat:
path: /etc/nftables.d
register: p
- name: check nftables.d
assert:
that:
- p.stat.exists and p.stat.isdir
- name: check for nftables.conf
stat:
path: /etc/nftables.conf
register: p
- name: check nftables.conf
assert:
that:
- p.stat.exists
- name: check for filter-input.nft
stat:
path: /etc/nftables.d/filter-input.nft
register: p
- name: check filter-input.nft
assert:
that:
- p.stat.exists
- name: list rules
command: nft list ruleset
register: nft
- name: debug rules
debug: var=nft
- name: check rules
assert:
that:
# The whole line is:
# type filter hook input priority 0; policy drop;
# However on CentOS will return "priority 0", while Debian will
# show "priority filter"
- '"type filter hook input" in nft.stdout'
- '"type filter hook output" in nft.stdout'
- name: check for fail2ban systemd custom dir
stat:
path: /etc/systemd/system/fail2ban.service.d
register: f2b_systemd_dir
- name: check fail2ban systemd custom dir
assert:
that:
- f2b_systemd_dir.stat.exists and f2b_systemd_dir.stat.isdir
- name: check for fail2ban systemd override
stat:
path: /etc/systemd/system/fail2ban.service.d/override.conf
register: f2b_systemd_override
- name: check fail2ban systemd override
assert:
that:
- f2b_systemd_override.stat.exists
- name: service status - active
command: systemctl is-active nftables.service
register: status
- name: check service status
assert:
that:
- 'status.stdout == "active"'
- name: service status - enabled
command: systemctl is-enabled nftables.service
register: status
- name: check service status
assert:
that:
- 'status.stdout == "enabled"'

View File

@ -0,0 +1,9 @@
---
- name: Converge
hosts: all
gather_facts: yes
roles:
- role: ipr-cnrs.nftables
nft_debug: true
# can't remove iptables on an instance with docker
nft_old_pkg_manage: false

View File

@ -0,0 +1,55 @@
---
dependency:
name: galaxy
lint: |
set -e
yamllint .
ansible-lint
driver:
name: docker
platforms:
- name: systemd-ubuntu-latest
image: jrei/systemd-ubuntu:latest
command: /usr/sbin/init
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /run
- /tmp
- name: systemd-centos-latest
image: centos/systemd:latest
command: /usr/sbin/init
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /run
- /tmp
- name: systemd-debian-latest
image: jrei/systemd-debian:latest
command: /sbin/init
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /run
- /tmp
- name: systemd-fedora-latest
image: jrei/systemd-fedora:latest
command: /usr/sbin/init
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /run
- /tmp
provisioner:
name: ansible
verifier:
name: ansible

View File

@ -0,0 +1,92 @@
---
# This is an example playbook to execute Ansible tests.
- name: Verify
hosts: all
gather_facts: false
tasks:
- name: check for nftables.d
stat:
path: /etc/nftables.d
register: p
- name: check nftables.d
assert:
that:
- p.stat.exists and p.stat.isdir
- name: check for nftables.conf
stat:
path: /etc/nftables.conf
register: p
- name: check nftables.conf
assert:
that:
- p.stat.exists
- name: check for filter-input.nft
stat:
path: /etc/nftables.d/filter-input.nft
register: p
- name: check filter-input.nft
assert:
that:
- p.stat.exists
- name: list rules
command: nft list ruleset
register: nft
- name: debug rules
debug: var=nft
- name: check rules
assert:
that:
# The whole line is:
# type filter hook input priority 0; policy drop;
# However on CentOS will return "priority 0", while Debian will
# show "priority filter"
- '"type filter hook input" in nft.stdout'
- '"type filter hook output" in nft.stdout'
- name: check for fail2ban systemd custom dir
stat:
path: /etc/systemd/system/fail2ban.service.d
register: f2b_systemd_dir
- name: check fail2ban systemd custom dir
assert:
that:
- f2b_systemd_dir.stat.exists and f2b_systemd_dir.stat.isdir
- name: check for fail2ban systemd override
stat:
path: /etc/systemd/system/fail2ban.service.d/override.conf
register: f2b_systemd_override
- name: check fail2ban systemd override
assert:
that:
- f2b_systemd_override.stat.exists
- name: service status - active
command: systemctl is-active nftables.service
register: status
- name: check service status
assert:
that:
- 'status.stdout == "active"'
- name: service status - enabled
command: systemctl is-enabled nftables.service
register: status
- name: check service status
assert:
that:
- 'status.stdout == "enabled"'

View File

@ -0,0 +1,5 @@
FROM gentoo/stage3:systemd
ENV container=docker
VOLUME ["/sys/fs/cgroup"]
CMD ["/sbin/init"]

View File

@ -0,0 +1,9 @@
---
- name: Converge
hosts: all
gather_facts: yes
roles:
- role: ipr-cnrs.nftables
nft_debug: true
# can't remove iptables on an instance with docker
nft_old_pkg_manage: false

View File

@ -0,0 +1,21 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: Gentoo
image: gentoo/stage3:systemd
command: /sbin/init
privileged: true
volumes:
- /srv/gentoo-molecule/gentoo-repo:/var/db/repos/gentoo
- /srv/gentoo-molecule/binpkgs:/var/cache/binpkgs
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /run
- /tmp
provisioner:
name: ansible
verifier:
name: ansible

View File

@ -0,0 +1,34 @@
# Taken from https://github.com/VTimofeenko/portage-overlay-cfg on commit d8914035e236c4f3819985098dd1ae36551bfc52
# If bugs are found check that repository
# Since Gentoo builds from source, to save time on molecule tests, we should reuse artifacts as much as possible
# This playbook performs the initial setup of a Gentoo container
# It configures portage to try to use prebuilt packages if available and to save the built packages.
---
- name: Run preparation playbook
hosts: Gentoo
tasks:
- name: Enable buildpkg feature
lineinfile:
line: "FEATURES='buildpkg'"
dest: /etc/portage/make.conf
state: present
- name: Enable trying to install from binpkgs by default
lineinfile:
line: "EMERGE_DEFAULT_OPTS='--usepkg'"
dest: /etc/portage/make.conf
state: present
- name: Synchronize gentoo repository if needed
block:
- name: Check if there is anything in the repo
find:
paths: '/var/db/repos/gentoo/'
register: find_files_in_repo
- name: Synchronize the repo if needed
command: "emaint sync -a"
when: find_files_in_repo.matched == 0
- name: Install equery, needed for package check
# Command, because equery does not exist yet
command: emerge --changed-use --oneshot app-portage/gentoolkit
changed_when: false
# The rest of the original file is specific to that role and not needed here

View File

@ -0,0 +1,92 @@
---
# This is an example playbook to execute Ansible tests.
- name: Verify
hosts: all
gather_facts: false
tasks:
- name: check for nftables.d
stat:
path: /etc/nftables.d
register: p
- name: check nftables.d
assert:
that:
- p.stat.exists and p.stat.isdir
- name: check for nftables.conf
stat:
path: /etc/nftables.conf
register: p
- name: check nftables.conf
assert:
that:
- p.stat.exists
- name: check for filter-input.nft
stat:
path: /etc/nftables.d/filter-input.nft
register: p
- name: check filter-input.nft
assert:
that:
- p.stat.exists
- name: list rules
command: nft list ruleset
register: nft
- name: debug rules
debug: var=nft
- name: check rules
assert:
that:
# The whole line is:
# type filter hook input priority 0; policy drop;
# However on CentOS will return "priority 0", while Debian will
# show "priority filter"
- '"type filter hook input" in nft.stdout'
- '"type filter hook output" in nft.stdout'
- name: check for fail2ban systemd custom dir
stat:
path: /etc/systemd/system/fail2ban.service.d
register: f2b_systemd_dir
- name: check fail2ban systemd custom dir
assert:
that:
- f2b_systemd_dir.stat.exists and f2b_systemd_dir.stat.isdir
- name: check for fail2ban systemd override
stat:
path: /etc/systemd/system/fail2ban.service.d/override.conf
register: f2b_systemd_override
- name: check fail2ban systemd override
assert:
that:
- f2b_systemd_override.stat.exists
- name: service status - active
command: systemctl is-active nftables.service
register: status
- name: check service status
assert:
that:
- 'status.stdout == "active"'
- name: service status - enabled
command: systemctl is-enabled nftables.service
register: status
- name: check service status
assert:
that:
- 'status.stdout == "enabled"'

View File

@ -13,7 +13,8 @@
loop_control: loop_control:
loop_var: groupname loop_var: groupname
- debug: var=nftables_group_rules - name: Debug nftables_group_rules
debug: var=nftables_group_rules
when: nft_debug when: nft_debug
- name: Import nftables-variables if nft_merged_groups is set - name: Import nftables-variables if nft_merged_groups is set
@ -36,7 +37,12 @@
loop_control: loop_control:
loop_var: varfile loop_var: varfile
- debug: var=nft_combined_rules - name: Debug nft_combined_rules
debug: var=nft_combined_rules
when: nft_debug
- name: Debug ansible_os_family
debug: var=ansible_os_family
when: nft_debug when: nft_debug
- name: Load specific OS vars for nftables - name: Load specific OS vars for nftables
@ -49,6 +55,12 @@
loop_var: osname loop_var: osname
# Manage packages [[[1 # Manage packages [[[1
- name: Update repositories
package:
update_cache: true
when: (nft_enabled|bool and
ansible_os_family not in [ 'Gentoo' ])
- name: Ensure Nftables packages are in their desired state - name: Ensure Nftables packages are in their desired state
package: package:
name: '{{ nft_pkg_list | list }}' name: '{{ nft_pkg_list | list }}'
@ -194,7 +206,7 @@
file: file:
path: "{{ nft__service_override_path | dirname }}" path: "{{ nft__service_override_path | dirname }}"
state: directory state: directory
recurse: yes mode: '0755'
when: when:
- nft_enabled|bool - nft_enabled|bool
- nft_service_manage|bool - nft_service_manage|bool
@ -219,7 +231,7 @@
file: file:
path: "{{ nft__fail2ban_service_unit_path | dirname }}" path: "{{ nft__fail2ban_service_unit_path | dirname }}"
state: directory state: directory
recurse: yes mode: '0755'
when: when:
- nft_enabled|bool - nft_enabled|bool
- nft_service_manage|bool - nft_service_manage|bool

View File

@ -1,5 +1,5 @@
#jinja2: lstrip_blocks: "True", trim_blocks: "True" #jinja2: lstrip_blocks: "True", trim_blocks: "True"
#!/usr/sbin/nft -f #!{{ nft__bin_location }} -f
# {{ ansible_managed }} # {{ ansible_managed }}
{% set globalmerged = nft_global_default_rules.copy() %} {% set globalmerged = nft_global_default_rules.copy() %}
{% set _ = globalmerged.update(nft_global_rules) %} {% set _ = globalmerged.update(nft_global_rules) %}

View File

@ -13,9 +13,9 @@ RemainAfterExit=yes
StandardInput=null StandardInput=null
ProtectSystem=full ProtectSystem=full
ProtectHome=true ProtectHome=true
ExecStart=/usr/sbin/nft -f {{ nft_main_conf_path }} ExecStart={{ nft__bin_location }} -f {{ nft_main_conf_path }}
ExecReload=/usr/sbin/nft -f {{ nft_main_conf_path }} ExecReload={{ nft__bin_location }} -f {{ nft_main_conf_path }}
ExecStop=/usr/sbin/nft flush ruleset ExecStop={{ nft__bin_location }} flush ruleset
[Install] [Install]
WantedBy=sysinit.target WantedBy=sysinit.target

4
vars/alpine.yml Normal file
View File

@ -0,0 +1,4 @@
---
# vars file for Alpine
nft_pkg_list:
- nftables

4
vars/archlinux.yml Normal file
View File

@ -0,0 +1,4 @@
---
# vars file for Archlinux-based distros
nft_pkg_list:
- nftables

5
vars/gentoo.yml Normal file
View File

@ -0,0 +1,5 @@
---
# vars file for Gentoo
nft_pkg_list:
- net-firewall/nftables
nft__bin_location: "/sbin/nft"