File: mxallowd.de.tex

package info (click to toggle)
mxallowd 1.6b-2~lenny0.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 244 kB
  • ctags: 79
  • sloc: ansic: 866; sh: 211; makefile: 78
file content (141 lines) | stat: -rw-r--r-- 6,497 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141

%
% mxallowd 1.6 Manual
% (c) 2007-2008 Michael Stapelberg
%
% See http://michael.stapelberg.de/mxallowd
%
\documentclass[12pt, a4paper]{scrartcl}

\usepackage{ngerman}
\usepackage[latin1]{inputenc}

\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{floatflt,wrapfig}
\usepackage{listings}
\usepackage{palatino,avant}
\usepackage[pdftex,bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,colorlinks=true,filecolor=black,
		linkcolor=red,urlcolor=blue,plainpages=false,pdfpagelabels,citecolor=black,
		pdftitle={mxallowd-Dokumentation},pdfauthor={Michael Stapelberg}]{hyperref}

% New paragraph
\newcommand{\np}{\bigskip\noindent}
% Program name
\newcommand{\prog}[1]{\textit{#1}}
% Command name
\newcommand{\cmd}[1]{\textit{#1}}
% Left and right angle brackets
\newcommand{\la}{\textless}
\newcommand{\ra}{\textgreater}

% Figure names
\renewcommand{\figurename}{Abb.}
% No indention at new paragraphs
\setlength{\parindent}{0pt}
% listing-options
\lstset{frame=trbl,basicstyle=\ttfamily\small,captionpos=b}
% No tt-style
\urlstyle{rm}

\begin{document}

\title{mxallowd-Dokumentation}
\author{Michael Stapelberg}
\date{Version 1.6, Dokumentation \today}

\maketitle

\tableofcontents

\clearpage

\section{Einleitung}

\prog{mxallowd} ist ein Daemon fr Linux/Netfilter (via libnetfilter\_queue) oder BSD/pf (via pflog), der eine Verfeinerung der nolisting-Methode darstellt. Hierbei werden fr eine Domain zwei MX-Eintrge vom Nameserver ausgeliefert, wobei auf der IP-Adresse des ersten MX-Eintrags kein Mailserver luft. Einige Spammer versuchen nun, nur auf den ersten Mailserver Spam auszuliefern und werden damit keinen Erfolg haben. Auf der IP-Adresse des zweiten MX-Eintrags luft dann ein richtiger Mailserver, der die E-Mails entgegennimmt. Echte Mailserver probieren -- im Gegensatz zu Spammern -- alle MX-Eintrge in der angegeben Reihenfolge (geordnet nach Prioritt) durch, bis sie die Mail zustellen knnen. Somit kommen echte Mails an und Spam bleibt drauen.\np

Das Problem beim nolisting ist nun, dass einige Spammer (vermutlich aufgrunddessen) direkt den zweiten MX-Eintrag benutzen ("`direct-to-second-mx"'). Hier kommt nun \prog{mxallowd} ins Spiel: Auf den zweiten Mailserver darf man sich nicht verbinden (das Paket wird einfach via netfilter/iptables verworfen), auer, wenn man es zuvor beim ersten Mailserver probiert hat.\np

Dieses Problem htte man prinzipiell auch nur via iptables mit dem Modul \prog{ipt\_recent} lsen knnen, wenn es nicht ein kleines Problem dabei gbe: Einige Anbieter (wie zum Beispiel Google Mail) verwenden zwar den gleichen DNS-Namen, aber unterschiedliche IP-Adressen im selben Zustellzyklus. Das heit, dass \prog{ipt\_recent}, welches ausschlielich auf IP-Adress-Basis arbeitet, E-Mails von Google nicht durchlsst. \prog{mxallowd} fgt daher alle IP-Adressen des DNS-Eintrags in die Whitelist ein (auer, wenn man die Option $--$no-rdns-whitelist angibt).\np

\subsection{Lizenz}

\prog{mxallowd} ist freie Open-Source-Software unter der GPLv2\footnote{\url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html}}.

\subsection{Entwicklung}

Den momentanen Stand der Entwicklung kann man auf \url{https://code.stapelberg.de/mxallowd/} begutachten.\np

ber Patches, Feature-Requests oder Bugreports bin ich natrlich erfreut, meine E-Mail-Adresse und meinen GPG-Key findest du auf \url{http://michael.stapelberg.de/Kontakt}.

\clearpage
\subsection{Funktionsweise}

Auf folgender Grafik ist abgebildet, wie ein Verbindungsaufbau ablaufen kann. Dabei ist mit "`Spammer"' ein nicht-RFC-konformer Mailsender gemeint und mit "`Mailserver"' ein RFC-konformer. Das SMTP-RFC schreibt vor, dass ein Mailsender alle MX-Eintrge in der angegebenen Prioritt durchprobieren muss, um die Mail zu versenden.\np

Der Spammer verbindet sich in dieser Grafik entweder direkt mit dem ersten (falschen) Mailserver oder direkt mit dem zweiten, whrend der Mailserver beide nacheinander durchprobiert.

\begin{figure}[h!]
	\centering
	\includegraphics[width=0.75\textwidth]{scheme1.png}
	\caption{Funktionsweise}
\end{figure}

\clearpage
\section{Installation unter Linux}

Damit neue Verbindungen an \prog{mxallowd} geleitet werden, muss man folgende iptables-Regel hinzufgen:

\begin{lstlisting}
iptables -A INPUT -p tcp --dport 25 -m state --state NEW \
	 -j NFQUEUE --queue-num 23
\end{lstlisting}

Falls das Einfgen dieser Regel nicht klappt, muss zuvor das Queue-Modul geladen werden:

\begin{lstlisting}
modprobe nfnetlink_queue
\end{lstlisting}

Die Regel kann man selbstverstndlich anpassen, sodass zum Beispiel nur an bestimmte IP-Adressen gerichtete Verbindungen gefiltert werden, oder dass Verbindungen von bestimmten IP-Adressen von vorneherein akzeptiert werden (-j ACCEPT am Ende).\np

Seit Version 1.5 funktioniert das auch mit ip6tables und IPv6-Verbindungen.

\section{Installation unter BSD}

Eine \prog{/etc/pf.conf} knnte so aussehen:

\begin{lstlisting}
table <mx-white> persist

real_mailserver="192.168.1.4"
fake_mailserver="192.168.1.3"

real_mailserver6="2001:dead:beef::1"
fake_mailserver6="2001:dead:beef::2"

pass in quick log on fxp0 proto tcp from <mx-white> \
	     to $real_mailserver port smtp
pass in quick log on fxp0 inet6 proto tcp from <mx-white> \
	     to $real_mailserver6 port smtp
block in log on fxp0 proto tcp \
	      to { $fake_mailserver $real_mailserver } port smtp
block in log on fxp0 inet6 proto tcp \
	      to { $fake_mailserver6 $real_mailserver6 } port smtp
\end{lstlisting}

Wichtig dabei ist, dass die Table \prog{mx-white} existiert und dass sowohl die pass- als auch die block-Regeln loggen.

Wenn man ein anderes pflog-interface verwendet, kann man mxallowd das via Parameter mitteilen.

\section{Hilfe, ich kann keine Mails mehr versenden!}

Das stimmt -- wenn du den selben Mailserver auch verwendest, um Mails zu versenden, probiert dein Mailclient in der Regel nur eine Verbindung. Ich wrde raten, die Mails ber SMTPS (SSL) zu versenden, denn dieser Port (465) wird nicht von \prog{mxallowd} gefiltert. Ansonsten kannst du deinen Mailserver auch zustzlich auf einem anderen Port laufen lassen, den nur zu benutzt (Spammer treiben nicht den Aufwand, einen Portscan durchzufhren, wenn sie nicht mal standardkonforme Mailer verwenden...). Falls du eine fixe IP-Adresse hast, kannst du diese natrlich auch via iptables whitelisten:\np

\begin{lstlisting}
iptables -I INPUT 1 -p tcp --dport 25 --s 192.168.2.3 -j ACCEPT
\end{lstlisting}


\end{document}