Стоит сервер на базе 2 процессорного ксенона E5-2690v4
На сервере 4 аплинка: 10Gbit + 1Gbit + 1Gbit + 1Gbit
В качестве виртуального хоста используется vmware esxi 6.5 с проброшенными Pass-throught сетевыми картами в Ubuntu 1404 которая является маршрутизатором и "фаерволлом". Я выделяю в кавычки потому что виртуальные машины не используют iptables для отсеивания трафика. Вместо этого fail2ban у них настроен таким образом, что все виртуалки в несколько таблиц собирают плохие ip-адреса, а потом сам маршрутизатор зацепляет из таблиц и вносит в списки ipset для блокировки на уровне PREROUTING. Т.е все баны раздаются основные прямо на маршрутизаторе.
Возможность выдать ip-адрес прямой для каждой виртуалки есть. Но этот вариант выбран исходя из:
1. Не хочу светить много адресов из блока
2. По результатам изначальной настройки год назад нагрузка общая на процессор меньше 10%-12% при такой схеме в праймвремя
Все работает, но потихоньку хочется расширять все это дело. В праймтайм нагрузка 6-8гбит на выход. Ну, видно что захлебывается. Количество ядер особо не влияет на ситуацию. Смотрю в сторону любых улучшений. Может есть какая-то редакция linux более заточенная на фильтрацию/маршрутизацию. Или к примеру можно как-то улучшить саму схему.
Прочтите внимательно. На виртуалках fail2ban настроен не на внесение в таблицу iptables/ipset, а на внесение в промежуточный список который по крону забирает маршрутизатор и удаляет/дополняет листы банов
Т.е если по умолчанию fail2ban создает правило в таблице input (не суть важно это отдельное правило или список ipset), то тут он лишь регистрирует в базе, которую потом забирает маршрутизатор и оперирует списком который добавлен в nat / prerouting.