autoupdate
[postfix-master.git] / postfix-master / linux-journal-20040501.html
blob73b2e7853c5d304ac5c0ed581c3783b7bcf35652
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>HEC Montréal: Deployment of a Large-Scale Mail Installation</title>
3 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
4 <meta name="AUTHOR" content="Linux Journal - The Premier Magazine of the Linux Community">
5 <meta name="COPYRIGHT" content="Copyright (c) 2002 by Linux Journal - The Premier Magazine of the Linux Community">
6 <meta name="KEYWORDS" content="linux, linux journal, magazine">
7 <meta name="DESCRIPTION" content="The Monthly Magazine of the Linux Community">
8 <meta name="GOOGLEBOT" content="NOARCHIVE">
9 <meta name="GENERATOR" content="PHP-Nuke 5.0 - http://phpnuke.org">
12 <link rel="StyleSheet" href="linux-journal-20040501_files/style.css" type="text/css">
15 <script type="text/javascript">
16 <!--
17 function showimage() {
18 if (!document.images)
19 return
20 document.images.avatar.src=
21 'http://www.linuxjournal.com/images/forum/avatar/' + document.Register.user_avatar.options[document.Register.user_avatar.selectedIndex].value
23 //-->
24 </script>
26 <script type="text/javascript">
27 <!--
28 function openwindow(){
29 window.open ("","Help","toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=no,copyhistory=no,width=600,height=400");
31 //-->
32 </script></head>
34 <body bgcolor="#505050" text="#000000" link="#363636" vlink="#363636" alink="#d5ae83">
35 <table><tbody><tr><td>
36 <script type="text/javascript">
37 <!--
38 if (!document.phpAds_used) document.phpAds_used = ',';
39 phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
40 document.write ("<center><" + "script language='JavaScript' type='text/javascript' src='");
41 document.write ("http://www.ssc.com/adserver/adjs.php?n=" + phpAds_random);
42 document.write ("&amp;what=zone:1");
43 document.write ("&amp;exclude=" + document.phpAds_used);
44 if (document.referer)
45 document.write ("&amp;referer=" + escape(document.referer));
46 document.write ("'></center><" + "/script>");
47 //-->
48 <center><a href="http://www.ssc.com/adserver/adclick.php?n=afcb8415"
49 target="_blank"><img src="http://www.ssc.com/adserver/adview.php?what=zone:1&amp;n=afcb8415"
50 border="0" alt=""></a> </center> <br>
51 <table cellpadding="0" cellspacing="0" width="100%" border="0" align="center" bgcolor="#ffffff">
52 <tbody><tr>
53 <td bgcolor="#ffffff">
54 <img height="16" alt="" hspace="0" src="linux-journal-20040501_files/corner-top-left.png" width="17" align="left">
55 <a href="http://www.linuxjournal.com/index.php"><img src="linux-journal-20040501_files/logo_blue.png" width="147" height="69" align="left" alt="Welcome to Linux Journal - The Premier Magazine of the Linux Community" border="0"></a></td>
56 <td bgcolor="#999999"><img src="linux-journal-20040501_files/pixel.gif" width="1" height="1" alt="" border="0" hspace="0"></td>
57 <td bgcolor="#cfcfbb" align="center">
58 <center><form action="search.php" method="post"><font class="content" color="#000000"><b>Search </b>
59 <input type="text" name="query" size="14"></font></form></center></td>
60 <td bgcolor="#cfcfbb" align="center">
61 <center><form action="search.php" method="get"><font class="content"><b>Topics </b>
62 <select name="topic" onchange="submit()"><option value="">All Topics</option><option value="11">Book Reviews</option><option value="6">Development Tools</option><option value="36">Embedded</option><option value="17">Games</option><option value="34">German</option><option value="30">Hardware</option><option value="12">Linux Community</option><option value="9">Linux in Business</option><option value="7">Linux in Education</option><option value="29">Linux Journal</option><option value="4">Linux Kernel</option><option value="21">Linux Market</option><option value="1">Miscellaneous</option><option value="13">Multimedia</option><option value="5">Networking</option><option value="31">Other Software</option><option value="32">Product of the Day</option><option value="19">Product Reviews</option><option value="8">Security</option><option value="33">Spanish</option><option value="35">Tutorial</option><option value="28">Web Development</option></select></font></form></center></td>
63 <td bgcolor="#cfcfbb" valign="top"><img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-top-right.gif" width="17" align="right"></td>
64 </tr></tbody></table>
65 <table cellpadding="0" cellspacing="0" width="100%" border="0" align="center" bgcolor="#fefefe">
66 <tbody><tr>
67 <td bgcolor="#000000" colspan="4"><img src="linux-journal-20040501_files/pixel.gif" width="1" height="1" alt="" border="0" hspace="0"></td>
68 </tr>
69 <tr valign="middle" bgcolor="#dedebb">
70 <td width="15%" nowrap=""><font class="content" color="#363636"><b>
71 <!-- BEGIN user customization -->  <b><font color="#363636"><a href="http://www.linuxjournal.com/user.php">Create</a></font> an account</b>
72 <!-- END user customization --></b></font></td>
73 <td align="center" height="20" width="70%"><font class="content"><b>
74 <a href="http://www.linuxjournal.com/">Home</a>
75  · 
76 <a href="http://www.linuxjournal.com/subscribe.php">Subscribe</a>
77  · 
78 <a href="http://www.linuxjournal.com/topics.php">Topics</a>
79  · 
80 <a href="http://www.linuxjournal.com/advertising.php">Advertise</a>
81  · 
82 <a href="http://pr.linuxjournal.com/" target="_blank">Vendor Press</a>
83 </b></font>
85 </td>
86 <td> </td>
87 </tr>
88 <tr>
89 <td bgcolor="#000000" colspan="4"><img src="linux-journal-20040501_files/pixel.gif" width="1" height="1" alt="" border="0" hspace="0"></td>
90 </tr>
91 </tbody></table>
92 <!-- FIN DEL TITULO -->
93 <table width="100%" cellpadding="0" cellspacing="0" border="0" bgcolor="#ffffff" align="center"><tbody><tr valign="top">
94 <td bgcolor="#ffffff"><img src="linux-journal-20040501_files/pixel.gif" width="1" height="20" border="0" alt=""></td></tr></tbody></table>
95 <table width="100%" cellpadding="0" cellspacing="0" border="0" bgcolor="#ffffff" align="center"><tbody><tr valign="top">
96 <td bgcolor="#ffffff"><img src="linux-journal-20040501_files/pixel.gif" width="10" height="1" border="0" alt=""></td>
97 <td bgcolor="#ffffff" width="150" valign="top">
98 <table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="150"><tbody><tr><td>
99 <table border="0" cellpadding="3" cellspacing="0" bgcolor="#dedebb" width="100%"><tbody><tr><td align="left">
100 <font class="content" color="#363636"><b>Linux Journal</b></font>
101 </td></tr></tbody></table></td></tr></tbody></table>
102 <table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="150">
103 <tbody><tr valign="top"><td bgcolor="#ffffff">
104 <font class="content"><strong><big>·</big></strong>
105 <a href="http://www.linuxjournal.com/index.php">Home</a><br>
107 <strong><big>·</big></strong>
108 <a href="http://www.linuxjournal.com/modules.php?op=modload&amp;name=NS-subscribe&amp;file=suboptions#new">
109 Subscribe</a> /
110 <a href="http://www.linuxjournal.com/modules.php?op=modload&amp;name=NS-subscribe&amp;file=suboptions#renew">
111 Renew</a><br>
112 <strong><big>·</big></strong>
113 <a href="http://www.linuxjournal.com/modules.php?op=modload&amp;name=NS-subscribe&amp;file=suboptions#address">
114 Change Address</a><br>
115 <strong><big>·</big></strong>
116 <a href="http://www.linuxjournal.com/subscribe.php">Subscriber Services</a><br></font><p>
117 <font class="content"><strong><big>·</big></strong>
118 <a href="http://www.linuxjournal.com/PdfSubQues.php">Download a Sample</a><br>
119 <a href="http://www.linuxjournal.com/PdfSubQues.php">Issue</a>
120 </font></p><p>
121 <font class="content"><strong><big>·</big></strong>
122 <a href="http://www.linuxjournal.com/advertising.php">Advertise</a><br>
123 <strong><big>·</big></strong>
124 <a href="http://www.linuxjournal.com/modules.php?op=modload&amp;name=NS-author&amp;file=wanted">
125 Write for Us</a><br>
126 <strong><big>·</big></strong>
127 <a href="http://www.linuxjournal.com/press.php">Press Releases</a><br>
128 <strong><big>·</big></strong>
129 <a href="http://www.linuxjournal.com/contact.php">Contact Us</a><br>
130 </font></p><p>
131 <font class="content"><strong><big>·</big></strong>
132 <a href="http://www.geekcruises.com/home/ll4_home.html">
133 Linux Lunacy Cruise</a><br>
134 <strong><big>·</big></strong>
135 <a href="http://www.linuxjournal.com/ljpress">LJ Press Books</a><br>
136 <strong><big>·</big></strong>
137 <a href="http://www.linuxjournal.com/modules.php?op=modload&amp;name=NS-FAQ&amp;file=index">
138 FAQ</a><br></font>
139 </p></td></tr></tbody></table>
140 <br>
143 <table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="150"><tbody><tr><td>
144 <table border="0" cellpadding="3" cellspacing="0" bgcolor="#dedebb" width="100%"><tbody><tr><td align="left">
145 <font class="content" color="#363636"><b>Subscribe (USA)</b></font>
146 </td></tr></tbody></table></td></tr></tbody></table>
147 <table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="150">
148 <tbody><tr valign="top"><td bgcolor="#ffffff">
149 <form method="post" action="https://www.ssc.com/cgi-bin/lj/USA.py">
151 <table cellspacing="0" cellpadding="0">
152 <tbody><tr>
153 <td align="right">
154 <font face="arial, helvetica, sans-serif" size="-2">Name </font>
155 </td>
156 <td align="left">
157 <font face="arial, helvetica, sans-serif" size="-2">
158 <input type="text" size="10" name="name" maxlength="32">
159 </font>
160 </td>
161 </tr>
162 <tr>
163 <td align="right">
164 <font face="arial, helvetica, sans-serif" size="-2">Addr </font>
165 </td>
166 <td align="left">
167 <font face="arial, helvetica, sans-serif" size="-2">
168 <input type="text" size="10" name="addr1" maxlength="32">
169 </font>
170 </td>
171 </tr>
172 <tr>
173 <td align="right">
174 <font face="arial, helvetica, sans-serif" size="-2">Addr </font>
175 </td>
176 <td align="left">
177 <font face="arial, helvetica, sans-serif" size="-2">
178 <input type="text" size="10" name="addr2" maxlength="32">
179 </font>
180 </td>
181 </tr>
182 <tr>
183 <td align="right">
184 <font face="arial, helvetica, sans-serif" size="-2">City </font>
185 </td>
186 <td align="left">
187 <font face="arial, helvetica, sans-serif" size="-2">
188 <input type="text" size="10" name="city" maxlength="17">
189 </font>
190 </td>
191 </tr>
192 <tr>
193 <td align="right">
194 <font face="arial, helvetica, sans-serif" size="-2">State </font>
195 </td>
196 <td align="left">
197 <font face="arial, helvetica, sans-serif" size="-2">
198 <input type="text" size="3" name="state" maxlength="2">
199 </font></td>
200 </tr><tr>
201 </tr>
202 <tr><td align="right">
203 <font face="arial, helvetica, sans-serif" size="-2">Zip </font>
204 </td>
205 <td align="left">
206 <font face="arial, helvetica, sans-serif" size="-2">
207 <input type="text" size="6" name="zip" maxlength="10">
208 </font>
209 </td>
210 </tr>
211 <tr>
212 <td align="right">
213 <font face="arial, helvetica, sans-serif" size="-2">Email </font>
214 </td>
215 <td align="left">
216 <font face="arial, helvetica, sans-serif" size="-2">
217 <input type="text" size="10" name="email" maxlength="60">
218 </font></td>
219 </tr>
220 </tbody></table>
221 <table>
222 <tbody><tr>
223 <td valign="middle" width="80%" nowrap="1">
224 <font face="arial, helvetica, sans-serif" size="-2">
225 </font><div><font face="arial, helvetica, sans-serif" size="-2"><input type="radio" name="term" value="1yr" checked="checked">
226 12 issues for $25
227 </font></div>
228 <font face="arial, helvetica, sans-serif" size="-2"> </font><div><font face="arial, helvetica, sans-serif" size="-2"><input type="radio" name="term" value="2yr">
229 24 issues for $45
230 </font></div>
231 <font face="arial, helvetica, sans-serif" size="-2"> </font></td>
232 </tr>
233 <tr>
234 <td align="center">
235 <input type="submit" value="Subscribe">
236 <p align="center">
237 <font face="arial, helvetica, sans-serif" size="-2">
238 Click below for:<br>
239 <a href="https://www.ssc.com/lj/subs/NewCanada.html">Canada</a> *
240 <a href="https://www.ssc.com/lj/subs/NewMexico.html">Mexico</a> *
241 <a href="https://www.ssc.com/lj/subs/NewOther.html">Other</a>
242 </font>
243 </p></td>
244 </tr>
245 </tbody></table>
246 </form>
247 </td></tr></tbody></table>
248 <br>
251 <table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="150"><tbody><tr><td>
252 <table border="0" cellpadding="3" cellspacing="0" bgcolor="#dedebb" width="100%"><tbody><tr><td align="left">
253 <font class="content" color="#363636"><b>Store</b></font>
254 </td></tr></tbody></table></td></tr></tbody></table>
255 <table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="150">
256 <tbody><tr valign="top"><td bgcolor="#ffffff">
257 <strong><big>·</big></strong> <a href="http://store.linuxjournal.com/Merchant2/merchant.mv?Screen=CTGY&amp;Store_Code=LJS&amp;Category_Code=LA" target="_blank">Order Back Issues</a><br>
260 <strong><big>·</big></strong> <a href="http://store.linuxjournal.com/Merchant2/merchant.mv?Screen=CTGY&amp;Store_Code=LJS&amp;Category_Code=T" target="_blank">T-shirts</a><br>
264 <strong><big>·</big></strong> <a href="http://store.linuxjournal.com/Merchant2/merchant.mv?Screen=CTGY&amp;Store_Code=LJS&amp;Category_Code=H" target="_blank">Hats</a><br>
268 <strong><big>·</big></strong> <a href="http://store.linuxjournal.com/Merchant2/merchant.mv?Screen=CTGY&amp;Store_Code=LJS&amp;Category_Code=B" target="_blank">Books</a><br>
272 <strong><big>·</big></strong> <a href="http://store.linuxjournal.com/" target="_blank">Fun Stuff</a><br>
276 <strong><big>·</big></strong> <a href="http://store.linuxjournal.com/Merchant2/merchant.mv?Screen=CTGY&amp;Store_Code=LJS&amp;Category_Code=RC" target="_blank">Reference Cards</a><br>
277 </td></tr></tbody></table>
278 <br>
281 <table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="150"><tbody><tr><td>
282 <table border="0" cellpadding="3" cellspacing="0" bgcolor="#dedebb" width="100%"><tbody><tr><td align="left">
283 <font class="content" color="#363636"><b>Other SSC Sites</b></font>
284 </td></tr></tbody></table></td></tr></tbody></table>
285 <table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="150">
286 <tbody><tr valign="top"><td bgcolor="#ffffff">
287 <strong><big>·</big></strong> <a href="http://www.linuxgazette.com/" target="_blank">Linux Gazette</a><br>
289 <strong><big>·</big></strong> <a href="http://pr.linuxjournal.com/" target="_blank">pr.linuxjournal.com</a><br>
291 <strong><big>·</big></strong> <a href="http://www.a42.com/" target="_blank">A42.com</a><br>
293 <strong><big>·</big></strong> <a href="http://www.ssc.com/" target="_blank">SSC Publications</a><br>
294 </td></tr></tbody></table>
295 <br>
298 <table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="150"><tbody><tr><td>
299 <table border="0" cellpadding="3" cellspacing="0" bgcolor="#dedebb" width="100%"><tbody><tr><td align="left">
300 <font class="content" color="#363636"><b>Linux Resources</b></font>
301 </td></tr></tbody></table></td></tr></tbody></table>
302 <table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="150">
303 <tbody><tr valign="top"><td bgcolor="#ffffff">
304 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/magazine.php">Magazine Archive</a><br>
305 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/webindex.php">Web Article Index</a><br>
306 <strong><big>·</big></strong> <a href="ftp://ftp.ssc.com/pub/lj/listings" target="_blank">Downloads</a><br>
307 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/resources.php">Linux Resources</a><br>
308 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/helpdesk.php">Help Desk</a><br>
309 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/links.php">Web Links</a><br>
310 <strong><big>·</big></strong> <a href="http://www.ssc.com:8080/glue/" target="_blank">User Groups (GLUE)</a><br>
311 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/events.php">Special Events</a><br>
312 <strong><big>·</big></strong> <a href="http://www.linuxjournal.com/adindex.php">Advertiser Index</a><br>
313 </td></tr></tbody></table>
314 <br>
317 </td><td><img src="linux-journal-20040501_files/pixel.gif" width="15" height="1" border="0" alt=""></td><td width="100%">
318 <!-- END HEADER -->
319 <table width="100%" border="0"><tbody><tr><td valign="top">
320 <table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="100%"><tbody><tr><td>
321 <table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="100%"><tbody><tr><td>
322 <table border="0" cellpadding="3" cellspacing="0" bgcolor="#cfcfbb" width="100%"><tbody><tr><td align="left">
323 <font class="option" color="#363636"><b><a href="http://www.linuxjournal.com/categories.php?op=newindex&amp;catid=221">Issue 121</a>: <font color="navy">HEC Montréal: Deployment of a Large-Scale Mail Installation</font></b></font><br>
324 <font class="content">Posted on Saturday, May 01, 2004 by <a href="mailto:ludovic@inverse.ca">Ludovic Marcotte</a></font></td><td align="right"><a href="http://www.linuxjournal.com/print.php?sid=7323"><img src="linux-journal-20040501_files/print2.png" border="0" alt="Printer Friendly Page" width="15" height="11"></a>  <a href="http://www.linuxjournal.com/friend.php?op=FriendSend&amp;sid=7323"><img src="linux-journal-20040501_files/friend.png" border="0" alt="Send this Article to a Friend" width="15" height="11"></a>
325 </td></tr></tbody></table></td></tr></tbody></table><br><a href="http://www.linuxjournal.com/search.php?query=&amp;topic=5"><img src="linux-journal-20040501_files/networking2.png" border="0" alt="Networking" align="right" hspace="10" vspace="10"></a>
326 <font class="content" color="#000000"><i>Forced to upgrade by a flood of junk mail, this university went to a heavy-duty system based on Linux.</i><br><br><div class="article" lang="en"><div class="simplesect" lang="en"><div class="titlepage"><div><h2 class="title"><a name="N0x85118d8.0x857a2bc"></a></h2></div></div><p>
327 Over the past few years, e-mail has grown into one of the most important
328 communication mediums.
329 Naturally, e-mail infrastructures
330 must be fast, secure and reliable. Ideally, they also should be able to
331 integrate easily and effectively with anti-unsolicited bulk e-mail
332 (UBE) solutions.
333 </p><p>
334 HEC Montréal is Canada's first management school, founded in 1907.
335 More than 11,000 students and 220 professors use HEC's e-mail system
336 every year, and alumni keep their e-mail accounts after graduation.
337 Unfortunately, the proprietary e-mail system
338 did not evolve and as the load started to increase, the infrastructure
339 could no longer keep up with requirements.
340 </p><p>
341 The previous mail infrastructure at HEC Montréal was based on four IBM
342 AIX servers running Netscape Messaging Server 4.15. Each of those
343 servers offered all services (IMAP, POP3, SMTP and Webmail
344 access) for a subset of users.
345 The system simply did not scale to current mail requirements. According to Eddy Béliveau, Senior Network
346 Analyst at HEC Montréal:
347 </p><div class="blockquote"><blockquote class="blockquote"><p>
348 We found ourselves with mail server software that had not been
349 upgraded in the last two years because the AIX platform was no longer
350 supported by Sun/iPlanet/Netscape, which owned the mail server
351 software. We had a regular increase of our e-mail traffic during the
352 last 12 months due to the presence of UBE and viruses trying to
353 replicate themselves. We got peaks of over 100 concurrent SMTP
354 connections, which was too much for our servers; the typical load
355 average was over 50 on all servers. We could not, on our old 133MHz
356 servers, execute any anti-virus or anti-UBE applications, not even a
357 simple RBL filtering policy. Thus, we had to re-examine the hardware
358 and software architecture of our e-mail system but [could] not find time to
359 install alternatives. We were like a dog running after his tail trying
360 to stabilize the situation.
361 </p></blockquote></div><p>
362 HEC Montréal contacted us at Inverse, Inc., to help them
363 replace the mail infrastructure and deploy a better alternative.
364 </p><div class="mediaobject"><img src="linux-journal-20040501_files/7323f1.png"><div class="caption"><p>
365 Figure 1. HEC Montréal is a tough e-mail problem: 35,500 users
366 and more than 600,000 spam messages a week.
367 </p></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><h2 class="title"><a name="N0x85118d8.0x857a4f8"></a>
368 The Proposed Solution</h2></div></div><p>
369 The proposed solution was driven by the following factors:
370 </p><div class="itemizedlist"><ul type="disc"><li><p>
371 Cost: HEC Montréal could not afford a per-user license
372 fee for 35,500 users.
373 </p></li><li><p>
374 Ease of maintenance: the infrastructure had to be easy to
375 manage. Accounts creation and destruction should be automated,
376 updates should be easy to apply and the infrastructure should let
377 HEC Montréal leverage the expertise they have.
378 </p></li><li><p>
379 Security: the components of the solution should have a proven
380 security track record.
381 </p></li><li><p>
382 Robustness: the components should be mature and should have been
383 used in production environments for months. Furthermore, the
384 development should be active to accelerate bug fixes,
385 feature enhancements and security updates.
386 </p></li><li><p>
387 Scalability:
388 the solution must meet its purpose for many
389 months, because the number of users grows by 2,000&#8211;3,000 every
390 year. Its architecture also should allow adding extra servers to
391 distribute the load or offer more redundancy.
392 </p></li></ul></div><p> When we were first approached, HEC Montréal was leaning
393 toward a Linux-based solution running Novell NetMail 3.1. Having great experience
394 with free alternatives, we decided to compare the solution we had in mind
395 with Novell's offerings. </p><p>
396 That said, we built two identical test environments using Red Hat
397 Linux 9 and installed NetMail 3.1 on one and our proposed solution on
398 the other. Next, we performed a series of stress tests in order to measure
399 the stability and the performance of the two solutions. The tests were
400 performed with two benchmarking utilities, postal and tm. The results
401 showed that while NetMail was the fastest for POP3 operations, it
402 proved to be the slowest in the IMAP and SMTP tests. It also had a lot of
403 stability issues when overloading the server with IMAP requests.
404 </p><p>
405 Combined with our experience, we proposed a solution based
406 almost entirely on open-source components. We started with a
407 standard Red Hat Linux 9 distribution using Silicon
408 Graphics, Inc.'s XFS kernel packages. We included
409 Cyrus IMAP and Cyrus SASL, which included IMAP, LMTP and POP3 dæmons as well as
410 authentication libraries and redirection/vacation scripts support
411 using Sieve. Next,
412 Postfix, AMaViS, SpamAssassin, Vipul's Razor and NAI VirusScan were added
413 to build a complete
414 SMTP server solution with enhanced tools to limit the delivery of UBE
415 and viruses.
416 Apache, PHP4, IMAP Proxy and SquirrelMail provided a complete Webmail solution.
417 OpenLDAP was added to store all information regarding users'
418 accounts (e-mail address and aliases, SquirrelMail preferences and so
419 on),
420 as well as other specific attributes of HEC Montréal.
421 Finally, we installed Linux HA Heartbeat, software used to monitor the health of
422 some nodes on the network.
423 </p><p>
424 The new infrastructure is running on 11 IBM eServer xSeries x305
425 and x335 servers. The two x335s are connected to an IBM FAST
426 700 Storage Array Network (SAN) using Fibre Channel, where the
427 mailstore resides. The XFS filesystem is used for the mailstore in
428 order to maximize file access operations. Figure 2 depicts the
429 architecture.
430 </p><div class="mediaobject"><img src="linux-journal-20040501_files/7323f2.png"><div class="caption"><p>
431 Figure 2. Architecture of the Proposed Infrastructure
432 </p></div></div><p>
433 Four STMP servers running Postfix are used: two of them are mail exchangers
434 (MXes) for the HEC Montréal domains and the other two serve internal
435 mailing needs. These servers also use AMaViS, SpamAssassin,
436 Vipul's Razor and Network Associates' VirusScan to limit the
437 delivery of UBE and viruses. Furthermore, two Cyrus IMAP
438 servers are connected using serial and Ethernet cables for
439 high availability. Only one Cyrus IMAP server is active at any moment;
440 it serves all POP3 and IMAP connections, stores mails on the SAN
441 (received using the LMTP protocol from the four Postfix servers) and
442 processes Sieve scripts.
443 </p><p>
444 Two Webmail
445 servers run Apache, PHP4, SquirrelMail and IMAP Proxy. The latter
446 is used to cache IMAP connections between SquirrelMail and the Cyrus
447 IMAP server in order to minimize the load (authentication and process
448 forks) on the mailstore. Finally, one other server is used only for
449 testing purposes. That is, any modifications to the infrastructure
450 must go through this server, which is configured to run every
451 component, before being applied to the environment in production.
452 </p><p>
453 With regard to the UBE filtering, we check mail at many levels
454 to ensure we block as many as we can.
455 Our checks include
456 carefully chosen real-time blackhole lists (RBLs);
457 header and MIME header checks using up-to-date maps from
458 SecuritySage, Inc.; and
459 content filtering initiated from AMaViS using SpamAssassin, Vipul's
460 Razor for UBEs analysis and VirusScan for viruses.
461 </p><p>
462 This solution has proven to be greatly effective and produces
463 few false positives. The system also was built with load balancing and
464 failover in mind. The SMTP and the Webmail servers are used in a
465 round-robin fashion, efficiently distributing the load among all of them.
466 </p><p>
467 The main Cyrus server has an identical backup server in case of
468 failure. The latter is connected to the main Cyrus server and uses
469 Heartbeat to monitor the availability of the server. In case of a
470 failure (hardware problem, operating system crash and so on), the
471 secondary Cyrus server takes over all services. Heartbeat
472 automatically mounts the mailstore (located on the SAN), activates the
473 network alias and starts all Cyrus services. This offers a warm
474 switch-over that minimizes the outage time; sometimes it's not even
475 noticeable.
476 </p><p>
477 Finally, the LDAP system offers a master node together with a slave
478 that replicates the former using slurpd. All services are
479 configured to failover automatically to the slave in case of a failure
480 on the master node. Some services also are configured to use the
481 slave as the master node in order to distribute the LDAP load among
482 both servers; they failover to the master node.
483 </p></div><div class="simplesect" lang="en"><div class="titlepage"><div><h2 class="title"><a name="N0x85118d8.0x857a9f4"></a>
484 Migration</h2></div></div><p>
485 After putting the 11 servers for the new infrastructure in place,
486 one of the remaining challenges was to migrate all users from the old
487 infrastructure to the new one. About 35,500
488 users, 82,500 mailboxes
489 and hundreds of thousands of messages (35GB of mail) had
490 to be migrated. Furthermore, redirection scripts and vacation messages
491 also had to be converted, and information such as preferences
492 from the previous Webmail system had to be kept intact.
493 In order to do this, we created a set of Perl scripts to take care of
494 the entire migration in a way that would appear
495 seamless for the users:
496 </p><div class="itemizedlist"><ul type="disc"><li><p>
497 LDAP Init: populates the new LDAP server (based
498 on OpenLDAP) using the values from the previous LDAP server (based on
499 Netscape iPlanet). Included attributes are e-mail addresses and
500 aliases, special folders and signature preferences for Webmail.
501 </p></li><li><p>
502 Create Users: creates all user accounts
503 about to be migrated.
504 </p></li><li><p>
505 Load Sieve: creates Sieve scripts and uploads
506 them to the mailstore by reading attributes from the previous LDAP
507 server. Sieve scripts are used for automatic redirections and vacation
508 messages.
509 </p></li><li><p>
510 Copy Mailboxes: copies all mailboxes for the
511 users being migrated. All message flags are kept intact. The IMAP
512 protocol is used a lot in this script. This script also
513 updates the mailHost attribute on both LDAP servers so the mails
514 are routed to the correct destination mailboxes.
515 </p></li><li><p>
516 Update Mailboxes: run the morning after the migration to
517 move the remaining (if any) messages in the users'
518 mailboxes. Mail could have been stuck in the queue of the SMTP
519 servers, before the users' mailHost attributes were changed.
520 </p></li></ul></div><p>
521 To minimize service interruptions for the users, we ran the
522 scripts in the order listed once classes
523 were finished at the end of the day. Few messages were
524 rejected during the import process; those that were simply
525 were retried by the source SMTP servers. In total, four nights were required
526 to migrate all the information. Running the scripts took from four to
527 seven hours, depending on the number of users located on each source
528 server and the execution speed, which was mainly limited by the
529 performance of the old AIX servers.
530 </p></div><div class="simplesect" lang="en"><div class="titlepage"><div><h2 class="title"><a name="N0x85118d8.0x857acb4"></a>
531 Key Statistics</h2></div></div><p>
532 After the migration, we extensively monitored all services in order to
533 discover any problems. As expected, we didn't have many. We
534 mainly tuned the minimum preforks of Cyrus processes as well as their
535 respective maximum children. We also tuned the SMTP servers for the
536 default process limits and preforks for AMaViS. We also used
537 temporary LDAP queries during the migration, so we had to replace them
538 with optimized ones once the migration finished.
539 </p><p>
540 During a typical day, HEC Montréal receives over 125,000 e-mails, and
541 60% to 80% of the traffic is composed of UBEs. The internal SMTP
542 servers also manage thousands of messages sent by users, distribution
543 lists or other systems. About 300,000 POP3 connections (from 5,500
544 different users) and 60,000 IMAP connections (from 5,000 different
545 users) are initiated every day on the main Cyrus server. Peaks of 225
546 concurrent IMAP connections and 50 concurrent POP3 connections frequently are
547 encountered.
548 </p><p>
549 As mentioned earlier, the anti-UBE policies in place have proven to be
550 effective. During the first week after the migration, the two mail
551 exchangers blocked more than 600,000 unsolicited bulk e-mails. The week
552 after, spammers were less aggressive and the systems blocked over a
553 quarter of a million messages. The most effective policy is the RBL
554 checks, followed by the content filtering checks (using SpamAssassin and
555 Vipul's Razor) and, finally, the header and MIME header checks.
556 </p><p>
557 To extract those statistics, we installed Spamity, which parses mail
558 logs from the four Postfix servers and updates a PostgreSQL database
559 running on the test server. Thereafter, users or administrators can
560 examine the mail that was blocked by anti-UBE policies by using a
561 simple Web browser. Users also can perform searches for specific e-mail
562 addresses or domain names and filter the results by anti-UBE policies.
563 </p></div><div class="simplesect" lang="en"><div class="titlepage"><div><h2 class="title"><a name="N0x85118d8.0x857adbc"></a>
564 Conclusion</h2></div></div><p>
565 As you have seen in this article, migrating from a proprietary
566 solution to an open-source solution was a challenge. According to
567 Emmanuel Vigne, Information Systems Director at HEC
568 Montréal:
569 </p><div class="blockquote"><blockquote class="blockquote"><p>
570 The key business benefits are huge, as we nearly eliminated UBE and greatly
571 enhanced the architecture of our mail infrastructure. We moved from an
572 architecture where all services were offered by four servers to an
573 architecture where the services are offered by many servers. That
574 allows us to minimize any potential outage and scale as the number of
575 users grow. In case of a failure, only one specific service is
576 affected, contrary to the situation before where thousands of users
577 could no longer use the e-mail service in case of a single server
578 failure.
579 </p></blockquote></div><p>
580 Putting this new infrastructure in place allowed us to
581 contribute to the Open Source community by developing a set of
582 patches to correct bugs and/or add features to most components we
583 installed.
584 </p><p>
585 As with any other system, this one will evolve
586 over time. Interesting anti-UBE technologies are emerging,
587 such as Sender Policy Framework (SPF) [see page 50] and
588 Spamhaus Exploits Block List (XBL), and a new stable
589 version of Cyrus is available with NNTP and mailbox
590 annotations support. In addition, Postfix 2.1 is coming along
591 nicely and should offer excellent connection/rate
592 control with its new anvil server.
593 </p><p>
594 Finally, as this article was being written, a mirroring solution was
595 being deployed for the SAN. This should offer storage redundancy and
596 eliminate the single potential point of failure in the current infrastructure.
597 </p><p><span class="bold"><b>Resources for this article:</b></span> <a href="http://www.linuxjournal.com/article/7456" target="_blank">www.linuxjournal.com/article/7456</a>.
598 </p></div></div>
600 Ludovic Marcotte (<a href="mailto:ludovic@inverse.ca">ludovic@inverse.ca</a>) holds a Bachelor's degree in
601 Computer Science from the University of Montréal. He currently is a
602 software architect for Inverse, Inc., an IT consulting company located
603 in downtown Montréal.
605 </p><br><br><center><a href="https://www.ssc.com/lj/subs/NewUSA.html"><img src="linux-journal-20040501_files/ljsubsbutton.png" height="88" width="90"></a></center></font>
606 </td></tr></tbody></table><br>
609 </td></tr></tbody></table>
612 <!-- COMMENTS NAVIGATION BAR START -->
615 <a name="comments"></a>
616 <table width="99%" border="0" cellspacing="0" cellpadding="0">
617 <tbody><tr><td bgcolor="#cfcfbb" align="center"><font class="content" color="#000000">"HEC Montréal: Deployment of a Large-Scale Mail Installation" | <a href="http://www.linuxjournal.com/user.php"><font color="#000000">Login/Create an Account</font></a> | <b>0</b> comments</font></td></tr>
618 <tr><td bgcolor="#efefef" align="center" width="100%">
619 <table border="0"><tbody><tr><td><font class="content">
620 <form method="get" action="article.php">
621 <font color="#000000">Threshold</font> <select name="thold"><option value="-1">-1</option><option value="0" selected="">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></select> <select name="mode"><option value="nocomments">No Comments</option><option value="nested">Nested</option><option value="flat">Flat</option><option value="thread" selected="">Thread</option></select> <select name="order"><option value="0" selected="">Oldest First</option><option value="1">Newest First</option><option value="2">Highest Scores First</option></select>
622 <input type="hidden" name="sid" value="7323">
623 <input type="submit" value="Refresh"></form>
624 </font></td><td bgcolor="#efefef"><font class="content"><form action="comments.php" method="post"><input type="hidden" name="pid" value=""><input type="hidden" name="sid" value="7323"><input type="hidden" name="op" value="Reply">  <input type="submit" value="Post Comment"></form></font></td></tr></tbody></table>
625 </td></tr><tr><td bgcolor="#cfcfbb" align="center"><font class="tiny">The comments are owned by the poster. We aren't responsible for their content.</font></td></tr>
626 </tbody></table>
628 <!-- COMMENTS NAVIGATION BAR END -->
630 <!-- Finished article caching (or not caching). --></td><td bgcolor="#ffffff"><img src="linux-journal-20040501_files/pixel.gif" width="10" height="1" border="0" alt="">
631 </td></tr></tbody></table>
632 <table width="100%" cellpadding="0" cellspacing="0" border="0" bgcolor="#ffffff" align="center"><tbody><tr valign="top">
633 <td align="center" height="17">
634 <img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-bottom-left.png" width="17" align="left">
635 <img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-bottom-right.png" width="17" align="right">
636 </td></tr></tbody></table>
637 <br><table width="100%" cellpadding="0" cellspacing="0" border="0" bgcolor="#ffffff" align="center"><tbody><tr valign="top">
638 <td><img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-top-left.png" width="17" align="left"></td>
639 <td width="100%"> </td>
640 <td><img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-top-right.gif" width="17" align="right"></td>
641 </tr><tr align="center">
642 <td width="100%" colspan="3">
643 <!-- BEGIN FOOTER -->
644 <center><font class="tiny">
646 <a href="http://www.ssc.com/" target="blank"><img src="linux-journal-20040501_files/ssc_logo.png" border="0"></a> <br>
648 © 1994-2004 Specialized Systems Consultants, Inc. (SSC) publishers of <i>Linux Journal</i>. <br>
650 </font><center><font class="tiny"> <a href="http://www.ssc.com/ssc/privacy.html">Privacy Statement</a> <br>
652 Syndicated news file: <a href="http://www.linuxjournal.com/news.rss">news.rss</a><br>Powered by <a href="http://phpnuke.org/" target="_blank">PHP-Nuke</a> <br>
654 </font>
655 </center></center></td>
656 </tr><tr>
657 <td><img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-bottom-left.png" width="17" align="left"></td>
658 <td width="100%"> </td>
659 <td><img height="17" alt="" hspace="0" src="linux-journal-20040501_files/corner-bottom-right.png" width="17" align="right"></td>
660 </tr></tbody></table>
661 </center></td></tr></tbody></table>
663 </body></html>