]> git.openstreetmap.org Git - chef.git/blob - cookbooks/networking/templates/default/nftables.erb
778e57a218768fb84fe03ba4c343b8ad7fddc4d7
[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 command=$1
44 shift
45
46 case "$command" in
47   start) start;;
48   stop) stop;;
49   reload) reload;;
50   block) block "$@";;
51   unblock) unblock "$@";;
52 esac
53
54 exit 0