Setup Email Server From Scratch On FreeBSD #2 - 13 Reducing Server Load With Postscreen

12 Amavis Clam AntiVirus <- Intro -> 25 IMAPSYNC

We believe in data independence, and support others who want data independence.
Debian Email From Scratch version 2 finished 2025-07-30.

We are still adding to it but it all works!

########################################
# Reducing Server Load With Postscreen #
########################################

Postfix can spawn up to 100 processes to handle SMTP connections so it is
better to reduce the number of spammy connections before they hit postfix,
enter Postscreen.

nano /etc/postfix/master.cf
#smtp inet n - y - - smtpd smtp inet n - y - 1 postscreen smtpd pass - - y - - smtpd dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy

nano /etc/postfix/main.cf
--- add to end of file ---
# Postscreen postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr cidr:/etc/postfix/postscreen_spf_whitelist.cidr postscreen_blacklist_action = drop #postscreen_greet_action = enforce postscreen_greet_action = drop postscreen_dnsbl_threshold = 3 postscreen_dnsbl_action = enforce postscreen_dnsbl_sites = zen.spamhaus.org*3, b.barracudacentral.org=127.0.0.[2..11]*2, bl.spameatingmonkey.net*2, bl.spamcop.net, dnsbl.sorbs.net, swl.spamhaus.org*-4, list.dnswl.org=127.[0..255].[0..255].0*-2, list.dnswl.org=127.[0..255].[0..255].1*-4, list.dnswl.org=127.[0..255].[0..255].[2..3]*-6 # Deep Protocol Test causes google mail to be slow, zimbra is ok postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = enforce postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce # ways to make google better postscreen_dnsbl_whitelist_threshold = -2

Comment out these so the IP's are not checked twice, and 10023 when deep protocol tests are enabled
nano /etc/postfix/main.cf
smtpd_recipient_restrictions = ... #check_policy_service inet:127.0.0.1:10023, #reject_rbl_client your_dq_key.zen.dq.spamhaus.net=127.0.0.[2..11], #permit_dnswl_client list.dnswl.org=127.0.[0..255].[1..3],

nano /etc/postfix/postscreen_access.cidr
# Permit my own IP addresses. 15.204.113.148 permit 2604:2dc0:202:300::3645 permit # permanently blacklist 192.168.12.0/24 reject

systemctl restart postfix

Remember with this setup the first connection to the server will be rejected, SMTP clients will
reconnect, google for example will connect the the second MX, which as we have configured it is
the same, so the second connection from google to our MX server will be accepted.

Enable Postwhite

cd /usr/local/bin
sudo git clone https://github.com/spf-tools/spf-tools.git
sudo git clone https://github.com/stevejenkins/postwhite.git
cp /usr/local/bin/postwhite/postwhite.conf /etc
/usr/local/bin/postwhite/postwhite

The file is saved as /etc/postfix/postscreen_spf_whitelist.cidr

ls -l /etc/postfix/postscreen_spf_whitelist.cidr

nano /etc/postfix/main.cf
postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr cidr:/etc/postfix/postscreen_spf_whitelist.cidr

Setup whitelist cron

crontab -e
0 0 * * * /usr/bin/journalctl --no-pager --since=yesterday -u postfix@-.service | /usr/sbin/pflogsumm -d yesterday | mutt -s "Postfix log summary" -- postmaster@okdeb.com @daily /usr/local/bin/postwhite/postwhite > /dev/null 2>&1 #Update Postscreen Whitelists @weekly /usr/local/bin/postwhite/scrape_yahoo > /dev/null 2>&1 #Update Yahoo! IPs for Postscreen Whitelists

Don't forget to check your daily reports from pflogsumm

12 Amavis Clam AntiVirus <- Intro -> 25 IMAPSYNC