#!/bin/bash
# ban-sync.sh — грузит app-баны (banned_ips.txt) в ipset и дропает их в ядре. Идемпотентно.
SELF="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; source "$SELF/../defender.conf"

ipset create $SETNAME hash:ip family inet hashsize 8192 maxelem 262144 2>/dev/null || true
if [ -f "$BANFILE" ]; then
  grep -E '^[0-9]{1,3}(\.[0-9]{1,3}){3}$' "$BANFILE" \
    | sed "s/^/add $SETNAME /; s/$/ -exist/" | ipset restore
fi
iptables -D INPUT -p tcp --dport $PORT -m set --match-set $SETNAME src -j DROP 2>/dev/null || true
iptables -I INPUT 1 -p tcp --dport $PORT -m set --match-set $SETNAME src -j DROP

# Тот же бан-лист применяем к UDP-порту: раньше забаненный IP оставался доступен
# по UDP (боевая синхронизация), т.к. drop висел только на TCP-порту.
iptables -D INPUT -p udp --dport $UDP_PORT -m set --match-set $SETNAME src -j DROP 2>/dev/null || true
iptables -I INPUT 1 -p udp --dport $UDP_PORT -m set --match-set $SETNAME src -j DROP

echo "[ban-sync] ipset $SETNAME: $(ipset list $SETNAME 2>/dev/null | grep -c '^[0-9]') IP, kernel-drop активен (TCP $PORT + UDP $UDP_PORT)"
