@@ -42,6 +42,12 @@ Installation instructions for nftables
The base directory for arch-independent files. Defaults to
$prefix/share.
+ --with-unitdir=
+
+ Directory for systemd unit files. Defaults to the value obtained from
+ pkg-config for systemd.pc, and ${prefix}/lib/systemd/system as a
+ fallback.
+
--disable-debug
Disable debugging
@@ -375,18 +375,19 @@ dist_pkgdata_DATA = \
files/nftables/netdev-ingress.nft \
$(NULL)
-pkgdocdir = ${docdir}/examples
+exampledir = ${docdir}/examples
-dist_pkgdoc_SCRIPTS = \
+dist_example_SCRIPTS = \
files/examples/ct_helpers.nft \
files/examples/load_balancing.nft \
files/examples/secmark.nft \
files/examples/sets_and_maps.nft \
$(NULL)
-pkgsysconfdir = ${sysconfdir}/nftables/osf
+pkgsysconfdir = ${sysconfdir}/${PACKAGE}
+osfdir = ${pkgsysconfdir}/osf
-dist_pkgsysconf_DATA = \
+dist_osf_DATA = \
files/osf/pf.os \
$(NULL)
@@ -410,3 +411,10 @@ EXTRA_DIST += \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnftables.pc
+unit_DATA = tools/nftables.service
+man_MANS = tools/nftables.service.8
+doc_DATA = files/nftables/main.nft
+
+tools/nftables.service: tools/nftables.service.in ${top_builddir}/config.status
+ ${AM_V_GEN}${MKDIR_P} tools
+ ${AM_V_at}sed -e 's|@''sbindir''@|${sbindir}|g;s|@''pkgsysconfdir''@|${pkgsysconfdir}|g' <${srcdir}/tools/nftables.service.in >$@
@@ -114,6 +114,16 @@ AC_CHECK_DECLS([getprotobyname_r, getprotobynumber_r, getservbyport_r], [], [],
#include <netdb.h>
]])
+AC_ARG_WITH([unitdir],
+ [AS_HELP_STRING([--with-unitdir=PATH], [Path to systemd service unit directory])],
+ [unitdir="$withval"],
+ [
+ unitdir=$("$PKG_CONFIG" systemd --variable systemdsystemunitdir 2>/dev/null)
+ AS_IF([test -z "$unitdir"], [unitdir='${prefix}/lib/systemd/system'])
+ ])
+AC_SUBST([unitdir])
+
+
AC_CONFIG_FILES([ \
Makefile \
libnftables.pc \
new file mode 100644
@@ -0,0 +1,22 @@
+#!/usr/sbin/nft -f
+
+# template static firewall configuration file
+#
+# copy this over to /etc/nftables/rules/main.nft as a starting point for
+# configuring a rule set which will be loaded by nftables.service.
+
+table inet filter {
+ chain input {
+ type filter hook input priority filter;
+ }
+ chain forward {
+ type filter hook forward priority filter;
+ }
+ chain output {
+ type filter hook output priority filter;
+ }
+}
+
+# this can be used to split the rule set into multiple smaller files concerned
+# with specific topics, like forwarding rules
+#include "/etc/nftables/rules/forwarding.nft"
new file mode 100644
@@ -0,0 +1,17 @@
+.TH nftables.service 8 "" "nftables" "nftables admin reference"
+.SH Name
+nftables.service \(em Static Firewall Configuration with nftables.service
+.SH Description
+An nftables systemd service is provided which allows to setup static firewall
+rulesets based on a configuration file.
+.PP
+To use this service, you need to create the main configuration file in
+/etc/nftables/rules/main.nft. A template for this can be copied from
+/usr/share/doc/nftables/main.nft. Alternatively, `nft list ruleset >main.nft`
+could be used to save the active configuration (if any) to the file.
+.PP
+Once the desired static firewall configuration is in place, it can be tested by
+running `systemctl start nftables.service`. To enable the service at boot time,
+run `systemctl enable nftables.service`.
+.SH See also
+\fBnft\fP(8)
new file mode 100644
@@ -0,0 +1,21 @@
+[Unit]
+Description=nftables static rule set
+Documentation=man:nftables.service(8)
+Wants=network-pre.target
+Before=network-pre.target shutdown.target
+Conflicts=shutdown.target
+DefaultDependencies=no
+ConditionPathExists=@pkgsysconfdir@/rules/main.nft
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+StandardInput=null
+ProtectSystem=full
+ProtectHome=true
+ExecStart=@sbindir@/nft 'flush ruleset; include "@pkgsysconfdir@/rules/main.nft"'
+ExecReload=@sbindir@/nft 'flush ruleset; include "@pkgsysconfdir@/rules/main.nft"'
+ExecStop=@sbindir@/nft flush ruleset
+
+[Install]
+WantedBy=sysinit.target