nftables -ограничение скорости (ошибка или неправильное использование?)

Я пытаюсь настроить брандмауэр с помощью nftables, но мне не удалось понять и реализовать простое ограничение скорости на основе найденной документации.

  • ОС :Ubuntu 20.04 LTS
  • версия nftables :0.9.3 (Topsy)
  • версия ядра :5.8.0 -53 -общий

Я построил тестовый брандмауэр с помощью приведенной ниже последовательности команд:

nft 'add table inet testnetwork'
nft 'add chain inet testnetwork INPUT { type filter hook input priority 0; policy drop; }'
nft 'add set inet testnetwork SSH { type ipv4_addr; flags dynamic, timeout; size 65536; }'
nft 'add rule inet testnetwork INPUT ct state related,established counter accept'
nft 'add rule inet testnetwork INPUT ip saddr @SSH ct state new tcp dport 22 counter drop'
nft 'add rule inet testnetwork INPUT ct state new tcp dport 22 limit rate over 10/minute add @SSH {ip saddr timeout 60s} counter'
nft 'add rule inet testnetwork INPUT ct state new tcp dport 22 tcp sport 1024-65535 counter accept'

Когда я перечисляю исходный набор правил, я получаю:

table inet testnetwork {
    set SSH {
        type ipv4_addr
        size 65536
        flags dynamic,timeout
    }

    chain INPUT {
        type filter hook input priority filter; policy drop;
        ct state established,related counter packets 0 bytes 0 accept
        ip saddr @SSH ct state new tcp dport 22 counter packets 0 bytes 0 drop
        ct state new tcp dport 22 limit rate over 10/minute add @SSH { ip saddr timeout 1m } counter packets 0 bytes 0
        ct state new tcp dport 22 tcp sport 1024-65535 counter packets 0 bytes 0 accept
    }
}

С такой конфигурацией я ожидаю, что IP-адрес будет добавлен в набор SSH на его 11-м (новом)пробное подключение в течение 1 минуты и блокировка (на 1 минуту), начиная с 12-й попытки.

Однако, когда я открываю второе окно терминала и последовательно инициирую, а затем закрываю менее 10 ssh-подключений к 127.0.0.1, я получаю IP-адрес, добавленный в набор SSH, а затем заблокированный.

Статус набора правил ниже с 7-й попытки.:

table inet testnetwork {
    set SSH {
        type ipv4_addr
        size 65536
        flags dynamic,timeout
        elements = { 127.0.0.1 timeout 1m expires 54s564ms }
    }

    chain INPUT {
        type filter hook input priority filter; policy drop;
        ct state established,related counter packets 156 bytes 28692 accept
        ip saddr @SSH ct state new tcp dport 22 counter packets 3 bytes 180 drop
        ct state new tcp dport 22 limit rate over 10/minute add @SSH { ip saddr timeout 1m } counter packets 1 bytes 60
        ct state new tcp dport 22 tcp sport 1024-65535 counter packets 6 bytes 360 accept
    }
}

На данный момент я либо неправильно понимаю механизм ограничения скорости, либо где-то ошибся.

Не мог бы кто-нибудь помочь мне, указав, были ли мои ожидания ошибочными или откуда могла возникнуть ошибка?

С уважением и благодарностью за ваше время

1
задан 28 June 2021 в 16:51
1 ответ

На моем VPS

sshPort=2222
nft add table ip sshGuard
nft add chain ip sshGuard input { type filter hook input priority 0 \; }
nft add set ip sshGuard denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }
nft add rule ip sshGuard input tcp dport $sshPort ct state new ip saddr @denylist reject
nft add rule ip sshGuard input tcp dport $sshPort ct state new limit rate over 2/minute burst 3 packets add @denylist { ip saddr } reject
nft list table ip sshGuard

я тестирую несколько раз (каждое поnft flush set ip sshGuard denylist), 4-е соединение будет отклонено. Если я изменю limit rate over 2/minute burst 3 packetsна limit rate over 2/minute, отказ будет получен после 7-9 соединений. Следовательно, я не знаю точного механизма limit rate over 2/minute, но burst 3 packets, кажется, делает вещи более определенными.

По умолчанию burstустанавливается с помощью#define NFT_LIMIT_PKT_BURST_DEFAULT 5

0
ответ дан 14 September 2021 в 02:35

Теги

Похожие вопросы