feat: nftables > iptables
This commit is contained in:
parent
2b39625159
commit
b10c779362
4 changed files with 69 additions and 44 deletions
|
|
@ -1,9 +1,9 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
# restart iptables
|
# restart nftables
|
||||||
- name: "restart iptables"
|
- name: "restart nftables"
|
||||||
ansible.builtin.service:
|
ansible.builtin.service:
|
||||||
name: "iptables"
|
name: "nftables"
|
||||||
state: "restarted"
|
state: "restarted"
|
||||||
|
|
||||||
# apply local routes
|
# apply local routes
|
||||||
|
|
|
||||||
|
|
@ -1,46 +1,14 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
# deploy ipv4 iptable rules
|
# deploy nftables rules
|
||||||
- name: "firewall - ipv4 rules"
|
- name: "firewall - nftables rules"
|
||||||
ansible.builtin.copy:
|
ansible.builtin.template:
|
||||||
dest: "/etc/iptables/rules-save"
|
src: "nftables.conf.j2"
|
||||||
|
dest: "/etc/nftables.conf"
|
||||||
mode: "0600"
|
mode: "0600"
|
||||||
owner: "root"
|
owner: "root"
|
||||||
group: "root"
|
group: "root"
|
||||||
content: |
|
notify: "restart nftables"
|
||||||
*nat
|
|
||||||
:PREROUTING ACCEPT [0:0]
|
|
||||||
:INPUT ACCEPT [0:0]
|
|
||||||
:OUTPUT ACCEPT [0:0]
|
|
||||||
:POSTROUTING ACCEPT [0:0]
|
|
||||||
# NAT masquerade from LAN to WAN
|
|
||||||
-A POSTROUTING -o {{ wan_interface }} -j MASQUERADE
|
|
||||||
{% for forward in nat_port_forwards %}
|
|
||||||
# {{ forward.name }}
|
|
||||||
-A PREROUTING -i {{ wan_interface }} -p {{ forward.protocol | default('tcp') }} --dport {{ forward.port }} -j DNAT --to-destination {{ forward.dst }}:{{ forward.port }}
|
|
||||||
{% endfor %}
|
|
||||||
COMMIT
|
|
||||||
|
|
||||||
*filter
|
|
||||||
:INPUT DROP [0:0]
|
|
||||||
:FORWARD DROP [0:0]
|
|
||||||
:OUTPUT ACCEPT [0:0]
|
|
||||||
# Allow established/related
|
|
||||||
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
||||||
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
||||||
# Allow loopback
|
|
||||||
-A INPUT -i lo -j ACCEPT
|
|
||||||
# Allow LAN management access
|
|
||||||
-A INPUT -i {{ lan_interface }} -j ACCEPT
|
|
||||||
# Allow forwarding from LAN to anywhere
|
|
||||||
-A FORWARD -i {{ lan_interface }} -o {{ wan_interface }} -j ACCEPT
|
|
||||||
{% for forward in nat_port_forwards %}
|
|
||||||
# {{ forward.name }}
|
|
||||||
-A FORWARD -i {{ wan_interface }} -o {{ lan_interface }} -d {{ forward.dst }} -p {{ forward.protocol | default('tcp') }} --dport {{ forward.port }} -j ACCEPT
|
|
||||||
{% endfor %}
|
|
||||||
COMMIT
|
|
||||||
notify: "restart iptables"
|
|
||||||
|
|
||||||
|
|
||||||
# load nf_conntrack module
|
# load nf_conntrack module
|
||||||
- name: "firewall - load nf_conntrack module"
|
- name: "firewall - load nf_conntrack module"
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
# install iptables
|
# install nftables
|
||||||
- name: "routing - install ptables"
|
- name: "routing - install nftables"
|
||||||
community.general.apk:
|
community.general.apk:
|
||||||
name:
|
name:
|
||||||
- "iptables"
|
- "nftables"
|
||||||
state: "present"
|
state: "present"
|
||||||
update_cache: true
|
update_cache: true
|
||||||
|
|
||||||
|
|
|
||||||
57
templates/nftables.conf.j2
Normal file
57
templates/nftables.conf.j2
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/sbin/nft -f
|
||||||
|
|
||||||
|
flush ruleset
|
||||||
|
|
||||||
|
table inet filter {
|
||||||
|
chain input {
|
||||||
|
type filter hook input priority 0; policy drop;
|
||||||
|
|
||||||
|
# Allow established/related
|
||||||
|
ct state established,related accept
|
||||||
|
|
||||||
|
# Allow loopback
|
||||||
|
iif lo accept
|
||||||
|
|
||||||
|
# Allow LAN management access
|
||||||
|
iif {{ lan_interface }} accept
|
||||||
|
|
||||||
|
# Allow ICMP
|
||||||
|
ip protocol icmp accept
|
||||||
|
ip6 nexthdr ipv6-icmp accept
|
||||||
|
}
|
||||||
|
|
||||||
|
chain forward {
|
||||||
|
type filter hook forward priority 0; policy drop;
|
||||||
|
|
||||||
|
# Allow established/related
|
||||||
|
ct state established,related accept
|
||||||
|
|
||||||
|
# Allow forwarding from LAN to anywhere
|
||||||
|
iif {{ lan_interface }} oif {{ wan_interface }} accept
|
||||||
|
{% for forward in nat_port_forwards %}
|
||||||
|
# {{ forward.name }}
|
||||||
|
iif {{ wan_interface }} oif {{ lan_interface }} ip daddr {{ forward.dst }} {{ forward.protocol | default('tcp') }} dport {{ forward.port }} accept
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
|
||||||
|
chain output {
|
||||||
|
type filter hook output priority 0; policy accept;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table ip nat {
|
||||||
|
chain postrouting {
|
||||||
|
type nat hook postrouting priority 100; policy accept;
|
||||||
|
|
||||||
|
# NAT masquerade from LAN to WAN
|
||||||
|
oif {{ wan_interface }} masquerade
|
||||||
|
}
|
||||||
|
|
||||||
|
chain prerouting {
|
||||||
|
type nat hook prerouting priority -100; policy accept;
|
||||||
|
{% for forward in nat_port_forwards %}
|
||||||
|
# {{ forward.name }}
|
||||||
|
iif {{ wan_interface }} {{ forward.protocol | default('tcp') }} dport {{ forward.port }} dnat to {{ forward.dst }}:{{ forward.port }}
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue