comparison thesis/tex/4-MasqmailsFuture.tex @ 163:5681a18270b5

new content about architecture; some restructuring
author meillo@marmaro.de
date Thu, 18 Dec 2008 13:39:23 +0100
parents 18b7b517e2dd
children a7fd6d974d3c
comparison
equal deleted inserted replaced
162:df6bfc48859b 163:5681a18270b5
72 72
73 73
74 74
75 \section{Discussion on architecture} 75 \section{Discussion on architecture}
76 76
77 A program's architecture is maybe the most influencing design decision, and has the greatest impact on the program's future capabilities. %fixme: search quote ... check if good 77 A program's architecture is probably the most influencing design decision, and has the greatest impact on the program's future capabilities. %fixme: search quote ... check if good
78 78
79 \masqmail's current artitecture is monolitic like \sendmail's and \exim's. But more than the other two, is it one block of interweaved code. \sendmail\ provides now, with its \name{milter} interface, standardized connection channels to external modules. \exim\ has a highly structured code with many internal interfaces, like the one for supported authentication ``modules''. \masqmail\ has none of them; it is what \sendmail\ was in the beginning: a single large block. 79 \masqmail's current artitecture is monolitic like \sendmail's and \exim's. But more than the other two, is it one block of interweaved code. \sendmail\ provides now, with its \name{milter} interface, standardized connection channels to external modules. \exim\ has a highly structured code with many internal interfaces, like the one for supported authentication ``modules''. \masqmail\ has none of them; it is what \sendmail\ was in the beginning: a single large block.
80 80
81 Figure \ref{fig:masqmail-arch} is an attempt to depict \masqmail's internal structure. 81 Figure \ref{fig:masqmail-arch} is an attempt to depict \masqmail's internal structure.
82 82
86 \end{center} 86 \end{center}
87 \caption{Internal architecture of \masqmail} 87 \caption{Internal architecture of \masqmail}
88 \label{fig:masqmail-arch} 88 \label{fig:masqmail-arch}
89 \end{figure} 89 \end{figure}
90 90
91 \sendmail\ improved its old architecture, for example by adding the milter interface. \exim\ was designed and is carefully maintained with a modular-like code structure in mind. \qmail\ started from scratch with a security-first approach, \postfix\ improved on it, and \name{sendmail X}/\name{MeTA1} tries to adopt the best of \qmail\ and \postfix, to completely replace the old \sendmail\ architecture. \person{Hafiz} \cite{hafiz05}. describes this evolution of \mta\ architecture very well. 91 \sendmail\ improved its old architecture, for example by adding the milter interface. \exim\ was designed and is carefully maintained with a modular-like code structure in mind. \qmail\ started from scratch with a ``security-first'' approach, \postfix\ improved on it, and \name{sendmail X}/\name{MeTA1} tries to adopt the best of \qmail\ and \postfix, to completely replace the old \sendmail\ architecture. \person{Hafiz} \cite{hafiz05}. describes this evolution of \mta\ architecture very well.
92 92
93 Every one of the popular \MTA{}s is more modular, or became more modular, than \masqmail. The logical step is to rewrite \masqmail\ using a modern, modular architecture to get a modern \MTA\ satisfying nowadays needs. But how is the effort of this complete rewrite compared to what is gained afterwards? 93 Every one of the popular \MTA{}s is more modular, or became more modular over time, than \masqmail\ is. Modern requirements like spam protection and future requirements like the use of new mail transport protocols demand modular designs for keeping the software simple. Simplicity is a key property for security.
94 94
95 95 \person{Hafiz} agrees:
96 96 \begin{quote}
97 97 The goal of making software secure can be better achieved by making the design simple and easier to understand and verify. \cite[page64]{hafiz05}
98 A secure architecture is of need. 98 \end{quote}
99 99 He identifies the security of \qmail\ to come from it's \name{compartmentalization}, which goes hand in hand with modularity:
100 100 \begin{quote}
101 101 A perfect example is the contrast between the feature envy early \sendmail\ architecture implemented as one process and the simple, modular architecture of \qmail. The security of \qmail\ comes from its compartmentalized simple processes that perform one task only and are therefor testable for security. \cite[page 64]{hafiz05}
102 102 \end{quote}
103 103
104 Modularity is needed for supporting modern \MTA\ requirements, providing a clear interface to add further functionality without increasing the overall complexity much. Modularity is also an enabler for security. Security comes from good design, as \person{Graff} and \person{van Wyk} explain:
105 \begin{quote}
106 Good design is the sword and shield of the security-conscious developer. Sound design defends your application from subversion or misuse, protecting your network and the information on it from internal and external attacks alike. It also provides a safe foundation for future extensions and maintainance of the software.
107 %
108 %Bad design makes life easier for attackers and harder for the good guys, especially if it contributes to a false sends of security while obscuring pertinent failings.
109 \cite[page 55]{graff03}
110 \end{quote}
111
112 \person{Hafiz} adds: ``The major idea is that security cannot be retrofitted into an architecture.''\cite[page 64]{hafiz05}
113
114 All this leads to one logical step: The rewrite of \masqmail\ using a modern, modular architecture, to get a modern \MTA\ satisfying nowadays needs.
115
116
117
118
119 \subsection{Modules needed}
120
121 This section tries to identify the needed modules for a modern \MTA. They are later the pieces of which the new architecture is built of.
122
123
124 \subsubsection*{The simplest MTA}
125 This view of the problem is taken from \person{Hafiz} \cite[pages 3-5]{hafiz05}.
126
127 The basic job of a \mta\ is to tranport mail from a sender to a recipient. The simplest \MTA\ therefor needs at least a mail receiving facility and a mail sending facility. This basic \MTA---following the definition of an \MTA---is much to abstract. Hence a next step to add some important features is needed, the result is an operational \MTA.
128
129
130
131 \subsubsection*{Mail queue}
132
133 \person{Hafif} adds a mail queue to make it possible to not deliver at once.
134
135 Mail queues are probably used in all \mta{}s, excluding the simple forwarders. A mail queue is a essential requirement for \masqmail, as it is to be used for non-permanent online connections.
136
137
138 \subsubsection*{Incoming channels}
139
140 The second addition \person{Hafiz} made is the split of incoming and outgoing channels into local and remote. The question is, if this is nessesary. It is the way, it was done for a long time, but is this extra complexity needed?
141
142 The common situation is incoming mail on port 25 using \SMTP\ and via the \texttt{sendmail} command. Outgoing mail is either sent using \SMTP, piped into local commands (for example \texttt{uucp}), or delivered locally by appending to a mailbox.
143
144 The \MTA's architecture would be simpler if some of these channels could be merged. The reason is, if various modules do similar jobs, common things might need to be duplicated. On the other side is it better to have more independent modules if each one is simpler then.
145
146 \qmail\ uses \name{qmail-inject} (local message in) and \name{qmail-smtpd} (remote message in), which both handle messages over to \name{qmail-queue} that puts it into the mail queue. \postfix's approach is similar. \name{sendmail X} %fixme: what about meta1 here?
147 used only \NAME{SMTPS}, which is for receiving mail from remote, to communicate with the queue manager \NAME{QMGR}. Mail from local goes over \NAME{SMTPS}.
148
149 The \name{sendmail X} approach seems to be the simpler one, but does heavily rely on \SMTP\ being the main mail transfer protocol. To \qmail\ and \postfix\ new modules may be added to support other ways of message receival, without any change of other parts of the system.
150
151
152 \subsubsection*{Outgoing channels}
153
154 Outgoing channels are similar for \qmail, \postfix, and \name{sendmail X}: All of them have a module to send mail using \SMTP, and one for writing into a local mailbox. Local mail delivery is a job that requires root priveledge to be able to switch to any user in order to write to his mailbox. Modular \MTA{}s do not need \name{setuid root}, but the local delivery process (or its parent) needs to run as root.
155
156 As mail delivery to local users, is \emph{not} included in the basic job of \MTA{}s, why should they care about it? In order to keep the system simple and to have programs do one job well, the local delivery job should be handed over to \NAME{MDA}s. \name{Mail delivery agents} are the tools that are specialized for local delivery. They know about the various mailbox formats and are aware of the problems of concurrent write access and thelike. Hence handling the message and the responsiblity for it over to a mail delivery agent, like \name{procmail} or \name{maildrop}, seems to be the right way to go.
157
158 This means outgoing connections, piping mails into local commands needs to be implemented.
159
160
161 \subsubsection*{Mail queue (again)}
162
163
164
165
166 \subsubsection*{Authentication}
167
168 easiest: restricting by static IP addresses (Access control via hosts.allow/hosts.deny)
169 if dynamic remote hosts need access: some auth is needed
170 - SASL
171 - POP/IMAP: pop-before-smtp, DRAC, WHOSON
172 - TLS (certificates)
173
174 ``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 thyour 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.'' (Dent: Postfix, page 44, ch04)
175
176
177 \subsubsection*{Encryption}
178
179
180 \subsubsection*{Spam prevention}
181
182
183 where to filter what
184
185
186 postfix: after-queue-content-filter (smtp communication)
187 exim: content-scan-feature
188 sendmail: milter (tcp or unix sockets)
189
190 checks while smtp dialog (pre-queue): in MTA implemented (need to be fast)
191 checks when mail is accepted and queued: external (amavis, spamassassin)
192
193
194 AMaViS (amavisd-new): email filter framework to integrate spam and virus scanner
195 internet -->25 MTA -->10024 amavis -->10025 MTA --> reciptient
196 | |
197 +----------------------------+
198 mail scanner:
199 incoming queue --> mail scanner --> outgoing queue
200
201 mimedefang: uses milter interface with sendmail
202
203
204 \subsubsection*{Virus checking}
205
206 The same for malicious content (\name{malware}) like viruses, worms, trojan horses. They are related to spam, but affect the \MTA less, as they are in the mail body.
207
208 message body <-> envelope, header
209
210
211 anti-virus: clamav
212
213
214
215
216
217 \subsubsection*{Archiving}
218
219
220
221
222
223 \section{A new architecture}
104 224
105 225
106 (ssl) 226 (ssl)
107 -> msg-in (local or remote protocol handlers) 227 -> msg-in (local or remote protocol handlers)
108 -> spam-filter (and more) 228 -> spam-filter (and more)
109 -> queue 229 -> queue
110 -> msg-out (local-delivery by MDA, or remote-protocol-handlers) 230 -> msg-out (local-delivery by MDA, or remote-protocol-handlers)
111 (ssl) 231 (ssl)
112 232
113 A design from scratch? 233
114 234
115 << what would be needed (effort) >>
116
117 << would one create it at all? >>
118
119 << should it be done? >>
120 235
121 236
122 http://fanf.livejournal.com/50917.html %how not to design an mta - the sendmail command 237 http://fanf.livejournal.com/50917.html %how not to design an mta - the sendmail command
123 http://fanf.livejournal.com/51349.html %how not to design an mta - partitioning for security 238 http://fanf.livejournal.com/51349.html %how not to design an mta - partitioning for security
124 http://fanf.livejournal.com/61132.html %how not to design an mta - local delivery 239 http://fanf.livejournal.com/61132.html %how not to design an mta - local delivery
128 http://fanf.livejournal.com/67297.html %how not to design an mta - more log-structured MTA queues 243 http://fanf.livejournal.com/67297.html %how not to design an mta - more log-structured MTA queues
129 http://fanf.livejournal.com/70432.html %how not to design an mta - address verification 244 http://fanf.livejournal.com/70432.html %how not to design an mta - address verification
130 http://fanf.livejournal.com/72258.html %how not to design an mta - content scanning 245 http://fanf.livejournal.com/72258.html %how not to design an mta - content scanning
131 246
132 247
133 \subsubsection*{local mail delivery} 248
134 But for example delivery of mail to local users is \emph{not} what \mta{}s should care about, although most \MTA\ are able to deliver mail, and many do. (\name{mail delivery agents}, like \name{procmail} and \name{maildrop}, are the right programs for this job.) 249
135 250
136 251
137 252
138 253
139 254
140 \subsection{Access and Auth} 255
141 256
142 easiest: restricting by static IP addresses (Access control via hosts.allow/hosts.deny) 257
143 if dynamic remote hosts need access: some auth is needed 258
144 - SASL
145 - POP/IMAP: pop-before-smtp, DRAC, WHOSON
146 - TLS (certificates)
147
148 ``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 thyour 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.'' (Dent: Postfix, page 44, ch04)
149
150
151
152 postfix: after-queue-content-filter (smtp communication)
153 exim: content-scan-feature
154 sendmail: milter (tcp or unix sockets)
155
156 checks while smtp dialog (pre-queue): in MTA implemented (need to be fast)
157 checks when mail is accepted and queued: external (amavis, spamassassin)
158
159 anti-virus: clamav
160
161 AMaViS (amavisd-new): email filter framework to integrate spam and virus scanner
162 internet -->25 MTA -->10024 amavis -->10025 MTA --> reciptient
163 | |
164 +----------------------------+
165 mail scanner:
166 incoming queue --> mail scanner --> outgoing queue
167
168 mimedefang: uses milter interface with sendmail
169
170
171
172
173
174
175
176 \subsection{spam and malicious content}
177
178 The same for malicious content (\name{malware}) like viruses, worms, trojan horses. They are related to spam, but affect the \MTA less, as they are in the mail body.
179
180 message body <-> envelope, header
181
182 where to filter what
183 259
184 260
185 261
186 262
187 263
197 273
198 \subsubsection*{\masqmail\ in five years} 274 \subsubsection*{\masqmail\ in five years}
199 275
200 Now how could \masqmail\ be like in, say, five years? 276 Now how could \masqmail\ be like in, say, five years?
201 277
278 ---
279
280 A design from scratch?
281 << what would be needed (effort) >>
282 But how is the effort of this complete rewrite compared to what is gained afterwards?
283
284 << would one create it at all? >>
285
286 ---
287
202 << plans to get masqmail more popular again (if that is the goal) >> 288 << plans to get masqmail more popular again (if that is the goal) >>
203 289
204 << More users >> 290 << More users >>
205 291
206 292
207 293
208 294
295
296
297
209 \section{Work to do} 298 \section{Work to do}
210 299
211 << short term goals --- long term goals >> 300 << short term goals --- long term goals >>
212 301
302 do it like sendmail: first do the most needed stuff on the old design to make it still usable. Then design a new version from scratch, for the future.
303
213 << which parts to take out and do within the thesis >> 304 << which parts to take out and do within the thesis >>
214 305