В 2 этапа:
1. Все запросы через .htaccess шлите на скрипт-роутер (на PHP) и там проверяйте список забаненых IP перед показом нужной страницы.
2. При запросе несуществующих URL или с определёнными словами - обовляйте список IP-бана.
Также, есть
RewriteMap для чтения значений из текстового файла для их дальнейшего применения внутри .htaccess.
Посмотрите ещё
публикацию по применению mod_security (+iptables).