14_Postfix
14_Postfix
2
Role of Postfix
• MTA that
■ Receive and deliver email over the network (SMTP)
■ Local delivery
■ http://www.postfix.org/OVERVIEW.html
3
Postfix Architecture
• Modular-design MTA
■ Not a monolithic system (e.g. sendmail).
■ Several individual programs => each one handles specific task
■ Most important: “master”
□ Reside in memory (daemon)
□ Load configuration from master.cf and main.cf
□ Invoke other processes for tasks
• Major tasks
■ Receive mail and put in queue
■ Queue management
■ Delivery mail from queue
4
Postfix Architecture – Message IN
• Four ways
■ Local submission
□ “postdrop” command
□ “maildrop” queue
□ “pickup” daemon
□ “cleanup” daemon
• Header/address validation
□ “incoming” queue
■ Network submission
□ “smtpd” daemon
■ Local forwarding
□ Resubmit for such as .forward
□ Envelope "to" is changed
■ Notification Local submission Network submission
□ Notify admin when error happens 5
Postfix Architecture – Queue
• Five different queues
■ incoming
□ The first queue that every incoming email will stay
■ active
□ Queue manager will move message into active queue whenever there is enough system resources
□ Queue manager then invokes suitable DA to delivery it
■ deferred
□ Messages that cannot be delivered are moved here
□ These messages are sent back either with bounce or defer daemons
■ corrupt
□ Used to store damaged or unreadable message
■ hold
□ Requested by admin (manually or automatically)
□ Stay in queue until admin intervenes
http://www.postfix.org/QSHAPE_README.html#queues 6
Message Flow in Postfix (1)
alias
• Example
■ [email protected] => [email protected] ([email protected])
■ Phase1:
□ Compose mail using MUA
□ Call postdrop command to send it
• To “maildrop” queue
oreilly.com
7
Message Flow in Postfix (2)
• Example
■ [email protected] => [email protected]
■ Phase2:
□ smtpd on postfix.org: receive message and invoke cleanup
□ “local” MDA find that frank is an alias => resubmits it through cleanup daemon
Postfix.org
8
Message Flow in Postfix (3)
• Example
■ [email protected] => [email protected]
■ Phase3
□ smtpd on onlamp.com: receive message and invoke cleanup
□ Local delivery to message store
onlamp.com
9
Message Store Format
• The Mbox format
■ Store messages in single file for each user
■ Each message start with "From" line and continued with message headers and body
■ Mbox format has file-locking problem (performance)
• The Maildir format
■ Use structure of directories to store email messages
■ Each message is in its owned file cur: already read
new: unread
■ Three subdirectories - cur, new, and tmp
tmp: under receving (working dir)
■ Maildir format has scalability problem
□ locate and delete mails quickly, but waste amounts of fd, inodes, space
□ Problems of quota and backup
11
Postfix & POP3/IMAP
• POP3 vs. IMAP
■ Both are used to retrieve mail from server for remote clients
■ POP3 has to download entire message, while IMAP can download headers
only
■ POP3 can download only single mailbox, while IMAP can let you maintain
multiple mailboxes and folders on server
• Postfix works together with POP3/IMAP
■ Postfix and POP3/IMAP must agree on the type of mailbox format
and style of locking
□ Standard message store
□ Non-standard message store
• Such as Cyrus IMAP or Dovecot
12
Postfix Configuration
• Two most important configuration files
■ /usr/local/etc/postfix/main.cf – postconf(5)
□ Core configuration
■ /usr/local/etc/postfix/master.cf – master(5)
□ Which postfix service should invoke which program
• Edit main.cf
■ Using text editor
■ postconf
□ $ postconf [-e] "myhostname=nasa.cs.nctu.edu.tw"
□ $ postconf -d myhostname (print default setting)
□ $ postconf myhostname (print current setting)
http://www.postfix.org/DATABASE_README.html 14
Postfix Configuration – Lookup tables (2)
• Use databased-lookup table in main.cf
■ syntax
parameter = type:name
■ E.g.
□ In main.cf
canonical_maps = hash:/usr/local/etc/postfix/canonical
□ After execute postmap
/usr/local/etc/postfix/canonical.db
• postmap command
■ Generate database
□ $ postmap hash:/usr/local/etc/postfix/canonical
■ Query
don’t need to add ".db" here
□ $ postmap -q nctu.edu.tw hash:/usr/local/etc/postfix/canonical 15
Postfix Configuration – Lookup tables (3)
• Regular expression tables
■ More flexible for matching keys in lookup tables
□ Sometimes you cannot list all the possibilities
■ Two regular expression libraries used in Postfix
□ POSIX extended regular expression (regexp, default)
□ Perl-Compatible regular expression (PCRE)
■ Usage
□ /pattern/ value
□ Do some content checks (filtering)
• header_checks
• body_checks
□ Design some features
• /(\S+)\.(\S+)@cs\.nctu\.edu\.tw/ [email protected]
16
Postfix Configuration – Categories
• Categories
■ Server identities
□ my...
■ Mail rewriting
□ for incoming/outgoing mails
■ Access control
□ restrictions
■ Mail processing
□ filter
■ Operation details
□ … 17
Postfix Configuration – MTA Identity
• Four related parameters
■ myhostname
□ myhostname = nasa.cs.nctu.edu.tw
□ If un-specified, postfix will use ‘hostname’ command
■ mydestination
□ List all the domains that postfix should accept for local delivery
□ mydestination = $myhostname, localhost.$mydomain $mydomain
• This is the CS situation that MX will route mail to mailgate
□ mydestination = $myhostname www.$mydomain, ftp.$mydomain
■ mydomain
□ mydomain = cs.nctu.edu.tw
□ If un-specified, postfix use myhostname minus the first component
■ myorigin
□ myorigin = $mydomain (default is $myhostname)
18
Postfix Configuration – System-wide aliases
• Using aliases in Postfix (first-matching)
■ alias_maps = hash:/etc/aliases
■ alias_maps = hash:/etc/aliases, nis:mail.aliases
■ alias_database = hash:/etc/aliases
• alias_map vs alias_database
■ alias_map
□ Which map to use (lookup table)
□ Not all of them is controlled by Postfix
• E.g. nis
■ alias_database
□ Tell "newaliases" which (local) database to rebuild
19
Postfix Configuration – System-wide aliases
• To Build alias database file
■ $ postalias /etc/aliases
□ Can be used on files other than /etc/aliases
■ $ newaliases
□ For /etc/aliases => can be changed by "alias_database"
• Alias file format (same as sendmail)
■ Value can be
□ Email address, filename, |command, :include:
• Alias restriction (alias, forward, include)
■ allow_mail_to_commands = alias, forward
■ allow_mail_to_files = alias, forward 20
Postfix Configuration – Virtual Alias Maps
• Virtual Alias Map
■ It recursively rewrites envelope recipient addresses for all local, all virtual, and all remote mail
destinations.
■ virtual_alias_domains = $virtual_alias_maps (default)
■ virtual_alias_maps = hash:/usr/local/etc/postfix/virtual
□ src-address dst-address
[email protected] @nasa.cs.nctu.edu.tw
lctseng [email protected]
@cs.nycu.edu.tw @cs.nctu.edu.tw
■ Applying regular expression
□ virtual_alias_maps = pcre:/usr/local/etc/postfix/virtual
/^root(\..+)?@(t)?(cs|np)?bsd\d*\.cs\.nctu\.edu\.tw$/ [email protected]
/^root(\..+)?@(t)?(cs|np)?linux\d*\.cs\.nctu\.edu\.tw$/ [email protected]
/^root(\..+)?@(t)?csmail\w*\d*\.cs\.nctu\.edu\.tw$/ [email protected]
21
Postfix Configuration – Virtual Alias Maps vs Alias Map
• alias_map
■ Used by local(8) delivery
■ Key must be local recipients
■ Value can be email/file/command/…
• virtual_alias_maps
■ Used by virtual(5) delivery
■ Higher priority than alias_map
■ Key can be
□ user@domain
□ user
□ @domain
□ Spam
23
Postfix Configuration – Relay Control (2)
• Restricting relay access by mynetworks_style
■ mynetworks_style = subnet
□ Allow relaying from other hosts in the same subnet, configured in this machine
■ mynetworks_style = host
□ Allow relaying for only local machine
■ mynetworks_style = class
□ Any host in the same class A, B or C
□ Usually we don’t use this - your server may trust the whole subnet from your provider
24
Postfix Configuration – Relay Control (3)
• Restricting relay access by mynetworks (override mynetworks_style)
■ List individual IP or subnets in network/netmask notation
■ E.g. in /usr/local/etc/postfix/mynetworks
□ 127.0.0.0/8
□ 140.113.0.0/16
□ 10.113.0.0/16
25
Postfix Configuration – Rewriting address (1)
• For unqualified address
■ To append "myorigin" to local name
□ lctseng => [email protected]
□ append_at_myorigin = yes
■ To append "mydomain" to address that contain only host.
□ lctseng@nasa=> [email protected]
□ append_dot_mydomain = yes
26
Postfix Configuration – Rewriting address (2)
• Masquerading hostname
■ Hide the names of internal hosts to make all addresses appear as if they come
from the same mail server
■ It is often used in out-going mail gateway
□ masquerade_domains = cs.nctu.edu.tw
• [email protected] => [email protected]
□ masquerade_domains = !chairman.cs.nctu.edu.tw cs.nctu.edu.tw
□ masquerade_exceptions = admin, root
■ Rewrite to all envelope and header address excepts envelope recipient address
(the default)
□ masquerade_class = envelope_sender, header_sender, header_recipient
□ This allows incoming messages can be filtered based on their recipient address
27
Postfix Configuration – Rewriting address (3)
• Canonical address – canonical(5)
■ Rewrite both header and envelope recursively invoked by cleanup daemon
■ In main.cf
□ canonical_maps = hash:/usr/local/etc/postfix/canonical
header_sender, header_recipient
■ In canonical
/^(.*)@(t)?(cs)?(bsd|linux|sun)\d*\.cs\.nctu\.edu\.tw$/ [email protected]
■ Simlar configurations
□ sender_canonical_maps、sender_canonical_classes
□ recipient_canonical_maps、recipient_canonical_classes
28
Postfix Configuration – Rewriting address (4)
• Relocated users
■ Used to inform sender that the recipient is moved
□ "user has moved to new_location" bounce messages
■ In main.cf
□ relocated_maps = hash:/usr/local/etc/postfix/relocated
■ In relocated
[email protected] [email protected]
lctseng EC319, NCTU, Hsinchu, ROC
@nabsd.cs.nctu.edu.tw zfs.cs.nctu.edu.tw
Value can be anything: phone number, street address, …
• Unknown users
■ Not local user and not found in maps
■ Default action: reject 29
Postfix Configuration – master.cf (1)
• /usr/local/etc/postfix/master.cf (master(5))
■ Define services that master daemon can invoke
■ Each row defines a service and
■ Each column contains a specific configuration option
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
rewrite unix - - n - - trivial-rewrite
smtp unix - - n - - smtp
local unix - n n - - local
virtual unix - n n - - virtual
relay unix - - n - - smtp
-o smtp_fallback_relay=
lmtp unix - - n - - lmtp
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} 30
Postfix Configuration – master.cf (2)
• Configuration options
■ Service name
■ Service type
□ inet, unix, fifo (obsolete), or pass
■ Private
□ Access to this component is restricted to the Postfix system
requested
■ lmtp
□ Local Mail Transfer Protocol (Limited SMTP)
• No queue
• One recipient at once
□ Used to deliver to mail systems on the same network or even the same host
■ pipe
□ Used to deliver message to external program
33
Mail Relaying – Transport Maps (1)
• Transport maps – transport(5)
■ It override default transport method to deliver messages
■ In main.cf
□ transport_maps = hash:/usr/local/etc/postfix/transport
csie.nctu.edu.tw smtp:[mailgate.csie.nctu.edu.tw]
cs.nctu.edu.tw smtp:[csmailgate.cs.nctu.edu.tw]
cis.nctu.edu.tw smtp:[mail.cis.nctu.edu.tw]
example.com smtp:[192.168.23.56]:20025
orillynet.com smtp
ora.com maildrop
[email protected] error:no mail accepted for kdent
34
Mail Relaying – Transport Maps (2)
• Usage in transport map
■ MX => Local delivery mail server
■ mailpost to bbs/news
■ Postponing mail relay
□ Such as ISP has to postpone until customer network is online
□ In transport map:
abc.com ondemand
□ In /usr/local/etc/postfix/master.cf
ondemand unix - - n - - smtp
□ In /usr/local/etc/postfix/main.cf
defer_transports = ondemand "ondemand" transport should trigger by postqueue
transport_maps = hash:/usr/local/etc/postfix/transport
36
Mail Relaying – Inbound Mail Gateway (2)
• To be IMG, suppose
■ You are administrator for cs.nctu.edu.tw
■ Hostname is csmx1.cs.nctu.edu.tw
■ You have to be the IMG for secureLab.cs.nctu.edu.tw and javaLab.cs.nctu.edu.tw
□ Firewall only allow outsource connect to IMG port 25
1. The MX record for secureLab.cs.nctu.edu.tw and javaLab.cs.nctu.edu.tw should point to
csmx1.cs.nctu.edu.tw
2. In csmx1.cs.nctu.edu.tw,
relay_domains = secureLab.cs.nctu.edu.tw javaLab.cs.nctu.edu.tw
transport_maps = hash:/usr/local/etc/postfix/transport
secureLab.cs.nctu.edu.tw relay:[secureLab.cs.nctu.edu.tw]
javaLab.cs.nctu.edu.tw relay:[javaLab.cs.nctu.edu.tw]
csmx1
3. In secureLab.cs.nctu.edu.tw ( and so do javaLab.cs.nctu.edu.tw)
mydestination = secureLab.cs.nctu.edu.tw
javaLab
secureLab
37
Mail Relaying – Outbound Mail Gateway
• Outbound Mail Gateway
■ Accept mails from inside network and relay them to Internet hosts
• To be OMG, suppose
■ You are administrator for cs.nctu.edu.tw
■ Hostname is csmailer.cs.nctu.edu.tw
■ You have to be the OMG for secureLab.cs.nctu.edu.tw and
javaLab.cs.nctu.edu.tw
1. In main.cf of csmailer.cs.nctu.edu.tw
mynetworks = hash:/usr/local/etc/postfix/mynetworks
secureLab.cs.nctu.edu.tw
javaLab.cs.nctu.edu.tw
2. All students in secureLab/javaLab will configure their MUA to use
secureLab/javaLab.cs.nctu.edu.tw to be the SMTP server
3. In main.cf of secureLab/javaLab.cs.nctu.edu.tw,
relayhost = [csmailer.cs.nctu.edu.tw]
38
Queue Management
• The queue manage daemon
■ “qmgr” daemon
■ Unique queue ID
■ Queue directories (/var/spool/postfix/*)
□ active, bounce, corrupt, deferred, hold
39
Queue Management – Queue Scheduling
• Double delay in deferred messages
■ Between
□ minimal_backoff_time = 300s
□ maximal_backoff_time = 4000s
40
Queue Management – Message Delivery
• Controlling outgoing messages
■ Avoid overwhelming the destination when there are lots of messages to it
■ Concurrent delivery succeed => increase concurrency between:
□ initial_destination_concurrency = 5
□ default_destination_concurrency_limit = 20
□ Under control by
• maxproc in /usr/local/etc/postfix/master.cf
□ Customization for different transport mailers:
• smtp_destination_concurrency_limit = 25 for external delivery
• local_destination_concurrency_limit = 10 for local recipients
■ Control how many recipients for a single outgoing message
□ default_destination_recipient_limit = 50
□ Customization for transport mailers:
• smtp_destination_recipient_limit = 100
41
Queue Management – Error Notification
• Sending error messages to administrator
■ Error classes to be generated and sent to administrator
□ notify_classes = resource, software
• postsuper(1)
■ Delete queued messages
□ postsuper –d E757A3428C6 (from incoming, active, deferred, hold)
□ postsuper –d ALL
■ Put messages "on hold" so that no attempt is made to deliver it
□ postsuper –h E757A3428C6 (from incoming, active, deferred)
■ Release messages in hold queue (into deferred queue)
□ postsuper –H ALL
■ Requeue messages into maildrop queue (maildrop => pickup => cleanup => incoming)
□ postsuper –r E757A3428C6
□ postsuper –r ALL 43
Queue Management – Queue Tools (2)
• postcat(1) nasa [/home/lctseng] -lctseng- mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
3314234284A 602 Sat May 19 04:16:20 [email protected]
■ Display the (connect to csmx1.cs.nctu.edu.tw[140.113.235.104]:25: Operation timed out)
[email protected]
contents of a
queue file nasa [/home/lctseng] -lctseng- sudo postcat -q 3314234284A
*** ENVELOPE RECORDS deferred/3/3314234284A ***
message_size: 602 214 1 0 602
message_arrival_time: Sat May 19 04:16:20 2012
create_time: Sat May 19 04:16:20 2012
sender: [email protected]
named_attribute: rewrite_context=local
original_recipient: root
recipient: [email protected]
*** MESSAGE CONTENTS deferred/3/3314234284A ***
Received: by nasa.cs.nctu.edu.tw (Postfix)
id 3314234284A; Sat, 19 May 2012 04:16:20 +0800 (CST)
Delivered-To: [email protected]
Received: by nasa.cs.nctu.edu.tw (Postfix, from userid 0)
id 2CB713427A5; Sat, 19 May 2012 04:16:20 +0800 (CST)
To: [email protected]
Subject: nasa.cs.nctu.edu.tw weekly run output
Message-Id: <[email protected]>
Date: Sat, 19 May 2012 04:16:20 +0800 (CST)
From: [email protected] (NASA Root)
Rebuilding locate database:
Rebuilding whatis database:
…
44
Multiple Domains
• Use single system to host many domains
■ E.g.
□ We use csmailgate.cs.nctu.edu.tw to host both cs.nctu.edu.tw and csie.nctu.edu.tw
■ Purpose
□ Final delivery on the machine
□ Forwarding to destination elsewhere (mail gateway)
• Important considerations
■ Does the same user id with different domain should go to the same mailbox or different
mailbox?
□ YES (shared domain)
□ NO (separate domain)
■ Does every user require a system account in /etc/passwd ?
□ YES (system account)
□ NO (virtual account)
45
Multiple Domains –
Shared Domain with System Account
• Situation
■ Accept mails for both canonical and virtual domains
■ Same mailbox for the same user id (lctseng@ => /var/mail/lctseng)
• Procedure
■ Setup MX records for both domains
■ Modify "mydomain" to canonical domain
■ Modify "mydestination" parameter to let mails to virtual domain can be local delivered
■ E.g.
□ mydomain = cs.nctu.edu.tw
□ mydestination = $myhostname, $mydomain, csie.nctu.edu.tw
※ In this way, mail to both [email protected] and [email protected] will go to
csmailgate:/var/mail/lctseng
• Limitation
■ Can not separate [email protected] from [email protected] 46
Multiple Domains –
Separate Domains with System Accounts
• Situation
■ Accept mails for both canonical and virtual domains
■ Mailboxes are not necessarily the same for the same user id
• Procedure
■ Modify "mydomain" to canonical domain
■ Modify "virtual_alias_domains" to accept mails to virtual domains
■ Create "virtual_alias_maps" map
■ E.g.
□ mydomain = cs.nctu.edu.tw
• Limitation
■ Need to maintain system accounts for virtual domain users
47
Multiple Domains –
Separate Domains with Virtual Accounts (1)
• Useful when users in virtual domains:
■ No need to login to system
■ Only retrieve mail through POP/IMAP server
• Procedure
■ Modify "virtual_mailbox_domains" to let postfix know what mails it should accepts
■ Modify "virtual_mailbox_base" and create related directory to put mails
■ Create "virtual_mailbox_maps" map
■ E.g.
□ virtual_mailbox_domain = abc.com.tw, xyz.com.tw
□ virtual_mailbox_base = /var/vmail
□ Create /var/vmail/abc-domain and /var/vmail/xyz-domain
□ virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox
□ In /usr/local/etc/postfix/vmailbox
• [email protected] abc-domain/CEO (Mailbox format)
• [email protected] xyz-domain/CEO/ (Maildir format) 48
Multiple Domains –
Separate Domains with Virtual Accounts (2)
• Ownerships of virtual mailboxes
■ Simplest way:
□ Same owner of POP/IMAP Servers
■ Flexibility in postfix
□ virtual_uid_maps and virtual_gid_maps
□ E.g.
• virtual_uid_maps = static:1003
• virtual_gid_maps = static:105
• virtual_uid_maps = hash:/usr/local/etc/postfix/virtual_uids
• virtual_uid_maps = hash:/usr/local/etc/postfix/virtual_uids static:1003
• In /usr/local/etc/postfix/virtual_uids
■ [email protected] 1004
■ [email protected] 1008 49
Step by Step Examples
Letʼs learn from examples
國立陽明交通大學資工系資訊中心
Computer Center of Department of Computer Science, NYCU
50
Step by Step Examples
• Build a Basic MTA
■ Send test mails to verify your MTA
■ Check whether your mail is sent or not
• MTA Authentication
• MTA Encryption
• MAA for POP3 and IMAP
• Note
■ In this example, we assume you have public IP/domain
51
Build a Basic MTA
Can send mails to other domain
國立陽明交通大學資工系資訊中心
Computer Center of Department of Computer Science, NYCU
52
Build a basic MTA(1)
• Can send mails to other domain
• Install Postfix
■ Pkg: postfix
■ Port: mail/postfix
• After installation
■ Disable "sendmail" program
□ service sendmail stop
□ In /etc/rc.conf
sendmail_enable="NONE"
□ In /etc/periodic.conf (create if not exists)
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
53
Build a basic MTA(2)
• Replace sendmail by Postfix modified version
■ Edit /etc/mail/mailer.conf
Sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
Mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail
54
Build a basic MTA(3)
• After installation
■ Enable postfix
□ Edit /etc/rc.conf
postfix_enable="YES"
□ service postfix start
• Set up DNS records
■ Some domains will reject mails from hosts without DNS record
■ Suppose the hostname is "demo1.nasa.lctseng.nctucs.net"
■ Set up these records
□ (A record) demo1.nasa.lctseng.nctucs.net
□ (A record) nasa.lctseng.nctucs.net
• Points to "demo1.nasa.lctseng.nctucs.net"
55
Build a basic MTA(4)
• Set up MTA identity
■ In main.cf
myhostname = demo1.nasa.lctseng.nctucs.net
mydomain = nasa.lctseng.nctucs.net
myorigin = $myhostname
mydestination = $myhostname, localhost. $mydomain,
localhost, $mydomain
56
Send test mails to verify your MTA(1)
> telnet localhost 25
• "telnet" or "mail" command Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 demo1.nasa.lctseng.nctucs.net ESMTP Postfix
EHLO localhost
250-demo1.nasa.lctseng.nctucs.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: This is test mail
DATA
.
250 2.0.0 Ok: queued as 3C868150
telnet
57
Send test mails to verify your MTA(2)
• The "mail" command
> mail -s "test from nasa" [email protected]
This is test mail from NASA
regards,
admin
(Press Ctrl+D)
mail
■ See man page for more details
• Result (gmail)
58
Send test mails to verify your MTA(3)
• Mail source text of the previous example
Delivered-To: [email protected]
Received: by 10.129.125.135 with SMTP id y129csp874822ywc;
Sun, 6 Mar 2016 02:39:22 -0800 (PST)
X-Received: by 10.98.87.90 with SMTP id l87mr25639644pfb.70.1457260762400;
Sun, 06 Mar 2016 02:39:22 -0800 (PST)
Return-Path: <[email protected]>
Received: from demo1.nasa.lctseng.nctucs.net …(omitted)
by mx.google.com with ESMTP id bz6si20406744pad.30.2016.03.06.02.39.21
for <[email protected]>;
Sun, 06 Mar 2016 02:39:21 -0800 (PST)
Received-SPF: neutral (google.com: 140.113.168.238 is neither permitted …(omitted)
Authentication-Results: mx.google.com;
spf=neutral (google.com: 140.113.168.238 is neither permitted …(omitted)
Received: by demo1.nasa.lctseng.nctucs.net (Postfix, from userid 1001)
id 6D916162; Sun, 6 Mar 2016 18:38:04 +0800 (CST)
To: [email protected]
Subject: test from nasa
Message-Id: <[email protected]>
Date: Sun, 6 Mar 2016 18:38:04 +0800 (CST)
From: [email protected] (lctseng)
59
Check whether your mail is sent or not (1)
• Sometimes, we do not receive mails immediately
■ There may be some errors when your MTA sending mails to other domain
-- 0 Kbytes in 1 Request.
■ Problem
□ The destination MX cannot verify the domain of sender host
■ Reason
□ You may forget to set up correct DNS record
■ This mail will NOT be delivered until you set up your DNS record
61
Check whether your mail is sent or not (3)
• Example for deferred mails
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
3C868150 377 Sun Mar 6 18:23:11 [email protected]
(host csmx1.cs.nctu.edu.tw[140.113.235.104] said: 450 4.2.0
<[email protected]>: Recipient address rejected: Greylisted,
see http://postgrey.schweikert.ch/help/cs.nctu.edu.tw.html
(in reply to RCPT TO command)) [email protected]
-- 0 Kbytes in 1 Request.
■ Problem
□ The mail is deferred for a short time
■ Reason
□ Destination host wants to examine our server is a spamming host or not
62
MTA Authentication
We donʼt want unauthorized user to access our MTA
國立陽明交通大學資工系資訊中心
Computer Center of Department of Computer Science, NYCU
63
MTA authentication(1)
• In previous example, only localhost can send mail to other domain
• If you try telnet on other host, when you try to send mails to other domain, you will get:
> telnet demo1.nasa.lctseng.nctucs.net 25
Trying 140.113.168.238...
Connected to demo1.nasa.lctseng.nctucs.net.
Escape character is '^]'.
220 demo1.nasa.lctseng.nctucs.net ESMTP Postfix
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
454 4.7.1 <[email protected]>: Relay access denied
64
MTA authentication(2)
• How to let SMTP clients outside from trust networks get the same privileges as
trusted hosts?
■ Can send mails to other domain, not only $mydestination
■ We need authentication (account and password)
• SASL Authentication
■ Simple Authentication and Security Layer
■ RFC 2554, RFC 4954
• To configure SASL for Postfix, we need another daemon
■ Dovecot SASL (we use it in our example)
■ Cyrus SASL
• References
■ http://wiki2.dovecot.org/
■ http://www.postfix.org/SASL_README.html 65
MTA authentication(3) - Dovecot SASL
• Installation
■ Pkg: dovecot
■ Port: mail/dovecot
• Enable Dovecot SASL daemon
■ In /etc/rc.conf
dovecot_enable="YES"
□ Note: these are mainly for POP3s and IMAPs, not SASL in Postfix
■ In /usr/local/etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
67
MTA authentication(5) - Postfix with Dovecot SASL
• Set up Dovecot SASL in Postfix
■ In main.cf
# Set SASL to Dovecot
smtpd_sasl_type = dovecot
# Specify the UNIX socket path
smtpd_sasl_path = private/auth
# Enable SASL
smtpd_sasl_auth_enable = yes
# For client (backward) capability
broken_sasl_auth_clients = yes
# Allow SASL authenticated clients
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
69
MTA authentication(7)
• The account and password are encoded in Base64
■ If you have perl installed, suggest your account is test and password
is testpassword
perl -MMIME::Base64 -e 'print encode_base64("\000test\000testpassword");'
70
MTA authentication(8)
• Use the encoded account and password to authenticate it
> telnet demo1.nasa.lctseng.nctucs.net 25
Trying 140.113.168.238...
Connected to demo1.nasa.lctseng.nctucs.net.
Escape character is '^]'.
220 demo1.nasa.lctseng.nctucs.net ESMTP Postfix
AUTH PLAIN AHRlc3QAdGVzdHBhc3N3b3Jk
235 2.7.0 Authentication successful
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
To: [email protected]
Subject: This is authenticated client
Message-Id: <[email protected]>
Date: Mon, 7 Mar 2016 15:01:09 +0800 (CST)
From: [email protected] (lctseng)
Test Mail
.
250 2.0.0 Ok: queued as F3D59171 71
MTA Encryption
The Internet is dangerous, we need to protect ourselves from
sniffing.
國立陽明交通大學資工系資訊中心
Computer Center of Department of Computer Science, NYCU
72
MTA encryption(1)
• In previous example, all SMTP sessions are in plain text
■ Your encoded authentication information is in danger!
• We need encryption over SSL/TLS
■ Like HTTP can be enhanced to HTTPs
■ Postfix supports two kinds of encryption
□ SMTP over TLS
□ SMTPs
• Before we enable SMTP over TLS (or SMTPs), you need SSL keys and certificates
■ Just like HTTPs
■ Self-signed or use Let’s Encrypt
■ You can use the same certificates/keys as Dovecot’s
□ In main.cf
smtpd_tls_cert_file = /path/to/cert.pem
smtpd_tls_key_file = /path/to/key.pem
73
MTA encryption(2-1) - Set up SMTP over TLS
• Recommended for SMTP encryption
• Use the same port as SMTP (port 25)
• No force encryption
■ Client can choose whether to encrypt mails or not
■ But server can configured to force encryption
• In main.cf
■ No force encryption
smtpd_tls_security_level = may
■ Force encryption
smtpd_tls_security_level = encrypt
• Reload Postfix
74
MTA encryption(2-2) - Set up SMTP over TLS
• Now your server supports SMTP over TLS
> telnet demo1.nasa.lctseng.nctucs.net 25
Trying 140.113.168.238...
Connected to demo1.nasa.lctseng.nctucs.net.
Escape character is '^]'.
220 demo1.nasa.lctseng.nctucs.net ESMTP Postfix
EHLO linuxhome.cs.nctu.edu.tw
250-demo1.nasa.lctseng.nctucs.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
• If you use force encryption, you must STARTTLS before sending mails
MAIL FROM: [email protected]
530 5.7.0 Must issue a STARTTLS command first
75
MTA encryption(2-3) - Set up SMTP over TLS
• Send mail with STARTTLS
■ You cannot use telnet (plain-text client) anymore
■ Connection becomes encrypted after STARTTLS
■ telnet cannot read encrypted text
• OpenSSL client
openssl s_client -connect demo1.nasa.lctseng.nctucs.net:25 -starttls smtp
76
MTA encryption(3-1) - Set up SMTPs
• Alternative way to encrypt SMTP sessions
• Use different port: 465
• Force encryption
• Can coexist with SMTP over TLS
• In master.cf
■ Uncomment these lines
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
■ This will open port 465 for SMTPs and use "smtps" as syslog name
• Reload Postfix
77
MTA encryption(3-2) - Set up SMTPs
• Now you can use SSL clients to use SMTPs
■ telnet may not work in encrypted sessions
■ SSL client:
openssl s_client –connect host:port
■ Important note
□ In openssl s_client, DO NOT use capital character "R"
• When you activate Dovecot service, these MAA services are also
brought up.
• But you cannot access mail directly, you need some configuration
■ Configuration files are in : /usr/local/etc/dovecot/
■ There are many files included by dovecot.conf
□ In conf.d directory
■ Reference: https://doc.dovecot.org/configuration_manual/quick_configuration/
80
MAA for POP3 and IMAP (2)
- Dovecot Configuration
• Allow GID = 0 to access mail (optional)
■ By default, Dovecot do not allow users with GID = 0 to access mail. If your users are in wheel
group, you need following settings
■ In dovecot.conf
first_valid_gid = 0
82
MAA for POP3 and IMAP (4)
• IMAP + STARTTLS
openssl s_client -connect host.example.com:143 -starttls imap
• POP3 + STARTTLS
openssl s_client -connect host.example.com:110 -starttls pop3
• IMAPs
openssl s_client -connect host.example.com:993
• POP3s
openssl s_client -connect host.example.com:995
84