Для защиты 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