Si tus spammer son de varios países localizados y no tienes usuarios en esos países lo que mejor es que bloquees el acceso al país entero por i.p. desde el .htaccess
Así lo hago yo y no me va mal. Antes añadía las i.p. problemáticas o por rango y no acababa nunca, ahora tengo bloqueados los tres o cuatro países problemáticos y el descenso ha sido importante. Siempre sigue entrando algo pero menos.
Esto te será útil:
Block Country Ip | Ip Country Block
A algunos les tengo también bloqueados desde .htaccess pero no por i.p. sino por host. Cuando he visto que se conectan con i.p. dinámicas pero el host es el mismo lo he hecho así.
Insertar CODE, HTML o PHP:
## SITE REFERRER BANNING
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} .host\.extension [NC]
RewriteRule .* - [F]
Bloquear por mac nunca he oído nada al respecto la verdad... pero no creo que sirva para mucho, en primer lugar no tengo claro como vas a poder conseguir tú ese dato de tus usuarios y en segundo lugar la dirección mac puede falsearse sin problemas.