#!/bin/bash | |
shopt -s nullglob | |
declare -A basemap=() | |
i=0 | |
for dir in /run/nftables /etc/nftables /usr/share/nftables; do | |
for file in "$dir"/*.rules; do | |
basemap["${file##*/}$i"]="$file" | |
done | |
let i+=1 | |
done | |
rules="" | |
trap 'rm -f -- "$rules"' TERM INT EXIT ERR | |
rules="$(mktemp)" || exit | |
echo 'flush ruleset' >"$rules" | |
for key in $(printf "%s\n" "${!basemap[@]}" | sort -r); do | |
echo "Loading ${basemap[$key]}" >&2 | |
echo '' >>"$rules" | |
cat "${basemap[$key]}" >>"$rules" | |
done | |
nft -f "$rules" || exit |