I've had the same problem for some time. I put the following into access_helo and header_checks. It's pretty severe (and the list gets bigger every month) but the percentage of valid email coming from those domains is next to nil.
I use a 510 rather than a 554 reject so hopefully they won't try again. # Invalid and disreputable TLDs /\.asia$/ 510 Denied: Unacceptable TLD .asia /\.best$/ 510 Denied: Unacceptable TLD .best /\.bid$/ 510 Denied: Unacceptable TLD .bid /\.club$/ 510 Denied: Unacceptable TLD .club /\.date$/ 510 Denied: Unacceptable TLD .date /\.domain$/ 510 Denied: Unacceptable TLD .domain /\.faith$/ 510 Denied: Unacceptable TLD .faith /\.host$/ 510 Denied: Unacceptable TLD .host /\.icu$/ 510 Denied: Unacceptable TLD .icu /\.internal$/ 510 Denied: Unacceptable TLD .internal /\.lan$/ 510 Denied: Unacceptable TLD .lan /\.loan$/ 510 Denied: Unacceptable TLD .loan /\.local$/ 510 Denied: Unacceptable TLD .local /\.ninja$/ 510 Denied: Unacceptable TLD .ninja /\.online$/ 510 Denied: Unacceptable TLD .online /\.party$/ 510 Denied: Unacceptable TLD .party /\.pro$/ 510 Denied: Unacceptable TLD .pro /\.ren$/ 510 Denied: Unacceptable TLD .ren /\.review$/ 510 Denied: Unacceptable TLD .review /\.science$/ 510 Denied: Unacceptable TLD .science /\.site$/ 510 Denied: Unacceptable TLD .site /\.space$/ 510 Denied: Unacceptable TLD .space /\.stream$/ 510 Denied: Unacceptable TLD .stream /\.tech$/ 510 Denied: Unacceptable TLD .tech /\.top$/ 510 Denied: Unacceptable TLD .top /\.trade$/ 510 Denied: Unacceptable TLD .trade /\.vip$/ 510 Denied: Unacceptable TLD .vip /\.website$/ 510 Denied: Unacceptable TLD .website /\.win$/ 510 Denied: Unacceptable TLD .win /\.zone$/ 510 Denied: Unacceptable TLD .zone