Я работал над оптимизацией производительности fail2ban и прочитал, что слишком долгое блокирование может привести к накоплению правил, что негативно скажется на производительности, и это заставило меня задуматься: “Есть ли какое-то конкретное представление о том, какое количество правил является ‘слишком большим’ для nftables?”
В настоящее время я использую firewalld с nftables в качестве бэкенда, и, возможно, у меня 10-20 правил.
Однако некоторые серверы специально предназначены для аудитории определенных стран и не должны быть доступны за их пределами. Если я загружу базу данных IP адресов стран (например, MaxMind) и затем сгенерирую список правил для всех CIDR для стран, не входящих в разрешенный список, у меня получится около 17 000 правил.
С одной стороны, это много правил (ИМХО), но с другой стороны, извне назначенных стран приходят только спам и попытки взлома (даже легитимные пользователи, путешествующие за границу, все равно должны использовать VPN для доступа из США).
Будет ли такой объем отрицательно влиять на nftables? Я предполагаю, что влияние зависит от объема, который нужно проверить, но я не нашел хорошего способа просмотреть или измерить влияние правил, и не хочу начинать загружать тысячи правил, не зная возможных последствий заранее.
Я бы начал с изучения влияния большого количества правил на производительность.
Алгоритм сопоставления правил: Nftables использует более эффективный алгоритм сопоставления правил по сравнению со своим предшественником iptables. Однако при очень большом количестве правил (например, 17 000) производительность все равно может пострадать, потому что каждый пакет должен быть проверен на соответствие правилам, пока не будет найдено совпадение или не будет достигнут конец списка.
Процессорная мощность и память вашего сервера играют значительную роль. Более мощное оборудование может более эффективно обрабатывать большее количество правил.
Структура и организация правил также могут влиять на производительность. Например, группировка схожих правил вместе и минимизация количества цепей могут помочь улучшить производительность.
Как только это выяснится, сосредоточьтесь на наиболее актуальных вопросах:
IP Наборы: Вместо создания индивидуальных правил для каждого IP-диапазона, вы можете использовать ip-sets для группировки IP-адресов или диапазонов вместе. Это снижает количество правил и может значительно улучшить производительность. Nftables поддерживает наборы, которые более эффективны для обработки большого количества IP-адресов.
nft add set ip filter allowed_countries { type ipv4_addr; }
nft add rule ip filter input ip saddr @allowed_countries accept
Используйте такие инструменты, как nft monitor, чтобы увидеть, как применяются правила и есть ли какие-либо узкие места производительности. Мониторинг использования ЦП и памяти при тестировании различных конфигураций правил может помочь выявить оптимальную настройку.
Применяйте правила партиями в непиковые часы, чтобы уменьшить немедленную нагрузку на сервер.
Вот несколько документов, где вы можете найти более полную информацию:
Официальная вики nftables предоставляет исчерпывающую информацию о том, как работает nftables и как его оптимизировать.
Некоторые исследования и статьи обсуждают влияние производительности nftables по сравнению с iptables и лучшие практики использования nftables.
Анализ производительности nftables
Документация firewalld содержит лучшие практики и советы по управлению большим количеством правил брандмауэра
Используя наборы и отслеживая производительность, вы сможете более эффективно управлять большим количеством правил брандмауэра с помощью nftables и снижать потенциальные проблемы с производительностью.
Удачи!
Ответ или решение
Определение влияния количества правил firewalld на производительность
Теория
Firewalld, с backend на основе nftables, является мощным инструментом для управления правилами брандмауэра в системах Linux. Однако, как и любая система, количество правил может существенно влиять на производительность. Каждый сетевой пакет проходит процесс проверки посредством этих правил до тех пор, пока не будет найдено соответствие или достигнут конец списка. При наличии большого количества правил, таких как 17,000, производительность может пострадать, несмотря на более эффективный алгоритм сопоставления правил в nftables по сравнению с его предшественником iptables.
Мощность оборудования и его ресурсы, такие как процессор и оперативная память, существенно влияют на способность обрабатывать большую нагрузку. При наличии более мощного оборудования система может более эффективно работать с большим количеством правил.
Пример
Вы рассматриваете возможность добавления большого количества правил для ограничения доступа к вашим серверам в зависимости от стран, используя базы данных IP-адресов, например MaxMind. Применение 17,000 правил — это значительная нагрузка, особенно если они не оптимизированы для проверки. Подобный объем правил может замедлить сеть и увеличить нагрузку на систему, особенно если серверы обслуживают большой трафик.
Применение
- Оптимизация структуры правил. Первое и самое важное — это оптимизировать существующую структуру правил. Группируйте схожие правила вместе, минимизируйте количество цепочек и старайтесь использовать наиболее часто используемые правила в начале списка. Это помогает уменьшить время, которое требуется для сопоставления пакетов с правилами.
- Использование IP-Set. Вместо того, чтобы добавлять индивидуальные правила для каждого диапазона IP-адресов, используйте ipsets (или ‘sets’ в контексте nftables), которые позволяют группировать IP-адреса или диапазоны. Это значительно уменьшает количество правил и облегчает их управление. В вашем сценарии, создание одного набора IP для разрешенных стран и использование этого набора в правилах фильтрации может существенно облегчить нагрузку.
nft add set ip filter allowed_countries { type ipv4_addr; }nft add rule ip filter input ip saddr @allowed_countries accept
- Мониторинг и анализ. Важно использовать инструменты мониторинга для анализа производительности правил. Инструмент nft monitor помогает увидеть, как правила применяются и помогают выявить потенциальные узкие места. Параллельно отслеживайте использование процессора и памяти, чтобы выявить оптимальную конфигурацию.
- Периодическое обновление и тестирование. Даже с внедрением нового набора правил, тестирование производительности системы в реальных условиях — важный шаг. Применение правил в нерабочие часы может помочь уменьшить нагрузку на сервер в момент их применения.
- Дополнительная документация. Для более глубокой оптимизации изучите официальную документацию:
- Nftables Wiki — подробная информация о работе и оптимизации nftables.
- Документация Firewalld — практические рекомендации по управлению большим количеством правил.
- Решение проблем в начале пути. Если вы планируете внедрение большого количества правил, начните с небольшого их объема и наблюдайте за последствиями на производительность системы. Это позволит вам постепенно находить наилучшие способы оптимизации, не допуская резкого ухудшения работы.
В целом, успешное управление правилами в firewalld и nftables требует осознанного подхода к оптимизации и мониторингу. Важно помнить, что годы развития технологий позволяют закрыть многие слабые места, но это требует тщательного внимания к деталям и понимания текущей нагрузки на систему.