Postgrey is a Postfix policy server implementing greylisting.
When a request for delivery of a mail is received by Postfix via SMTP, the triplet CLIENT_IP / SENDER / RECIPIENT is built. If it is the first time that this triplet is seen, or if the triplet was first seen, less than 5 minutes ago, then the mail gets rejected with a temporary error. Hopefully spammers or viruses will not try again later, as it is however required per RFC.
greylist.pl doesn't lock correctly the database and it might get corrupted after a while (two days mean time for me). Postgrey does use the logging and transaction features of BerkeleyDB to maximize reliability. Additionally only one process is running, thus reducing even more the risk of corrupting the database.
Postgrey does keep track not only of the first time a given triplet was seen, but also the last time. Entries that were last seen more than a defined amount of time ago (one month for example) get removed automatically.
Per-client and per-recipient whitelists. The Postgrey distribution package includes a client whitelist with all (few) broken mail-servers that were identified until now.
Lookup by subnet:
Addresses are normally stripped of their last byte, so that mail servers with multiple addresses are recognized as only one.
Auto-whitelisting of clients:
Clients which repeatedly show to be able to pass the greylist, are entered in a "clients whitelist", for which no greylisting is done anymore.
· Perl (version > 5.6.0)
· BerkeleyDB (Perl module)
· Berkeley DB (Library, version ≥ 4.1)
What's New in This Release:
· The logging format has been improved, and an important workaround for problems of exchange in dealing with greylisted email messages has been implemented.
· The whitelist has been updated, Exim support has been improved, and a greylist pre-seeding tool has been added.