\chapter{Improvements}

<< what to really implement within the thesis >>





\section{Implementation}





\subsection{Authentication for SMTP-in}

Several ways to restrict access are available. The most simple one is restrictiction by the \NAME{IP} address. No extra complexity is added this way, but static \NAME{IP} addresses are mandatory. This kind of restriction may be enabled using the operating system's \path{hosts.allow} and \path{hosts.deny} files. To allow only connections to port 25 from localhost or the local network \texttt{192.168.100.0/24} insert the line ``\texttt{25: ALL}'' into \path{hosts.deny} and ``\texttt{25: 127.0.0.1, 192.168.100.}'' into \path{hosts.allow}.

If static access restriction is not possible, for example if mail from locations with changing \NAME{IP} addresses wants to be accepted, some kind of authentication mechanism is required. Three common kinds exist:
\begin{enumerate}
	\item \SMTP-after-\NAME{POP}: uses authenication on the \NAME{POP} protocol to permit incoming \SMTP\ connections for a limited time afterwards.
	\item \SMTP authentication: is an extension to \SMTP. Authentication can be requested before mail is accepted.
	\item Certificates: confirm the identity of someone.
\end{enumerate}
The first mechanism requires a \NAME{POP} (or \NAME{IMAP}) server running on the same host (or a trusted one), to enable the \SMTP\ server to use the login dates on the \NAME{POP} server. This is a common practice used by mail service providers, but is not adequate for the environments \masqmail\ is designed for.

Certificate based authentication, like provided by \NAME{TLS}, suffers from the overhead of certificate management. But \NAME{TLS} provides encryption too, so is useful anyway.

\SMTP\ authentication (also refered to as \NAME{SMTP-AUTH}) suppoert is easiest received by using a \name{Simple Authentication and Security Layer} implementation. \person{Dent} sees in \NAME{SASL} the best solution for authenticating dynamic users:
\begin{quote}
%None of these add-ons is an ideal solution. They require additional code compiled into your existing daemons that may then require special write accesss to system files. They also require additional work for busy system administrators. If you cannot use any of the nonauthenticating alternatives mentioned earlier, or your business requirements demand that all of your users' mail pass through your system no matter where they are on the Internet, SASL is probably the solution that offers the most reliable and scalable method to authenticate users.
None of these [authentication methods] is an ideal solution. They require additional code compiled into your existing daemons that may then require special write accesss to system files. They also require additional work for busy system administrators. If you cannot use any of the nonauthenticating alternatives mentioned earlier, or your business requirements demand that all of your users' mail pass through your system no matter where they are on the Internet, \NAME{SASL} is probably the solution that offers the most reliable and scalable method to authenticate users.
\hfill\cite[page 44]{dent04}
\end{quote}

%either by
%- network/ip address
%	easiest: restricting by static IP addresses (Access control via hosts.allow/hosts.deny)
%or
%- some kind of auth (for dynamic remote hosts)
%	adds complexity
%	- SASL
%	- POP/IMAP: pop-before-smtp, DRAC, WHOSON
%	- TLS (certificates)







\subsection{Encryption}

Electronic mail is very weak to sniffing attacks, because all data transfer is unencrypted. This concerns the message's content, as well as the email addresses in header and envelope, but also authentication dialogs that may transfer plain text passwords (\NAME{PLAIN} and \NAME{LOGIN} are examples). Adding encryption is therefor wanted.

The common way to encrypt \SMTP\ dialogs is using \name{Transport Layer Security} (short: \TLS, successor of \NAME{SSL}). \TLS\ encrypts the datagrams of the \name{transport layer}. This means it works below the application protocols and can be used by any of them\citeweb{wikipedia:tls}.

\TLS\ allows to create secure tunnels through which arbitrary programs can communicate. Hence one can add secure communication afterwards to programs without changing them. \name{OpenSSL} for example---a free implementation---allows traffic to be piped into a command; a secure tunnel is created and the traffic is forwarded through it. Or a secure tunnel can be set up between a local and a remote port; this tunnel can then be used by any application.

The \NAME{POP} protocol, for example, is good suited for such tunneling, but \SMTP\ is is not generally. Outgoing \SMTP\ client connections can be tunneled without problem---\masqmail\ already provides a configure option called \texttt{wrapper} to do so. Tunneling incomming connections to a server leads to problems with \SMTP. As data comes encrypted through the tunnel to the receiving host and gets then decrypted and forwarded on local to the port the application listens on. From the \MTA's view, this makes all connections appear to come from localhost, unfortunately. Figure \ref{fig:stunnel} depicts the data flow.

\begin{figure}
	\begin{center}
		\input{input/stunnel.tex}
	\end{center}
	\caption{Data flow using \name{stunnel}}
	\label{fig:stunnel}
\end{figure}

For incoming connections, \NAME{STARTTLS}---defined in \RFC2487---is what \mta{}s implement.

\masqmail\ is already able to encrypt outgoing connections, but encryption of incoming connections, using \NAME{STARTTLS} should be implemented. This only affects the \SMTP\ server module.

%TLS/SSL prevents attackers to listen on the cable
%but it does not prevent man-in-the-middle attacks
%signed certificates help here
%   or PGP encryption


%do not use stunnel wit SMTP:
%because all incoming mail would be from 127.0.0.1 !!
%use STARTTLS instead

%postfix: main.cf
%\begin{verbatim}
%	smtpd_use_tls = yes
%	smtpd_tls_received_header = no (does not log in received headers)
%
%	smtpd_tls_key_file = /etc/postfix/key.pem
%	smtpd_tls_cert_file = /etc/postfix/cert.pem
%	smtpd_tls_CA_file = /etc/postfix/CAcert.pem
%
%	smtp_use_tls = yes  (use TLS for sending)
%	smtp_tls_key_file = /etc/postfix/key.pem
%	smtp_tls_cert_file = /etc/postfix/cert.pem
%	smtp_tls_CA_file = /etc/postfix/CAcert.pem
%\end{verbatim}




\subsection{Various bug fixes}






\section{Test and validation}


\section{Documentation}


\section{Release}

Upstream and Debian
