parent
b980db172d
commit
ac1ae26d7e
@ -0,0 +1,8 @@ |
|||||||
|
nftables_whitelisted_interfaces: |
||||||
|
- lo |
||||||
|
nftables_tcp_in: |
||||||
|
- 22 |
||||||
|
- 80 |
||||||
|
- 443 |
||||||
|
#nftables_udp_in: |
||||||
|
# - 53 |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
- name: reload_nftables |
||||||
|
shell: "nft -f {{ nftables_ruleset_path }}" |
||||||
|
become: yes |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
- name: ensure nftables is installed |
||||||
|
package: |
||||||
|
name: nftables |
||||||
|
state: installed |
||||||
|
become: yes |
||||||
|
|
||||||
|
- name: deploy nftables ruleset |
||||||
|
template: |
||||||
|
src: nftables.conf |
||||||
|
dest: "{{ nftables_ruleset_path }}" |
||||||
|
owner: root |
||||||
|
group: root |
||||||
|
mode: "0600" |
||||||
|
notify: reload_nftables |
||||||
|
become: yes |
||||||
|
|
||||||
|
- name: ensure nftables is enabled and started |
||||||
|
service: |
||||||
|
name: nftables |
||||||
|
enabled: true |
||||||
|
state: started |
||||||
|
become: yes |
||||||
@ -0,0 +1,59 @@ |
|||||||
|
flush ruleset |
||||||
|
|
||||||
|
table inet firewall { |
||||||
|
|
||||||
|
chain inbound_ipv4 { |
||||||
|
# accepting ping (icmp-echo-request) for diagnostic purposes. |
||||||
|
# However, it also lets probes discover this host is alive. |
||||||
|
# This sample accepts them within a certain rate limit: |
||||||
|
# |
||||||
|
icmp type echo-request limit rate 5/second accept |
||||||
|
} |
||||||
|
|
||||||
|
chain inbound_ipv6 { |
||||||
|
# accept neighbour discovery otherwise connectivity breaks |
||||||
|
# |
||||||
|
icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept |
||||||
|
|
||||||
|
# accepting ping (icmpv6-echo-request) for diagnostic purposes. |
||||||
|
# However, it also lets probes discover this host is alive. |
||||||
|
# This sample accepts them within a certain rate limit: |
||||||
|
# |
||||||
|
icmpv6 type echo-request limit rate 5/second accept |
||||||
|
} |
||||||
|
|
||||||
|
chain inbound { |
||||||
|
|
||||||
|
# By default, drop all traffic unless it meets a filter |
||||||
|
# criteria specified by the rules that follow below. |
||||||
|
type filter hook input priority 0; policy drop; |
||||||
|
|
||||||
|
# Allow traffic from established and related packets, drop invalid |
||||||
|
ct state vmap { established : accept, related : accept, invalid : drop } |
||||||
|
|
||||||
|
{% for interface in nftables_whitelisted_interfaces %} |
||||||
|
iifname {{ interface }} accept |
||||||
|
{% endfor %} |
||||||
|
|
||||||
|
# Jump to chain according to layer 3 protocol using a verdict map |
||||||
|
meta protocol vmap { ip : jump inbound_ipv4, ip6 : jump inbound_ipv6 } |
||||||
|
|
||||||
|
{% if nftables_tcp_in is defined %} |
||||||
|
tcp dport { {{ nftables_tcp_in |join(",") }} } accept |
||||||
|
{% endif %} |
||||||
|
|
||||||
|
{% if nftables_udp_in is defined %} |
||||||
|
udp dport { {{ nftables_udp_in |join(",") }} } accept |
||||||
|
{% endif %} |
||||||
|
|
||||||
|
# Uncomment to enable logging of denied inbound traffic |
||||||
|
# log prefix "[nftables] Inbound Denied: " counter drop |
||||||
|
} |
||||||
|
|
||||||
|
chain forward { |
||||||
|
# Drop everything (assumes this device is not a router) |
||||||
|
type filter hook forward priority 0; policy drop; |
||||||
|
} |
||||||
|
|
||||||
|
# no need to define output chain, default policy is accept if undefined. |
||||||
|
} |
||||||
@ -0,0 +1 @@ |
|||||||
|
nftables_ruleset_path: /etc/nftables.conf |
||||||
Loading…
Reference in new issue