POP-Before-SMTP Anti-spam Configuration
The demise of big "spamhaus" operations like Cyber Promo has caused the spamming community to resort to "hit-and-run" spamming through open SMTP relays. This malicious technique is advantageous to spammers since a single spam can be sent from a throwaway dialup account and then be exploded out to 50 or more E-Mail addresses by a fast and open SMTP server. POP-Before-SMTP is a method for blocking spammers from using your Virtual Private Server as an SMTP relay. How It WorksEvery time someone successfully enters a correct username and password to your POP or IMAP server (i.e. checks an E-Mail account that is configured on your Virtual Server), the server records the IP address of the remote client. The IP address and a timestamp are stored in the ~/etc/relayers.db database file. The database serves as a list of IP addresses that are allowed to perform an SMTP relay. A simple rule set in the check_rcpt section of the ~/etc/sendmail.cf file causes sendmail to refuse to relay E-Mail from any IP address that is not listed in the ~/etc/relayers.db database file. vsmtprelayEventhough the POP and IMAP authentication will automatically cause an IP address to be added to the ~/etc/relayers.db file, you may on occasion want to manually add to or clean the database yourself. To do this we have created a utility program named vsmtprelay that allows you to add, delete, expire, or list IP addresses in the ~/etc/relayers.db file.
Non-expiring entires can be added to the relayers.db. To add an entry with a non-expiring timestamp run the following: # vsmtprelay add IP.ADD.RE.SS 2147483647 The ~/etc/relayers.db database is implemented as a "Berkeley DB hash file" with IP addresses as keys and timestamps as the data (all as ASCII strings). The vsmtprelay list output is intentionally produced in a form that can be edited manually and rebuilt by makemap(8) if desired. Although the ~/etc/relayers.db database does not use up a lot of disk space, you may wish to automatically expire entries on a periodic basis to keep the database small. This can be done using the Cron event scheduler. For example, the following crontab entry would expire all of the day-old ~/etc/relayers.db database entries every night at 3:15 AM. 15 3 * * * /usr/local/bin/vsmtprelay expire 1440 |