add(nft): firewall configuration
This commit is contained in:
parent
1fd8661930
commit
291e929851
349
za-00-00/nftables-rule.sh
Normal file
349
za-00-00/nftables-rule.sh
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Inferencium - ZA-00-00
|
||||||
|
# nftables - Configuration
|
||||||
|
# Version: 1.0.0
|
||||||
|
|
||||||
|
# Copyright 2025 Jake Winters
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
|
||||||
|
# Variable
|
||||||
|
## nftables path
|
||||||
|
nft="/usr/sbin/nft"
|
||||||
|
## Interface
|
||||||
|
lan="enp16s0"
|
||||||
|
wan="enp41s0"
|
||||||
|
lan_net="10.0.0.0/24"
|
||||||
|
|
||||||
|
## IP address - LAN
|
||||||
|
xb_00_01="10.0.0.21"
|
||||||
|
|
||||||
|
## IP address - WAN
|
||||||
|
inf="185.241.226.159"
|
||||||
|
|
||||||
|
## Port
|
||||||
|
ssh="22"
|
||||||
|
domain="53"
|
||||||
|
domains="853"
|
||||||
|
http="80"
|
||||||
|
https="443"
|
||||||
|
rtmp="1935"
|
||||||
|
xmpp0="3478"
|
||||||
|
xmpp1="5222"
|
||||||
|
xmpp_s2s="5269"
|
||||||
|
xmpp3="5349"
|
||||||
|
xmpp_https="5443"
|
||||||
|
murmur="64738"
|
||||||
|
wg="51820"
|
||||||
|
|
||||||
|
|
||||||
|
${nft} flush ruleset;
|
||||||
|
${nft} add table inet table_base;
|
||||||
|
${nft} add chain inet table_base filter_input "{type filter hook input priority 0;}"
|
||||||
|
${nft} add chain inet table_base filter_forward "{type filter hook forward priority 0;}"
|
||||||
|
${nft} add chain inet table_base filter_output "{type filter hook output priority 0;}"
|
||||||
|
${nft} add chain inet table_base nat_pre "{type nat hook prerouting priority 0;}"
|
||||||
|
${nft} add chain inet table_base nat_post "{type nat hook postrouting priority 0;}"
|
||||||
|
|
||||||
|
|
||||||
|
# Drop
|
||||||
|
## Drop IP address ranges reserved for LAN
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip saddr { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } \
|
||||||
|
drop;
|
||||||
|
|
||||||
|
## Drop invalid packets
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ct state invalid \
|
||||||
|
drop;
|
||||||
|
|
||||||
|
|
||||||
|
# Accept
|
||||||
|
## localhost
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
iifname lo \
|
||||||
|
ct state new,established,related \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
## ICMP
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol icmp \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
## LAN packets
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
iifname ${lan} \
|
||||||
|
ip saddr ${lan_net} \
|
||||||
|
ct state new,established,related \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
## WAN packets
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
iifname ${wan} \
|
||||||
|
ct state established,related \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
# SSH
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
iifname ${lan} \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport ${ssh} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${ssh} \
|
||||||
|
dnat to ${xb_00_01}:${ssh};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${ssh} \
|
||||||
|
snat to ${inf}:${ssh};
|
||||||
|
|
||||||
|
|
||||||
|
# DNS
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp tcp \
|
||||||
|
dport ${domain} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp udp \
|
||||||
|
dport ${domain} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
|
||||||
|
# DNS Secure
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport ${domains} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport ${domains} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
|
||||||
|
# HTTP
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport ${http} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport ${http} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${http} \
|
||||||
|
dnat to ${xb_00_01}:${http};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${http} \
|
||||||
|
snat to ${inf}:${http};
|
||||||
|
|
||||||
|
|
||||||
|
# HTTPS
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport ${https} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport ${https} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${https} \
|
||||||
|
dnat to ${xb_00_01}:${https};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${https} \
|
||||||
|
snat to ${inf}:${https};
|
||||||
|
|
||||||
|
|
||||||
|
# RTMP
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport ${rtmp} \
|
||||||
|
ct state new,established \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport ${rtmp} \
|
||||||
|
ct state new,established \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${rtmp} \
|
||||||
|
dnat to ${xb_00_01}:${rtmp};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${rtmp} \
|
||||||
|
snat to ${inf}:${rtmp};
|
||||||
|
|
||||||
|
|
||||||
|
# XMPP
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport { ${xmpp1}, ${xmpp_s2s}, ${xmpp_https} } \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport { ${xmpp0}, ${xmpp1}, ${xmpp_s2s}, ${xmpp3}, ${xmpp_https} } \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${xmpp0} \
|
||||||
|
dnat to ${xb_00_01}:${xmpp0};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${xmpp1} \
|
||||||
|
dnat to ${xb_00_01}:${xmpp1};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${xmpp_s2s} \
|
||||||
|
dnat to ${xb_00_01}:${xmpp_s2s};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${xmpp3} \
|
||||||
|
dnat to ${xb_00_01}:${xmpp3};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip daddr ${inf} \
|
||||||
|
tcp dport ${xmpp_https} \
|
||||||
|
dnat to ${xb_00_01}:${xmpp_https};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${xmpp0} \
|
||||||
|
snat to ${inf}:${xmpp0};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${xmpp1} \
|
||||||
|
snat to ${inf}:${xmpp1};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${xmpp_s2s} \
|
||||||
|
snat to ${inf}:${xmpp_s2s};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${xmpp3} \
|
||||||
|
snat to ${inf}:${xmpp3};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${xmpp_https} \
|
||||||
|
snat to ${inf}:${xmpp_https};
|
||||||
|
|
||||||
|
|
||||||
|
# Murmur
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol tcp \
|
||||||
|
tcp dport ${murmur} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport ${murmur} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip saddr ${inf} \
|
||||||
|
tcp dport ${murmur} \
|
||||||
|
dnat to ${xb_00_01}:${murmur};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${murmur} \
|
||||||
|
snat to ${inf}:${murmur};
|
||||||
|
|
||||||
|
|
||||||
|
# WireGuard
|
||||||
|
${nft} add rule inet table_base filter_input \
|
||||||
|
ip protocol udp \
|
||||||
|
udp dport ${wg} \
|
||||||
|
ct state new \
|
||||||
|
accept;
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_pre \
|
||||||
|
iifname ${wan} \
|
||||||
|
ip saddr ${inf} \
|
||||||
|
tcp dport ${wg} \
|
||||||
|
dnat to ${xb_00_01}:${wg};
|
||||||
|
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${xb_00_01} \
|
||||||
|
tcp sport ${wg} \
|
||||||
|
snat to ${inf}:${wg};
|
||||||
|
|
||||||
|
|
||||||
|
# NAT
|
||||||
|
${nft} add rule inet table_base nat_post \
|
||||||
|
oifname ${wan} \
|
||||||
|
ip saddr ${lan_net} \
|
||||||
|
snat to ${inf}
|
||||||
|
|
||||||
|
|
||||||
|
# Default policy
|
||||||
|
${nft} add rule inet table_base filter_input drop;
|
||||||
|
${nft} add rule inet table_base filter_forward accept;
|
||||||
|
${nft} add rule inet table_base filter_output accept;
|
||||||
|
|
||||||
|
|
||||||
|
# Save policy
|
||||||
|
/etc/init.d/nftables save;
|
Loading…
x
Reference in New Issue
Block a user