Postfix role in smtp-to-fax

Although you can expose kazoo fax on port 25 or use haproxy to relay incoming email messages directly to the fax_smtp server, we recommend to use Postfix to filter email spam before delivering to haproxy/kazoo

Simple Postfix setup

install Postfix, python & curl

  • yum -y install curl postfix
  • yum -y install python python-dns python-pydns
  • yum -y install python-pyspf pypolicyd-spf postgrey

edit etc/sysconfig/postgrey with

OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=60"

start services

  • service postgrey start
  • service postfix reload
  • chkconfig --levels 345 postgrey on

edit /etc/postfix/main.cf and add the following lines at the end

relay_domains = hash:/etc/postfix/kz_smtp_domains
# relayhost should be the IP:PORT of haproxy-smtp-listener or kazoo fax whapp
relayhost = 127.0.0.1:2525

policy-spf_time_limit = 3600s

smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks,
    reject_non_fqdn_helo_hostname,
    reject_invalid_helo_hostname,
    permit

smtpd_sender_restrictions =
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
     check_sender_access regexp:/etc/postfix/kz_allowed_senders,
    reject

smtpd_recipient_restrictions =
   reject_unauth_pipelining,
   reject_non_fqdn_recipient,
   reject_unknown_recipient_domain,
   permit_mynetworks,
   reject_unauth_destination,
   check_policy_service unix:private/policyd-spf,
   check_sender_access regexp:/etc/postfix/kz_allowed_senders,
   reject_rbl_client zen.spamhaus.org,
   reject_rbl_client bl.spamcop.net,
   check_policy_service unix:postgrey/socket,
   reject

edit /etc/postfix/master.cf and add the following line at the end

policy-spf  unix  -       n       n       -       0       spawn
   user=nobody argv=/usr/libexec/postfix/policyd-spf

To-do

  • use CouchDB views to get kazoo faxboxes configuration into postfix
  • edit domains and permitted users from kazoo
  • postmap /etc/postfix/kz_smtp_domains
  • postmap /etc/postfix/kz_allowed_senders
  • postfix reload
  • put into a bash script
  • add it to a cron table
  • handle 304 Not Modified responses