Для защиты RDP от подбора паролей средствами nftables можно реализовать механизм отслеживания попыток подключения по IP-адресу, постепенно увеличивая уровни блокировки для подозрительных IP-адресов. Такой подход можно реализовать с помощью нескольких уровней временных списков (например, stage1, stage2 и т.д.), и, если попытки продолжаются, добавить IP-адрес в черный список для блокировки на длительный срок.

Настраиваем проброс порта на удалённый сервер

vmbr0 это внешний интерфейс который смотри в интернет

55672 внешний порт который будем прокидывать

# Создайте таблицу nat, если её нет
nft add table ip nat
# Добавьте цепочку prerouting в таблицу nat
nft add chain ip nat prerouting { type nat hook prerouting priority -100 \; }
#Пробрасываем  внешний  порт 55672 
nft add rule ip nat prerouting iif "vmbr0"   tcp dport 55672  dnat to 10.0.22.50:22 comment "rdp"

Ниже приведен пример настройки такой защиты:

Создайте таблицу mangle для отслеживания уровней попыток подключения

# Создайте таблицу mangle, если её нет
nft add table inet mangle

# Добавьте цепочку prerouting в таблицу mangle
nft add chain inet mangle prerouting { type filter hook prerouting priority -150 \; }

Создайте наборы (sets) для уровней блокировки

Эти наборы будут использоваться для отслеживания количества неудачных попыток подключения к RDP. Когда IP-адрес достигнет последнего уровня (stage5), он будет добавлен в rdp_drop для долгосрочной блокировки.

nft add set inet mangle stage1 { type ipv4_addr\; timeout 1m\; }
nft add set inet mangle stage2 { type ipv4_addr\; timeout 1m\; }
nft add set inet mangle stage3 { type ipv4_addr\; timeout 1m\; }
nft add set inet mangle stage4 { type ipv4_addr\; timeout 1m\; }
nft add set inet mangle stage5 { type ipv4_addr\; timeout 1m\; }
nft add set inet mangle rdp_drop { type ipv4_addr\; timeout 30m\; }

Добавьте правила для повышения уровня блокировки

Эти правила будут добавлять IP-адреса, многократно подключающиеся к порту RDP, в следующие уровни блокировки. Если IP-адрес достигнет уровня stage5, он попадет в rdp_drop для блокировки.

# Если IP-адрес уже в stage5, добавить его в rdp_drop
nft add rule inet mangle prerouting tcp dport 3389 ip saddr @stage5 update @rdp_drop { ip saddr }

# Если IP-адрес в stage4, добавить его в stage5
nft add rule inet mangle prerouting tcp dport 3389 ip saddr @stage4 update @stage5 { ip saddr }

# Если IP-адрес в stage3, добавить его в stage4
nft add rule inet mangle prerouting tcp dport 3389 ip saddr @stage3 update @stage4 { ip saddr }

# Если IP-адрес в stage2, добавить его в stage3
nft add rule inet mangle prerouting tcp dport 3389 ip saddr @stage2 update @stage3 { ip saddr }

# Если IP-адрес в stage1, добавить его в stage2
nft add rule inet mangle prerouting tcp dport 3389 ip saddr @stage1 update @stage2 { ip saddr }

# Если IP-адрес новый, добавить его в stage1
nft add rule inet mangle prerouting tcp dport 3389 ip saddr != @stage1 update @stage1 { ip saddr }

Добавьте правила блокировки

nft add rule inet mangle prerouting tcp dport 55672  ip saddr @rdp_drop counter drop