meillo@0: % chaos seminar talk about masqmail meillo@0: % meillo@0: % markus schnalke meillo@0: % since 2009-02-24 meillo@0: meillo@0: meillo@0: \documentclass{beamer} meillo@0: meillo@0: \title{masqmail} meillo@0: \author{markus schnalke} meillo@0: \date{2009-03-09} meillo@0: meillo@0: \usepackage[utf8]{inputenc} meillo@0: \usepackage{url} meillo@0: \usepackage{graphicx} meillo@0: \setlength{\parskip}{2.0ex plus 1.0ex minus 0.5ex} meillo@0: meillo@0: \newcommand{\secframe}[1]{ meillo@0: \section{#1} meillo@0: \frame{ \vfill\vfill \centerline{ \huge #1 } \vfill } meillo@0: } meillo@0: meillo@0: \newcommand{\ft}[1]{ meillo@0: \frametitle{#1} meillo@0: } meillo@0: meillo@1: \newcommand{\oneline}[1]{ meillo@1: \frame{ meillo@1: \vfill\vfill meillo@3: \centerline{#1} meillo@1: \vfill meillo@1: } meillo@1: } meillo@1: meillo@1: meillo@0: meillo@0: \begin{document} meillo@0: meillo@0: meillo@0: \frame{ meillo@0: meillo@0: \vspace{8em} meillo@0: \begin{center} meillo@0: meillo@0: {\huge\bf masqmail} meillo@0: meillo@0: a mail transfer agent for workstations and small networks meillo@0: meillo@0: \vspace{6em} meillo@0: meillo@0: { \tiny meillo@0: markus schnalke \textless{}meillo@marmaro.de\textgreater{} meillo@0: } meillo@0: meillo@0: \end{center} meillo@0: } meillo@0: meillo@0: meillo@0: meillo@2: \secframe{about me} meillo@0: meillo@0: meillo@2: \frame{\ft{markus schnalke} meillo@0: meillo@5: past: meillo@0: meillo@5: \qquad Business Information Systems\\ meillo@5: \qquad at University of Applied Sciences, Ulm meillo@2: meillo@5: \qquad Diploma Thesis about masqmail meillo@2: meillo@2: meillo@5: future: meillo@2: meillo@5: \qquad Master in Informatics\\ meillo@5: \qquad here at University, Ulm meillo@0: meillo@0: } meillo@0: meillo@0: meillo@2: \frame{\ft{I am interested in} meillo@0: meillo@2: Unix Philosophy meillo@0: meillo@2: suckless software meillo@0: meillo@0: Free Software meillo@0: meillo@0: Debian meillo@0: meillo@2: } meillo@0: meillo@2: meillo@2: meillo@2: meillo@2: \secframe{this talk} meillo@2: meillo@2: meillo@2: \frame{ \ft{overview} meillo@2: meillo@6: 1) prerequisites (5\%) %3 meillo@2: meillo@6: 2) about masqmail (25\%) %15 meillo@2: meillo@6: 3) the thesis (60\%) %6 + 9 + 7 + 4 + 6 = 32 meillo@2: meillo@6: 4) help wanted (10\%) %5 meillo@6: meillo@6: %== 55 meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@2: meillo@2: meillo@3: \secframe{email? MTA? \dots} meillo@2: meillo@2: meillo@2: \frame{\ft{What are MTAs} meillo@2: meillo@2: MTA = Mail Transfer Agent meillo@2: meillo@2: the post offices of email meillo@2: meillo@3: MTAs transfer mail from senders to recipients meillo@2: meillo@2: } meillo@2: meillo@2: meillo@2: \frame{\ft{mail agents} meillo@2: meillo@2: \begin{center} meillo@2: \includegraphics[width=0.8\textwidth]{fig/mail-agents.eps} meillo@2: \end{center} meillo@2: meillo@2: } meillo@2: meillo@2: meillo@2: \oneline{questions?} meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@3: meillo@3: meillo@3: meillo@3: meillo@3: meillo@0: \secframe{about masqmail} meillo@0: meillo@0: meillo@0: meillo@0: \frame{ \ft{what is masqmail} meillo@0: meillo@2: an MTA meillo@0: meillo@1: a small one meillo@0: meillo@2: one for special setups meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: \frame{ \ft{masqmail's niche} meillo@0: meillo@0: non-permanent online connections meillo@0: meillo@0: over multiple providers meillo@0: meillo@1: especially for workstations and small networks meillo@1: meillo@2: also notebooks meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: \frame{ \ft{history} meillo@0: meillo@0: written by Oliver Kurth meillo@0: meillo@2: 1999 -- 2003 meillo@0: meillo@2: GPL meillo@0: meillo@5: about 9\,000 lines of C meillo@0: meillo@0: } meillo@0: meillo@0: meillo@2: \frame{\ft{guessed} meillo@2: meillo@2: initially written to use masqdialer-controlled online connections meillo@2: meillo@2: thus: source of the name (``masq\dots'') (not ``\dots qmail'') meillo@2: meillo@2: } meillo@2: meillo@2: meillo@2: meillo@0: \frame{ \ft{masqmail today} meillo@0: meillo@0: development stopped in 2003 meillo@0: meillo@0: not maintained meillo@0: meillo@7: even its original website is down meillo@0: meillo@1: but included in Debian, Ubuntu, Arch, Mandriva, FreeBSD meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: \frame{ \ft{value of masqmail} meillo@0: meillo@0: covers a niche meillo@0: meillo@0: has unique features meillo@0: meillo@0: has users! meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: \frame{ \ft{problems of masqmail} meillo@0: meillo@0: no further development meillo@0: meillo@7: emailing has changed meillo@7: meillo@0: unfixed bugs meillo@0: meillo@0: } meillo@0: meillo@0: meillo@3: \oneline{questions?} meillo@0: meillo@0: meillo@1: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@3: \secframe{when I met masqmail} meillo@1: meillo@1: meillo@5: \frame{\ft{Fall 2007} meillo@0: meillo@5: started to use masqmail meillo@0: meillo@7: because of its small size meillo@7: meillo@5: } meillo@5: meillo@5: \frame{\ft{Spring 2008} meillo@5: meillo@5: problem: realized it is unmaintained in Debian meillo@0: meillo@1: A situation to be changed ... but by whom? meillo@0: meillo@5: \dots me? No! meillo@0: meillo@0: } meillo@0: meillo@0: meillo@5: \frame{\ft{Summer 2008} meillo@0: meillo@1: problem: find a topic for the diploma thesis meillo@0: meillo@5: } meillo@5: meillo@5: meillo@5: \frame{\ft{while lying in bed some night} meillo@5: meillo@7: the great idea: solve both problems at once meillo@0: meillo@5: 1) \textbf{use the diploma thesis to revive masqmail} meillo@3: meillo@5: 2) \textbf{use masqmail to do a great diploma thesis} meillo@0: meillo@0: } meillo@0: meillo@0: meillo@1: \frame{\ft{advising professor} meillo@1: meillo@5: professor Markus Sch\"affter meillo@1: meillo@1: thanks! meillo@1: meillo@1: } meillo@1: meillo@1: meillo@1: meillo@2: meillo@5: \frame{\ft{logical decisions} meillo@2: meillo@5: motivation: meillo@2: meillo@5: \qquad for myself meillo@2: meillo@5: \qquad for the community meillo@2: meillo@5: thus: meillo@2: meillo@5: \qquad write in English meillo@2: meillo@5: \qquad make the thesis free available meillo@2: meillo@2: } meillo@2: meillo@2: meillo@2: meillo@0: \frame{\ft{guiding principle} meillo@0: meillo@0: \begin{center} meillo@2: \it meillo@2: Do what you think is interesting,\\ meillo@2: do something that you think is fun and worthwhile,\\ meillo@2: because otherwise you won't do it well anyway. meillo@0: meillo@2: ---Brian~W.\ Kernighan--- meillo@0: \end{center} meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: meillo@0: meillo@1: meillo@1: meillo@1: meillo@2: \secframe{the thesis in short} meillo@0: meillo@0: meillo@0: meillo@4: %\frame{\ft{planned was} meillo@4: % meillo@4: %1) purpose and structure of an MTA/of masqmail meillo@4: % meillo@4: %2) security analysis meillo@4: % meillo@4: %3) code improvements meillo@4: % meillo@4: %4) documentation, test, distribution meillo@4: % meillo@4: %With the goal to release a new version and get it into Debian meillo@4: % meillo@4: %} meillo@4: % meillo@4: % meillo@4: %\frame{\ft{however, it resulted in} meillo@4: % meillo@4: %1) introduction meillo@4: % meillo@4: %2) market analysis meillo@4: % meillo@4: %3) mail transfer agents meillo@4: % meillo@4: %4) masqmail's present and future meillo@4: % meillo@4: %5) improvement plans meillo@4: % meillo@4: %Became pretty theoretic (I don't worry) meillo@4: % meillo@4: %} meillo@1: meillo@1: meillo@1: meillo@1: meillo@0: meillo@0: meillo@0: meillo@0: \frame{ \ft{ch01: introduction} meillo@0: meillo@0: general prerequisites meillo@0: meillo@0: the masqmail project meillo@0: meillo@0: value and problems of masqmail meillo@0: meillo@1: \textbf{$\Rightarrow$ reasons to do this thesis} meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: meillo@0: \frame{ \ft{ch02: market analysis} meillo@0: meillo@0: classification, life cycle, and trends of electronic communication meillo@0: meillo@0: SWOT and trends for email meillo@0: meillo@1: \textbf{$\Rightarrow$ show that email is expected to survive} meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: \frame{ \ft{ch03: mail transfer agents} meillo@0: meillo@0: classification of MTAs meillo@0: meillo@0: masqmail's competitors meillo@0: meillo@0: short comparison meillo@0: meillo@1: \textbf{$\Rightarrow$ provide knowledge for following chapters} meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: \frame{ \ft{ch04: masqmail's present and future} meillo@0: meillo@0: the goal (revive masqmail) meillo@0: meillo@0: requirements meillo@0: meillo@0: \quad\quad fulfilled requirements meillo@0: meillo@0: \quad\quad work to do meillo@0: meillo@0: ways for further development meillo@0: meillo@0: result meillo@0: meillo@1: \textbf{$\Rightarrow$ the core of the thesis: a plan to revive masqmail} meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: meillo@1: \frame{ \ft{ch05: improvement plans} meillo@1: meillo@1: more detailed descriptions of the work tasks meillo@1: meillo@1: \textbf{$\Rightarrow$ recommendations how to do the proposed changes} meillo@1: meillo@1: } meillo@1: meillo@1: meillo@1: \oneline{questions?} meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: meillo@2: meillo@6: \oneline{\it we're half way through :-) } meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: \secframe{in detail: ch03 MTAs} meillo@2: meillo@2: meillo@1: meillo@1: \frame{\ft{MTAs} meillo@1: meillo@5: relay-only MTAs (forwarders): meillo@1: meillo@5: \qquad nullmailer, ssmtp meillo@1: meillo@5: groupware: meillo@5: meillo@5: \qquad Lotus Notes, Exchange, opengroupware.org meillo@5: meillo@5: ``real'' MTAs: meillo@5: meillo@5: \qquad sendmail, exim, qmail, postfix, masqmail meillo@1: meillo@1: } meillo@1: meillo@1: meillo@1: meillo@1: \frame{\ft{market shares} meillo@1: meillo@4: \input{tbl/mta-market-share.tbl} meillo@4: meillo@4: } meillo@4: meillo@4: meillo@4: meillo@4: \frame{\ft{comparison} meillo@4: meillo@4: \input{tbl/mta-comparison.tbl} meillo@1: meillo@1: } meillo@1: meillo@1: meillo@1: meillo@1: \frame{\ft{why not sendmail} meillo@1: meillo@1: - too large meillo@1: meillo@1: - too complex meillo@1: meillo@1: - structurally insecure meillo@1: meillo@1: - simply obsolete meillo@1: meillo@1: } meillo@1: meillo@1: \frame{\ft{why not exim} meillo@1: meillo@1: - too large meillo@1: meillo@1: - designed for always online hosts meillo@1: meillo@1: } meillo@1: meillo@1: \frame{\ft{why not qmail} meillo@1: meillo@1: - outdated meillo@1: meillo@1: - designed for always online hosts with fast connections meillo@1: meillo@1: } meillo@1: meillo@1: \frame{\ft{why not postfix} meillo@1: meillo@1: - too large meillo@1: meillo@5: - too complex meillo@5: meillo@1: - not designed for masqmail's scenario meillo@1: meillo@1: } meillo@1: meillo@1: \frame{\ft{in summary} meillo@1: meillo@1: - other MTAs are bad substitutes for masqmail meillo@1: meillo@1: - though they seem to be generally able to be substitutes meillo@1: meillo@1: } meillo@1: meillo@1: meillo@1: \oneline{comments and annotations?} meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: \secframe{in detail: ch04 present and future} meillo@2: meillo@2: meillo@2: \frame{\ft{functional requirements} meillo@2: meillo@4: \input{tbl/func-requirements.tbl} meillo@4: meillo@2: } meillo@2: meillo@2: \frame{\ft{non-functional requirements} meillo@2: meillo@4: \input{tbl/nonf-requirements.tbl} meillo@2: meillo@2: } meillo@2: meillo@4: \frame{\ft{work tasks} meillo@4: meillo@4: TODO\,1: Encryption meillo@4: meillo@4: TODO\,2: Authentication meillo@4: meillo@4: TODO\,3: Security meillo@4: meillo@4: TODO\,4: Reliability meillo@4: meillo@4: TODO\,5: Spam handling meillo@4: meillo@4: TODO\,6: Extendability meillo@4: meillo@2: meillo@2: } meillo@2: meillo@4: meillo@4: \frame{\ft{further development} meillo@4: meillo@5: 1) improve existing code meillo@4: meillo@5: 2) add wrappers and interposition filters meillo@4: meillo@5: 3) redesign and rewrite from scratch meillo@5: meillo@5: \quad meillo@5: meillo@5: $1) + 2) = 13$ \quad vs. \quad $3) = 17$ meillo@2: meillo@2: } meillo@2: meillo@2: meillo@4: \frame{\ft{architecture} meillo@4: meillo@4: \begin{center} meillo@4: \includegraphics[width=0.8\textwidth]{fig/callgraph.eps} meillo@4: \end{center} meillo@2: meillo@2: } meillo@2: meillo@2: meillo@4: meillo@1: \frame{\ft{the result} meillo@0: meillo@0: ``one fits all'' is not possible meillo@0: meillo@0: hence: different strategies for different goals meillo@0: meillo@0: short-term goal: keep masqmail usable\\ meillo@5: \qquad $\rightarrow$ improve existing code meillo@0: meillo@0: long-term goal: make masqmail future-proof\\ meillo@5: \qquad $\rightarrow$ recreate it from scratch meillo@0: meillo@0: disadvantage: more work meillo@0: meillo@0: } meillo@0: meillo@0: meillo@5: \oneline{questions?} meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@2: \secframe{in detail: ch05.1 existing code} meillo@2: meillo@2: meillo@2: meillo@2: meillo@5: \frame{\ft{TODO 1: Encryption} meillo@2: meillo@5: STARTTLS meillo@2: meillo@5: qmail patch as template meillo@5: meillo@5: affected files: smtp\_in.c, smtp\_out.c, conf.c meillo@2: meillo@2: } meillo@2: meillo@2: meillo@2: meillo@5: \frame{\ft{TODO 2: Authentication} meillo@5: meillo@5: static: TCP Wrapper meillo@5: meillo@5: dynamic: SMTP-AUTH with SASL meillo@5: meillo@5: affected files: smtp\_in.c, smtp\_out.c, conf.c meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: meillo@5: \frame{\ft{TODO 3: Security} meillo@5: meillo@5: mail security layers meillo@5: meillo@5: \begin{center} meillo@5: \includegraphics[width=\textwidth]{fig/proxy-setup.eps} meillo@5: \end{center} meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: \oneline{questions?} meillo@5: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: meillo@2: \secframe{in detail: ch05.2 new design} meillo@2: meillo@5: \frame{\ft{design goals} meillo@5: meillo@5: throughout compartmentalization meillo@5: meillo@5: free internal system from in and out channels meillo@5: meillo@5: single point for scanning meillo@5: meillo@5: concentrate on mail transfer meillo@5: meillo@5: keep it simple, clear, and general meillo@2: meillo@2: } meillo@2: meillo@6: \frame{\ft{incoming and outgoing} meillo@2: meillo@6: in/out: meillo@2: meillo@6: \qquad arbitrary protocol handlers (incoming/outgoing) meillo@6: meillo@6: \qquad one queue-in module; one queue-out module meillo@6: meillo@6: \qquad no own MDA, only a pipe module meillo@6: meillo@6: route management: meillo@6: meillo@6: \qquad the thing special to masqmail meillo@6: meillo@6: \qquad done just before the outgoing modules meillo@2: meillo@5: } meillo@2: meillo@2: meillo@6: \frame{\ft{within the queue} meillo@2: meillo@6: mail sanitizing: meillo@6: meillo@6: \qquad qmail: ``don't parse'' $\rightarrow$ parse very carefully meillo@6: meillo@6: \qquad Jon Postel's robustness principle meillo@6: meillo@6: spool files: meillo@6: meillo@6: \qquad preferably in the system's native format meillo@2: meillo@5: } meillo@5: meillo@5: meillo@6: \frame{\ft{auth, enc, spam} meillo@5: meillo@6: auth and enc: meillo@6: meillo@6: \qquad in receiving and sending modules (?) meillo@6: meillo@6: \qquad with library code meillo@6: meillo@6: spam and malware: meillo@6: meillo@6: \qquad receiving modules vs. a scanning module meillo@6: meillo@6: \qquad in both places? meillo@6: meillo@6: \qquad malware scanning is not the MTA's job meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: meillo@5: \frame{\ft{the proposed architecture} meillo@5: meillo@5: \begin{center} meillo@5: \includegraphics[width=0.9\textwidth]{fig/masqmail-arch-new.eps} meillo@5: \end{center} meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: \oneline{questions?} meillo@5: meillo@5: meillo@5: meillo@5: meillo@5: meillo@5: \secframe{help wanted!} meillo@5: meillo@5: meillo@5: \frame{\ft{work to do} meillo@5: meillo@5: add encryption, authentication, security meillo@5: meillo@5: fix bugs meillo@5: meillo@5: documentation meillo@5: meillo@5: user guides and ``marketing'' meillo@5: meillo@5: create the new masqmail meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: \frame{\ft{current team} meillo@5: meillo@5: \tiny me meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: \frame{\ft{} meillo@5: meillo@5: project site: meillo@5: meillo@5: \qquad \url{http://prog.marmaro.de/masqmail} meillo@5: meillo@5: mailing list: meillo@5: meillo@5: \qquad masqmail@marmaro.de meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: \frame{\ft{Debian} meillo@5: meillo@5: I search for a DD to sponsor my masqmail work meillo@5: meillo@5: please contact me! meillo@5: meillo@5: } meillo@5: meillo@5: meillo@5: \frame{\ft{you!} meillo@5: meillo@5: I welcome your help! meillo@5: meillo@5: I appreciate your advice! meillo@5: meillo@5: I am thankful for your comments! meillo@5: meillo@5: \quad meillo@5: meillo@5: \textbf{help masqmail} meillo@2: meillo@2: } meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: \frame{ meillo@0: \vfill\vfill meillo@0: \centerline{\textbf{Thanks for your attention}} meillo@0: \vfill meillo@0: } meillo@0: meillo@0: meillo@1: \frame{\ft{links} meillo@1: meillo@6: \footnotesize meillo@6: meillo@6: my diploma thesis\\ meillo@6: \qquad \url{http://marmaro.de/docs\#diploma} meillo@6: meillo@6: meillo@6: masqmail's website\\ meillo@6: \qquad \url{http://prog.marmaro.de/masqmail} meillo@6: meillo@6: meillo@6: masqmail mailing list\\ meillo@6: \qquad \url{masqmail@marmaro.de}\\ meillo@6: \qquad \url{minimalist@marmaro.de?subject=subscribe\%20masqmail} meillo@6: meillo@6: meillo@6: suckless software\\ meillo@6: \qquad \url{http://www.suckless.org} meillo@6: meillo@1: meillo@1: } meillo@1: meillo@1: meillo@1: meillo@0: meillo@0: \frame{ \ft{software used} meillo@0: meillo@0: Debian GNU/Linux meillo@0: meillo@0: \LaTeX\ with the beamer classes meillo@0: meillo@0: Vim, latexmk, and Mercurial meillo@0: meillo@5: diagrams: PIC and groff meillo@5: meillo@6: call graph: Egypt and dot meillo@6: meillo@0: \vfill meillo@0: meillo@0: {\scriptsize The slides are available on \url{http://marmaro.de/docs} \hfill 2009-03-09 } meillo@0: meillo@0: } meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: \end{document} meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: meillo@0: \url{http://ulm.ccc.de/ChaosSeminar/2009/03_masqmail}