Postfix : Only receive emails from specific domains?

It depends how you want to restrict it. I'm not sure whether those are the mail relays you're talking about or the sending addresses.

Sending addresses

You can use the check_sender_access directive within an appropiate smtpd_*_restrictions. It's normally best practice to apply all sender, host checks etc. within the recipient restrictions (i.e. after the client has sent 'RCPT To:' )

e.g. to allow only mail from senders @gmail.com and @hotmail.com ...

set smtpd_recipient_restrictions to the following:

smtpd_recipient_restrictions =
    check_sender_access hash:/etc/postfix/access,
    reject

Now /etc/postfix/access should be of the form:

gmail.com OK
hotmail.com OK

use postmap hash:/etc/postfix/access to create the hash table.

Relay hostname or IP

smtpd_recipient_restrictions =
    check_client_access hash:/etc/postfix/client_access,
    reject

The format of client_access is similar:

host.name.of.system.com  OK
ip.addr.of.system        OK

Reading your logs

The following is a full excerpt from my mail.log for an example message. I picked a message and got the queue id - 31AF4761F3. It will be in the headers of the mail as well as your mail log file.

$ grep 31AF4761F3 /var/log/mail.log
Sep  4 09:30:38 cutoffs postfix/smtpd[7912]: 31AF4761F3: client=russian-caravan.cloud9.net[w.x.y.z]
Sep  4 09:30:38 cutoffs postfix/cleanup[7915]: 31AF4761F3: message-id=<007B93C54F154113B36026A22D5E0106@gaby>
Sep  4 09:30:38 cutoffs postfix/qmgr[19172]: 31AF4761F3: from=<[email protected]>, size=4225, nrcpt=1 (queue active)
Sep  4 09:30:39 cutoffs postfix/pipe[7916]: 31AF4761F3: to=<XXXX@XXXX>, relay=spamassassin, delay=1.4, delays=0.19/0.01/0/1.3, dsn=2.0.0, status=sent (delivered via spamassassin service)
Sep  4 09:30:39 cutoffs postfix/qmgr[19172]: 31AF4761F3: removed

You can see in the first line, we have client=russian-caravan.cloud9.net (which is the mail server that sends mail for the postfix mailing list) and the IP address is in brackets. You can use the hostname or the IP in the access file but remember if they have multiple mail relays or ever change their mail relays, you'll need to figure that out.


phil's answer is good except for one detail. don't use "OK" on the RHS of /etc/postfix/access or /etc/postfix/client_access. that makes your mail server a partial open relay for anyone claiming to be sending mail from @gmail.com or @hotmail.com (access) or for the particular hosts allowed in client_access. this goes beyond just allowing them to send mail to specific users on your system, it allows them to relay mail to any user on any system through yours.

instead, use "permit_auth_destination". that allows them to send to your local domains, or to any that you are configured to relay for, but NOT to any arbitary domain.

e.g.

/etc/postfix/access:

gmail.com     permit_auth_destination
hotmail.com   permit_auth_destination

/etc/postfix/client_access:

host.name.of.system.com  permit_auth_destination
ip.addr.of.system        permit_auth_destination

even if everything else is perfectly configured, using "OK" in postfix access rules is a bad habit to get into. sometimes you really need it, but by default your habit should be to use "permit_auth_destination" instead.

Tags:

Email

Postfix