Compare commits

..

60 Commits

Author SHA1 Message Date
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
21 changed files with 345 additions and 7 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

@ -5,6 +5,8 @@
* 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
* Ability to specify nft binary path through **nft__bin_location**
* Manage Fail2ban in the "systemd way" (thanks to @FinweVI PR #16). * Manage Fail2ban in the "systemd way" (thanks to @FinweVI PR #16).
### Removed ### Removed

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

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,11 +4,13 @@ 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-rennes1.fr/cellinfo/ansible.nftables/issues
min_ansible_version: 2.5 min_ansible_version: '2.5'
platforms: platforms:
- name: Debian - name: Debian
versions: versions:

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,72 @@
---
# 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 nftables.conf
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: 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,72 @@
---
# 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 nftables.conf
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: 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
@ -53,6 +59,7 @@
package: package:
name: '{{ nft_pkg_list | list }}' name: '{{ nft_pkg_list | list }}'
state: '{{ nft_pkg_state }}' state: '{{ nft_pkg_state }}'
update_cache: true
register: pkg_install_result register: pkg_install_result
until: pkg_install_result is success until: pkg_install_result is success
when: nft_enabled|bool when: nft_enabled|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"