You can enable/disable this under
Main >> Service Configuration >> Exim Configuration Editor
The option is under the "Mail" heading, and is labeled "Sender Verification Callouts"
Essentially the way it works is as such:
-external host connects to exim
-external host sends HELO, MAIL, RCPT
-before acknowledging the RCPT command, exim connects to the MX record for the domain sent in the MAIL command, sends a HELO, a MAIL command (using a null reverse path), and then for the address in RCPT, exim uses whatever the external connecting host originally sent in its MAIL command
-if exim gets a 5xx in response to the RCPT command it sends to that MX, then it will respond to the original connecting external host with a 5xx
-if exim gets a 2xx in response to the RCPT command it sends to that MX, then it will respond to the original connecting host with a 2xx, indicating the RCPT command was accepted.
A typical session would look as such; for our purposes here, "RX:" designates something Exim receives from a connecting host, and "TX:" represents a reply Exim sends to the connecting host
==remote host connecting to Exim==
Code:
RX: EHLO mail.external.tld.
TX: 250 Howdy mail.external.tld, I am ready
RX: MAIL FROM:<someuser@external.tld>
TX: 250 Ok
RX: RCPT TO:<localuser@yourdomain.tld>
Before responding to the RCPT command issued by the remote host, Exim will attempt to confirm the address used in MAIL is valid by looking up the MX record.
Exim puts its response to the RCPT command on hold until it has a chance to do the following:
==your Exim connecting to the MX for 'external.tld'==
Code:
TX: EHLO mail.yourdomain.tld
RX: 250 Hello noble cPanel server, I am ready
TX: MAIL FROM:<>
RX: 250 Ok
TX: RCPT TO:<someuser@external.tld>
RX: $foo
TX: QUIT
RX: 220 Service closing transmission channel
-if $foo is a 2xx response
==remote host still connected inbound to Exim==
Code:
TX: 250 Ok
RX: DATA
TX: 354 Go Ahead, end in <CRLF>.<CRLF>
RX: Subject: blah\r\nTo: you\r\nFrom: me\r\n\r\n
RX: And now this is the body, next line is the data termination sequence
RX: \r\n.\r\n
TX: 250 Message Accepted
-if $foo is a 5xx response
==remote host still connected inbound to Exim==
Code:
TX: 550 Sender Verify Failed
RX: QUIT
TX: 220 Adieu mon ami
With regards to why this is a BAD thing, the fella here makes a number of very valid points:
Backscatterer.org powered by UCEPROTECT
we allow you to do it because Exim allows you to do it. Opinions on it are varied, and though I haven't a clue what the official stance is, having seen it from another perspective, I'm of the opinion it's a greedy method of filtering forged spam.
I've advised people against its use in the past, and as of yet have seen no convincing argument that shows the positives outweighing the negatives. Indeed I remember a few years back a huge debacle with a fairly large Australian ISP landing themselves blacklisted on SpamCop for doing this, and frankly I can't say I disagree with the listing.
Now..it does work as advertised. It *does* have its merits, and it will likely reduce the amount of spam you accept from forged addresses - it's just too greedy and easily abused to make it feasible from where I sit.
At any rate, cutting off my pontification on the topic here - if you encounter issues with it, you can access the configuration portion of it using the menu described at the beginning of this post. Disable this, then request delisting with whichever providers have you blacklisted, and you should be good to go.
Hope that helps and is at least a somewhat clear explanation.