Previous | Contents | Index |
One application of access control mappings is to prevent people from relaying SMTP mail through your PMDF system; for instance, to prevent people from using your PMDF system to relay junk mail to hundreds or thousands of Internet mail boxes.
By default PMDF does not prevent SMTP relaying activity: for starters, SMTP relaying is not necessarily a bad thing. Sites should only block such activity if it is causing them difficulty. Morever, note that local users using POP or IMAP depend upon PMDF to act as an SMTP relay. Blocking unauthorized relaying while allowing it for legitimate local users requires configuring PMDF to know how to distinguish between the two classes of users. Configuring PMDF to make this distinction is the topic of the next section.
16.1.6.1 Differentiating Between Internal and External Mail
In order to block mail relaying activities, you must first be able to differentiate between "internal" mail originated at your site and "external" mail originated out on the Internet and passing through your system back out to the Internet. The former class of mail you want to permit; the latter class you want to block. This differentiation is achieved using the switchchannel
keyword on your inbound SMTP channel, usually the tcp_local channel.
The switchchannel
keyword works by causing the PMDF SMTP server to look at the actual IP
address associated with the incoming SMTP connection. PMDF uses that IP
address, in conjunction with your rewrite rules, to differentiate
between an SMTP connection originated within your domain and a
connection from outside of your domain. This information can then be
used to segregate the message traffic between internal and external
traffic.3
Let's now actually change your PMDF configuration so that you can differentiate between your internal and external message traffic. This is done by editing your PMDF configuration file, pmdf.cnf
, located in the PMDF table directory.
defaults noswitchchannel |
! final rewrite rules defaults noswitchchannel ! Local channel l ... |
noswitchchannel
keyword to it.
switchchannel
and remotehost
keywords, e.g.,
tcp_local smtp single_sys mx switchchannel remotehost TCP-DAEMON |
tcp_auth smtp single_sys mx allowswitchchannel routelocal TCP-INTERNAL |
routelocal
channel keyword is used to cause short-circuited rewriting of source
routed addresses through this channel, thereby blocking possible
attempts to relay by means of looping through internal SMTP hosts via
explicitly source routed addresses.
.example.com $U%$H$D@TCP-INTERNAL [a.b.] $U%[a.b.$L]@TCP-INTERNAL$E$R |
With the above configuration changes, SMTP mail generated within your domain will come in via the tcp_internal channel. All other SMTP mail will come in via the tcp_local channel. You can therefore distinguish between internal and external mail based upon which channel it comes in on.
How does the above work? The key is the switchchannel
keyword. In Step 2 above, that keyword is applied to the tcp_local channel. When a message comes in your SMTP server, that keyword causes the server to look at the source IP address associated with the incoming connection. The server attempts a reverse-pointing envelope rewrite of the literal IP address of the incoming connection, looking for an associated channel. If that rewrite matches a local host of yours, then the rewrite rules added in Step 4 cause the address to rewrite to the tcp_internal channel added in Step 3. Since the tcp_internal channel is marked with the allowswitchchannel
keyword, the message is "switched" to the tcp_internal channel and comes in on that channel. If the message comes in from an external source, the IP address will not correspond to an internal source. In that case the reverse-pointing envelope rewrite will either rewrite to the tcp_local channel or to some other channel. However, it will not rewrite to the tcp_internal channel and since all other channels were marked noswitchchannel
in Step 1, the message will not "switch" to another channel
and will remain with the tcp_local channel.
Note that any mapping table or conversion file entries which use the string "tcp_local" can need to be changed to either "tcp_*" or "tcp_internal" depending upon the usage. |
16.1.6.2 Differentiating Authenticated Users' Mail
Sometimes administratively "local" users of IMAP and POP clients can want to submit their messages when they aren't physically local (aren't physically on your network). Though such message submissions come in from an external IP address---for instance, arbitrary Internet Service Providers---if your users use mail clients that can perform SASL authentication, then their authenticated connections can be distinguished from arbitrary other external connections. The authenticated submissions you can then permit, while denying non-authenticated relay submission attempts. Differentiating between authenticated and non-authenticated connections is achieved using the saslswitchchannel
keyword on your inbound SMTP channel, usually the tcp_local channel.
The saslswitchchannel
keyword takes an argument specifying the channel to switch to; if an
SMTP sender succeeds in authenticating, then their submitted messages
are considered to come in the specified switched to channel.
We will now continue the example of the previous section, adding in distinguishing authenticated submissions.
tcp_auth smtp single_sys mx mustsaslserver noswitchchannel TCP-AUTH |
noswitchchannel
on it either explicitly or implied by a prior defaults
line). This channel should have mustsaslserver
on it.
maysaslserver
and saslswitchchannel tcp_auth
to it. So your tcp_local channel definition should now appear along the
lines of:
tcp_local smtp mx single_sys maysaslserver saslswitchchannel tcp_auth \ switchchannel TCP-DAEMON |
With this configuration, SMTP mail sent by users who can authenticate with a local password will now come in the tcp_auth channel. Unauthenticated SMTP mail sent from internal hosts will still come in tcp_internal. All other SMTP mail will come in tcp_local.
16.1.6.3 Preventing Mail Relaying
Now to the point of this example: preventing unauthorized people from
relaying SMTP mail through your system. First, keep in mind that you
want to allow local users to relay SMTP mail. For instance, POP and
IMAP users rely upon using PMDF to send their mail. Note that local
users can either be physically local, in which case their messages come
in from an internal IP address, or can be physically remote but able to
authenticate themselves as "local" users. It's random people
out on the Internet who you want to prevent from using you as a relay.
With the configuration from Section 16.1.6.1 and Section 16.1.6.2, you can
differentiate between these classes of users and block the correct
class. Specifically, you want to block mail from coming in your
tcp_local channel and going back out that same channel. To that end, an
ORIG_SEND_ACCESS mapping table is used.
An ORIG_SEND_ACCESS mapping table can be used to block traffic based upon the source and destination channel. In this case, traffic from and back to the tcp_local channel is to be blocked. This is realized with the following ORIG_SEND_ACCESS mapping table:
ORIG_SEND_ACCESS tcp_local|*|tcp_local|* $NRelaying$ not$ permitted |
An ORIG_SEND_ACCESS mapping table is used rather than a SEND_ACCESS mapping table, so that the blocking will not apply to addresses that originally match the l (lowercase "L") channel (but which can expand via an alias or mailing list definition back to an "external" address). With a SEND_ACCESS mapping table one would have to go to extra lengths to allow outsiders to send to mailing lists that expand back out to "external" users, or to send to users who forward their messages back out to "external" addresses.
16.1.6.4 Allowing localhost Submissions to the SMTP Port
This section discusses a further refinement of the SMTP relay blocking
approach described above.
Some sites can want to disallow submissions to the SMTP port from clients running on the system itself; for instance, if no legitimate applications are expected to attempt this, then blocking such submissions closes one avenue by which users can spoof (forge) e-mail.
Other sites, however, can have legitimate applications that perform message submission by making a TCP/IP connection to the SMTP port of their own system. For instance, some third party mailing list expansion applications (though not PMDF's own mailing list expansion) operate in this way.
Further, to simplify their configuration such applications can connect using a loopback name or address, such as LOCALHOST or [127.0.0.1], rather than using the system's domain name. Depending on the underlying TCP/IP package, this can result in the incoming connection also appearing to come "from" LOCALHOST or [127.0.0.1], rather than coming from the system's specific domain name or IP address.
Using merely the internal vs external differentiation as shown above in Section 16.1.6.1 would result in treating SMTP submissions from clients on the host system itself as coming in the tcp_local channel. Thus if tcp_local to tcp_local message traffic is prevented, as discussed in Section 16.1.6.3, then any users or applications attempting to submit messages in such a way would not be allowed to submit messages to external addressees.
If you want to treat such submissions as "internal" submissions, for instance, in order to allow third party mailing list applications to operate even if SMTP relay blocking has been implemented, then an additional configuration step should be performed.
To the very top of the PMDF configuration file, add rewrite rules for the local host name (or LOCALHOST or [127.0.0.1], depending on from where the underlying TCP/IP package "sees" the connection as having originated) of the following form:
localhostname $U%localhostname@TCP-INTERNAL$E$R [localhostipnumber] $U%localhostname@TCP-INTERNAL$E$R LOCALHOST $U%localhostname@TCP-INTERNAL$E$R [127.0.0.1] $U%localhostname@TCP-INTERNAL$E$R |
localhostname
is the official host name on the L channel. The $E and $R control sequences on these rewrite rules, which limit their effect to envelope From: address rewriting, mean that normal rewriting will still apply to addresses addressed to the local system. Yet switchchannel
rewriting will use these rules also, and hence will see message
submissions from the system to its own SMTP port as
"internal" submissions.
It is not recommended to add this rewrite rule for LOCALHOST unless you absolutely require it, as it opens up your PMDF implementation to abuse by spammers who can easily set up their DNS entries to say that their name is "localhost". If at all possible, do rewriting based solely on IP addresses rather than DNS names, as IP addresses are much harder to forge. |
3 Since the source IP address is used, it is important that your network router connecting your local network to the Internet be configured to prevent "IP spoofing". Contact your router vendor for assistance if you are unsure of how to configure your router. |
Previous | Next | Contents | Index |