Setup Email Server From Scratch On FreeBSD - 03 Postfix SMTPD

02 FAMP Install <- Intro -> 04 Dovecot IMAP

This tutorial is partially complete 2025-05-14
Postfix, Dovecot, & PostfixAdmin work with MySQL and virtual accounts
can be created with PostfixAdmin and used with an email client. SPF, OpenDKIM,
and DMARC milters, Roundcube with sieve filters and password plugins all work.
Roundcube kolab calendar works (2025-05-20)


#################
# Postfix Setup #
#################

# Postfix on debian has SASL MYSQL etc enabled so use ports to compile.
# I decided not to update ports but just use the version that came with the clean
# install, it is not recommended to mix ports and pkg from different distributions.

# Switch to make to use Maria, I installed mariadb106-server
pkg search mariadb
mariadb106-client-10.6.21      Multithreaded SQL database (client)
mariadb106-server-10.6.21      Multithreaded SQL database (server)

nano /etc/make.conf
DEFAULT_VERSIONS+=mysql=106m

cd /usr/ports/mail/postfix
make rmconfig
make

# Select these, compile will be much faster without PGSQL and SQLITE
X BLACKLISTD
X CDB
X DOCS
X EAI
X INST_BASE
X LDAP
X LMDB
X MYSQL
X PCRE2
# PGSQL
X SASL
# SQLITE
X TLS

# Run make
make
make # again if needed

Just used default selections after this..

After successful compile to make install
make install

# OUTPUT AS FOLLOWS
Adding user 'postfix' to group 'mail'                                                                                 
csshchown: /usr/share/man/man5/mongodb_table.5.gz: No such file or directory                                              

===============================================================                                                       
Postfix was *not* activated in /usr/local/etc/mail/mailer.conf!                                                       

To finish installation run the following commands:                                                                    

  mkdir -p /usr/local/etc/mail                                                                                        
  install -m 0644 /usr/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf                              
===============================================================                                                       

To use postfix instead of sendmail:                                                                                   
  - clear sendmail queue and stop the sendmail daemons

Run the following commands to enable postfix during startup:
  - sysrc postfix_enable="YES"
  - sysrc sendmail_enable="NONE"

If postfix is *not* already activated in /usr/local/etc/mail/mailer.conf
  - mv /usr/local/etc/mail/mailer.conf /usr/local/etc/mail/mailer.conf.old
  - install -d /usr/local/etc/mail
  - install -m 0644 /usr/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf

Disable sendmail(8) specific tasks,
add the following lines to /etc/periodic.conf(.local):
  daily_clean_hoststat_enable="NO"
  daily_status_mail_rejects_enable="NO"
  daily_status_include_submit_mailq="NO"
  daily_submit_queuerun="NO"

If you are using SASL, you need to make sure that postfix has access to read
the sasldb file.  This is accomplished by adding postfix to group mail and
making the /usr/etc/sasldb* file(s) readable by group mail (this should
be the default for new installs).

# Follow the instructions above
mkdir -p /usr/local/etc/mail                                                                                        
install -m 0644 /usr/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf                              

# Modify /etc/rc.conf
sysrc postfix_enable="YES"
sysrc sendmail_enable="NONE"

# create the /etc/periodic.conf
nano /etc/periodic.conf

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

# Check postfix has to be in mail group, see if it is correct ...
grep mail /etc/group
mail:*:6:postfix

# We are using sasl mail must be able to read sasldb* so check it too ...
root@okbsd.com:/usr/local/etc# ls -l sasl*
-rw-r-----  1 cyrus mail 16384 May  2 15:03 sasldb2.db

# Looks good so <reboot>
shutdown -r now

root@okbsd.com:~# service postfix status
postfix is running as pid 1892.

# From linuxbabe

root@okbsd.com:~# postconf mail_version
mail_version = 3.9

root@okbsd.com:/usr/ports# sockstat -lp 25 | grep master
root     master      1892 13  tcp4   *:25                  *:*
root     master      1892 14  tcp6   *:25                  *:*

root@okbsd.com:~# telnet gmail-smtp-in.l.google.com 25
Trying 2607:f8b0:4004:c08::1a...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP d75a77b69052e-48edb679b60si36993221cf.575 - gsmtp
> EHLO mx.okbsd.com
250-mx.google.com at your service, [2604:2dc0:100:1261::10]
250-SIZE 157286400
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
exit

# Rebuild alias accounts
newaliases

# Install Alpine, Alpine is an easy to use mail reader that has a nano like interface
# Using alpine will make it easy test send and receive email with a subject
pkg install alpine

# Become your user account
su - user

# Open alpine mail reader and send an email to another mail account
alpine
e (exit the greeter)
i (inbox)
c (compose)
ctrl-x (send)
q (quit)

# Or use postfix directly as sendmail

echo "test email" | sendmail useremail@gmail.com

# Reply to the email from user@okbsd.com

# Find the mail spool directory
root@okbsd.com:/var/spool# postconf mail_spool_directory
mail_spool_directory = /var/mail

# Check if mail was recieved
root@okbsd.com:/var/mail# cd /var/mail
root@okbsd.com:/var/mail# ls -l
-rw--w----  1 root       mail       2679 May  5 15:46 root
-rw-------  1 user       user       5354 May  5 15:53 user

root@okbsd.com:/var/mail# cat user
<raw mail output>

# Read with alpine
su - user
alpine

# If you have problems sending or receiving mail check the mail log
tail -300 -f /var/log/maillog

# Change message size limit
postconf | grep message_size_limit
message_size_limit = 10240000

# Increase limit to 50MB
postconf -e message_size_limit=52428800

# Increase limit to 500MB - 0.5 GB which is quite high
postconf -e message_size_limit=536870912

# Set unlimited mailbox size
root@okbsd.com:/var/mail# postconf | grep mailbox_size_limit
mailbox_size_limit = 51200000

# 0 means unlimited
root@okbsd.com:/var/mail# postconf -e mailbox_size_limit=0
root@okbsd.com:/var/mail# postconf | grep mailbox_size_limit
mailbox_size_limit = 0

# setup hostname
nano /etc/postfix/main.cf
myhostname = mx.okbsd.com
mydomain = okbsd.com

service postfix restart

# Check you alias mapping, alias is no left forwards to account on the right
nano /etc/mail/aliases

# This send all root mail to user@okbsd.com
root:	user

# remap the alias map
newaliases

# check inet protocols
root@okbsd.com:/var/mail# postconf inet_protocols
inet_protocols = all

# To only use ipv4 set ...
postconf -e "inet_protocols = ipv4"
service postfix restart

# To use both ipv4 and ipv6...
postconf -e "inet_protocols = all"
service postfix restart

# Next install dovecot IMAP server

02 FAMP Install <- Intro -> 04 Dovecot IMAP