]> git.openstreetmap.org Git - chef.git/blob - cookbooks/networking/templates/default/nftables.erb
networking: add flush command to nftables script
[chef.git] / cookbooks / networking / templates / default / nftables.erb
1 #!/bin/sh -e
2
3 start() {
4   /usr/sbin/nft -f /etc/nftables.conf
5   [ -f /var/lib/nftables/ip-blocklist.nft ] && /usr/sbin/nft -f /var/lib/nftables/ip-blocklist.nft || :
6   [ -f /var/lib/nftables/ip6-blocklist.nft ] && /usr/sbin/nft -f /var/lib/nftables/ip6-blocklist.nft || :
7 }
8
9 stop() {
10   /usr/sbin/nft list set inet chef-filter ip-blocklist > /var/lib/nftables/ip-blocklist.nft
11   /usr/sbin/nft list set inet chef-filter ip6-blocklist > /var/lib/nftables/ip6-blocklist.nft
12   /usr/sbin/nft delete table inet chef-filter
13 <% if node[:roles].include?("gateway") -%>
14   /usr/sbin/nft delete table ip chef-nat
15 <% end -%>
16 }
17
18 reload() {
19   stop
20   start
21 }
22
23 block() {
24   for address in "$@"
25   do
26     case "$address" in
27       *.*) /usr/sbin/nft add element inet chef-filter ip-blocklist "{ $address }";;
28       *:*) /usr/sbin/nft add element inet chef-filter ip6-blocklist "{ $address }";;
29     esac
30   done
31 }
32
33 unblock() {
34   for address in "$@"
35   do
36     case "$address" in
37       *.*) /usr/sbin/nft delete element inet chef-filter ip-blocklist "{ $address }";;
38       *:*) /usr/sbin/nft delete element inet chef-filter ip6-blocklist "{ $address }";;
39     esac
40   done
41 }
42
43 flush() {
44   /usr/sbin/nft flush set inet chef-filter ip-blocklist
45   /usr/sbin/nft flush set inet chef-filter ip6-blocklist
46 }
47
48 command=$1
49 shift
50
51 case "$command" in
52   start) start;;
53   stop) stop;;
54   reload) reload;;
55   block) block "$@";;
56   unblock) unblock "$@";;
57   flush) flush;;
58 esac
59
60 exit 0