Я пытаюсь настроить брандмауэр с помощью nftables, но мне не удалось понять и реализовать простое ограничение скорости на основе найденной документации.
- ОС: Ubuntu 20.04 LTS
- Версия nftables: 0.9.3 (Топси)
- выпуск ядра: 5.8.0-53-универсальный
Я построил тестовый брандмауэр с помощью следующей последовательности команд:
nft 'добавить таблицу inet testnetwork'
nft 'добавить цепочку inet testnetwork INPUT { type filter hook input priority 0; падение политики; }'
nft 'добавить set inet testnetwork SSH { type ipv4_addr; флаги динамические, тайм-аут; размер 65536; }'
nft 'добавить правило inet testnetwork INPUT ct, связанное с состоянием, установленный счетчик принимает'
nft 'добавить правило inet testnetwork INPUT ip saddr @SSH ct state new tcp dport 22 counter drop'
nft 'добавить правило inet testnetwork INPUT ct state new tcp dport 22 limit rate over 10/min add @SSH {ip saddr timeout 60s} counter'
nft 'добавить правило inet testnetwork INPUT ct state new tcp dport 22 tcp sport 1024-65535 counter accept'
Когда я перечисляю исходный набор правил, я получаю:
таблица inet testnetwork {
установить SSH {
введите ipv4_addr
размер 65536
флаги динамические, время ожидания
}
цепочка ВХОД {
тип фильтра хука входного приоритета фильтр; падение политики;
ct состояние установлено, связанные пакеты счетчика 0 байт 0 принять
ip saddr @SSH ct state new tcp dport 22 counter пакетов 0 байт 0 drop
ct state new tcp dport 22 limit rate over 10/min add @SSH {ip saddr timeout 1m } counter packages 0 bytes 0
ct state new tcp dport 22 tcp sport 1024-65535 счетчик пакетов 0 байт 0 принять
}
}
С такой конфигурацией я ожидаю, что IP-адрес будет добавлен в набор SSH при 11-м (новом) пробном подключении в течение 1 минуты и будет заблокирован (на 1 минуту), начиная с 12-й попытки.
Однако, когда я открываю второе окно терминала и последовательно инициирую, а затем закрываю менее 10 ssh-подключений к 127.0.0.1, я получаю IP-адрес, добавленный в набор SSH, а затем заблокированный.
Ниже статус набора правил с 7-й попытки:
таблица inet testnetwork {
установить SSH {
введите ipv4_addr
размер 65536
флаги динамические, время ожидания
elements = { 127.0.0.1 тайм-аут 1 м истекает 54 с 564 мс }
}
цепочка ВХОД {
тип filter фильтр приоритета ввода хука; падение политики;
ct состояние установлено, соответствующие пакеты счетчика 156 байт 28692 принять
ip saddr @SSH ct state new tcp dport 22 counter пакетов 3 байта 180 drop
ct state new tcp dport 22 limit rate over 10/min add @SSH {ip saddr timeout 1m } counter пакетов 1 байт 60
ct state new tcp dport 22 tcp sport 1024-65535 счетчик пакетов 6 байт 360 принять
}
}
На данный момент либо я не правильно понимаю механизм лимитной ставки, либо где-то ошибся.
Может кто-нибудь, пожалуйста, помогите мне, указав, если мое ожидание неверно или откуда может произойти ошибка?
С уважением и спасибо за ваше время