Confirmed it's a bug and fixed it. Here's the procedure of why it happened:
1) Someone sends email to a mlmmj mailing list.
2) mlmmj connects to Amavisd for DKIM signing (port 10027, without spam/virus/bad-header/banned checks). Using port 25 is not ok because Amavisd will not sign DKIM on it. Port 587 is not ok either because it requires SMTP AUTH.
3) Amavisd re-injects the email back to Postfix through port 10025
4) Postfix sends the email to final recipient
The problem occurs at step #3 when Postfix accepts the email. With default iRedMail setting, in /etc/postfix/master.cf, there's a line for port 10025:
10025 inet n - n - - smtpd
...
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings
With option 'no_address_mappings', Postfix does not perform virtual aliad address expansion, so it doesn't know the final recipient address of your per-user alias address (craig1234@) is actually crag@, then it hands over the email to LDA (local deliver agent, it's Dovecot LDA in our case). But in Dovecot config file, the SQL query doesn't check virtual alias mapping.
Since there're many kinds of address mappings, it's not ideal to handle this in Dovecot. Instead, we did some changes in Postfix and Amavisd config files to make it working perfectly.
I will publish the fix soon in (DRAFT) iRedMail upgrade tutorial.