Do you use CSF? Could you do this by creating a custom REGEX rule?
I was try this rule, but don't know why they here and without blocked
SecRule &REQUEST_HEADERS:User-Agent "@eq 0" "id:330001,msg:'Blocked empty user agent for USERAGENT_IP',phase:1,severity:WARNING,capture,nolog,auditlog,logdata:'%{TX.0}',t:none,deny,status:406"
SecRule REQUEST_HEADERS:User-Agent "^$" "id:330002,msg:'Blocked empty user agent for USERAGENT_IP',phase:1,severity:WARNING,capture,nolog,auditlog,logdata:'%{TX.0}',t:none,deny,status:406"
or
SecRule &REQUEST_HEADERS:User-Agent "@eq 0" "id:330001,msg:'Blocked empty user agent for USERAGENT_IP',phase:2,severity:WARNING,capture,nolog,auditlog,logdata:'%{TX.0}',t:none,deny,status:406"
SecRule REQUEST_HEADERS:User-Agent "^$" "id:330002,msg:'Blocked empty user agent for USERAGENT_IP',phase:2,severity:WARNING,capture,nolog,auditlog,logdata:'%{TX.0}',t:none,deny,status:406"