Вам слід уникати спроб зробити це за допомогою PHP. До моменту, коли PHP залучається, вже пізно - пам'ять вже виділена.
Ви можете заборонити IP-адреси на будь-якому рівні, але найнижчим рівнем, який використовує найменший обсяг ресурсів, є маршрут, який ви хочете пройти. Зазвичай це брандмауер. Принаймні, ви хочете використовувати iptables (Linux брандмауер). Є інші інструменти, про які згадували інші, наприклад Fail2Ban, які можуть автоматизувати це для вас. Зовнішній брандмауер буде краще.
Окрім спроби заборонити порушувати IP-адреси, вам слід спробувати краще використати свої ресурси. Якщо запит забирає менше ресурсів, ефективність атаки знадобиться більше часу.
Також Apache використовує багато пам'яті. Якщо ви використовуєте mod_php, це ще гірше, тому що PHP завантажується всередині кожного дочірнього процесу Apache. Це означає, що навіть запити на статичний контент (css / js / images) завантажують PHP навіть тоді, коли PHP не використовується. Вирішити цю проблему можна за допомогою FastCGI. mod_fcgid - хороший варіант.
Є й інші веб-сервери, які є більш економічними ресурсами. Nginx - мій улюблений. Також є Lighttpd. Дуже багато людей люблять Litespeed (падіння заміни на Apache).
Якщо ви хочете дотримуватися Apache, подумайте про налаштування його якнайкраще. Подумайте про відключення .htaccess. Ось хороше пояснення, чому .