.git broken, restart
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "==> Flushing old rules"
|
||||
nft flush ruleset
|
||||
|
||||
# Paths
|
||||
#BLACKLIST=${1:-/etc/nftables/blacklist.txt}
|
||||
#WHITELIST=${2:-/etc/nftables/whitelist.txt}
|
||||
|
||||
# Create base table and chains
|
||||
nft add table inet filter
|
||||
|
||||
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
|
||||
nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }
|
||||
nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }
|
||||
|
||||
# Define sets
|
||||
nft add set inet filter banned_ipv4 '{ type ipv4_addr ; flags interval ; }'
|
||||
nft add set inet filter banned_ipv6 '{ type ipv6_addr ; flags interval ; }'
|
||||
nft add set inet filter white_ipv4 '{ type ipv4_addr ; flags interval ; }'
|
||||
nft add set inet filter white_ipv6 '{ type ipv6_addr ; flags interval ; }'
|
||||
|
||||
## NOT From / to locale address
|
||||
## cannot work, but should develop the concept
|
||||
#for IP_LOCALE in $(ip addr | grep inet | grep -Eo $IP_REG) ; do
|
||||
# if [[ "$line" == *:* ]]; then
|
||||
# nft add rule ip filter input ip6 daddr $IP_LOCALE drop
|
||||
# else
|
||||
# echo "ban $line"
|
||||
# nft add rule ip filter input ip daddr $IP_LOCALE drop
|
||||
# fi
|
||||
#done < "$BLACKLIST"
|
||||
|
||||
# Load whitelist
|
||||
while IFS= read -r line; do
|
||||
[[ -z "$line" || "$line" == \#* ]] && continue
|
||||
if [[ "$line" == *:* ]]; then
|
||||
echo "accept $line"
|
||||
nft add element inet filter white_ipv6 "{ $line }"
|
||||
else
|
||||
echo "accept $line"
|
||||
nft add element inet filter white_ipv4 "{ $line }"
|
||||
fi
|
||||
done < "$WHITELIST"
|
||||
|
||||
# Load blacklist
|
||||
while IFS= read -r line; do
|
||||
[[ -z "$line" || "$line" == \#* ]] && continue
|
||||
if [[ "$line" == *:* ]]; then
|
||||
echo "ban $line"
|
||||
nft add element inet filter banned_ipv6 "{ $line }"
|
||||
else
|
||||
echo "ban $line"
|
||||
nft add element inet filter banned_ipv4 "{ $line }"
|
||||
fi
|
||||
done < "$BLACKLIST"
|
||||
|
||||
# Input rules
|
||||
nft add rule inet filter input iif "lo" accept
|
||||
nft add rule inet filter input ip saddr @white_ipv4 accept
|
||||
nft add rule inet filter input ip6 saddr @white_ipv6 accept
|
||||
nft add rule inet filter input ip saddr @banned_ipv4 drop
|
||||
nft add rule inet filter input ip6 saddr @banned_ipv6 drop
|
||||
nft add rule inet filter input ct state established,related accept
|
||||
nft add rule inet filter input drop
|
||||
|
||||
# Output rules
|
||||
nft add rule inet filter output ip daddr @white_ipv4 accept
|
||||
nft add rule inet filter output ip6 daddr @white_ipv6 accept
|
||||
nft add rule inet filter output ip daddr @banned_ipv4 drop
|
||||
nft add rule inet filter output ip6 daddr @banned_ipv6 drop
|
||||
#nft add rule inet filter output accept
|
||||
|
||||
# Save and enable
|
||||
echo "==> Saving to /etc/nftables.conf"
|
||||
nft list ruleset > /etc/nftables.conf
|
||||
chmod 644 /etc/nftables.conf
|
||||
|
||||
nft flush ruleset
|
||||
echo "==> Enabling nftables.service"
|
||||
systemctl enable --now nftables.service
|
||||
|
||||
echo "✅ Firewall applied and saved."
|
||||
|
||||
Reference in New Issue
Block a user