Попробуйте настроить fail2ban более агрессивным способом, или, если у атакующих есть какой-то паттерн — юзерагент, кука, заголовок, урл запроса (tcpdump вам в помощь), то фильтруйте их сразу на файрволле — см модуль string. Так вы снизите загрузку канала на сервере. Но, скорее всего, это не поможет. Ботнет из пары тысяч машин сможет забить 100 мбит канал. А из десяти тысяч — забьет его одними SYN-запросами. Провайдер в фильтрации атаки бывает редко заинтересован (российские провайдеры наоборот, заинтересованы отжать побольше денег за трафик в результате атаки), а гигабитный канал стоит не совсем бюджетных денег.
Если сайт почти статичный (или может быть закэширован на длительное время, по крайней мере атакуемый урл), можно перевести отдачу сайта на CDNы — так решается проблема полосы канала. Ну и специализированные сервисы по защите от ддоса тоже никто не отменял, встречаются довольно бюджетные решения, но в основном не у нас