Installing Postfix on a SmartMachine is trivial as long as you do not defer far from the usual ;-)


Hardware and appliances usually come with reporting facilities which enable the hardware admin to send status reports via email. Actually, using hardware status reports usually is a good idea. “Ay, shit, I need to buy new toner again” is usually better do bear than “Shit, the toner is spent and I need to print $IMPORTANTTHING”.


Install SMTP-mail server to accept mail from local network only and forward via your ISP’s SMTP-server to arbitrary addresses.


On Joyent’s SmartOS open source hypervisor, virtual machines are easily installed using vmadm(1M). (Opinions differ on whether it manually crafting JSONs counts as easy, for those who disagree there is always Project FiFo.)

Provisioning a SmartMachine to host SMTP email services is quickly done.


Installing the mailer host turned out to be accomplished in 5 min IT-time. It-time is derived by taking the estimate (5 min), doubling that (10 min) and rounding that up to the next order of unit (10 hours). My mistake was not to put the FQDN into /etc/nodename. Finding out was non-trivial because the issue would look like a failed alias lookup in /var/log/maillog.


In order for SASL to work, it es necessary to install the binaries for SASL transactions on the newly provisioned SmartMachine.

[admin@mail:~]$ pfexec pkgin in cyrus-sasl-2.1.26nb4 \
		 cyrus-saslauthd-2.1.26nb3 \
		 cy2-login-2.1.26 \
		 cy2-plain-2.1.26 \

Should you have elected to use minimal-64-lts, it is necessary to install Postfix first.

[admin@mail:~]$ pfexec pkgin in postfix

Postfix Configuration

Anyhow, factually, the Postfix configuration needs only sparse alterations, which I borrowed in parts from ~drscream.

For /opt/local/etc/postfix/ set

command_directory = /opt/local/sbin
config_directory 	= /opt/local/etc/postfix
daemon_directory 	= /opt/local/libexec/postfix
data_directory 	= /var/db/postfix
html_directory 	= no
manpage_directory = /opt/local/man
queue_directory   = /var/spool/postfix
readme_directory  = /opt/local/share/doc/postfix
sample_directory  = /opt/local/share/examples/postfix

mailq_path	    = /opt/local/bin/mailq
newaliases_path   = /opt/local/bin/newaliases
sendmail_path 	= /opt/local/sbin/sendmail

alias_database 	= dbm:/opt/local/etc/postfix/aliases
alias_maps 	    = dbm:/opt/local/etc/postfix/aliases

mail_owner		= postfix
setgid_group 		= maildrop

inet_interfaces	= $privateip,
inet_protocols 	= ipv4
mynetworks		= $privatenet/24,,
mynetworks_style 	= host
unknown_local_recipient_reject_code = 550

relayhost			= mailer.isp.tld:25

smtp_always_send_ehlo 	= yes
smtp_sasl_auth_enable 	= yes
smtp_sasl_password_maps = dbm:/opt/local/etc/postfix/relay_passwords
smtp_sasl_security_options = noanonymous
smtp_sasl_type 	= cyrus
smtp_use_tls 	    = yes

In addition, it is necessary to include a relay-mapping in /opt/local/etc/postfix/relay_passwords

mail.isp.tld <mailuser:mailpasswd>

It is then possible to define an alias in /opt/local/etc/postfix/aliases:

hardware-admin: <email@isp.tld>

In this configuration, you can send mail in your LAN to hardware-admin@<mailer>, which will be relayed to public email addresses using your ISP’s mailer.


As an aside, I have compared both minimal-64 and base-64 for memory usage, as I am kind of sparse in my personal setup. They differ, but not significantly, though. prstat(1M) gave me about 45 and 65 MB resident memory for the zones respectively. I had hoped for more, but I believe due to ZFS memory semantics, that may add up when provisioning more than a handful.