Fail2ban and denyhosts are valuable. A simpler approach to the specific log question would be to use the limit module in your logging rule. For example:
Code:
iptables -A INPUT -m limit --limit 10/minute -j LOG
This rule matches any packet (which is overkill; in practice you'll want to use additional paramaters to match just what you're dropping), but
only at a rate of ten per minute. Packets exceeding this rate will not be logged. It's a rather naive approach in that it doesn't care whether the packets are identical (that is, it doesn't check that the suppressed log lines are repeats or are different) or that they even come from the same source. But it may be what you're looking for.
I imagine that the attempts to connect to port 25 are just spambots. I'm a bit surprised that it would cause such CPU usage, but that may depend on your firewall configuration.