/[ddp]/manuals/trunk/securing-howto/de/services.sgml
ViewVC logotype

Contents of /manuals/trunk/securing-howto/de/services.sgml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3123 - (show annotations) (download) (as text)
Sun May 15 22:40:07 2005 UTC (8 years ago) by jseidel
File MIME type: text/x-sgml
File size: 88714 byte(s)
translation and proofreading of first 33% of this file
1 <!-- CVS revision of original english document "1.11" -->
2
3 <chapt id="sec-services">Absichern von Diensten die auf Ihrem System
4 laufen
5
6 <p>Dienste können auf zwei Arten in einem laufenden System abgesichert werden:
7
8 <list>
9
10 <item>sie so einstellen, dass auf sie nur von Zugangspunkten (Interfaces)
11 zugegriffen werden kann, von denen es nötig ist.
12
13 <item>sie so konfigurieren, dass sie nur von legitimierten Nutzern auf
14 autorisierte Art und Weise benutzt werden können.
15
16 </list>
17
18 <p>Einschränken der Dienste, so dass auf sie nur von bestimmten
19 Orten aus zugegriffen werden kann, kann durch Zugriffs-Beschränkungen
20 auf Kernel-Ebene (durch eine Firewall) passieren. Konfigurieren Sie sie,
21 so dass sie nur auf ein bestimmtes Interface horchen (einige Dienste
22 bieten diese Fähigkeiten vielleicht nicht), oder durch eine andere
23 Methode. Zum Beispiel kann der Linux vserver-Patch (für 2.4.16) dazu
24 benutzt werden, Prozesse auf ein bestimmtes Interface zu binden.
25
26 <p>Was die Dienste angeht, die von <prgn>inetd</prgn> aufgerufen werden
27 (<prgn>telnet</prgn>, <prgn>ftp</prgn>, <prgn>finger</prgn>, <prgn>pop3</prgn>,
28 ...), so ist es Wert zu erwähnen, dass <prgn>inetd</prgn>
29 so konfiguriert werden kann, dass er nur auf ein bestimmtes Interface
30 reagiert (unter Verwendung der <tt>service@ip</tt>-Syntax). Dies ist jedoch
31 eine nicht dokumentierte Eigenschaft.
32 Ein Ersatz, der <prgn>xinetd</prgn>
33 Meta-Daemon kennt eine <tt>bind</tt>-Option nur für diesen Zweck. Lesen Sie dazu
34 bitte <manref name="xinetd.conf" section="5">.
35
36 <example>
37 service nntp
38 {
39 socket_type = stream
40 protocol = tcp
41 wait = no
42 user = news
43 group = news
44 server = /usr/bin/env
45 server_args = POSTING_OK=1 PATH=/usr/sbin/:/usr/bin:/sbin/:/bin
46 +/usr/sbin/snntpd logger -p news.info
47 bind = 127.0.0.1
48 }
49 </example>
50
51 <p>Die folgenden Abschnitte gehen detaillierter darauf ein, wie bestimmte
52 Dienste abhängig von der beabsichtigten Benutzung passend
53 konfiguriert werden.
54
55
56 <sect>Absichern von <prgn>ssh<prgn>
57 <p>Wenn Sie immer noch telnet statt ssh benutzen, sollten Sie dieses
58 Handbuch kurz beiseite legen, und dies ändern. Ssh sollte anstelle
59 von telnet für alle Fern-Logins benutzt werden. In einer Zeit, in
60 der es leicht ist, Internet-Verkehr mit zu schnüffeln und an
61 Klartext-Passwörter heranzukommen, sollten Sie lediglich Protokolle
62 verwenden, die Kryptographie benutzen. Also führen Sie sofort ein
63 <tt>apt-get install ssh</tt> auf Ihrem System aus.
64
65 <p>Ermuntern Sie alle Nutzer Ihres Systems, ssh anstelle von telnet zu
66 benutzen, oder noch besser: Deinstallieren Sie telnet/telnetd.
67 Zusätzlich sollten Sie es vermeiden, sich mit ssh als root
68 einzuloggen und lieber andere Methoden benutzen, um root zu werden. Wie
69 zum Beispiel <prgn>su</prgn> oder <prgn>sudo</prgn>. Schließlich sollten
70 Sie noch die Datei <file>/etc/ssh/sshd_config</file> für mehr
71 Sicherheit modifizieren:
72
73 <list>
74 <item><tt>ListenAddress 192.168.0.1</tt>
75 <p>Lassen Sie ssh nur auf ein bestimmtes Interface hören, falls Sie
76 mehrere haben (und ssh nicht auf allen verfügbar sein
77 soll) oder Sie in Zukunft eine neue Netzwerkkarte einbauen werden (und
78 keine ssh-Verbindungen auf Ihr erlauben wollen).
79
80 <item><tt>PermitRootLogin no</tt>
81 <p>Versuchen Sie so wenige Logins als Root wie möglich zu erlauben.
82 Wenn nun jemand Root werden will, benötigt er zwei Logins. So kann das
83 Root-Passwort nicht so leicht ausgetestet werden.
84
85 <item><tt>Listen 666</tt>
86 <p>Verändern Sie den Listen-Port, so dass ein Eindringling nicht
87 wirklich sicher sein kann, ob ein sshd-Daemon läuft (aber beachten
88 Sie, dass dies lediglich "Sicherheit durch Verschleierung" ist).
89
90 <item><tt>PermitEmptyPasswords no</tt>
91 <p>Nicht gesetzte Passwörter verspotten jegliche System-Sicherheit.
92
93 <item><tt>AllowUsers alex ref ich@irgendwo</tt>
94 <p>Erlauben Sie nur bestimmten Usern sich via ssh auf der Maschine
95 einzuloggen. <tt>user@host</tt> kann auch verwendet werden, um einen
96 bestimmten Benutzer user dazu zu zwingen, nur von einem bestimmten
97 Rechner host aus zuzugreifen.
98
99
100 <item><tt>AllowGroups wheel admin</tt>
101 <p>Erlauben Sie nur bestimmten Gruppenmitgliedern sich via ssh auf der
102 Maschine einzuloggen. AllowGroups und AllowUsers haben äquivalente
103 Direktiven um den Zugang zu der Maschine zu verwehren. Es wird nicht
104 überraschen, dass es sich hierbei um "DenyUsers" und "DenyGroups"
105 handelt.
106
107 <item><tt>PasswordAuthentication yes</tt>
108 <p>Es ist allein Ihre Wahl, was Sie hier eintragen. Es ist sicherer Zugriff nur
109 Nutzern zu erlauben, die ssh-Schlüssel in der <file>~/.ssh/authorized_keys</file>-Datei
110 haben. Wenn Sie dies wollen, setzen Sie es auf "no".
111
112 <item>Schalten Sie jedwede Art der Authentifizierung ab, die Sie nicht
113 wirklich benötigen, zum Beispiel <tt>RhostsRSAAuthentication</tt>,
114 <tt>HostbasedAuthentication</tt>, <tt>KerberosAuthentication</tt> oder
115 <tt>RhostsAuthentication</tt>. Sie sollten sie abschalten, auch wenn sie
116 es standardmäßig bereits sind (siehe dazu die Handbuch-Seite
117 <manref name="sshd_config" section="5">).
118
119 <item><tt>Protocol 2</tt>
120 <p>Deaktivieren Sie die Protokollversion 1, da diese einige Designschwächen
121 hat, die es einfacher zu machen, Passwörter zu knacken. Für weitere Informationen
122 lesen Sie <url id="http://earthops.net/ssh-timing.pdf"
123 name="a paper regarding ssh protocol problems"> oder das
124 <url id="http://xforce.iss.net/static/6449.php" name="Xforce advisory">.
125
126 <item><tt>Banner /etc/eine_Datei</tt>
127 <p>Fügen Sie einen Bannertext (er wird aus der Datei bezogen) für Benutzer,
128 die sich mit dem ssh-Server verbinden, hinzu. In einigen Ländern sollte das
129 Senden einer Warnung über unautorisierten Zugriff oder Benutzerüberwachung
130 vor dem Zugriff zu einem bestimmten System erfolgen, um sich rechtlich abzusichern.
131
132 </list>
133
134 <p>Sie können den Zugriff auf den ssh-Server auch mittels
135 <tt>pam_listfile</tt> oder <tt>pam_wheel</tt> in der PAM-Kontrolldatei
136 beschränken. Zum Beispiel können Sie jeden abhalten, der nicht in der
137 Datei <file>/etc/loginusers</file> aufgelistet ist, durch Hinzufügen
138 folgender Zeile zu <file>/etc/pam.d/ssh</file>:
139
140 <example>
141 auth required pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers
142 </example>
143
144 <p>Abschließend beachten Sie bitte, dass diese Direktiven von einer
145 OpenSSH-Konfigurationsdatei sind. Derzeit gibt es drei weitverbreitete
146 ssh-Daemonen: ssh1, ssh2 und OpenSSH von den OpenBSD-Leuten. Ssh1 war der
147 erste verfügbare ssh-Daemon und er ist noch der weit verbreitetste
148 (Gerüchten zufolge gibt es sogar eine Windows-Version). Ssh2 hat
149 gegenüber ssh1 viele Vorteile, abgesehen davon, dass es unter einer
150 unfreien Lizenz veröffentlicht wurde. OpenSSH ist ein völlig
151 freier ssh-Daemon, der sowohl ssh1 als auch ssh2 unterstützt.
152 OpenSSH ist die Version, die installiert wird, wenn Sie auf Debian das
153 Paket <package>ssh</package> auswählen.
154
155 <p>Mehr Informationen, wie Sie SSH mit Unterstützung für PAM
156 aufsetzen, finden Sie hier: <url
157 id="http://lists.debian.org/debian-security/2001/debian-security-200111/msg00395.html"
158 name="security mailing list archives">.
159
160 <sect1 id="ssh-chroot">Chroot'en von ssh
161 <p>
162
163 <p>Zurzeit bietet OpenSSH keine Möglichkeit, automatisch Benutzer
164 bei der Verbindung zu chroot'en (die kommerzielle Version bietet diese
165 Funktionalität). Wie dem auch sei, es gibt auch ein Projekt, das diese
166 Funktionalität für OpenSSH anbietet, vergleiche <url
167 id="http://chrootssh.sourceforge.net">. Es ist aber aktuell noch nicht
168 für Debian paketiert. Sie sollten stattdessen das
169 <file>pam_chroot</file>-Modul, wie in in <ref
170 id="user-restrict"> beschrieben, verwenden.
171
172 <p>In <ref id="chroot-ssh-env"> können Sie verschiedene Optionen finden,
173 um chroot-Umgebungen für SSH zu erstellen.
174
175 <sect1>Ssh-Clients
176
177 <p>Wenn Sie einen SSH-Client mit einem SSH-Server verwenden, müssen Sie
178 sicherstellen, dass er die selben Protokolle, die vom Server erzwungen werden,
179 unterstützt. Wenn Sie beispielsweise das Paket <package>mindterm</package>
180 verwenden, unterstützt dies nur Protokollversion 1. Jedoch ist der
181 sshd-Server standardmäßig so konfiguriert, nur Version 2 (aus
182 Sicherheitsgründen) zu akzeptieren.
183
184 <sect1>Verbieten von Dateitransfers
185
186 <p>Wenn Sie <em>nicht</em> möchten, das Benutzer Dateien zum und vom
187 ssh-Server übertragen, müssen Sie den Zugang zu <prgn>sftp-server</prgn>
188 <em>und</em> zu <prgn>scp</prgn> einschränken. Sie können dies für
189 <prgn>sftp-server</prgn> tun, indem Sie den korrekten <tt>Subsystem</tt>
190 Wert in <file>/etc/ssh/sshd_config</file> eintragen. Um jedoch den Zugang
191 zu <prgn>scp</prgn> einzuschränken, müssen Sie entweder:
192
193 <list>
194
195 <item>den Benutzern verbieten, sich auf dem ssh-Server einzuloggen (wie
196 oben beschrieben entweder durch die Konfigurationsdatei oder die
197 PAM-Konfiguration).
198
199 <item>Benutzern, denen sichere Übertragungen verwehrt sind, richtige Shells
200 vorenthalten. Die angebotenen Shells, sollten dennoch Programme sein, die
201 Verbindungen zum ssh-Server sinnvoll gestalten, wie z.B. Menü-Programme
202 <!-- FIXME: What do you mean with "was useful at all" ? -->
203 (ala BBS). Andernfalls ist die verherige Möglichkeit bevorzugt.
204
205 </list>
206
207 <sect>Absichern von Squid
208
209 <p>Squid ist einer der verbreitetsten Proxy/Cache-Server, und es gibt ein
210 paar Sicherheitsaspekte, die Sie beachten sollten. Squid's Standard-Konfiguration
211 lehnt alle Anfragen von Nutzern ab. Dennoch erlaubt das Debian-Paket
212 Zugriff von 'localhost', Sie müssen nur Ihren Browser richtig konfigurieren.
213 Sie sollten Squid so
214 konfigurieren, dass er Zugriffe von vertrauenswürdigen Nutzern,
215 Computern oder Netzwerken erlaubt, indem Sie eine Zugriffs-Kontroll-Liste
216 (ACL, Access Control List) in <file>/etc/squid.conf</file> definieren. Mehr
217 Informationen, wie Sie ACLs definieren, finden Sie in der <url
218 name="Squid User's Guide"
219 id="http://squid-docs.sourceforge.net/latest/html/book1.html">.
220 <!-- Todo: Deutsche Squid Guide raussuchen -->
221 Beachten Sie, dass Debian eine minimale Konfiguration für Squid bereitstellt,
222 die alles verhindert, mit der Ausnahme, dass <em>localhost</em> sich mit Ihrem
223 Proxy-Server (der standardmäßig mit dem Port 3128 läuft) verbinden kann.
224 Sie müssen Ihre <file>/etc/squid.conf</file>-Datei wie gewünscht anpassen.
225 Die empfohlene minimale Konfiguration (mit dem Paket vertrieben) sieht wie
226 folgt aus:
227
228 <example>
229 acl all src 0.0.0.0/0.0.0.0
230 acl manager proto cache_object
231 acl localhost src 127.0.0.1/255.255.255.255
232 acl SSL_ports port 443 563
233 acl Safe_ports port 80 # http
234 acl Safe_ports port 21 # ftp
235 acl Safe_ports port 443 563 # https, snews
236 acl Safe_ports port 70 # gopher
237 acl Safe_ports port 210 # wais
238 acl Safe_ports port 1025-65535 # unregistered ports
239 acl Safe_ports port 280 # http-mgmt
240 acl Safe_ports port 488 # gss-http
241 acl Safe_ports port 591 # filemaker
242 acl Safe_ports port 777 # multiling http
243 acl Safe_ports port 901 # SWAT
244 acl purge method PURGE
245 acl CONNECT method CONNECT
246 (...)
247 # Erlaube nur cachemgr Zugriff von localhost
248 http_access allow manager localhost
249 http_access deny manager
250 # Erlaube nur purge Anfragen von localhost
251 http_access allow purge localhost
252 http_access deny purge
253 # Verbiete Anfragen zu unbekannten Ports
254 http_access deny !Safe_ports
255 # Verbiete CONNECT zu anderen als SSL-Ports
256 http_access deny CONNECT !SSL_ports
257 #
258 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
259 #
260 http_access allow localhost
261 # And finally deny all other access to this proxy
262 http_access deny all
263 #Default:
264 # icp_access deny all
265 #
266 #Allow ICP queries from everyone
267 icp_access allow all
268 </example>
269
270 <p>Sie sollten Squid auch entsprechend Ihren System-Ressources konfigurieren,
271 inklusive Cache-Speicher (Option <tt>cache_mem</tt>), Lage der gecachten Dateien
272 und der verwendeten Speichermenge auf der Platte (Option <tt>cache_dir</tt>).
273
274 <p>Man beachte, dass es bei ungeeigneter Konfiguration vorkommen kann, dass jemand eine
275 Mail über Squid weiterleitet, da die Protokolle HTTP und SMTP
276 ein ähnliches Design haben. Squids Standardkonfiguration
277 verweigert Zugriffe auf Port 25. Wenn Sie Verbindungen an Port 25
278 erlauben wollen, fügen Sie ihn einfach zu der Safe_ports-Liste
279 hinzu. Aber dies ist <em>NICHT</em> empfohlen.
280
281 <p>Passendes Aufsetzen und Konfigurieren des Proxy/Cache-Servers ist nur
282 ein Teil der Absicherung Ihrer Seite. Eine andere notwendige Aufgabe ist
283 es, Squids Log-Dateien zu analysieren, um sicher zu gehen, dass alles so
284 arbeitet, wie es sollte. Es gibt ein paar Pakete in Debian GNU/Linux, die
285 einem Administrator hierbei helfen können.
286 Die folgenden Pakete sind in Debian 3.0 und neueren Versionen verfügbar:
287
288 <list>
289 <item><package>calamaris</package> - Log-Datei-Analysator für Squid oder Oops Proxy-Log-Dateien.
290 <item><package>modlogan</package> - Ein modularer Log-Datei-Analysator.
291 <!-- This one is no longer available?
292 <item><package>sarg</package> - Squid Analysis Report Generator.
293 -->
294 <item><package>squidtaild</package> - Squid-Log-Beobachtungsprogramm.
295 </list>
296
297 <p>Wenn Squid im »Accelerator Mode« betrieben wird, agiert er auch als
298 Web-Server. Aktivieren dieser Option erhöht die Komplexität des Codes, was
299 es weniger vertrauenswürdig macht. Standardmäßig ist Squid nicht dazu
300 konfiguriert, als Web-Server zu arbeiten, Sie müssen sich darüber also
301 keine Gedanken machen. Sie müssen sicher stellen, dass es wirklich nötig ist,
302 wenn Sie diese Eigenschaft nutzen wollen. Weitere Informationen über den
303 »Accelerator Mode« in Squid finden Sie im <url name="Squid
304 User's Guide, Kapitel 9"
305 id="http://squid-docs.sourceforge.net/latest/html/c2416.html">.
306
307 <sect id="ftp-secure">Absichern von FTP
308
309 <p>Wenn Sie wirklich FTP benutzen müssen (ohne ihn mit sslwrap zu
310 umhüllen oder innerhalb eines SSL- oder SSH-Tunnels), sollten Sie
311 ftp in das Home-Verzeichnis des FTP-Nutzers chrooten, so dass ein Nutzer
312 nichts anderes sehen kann, als sein eigenes Verzeichnis. Andernfalls können
313 sie Ihr Dateisystem durchlaufen, als hätten sie Shell-Zugriff darauf. Sie
314 können die folgende Zeile in Ihre <file>proftpd.conf</file>-Datei im
315 globalen Abschnitt hinzufügen, um die chroot-Fähigkeiten zu
316 nutzen:
317
318 <example>
319 DefaultRoot ~
320 </example>
321
322 <p>Starten Sie proftpd neu, indem Sie <tt>/etc/init.d/proftpd
323 restart</tt> eingeben, und prüfen Sie, ob Sie noch aus Ihrem
324 Home-Verzeichnis heraus kommen können.
325
326 <p>Um Proftp-DoS Attacken durch ../../../ zu verhindern, fügen Sie
327 die folgende Zeile Ihrer <file>/etc/proftpd.conf</file> hinzu:
328
329 <tt>DenyFilter \*.*/</tt>
330
331 <p>Vergessen Sie nicht, dass FTP Login- und Authentifizierungs-Passwort
332 als Klartext sendet (dies ist kein Problem, wenn Sie einen anonymen,
333 öffentlichen Dienst anbieten) und es gibt bessere Alternativen in
334 Debian hierzu. Zum Beispiel <prgn>sftp</prgn> (aus dem Paket
335 <package>ssh</package>). Es gibt auch freie
336 Implementierungen von SSH für andere Betriebssysteme, zum Beispiel
337 <url id="http://www.chiark.greenend.org.uk/~sgtatham/putty/"
338 name="putty"> oder <url id="http://www.cygwin.com" name="cygwin">.
339
340 <!-- contributed by Jesus Climent -->
341 <p>Wenn Sie dennoch einen FTP-Server verwalten, während Sie
342 den Nutzern Zugriff via SSH gewähren, könnten Sie auf ein
343 typisches Problem stoßen. Nutzer die innerhalb eines mit SSH
344 abgesicherten Systems auf einen anonymen FTP-Server zugreifen wollen,
345 können versuchen sich auf dem <em>FTP-Server</em> einzuloggen.
346 Während der Zugriff verweigert werden wird, wird das Passwort
347 trotzdem als Klartext über das Netz gesendet. Um dies zu verhindern
348 hat der ProFTPd-Entwickler TJ Saunders einen Patch erstellt, der
349 verhindert, dass Nutzer den anonymen FTP-Server mit gültigen
350 SSH-Zugangsdaten füttern. Mehr Informationen und den Patch finden
351 Sie unter: <url id="http://www.castaglia.org/proftpd/#Patches"
352 name="ProFTPD Patches">. Dieser Patch wurde auch an Debian gesandt,
353 vergleiche
354 <url id="http://bugs.debian.org/145669" name="Fehler #145669">.
355
356 <sect>Zugriff auf das X-Window-System absichern
357
358 <p>Heutzutage werden X-Terminals in mehr und mehr Firmen benutzt, wo
359 ein Server für viele Arbeitsplätze benötigt wird.
360 Dies kann gefährlich sein, weil Sie dem Datei-Server erlauben
361 müssen, sich mit den X-Clients zu verbinden (X-Server aus Sicht von
362 X. X vertauscht die Definition von Client und Server). Wenn Sie dem (sehr
363 schlechten) Vorschlag von vielen Dokumentationen folgen, geben Sie auf
364 Ihrer Maschine <tt>xhost +</tt> ein. Dies erlaubt jedem X-Client sich mit
365 Ihrem System zu verbinden. Für etwas bessere Sicherheit, können Sie
366 stattdessen das Kommando <tt>xhost +Rechnername</tt> verwenden, um den
367 Zugriff auf bestimmte Rechner zu begrenzen.
368
369 <p>Allerdings ist es eine viel sicherere Lösung, ssh zu benutzen, um
370 X zu tunneln und die gesamte Sitzung zu verschlüsseln. <!-- FIXME: add "and compress" --> Dies
371 geschieht automatisch, wenn Sie sich auf eine andere Maschine
372 via ssh einloggen.
373
374 <!-- Sie müssen es nur in der <file>/etc/ssh/ssh_config</file>
375 einschalten, indem Sie <tt>X11Forwarding</tt> auf <tt>yes</tt> setzen.-->
376
377 Damit dies funktioniert, müssen Sie den ssh-Client und den
378 ssh-Server konfigurieren. Auf dem ssh-Client sollte <tt>ForwardX11</tt>
379 in <file>/etc/ssh/ssh_config</file> auf <tt>yes</tt> gesetzt sein. Auf dem
380 ssh-Server sollte <tt>X11Forwarding</tt> in
381 <file>/etc/ssh/sshd_config</file> auf <tt>yes</tt> gesetzt sein und das
382 Paket <package>xbase-clients</package> sollte installiert sein. Letzteres
383 gilt, da der ssh-Server <file>/usr/X11R6/bin/xauth</file> verwendet, wenn er
384 das Pseudo-X-Display aufsetzt.
385 <!-- discovered this when setting up two minimally installed boxes -->
386
387 In
388 den Zeiten von SSH sollten Sie die xhost-basierte Zugriffskontrolle
389 komplett über Bord werfen.
390 <!-- FIXME: check. The text said "has to be disabled" [sic] -->
391
392 <p>Zur besten Sicherheit, wenn Sie keinen X-Zugriff von anderen Maschinen
393 benötigen, ist es, die Bindung auf Port 6000 abzuschalten, indem Sie
394 einfach Folgendes eingeben:
395
396 <example>$ startx -- -nolisten tcp</example>
397
398
399 <p>Dies ist das Standard-Verhalten unter XFree 4.1.0 (der Xserver aus
400 Debian 3.0 und 3.1). Wenn Sie XFree 3.3.6 laufen lassen (d.h. wenn Sie Debian 2.2
401 benutzen) können Sie <file>/etc/X11/xinit/xserverrcc</file>
402 editieren, damit Sie etwas erhalten wie:
403
404 <example>
405 #!/bin/sh
406 exec /usr/bin/X11/X -dpi 100 -nolisten tcp
407 </example>
408
409 <p>Wenn Sie XDM benutzen, setzen Sie in
410 <file>/etc/X11/xdm/Xservers</file> auf <tt>:0 local /usr/bin/X11/X vt7
411 -dpi 100 -nolisten tcp</tt>. Wenn Sie GDM benutzen, stellen Sie sicher,
412 dass die Option <tt>-nolisten tcp</tt> in der
413 <file>/etc/gdm/gdm.conf</file> gesetzt ist (was standardmäßig
414 unter Debian der Fall ist), wie hier:
415
416 <example>
417 [server-Standard]
418 name=Standard Server
419 command=/usr/bin/X11/X -nolisten tcp
420 </example>
421
422 <p>Sie können außerdem die standardmäßige Zeitgrenze für
423 die <prgn>xscreensaver</prgn> Bildschirmsperre setzen. Auch wenn der Nutzer sie
424 aufheben kann, sollten Sie die Konfigurationsdatei
425 <file>/etc/X11/app-defaults/XScreenSaver</file> editieren, und die
426 lock-Zeile von
427 <example>
428 *lock: False
429 </example>
430 <p>(das ist der Standardwert unter Debian) auf
431 <example>
432 *lock: True
433 </example>
434 <p>ändern.<!-- Jens: <p> überprüfen -->
435
436 <p>FIXME: add information on how to disable the screensavers which
437 show the user desktop (which might have sensitive information).
438
439 <p>Lesen Sie mehr zur Sicherheit von X Window in
440 <url
441 name="XWindow-User-HOWTO"
442 id="http://www.tldp.org/HOWTO/XWindow-User-HOWTO.html">
443 (<file>/usr/share/doc/HOWTO/en-txt/XWindow-User-HOWTO.txt.gz</file>).
444 <!-- TODO: Link zur deutschen Uebersetzung -->
445
446
447 <p>FIXME: Add info on thread of debian-security on how to change config files
448 of XFree 3.3.6 to do this.
449
450 <sect1>Überprüfen Ihres Display-Managers
451
452 <p>Wenn Sie einen Display-Manager lediglich zur lokalen Nutzung
453 (um einen schönen graphischen Login zu haben) haben wollen, gehen
454 Sie sicher, dass der XDMCP (X Display Manager Control Protocol) Krempel
455 abgeschaltet ist. Unter XDM können Sie dies mit der folgenden Zeile
456 in <tt>/etc/X11/xdm/xdm-config</tt> erreichen:
457
458 <example>
459 DisplayManager.requestPort: 0
460 </example>
461
462 <p>Normalerweise sind unter Debian alle Display-Manager so konfiguriert,
463 dass sie standardmäßig keine XDMCP-Dienste starten.
464
465 <sect>Absichern des Drucker-Zugriffs (Die lpd- und lprng-Problematik)
466
467 <p>Stellen Sie sich vor, Sie kommen zur Arbeit, und der Drucker spuckt
468 endlose Mengen von Papier aus, weil jemand eine DoS-Attacke gegen Ihren Drucker-Daemon
469 durchführt. Unangenehm, oder?
470
471 <!-- Info based on Dale Southard's post to debian-security April 11th 2002-->
472 <p>In jeder Unix Druck-Architektur muss es einen Weg geben, um die Daten
473 des Clients auf den Druck-Server zu bekommen. Traditionell machen dies
474 <prgn>lpr</prgn> und <prgn>lp</prgn> so, dass das Client-Kommando die
475 Daten in das Spool-Verzeichnis kopiert oder symbolisch verlinkt (weshalb diese
476 Programme normalerweise SUID oder SGID sind).
477
478 <p>Um jede Gefahr zu vermeiden, sollen Sie Ihren Druck-Server besonders
479 sicher halten. Dies heißt, dass Sie Ihren Druck-Dienst so konfigurieren
480 müssen, dass er nur Aufträge von vertrauenswürdigen
481 Rechnern annimmt. Hierzu müssen Sie die Rechner, von denen Sie
482 Druckaufträge entgegennehmen möchten, in die Datei
483 <file>/etc/hosts.lpd</file> eintragen.
484
485 <p>Allerdings akzeptiert der <prgn>lpr</prgn>-Daemon auch wenn Sie dies
486 getan haben Verbindungen auf Port 515 auf jeder Schnittstelle. Sie
487 sollten sich überlegen, ob Sie Verbindungen von Netzwerken/Rechnern,
488 die nicht drucken dürfen, mittels Firewall abblocken wollen (der
489 <prgn>lpr</prgn>-Daemon kann nicht so konfiguriert werden, dass er nur
490 auf eine bestimmte IP-Adresse hört.)
491
492 <!-- FIXME
493 <p>Of course, you could also take the lpr/lprng sources
494 and change them so that the connect function is only done to "127.0.0.1".
495 apt-get source lpr
496 and patch the bind (finet) call
497 -->
498
499 <p>Sie sollten <prgn>Lprng</prgn> gegenüber <prgn>lpr</prgn>
500 vorziehen, da er so konfiguriert werden kann, dass er Zugang-Kontrolle
501 über IP beherrscht. Und Sie können spezifizieren, auf welche
502 Schnittstelle er sich binden soll (wenn auch etwas sonderbar).
503
504 <!-- FIXME: ask Craig Small about his post in debian-private 19th October 2001 -->
505
506 <p>Wenn Sie Ihren Drucker nur lokal auf Ihrem System benutzen, werden Sie
507 diesen Dienst nicht über ein Netzwerk teilen wollen. Sie sollten dann
508 überlegen, ein anderes Druck-System, wie zum Beispiel das aus dem
509 Paket <package>cups</package> oder <url name="PDQ"
510 id="http://pdq.sourceforge.net/">, das auf den Zugriffsrechten des
511 Gerätes <file>/dev/lp0</file> beruht, einzusetzen.
512
513 <p>Bei <package>cups</package> werden die Druckaufträge mit dem
514 http-Protokoll zum Server übertragen. Dadurch muss der Client nicht
515 über spezielle Privilegien verfügen, aber dies erfordert, dass der Server auf
516 irgendeinem Port lauscht.
517
518 <p>Wie auch immer: Wenn Sie <prgn>cups</prgn> nur lokal benutzen
519 möchten, können Sie es so konfigurieren, dass er nur auf die
520 lokale Schleife (loopback interface) hört, indem Sie Folgendes in
521 Ihrer <file>/etc/cups/cupsd.conf</file> ändern:
522
523 <example>
524 Listen 127.0.0.1:631
525 </example>
526
527 <p>Es gibt noch andere Sicherheits-Optionen in dieser
528 Konfigurations-Datei, wie zum Beispiel das Erlauben oder Verweigern von
529 Netzwerken oder Rechnern. Wenn Sie sie allerdings nicht benötigen,
530 belassen Sie es am besten dabei, einfach nur den Port, auf dem
531 gehört wird, einzuschränken. <prgn>Cups</prgn> liefert auch
532 Dokumentation über den HTTP-Port. Wenn Sie diese potenziell
533 nützlichen Informationen einem Angreifer von außerhalb nicht
534 enthüllen wollen (und der Port offen ist), fügen Sie
535 außerdem Folgendes hinzu:
536
537 <example>
538 &lt;Location /&gt;
539 Order Deny,Allow
540 Deny From All
541 Allow From 127.0.0.1
542 &lt;/Locationi&gt;
543 </example>
544
545 <p>Die Konfigurationsdatei kann so angepasst werden, dass
546 zusätzliche Fähigkeiten einschließlich SSL- und
547 TLS-Zertifikate oder Verschlüsselung möglich werden. Die
548 Handbücher finden Sie unter http://localhost:631/ oder
549 <url id="cups.org">.
550
551 <P>FIXME: Add more content (the article on <url name="Amateur Fortress
552 Building" id="http://www.rootprompt.org"> provides some very
553 interesting views).
554
555 <p>FIXME: Check if PDG is available in Debian, and if so,
556 suggest this as the preferred printing system.
557
558 <p>FIXME: Check if Farmer/Wietse has a replacement for printer daemon
559 and if it's available in Debian.
560
561 <sect>Absichern des Mail-Dienstes
562
563 <p>Wenn Ihr Server kein Mail-System ist, müssen Sie wirklich keinen
564 Mail-Daemon haben, der auf eingehende Verbindungen reagiert. Aber Sie
565 wollen lokale Mails ausliefern, um beispielsweise Mails an den
566 Root-User von irgendwelchen Alarm-Systemen zu erhalten.
567
568 <p>Wenn Sie <prgn>exim</prgn> haben, benötigen Sie den Daemon nicht
569 arbeitend, um dies zu erreichen, da der Standard-<prgn>cron</prgn>-Job
570 die Mails abarbeitet. Sehen Sie in <ref id="disableserv"> wie man dies
571 erledigt.
572
573 <sect1>Konfiguration eines Nullmailers
574
575 <p>Sie mögen einen lokalen Mail-Daemon wollen, so dass er die Mails, die
576 vom lokalen Rechner zu einem anderen System geschickt wurden, versenden kann.
577 Dies ist üblich, wenn Sie eine Anzahl von Systemen zu administrieren haben
578 und nicht zu jedem von diesen eine Verbindung aufbauen wollen, um die dort
579 lokal verschickten Mails zu lesen. Genau wie all das Protokollieren eines
580 jeden individuellen Systems durch einen zentralen syslog-Server zentralisiert
581 werden kann, so kann auch Mail zu einem zentralen Mail-Server gesandt werden.
582
583 <p>Solch ein <em>nur sendendes</em> System sollte sorgfältig dafür
584 eingerichtet werden. Der Daemon kann ebenso konfiguriert werden, nur an der
585 Loopback-Adresse zu lauschen.
586
587 <p>Die folgenden Konfigurationsschritte müssen nur zur Konfiguration des
588 <package>exim</package>-Pakets in der Debian 3.0 Version vorgenommen werden.
589 Wenn Sie eine neuere Version verwenden (wie z.B. 3.1, das
590 <package>exim4</package> verwendet), so wurde das Installationssystem
591 verbessert, so dass, wenn der Mail-Transport-Agent konfiguriert wurde nur
592 lokale Mails zu versenden, es automatisch nur Verbindungen vom lokalen
593 Rechner und keine entfernten Verbindungen zulässt.
594
595 <p>In einem Debian 3.0 System mit <package>exim</package> muss man den
596 SMTP-Daemon aus <prgn>inetd</prgn> wie folgt entfernen:
597
598 <example>
599 $ update-inetd --disable smtp
600 </example>
601
602 <p>und den Mail-Daemon so konfigurieren, dass er nur auf die lokale
603 Schleife achtet. In <prgn>exim</prgn> (dem Standard-Mail-Transport-Agent (MTA) unter
604 Debian) tun Sie dies, indem Sie in der Datei
605 <file>/etc/exim.conf</file> die Zeile
606
607 <example>
608 local_interfaces = "127.0.0.1"
609 </example>
610
611 hinzufügen.
612
613 <p>Starten Sie beide Daemonen neu (inetd und exim) und exim wird
614 lediglich auf den Socket 127.0.0.1:25 lauschen. Seien Sie vorsichtig und
615 deaktivieren Sie erst inetd, oder exim wird nicht neu starten, da der
616 inetd-Daemon bereits eingehende Verbindungen behandelt.
617
618 <p>Bei <prgn>postfix</prgn> editieren Sie <file>/etc/postfix/main.conf</file>:
619
620 <example>
621 inet_interfaces = localhost
622 </example>
623
624 <p>Wenn Sie lediglich lokale Mails wollen, ist dieses Herangehen
625 besser als den Mailer-Daemon in einen tcp-Wrapper zu hüllen oder
626 Firewall-Regeln einzufügen, die den Zugang für alle limitieren.
627 Wenn Sie jedoch auch auf andere Schnittstellen reagieren
628 müssen, sollten Sie überlegen, ihn vom inetd aufrufen zu lassen
629 und einen tcp-Wrapper einzusetzen, so dass eingehende Verbindungen gegen
630 <file>/etc/hosts.allow</file> und <file>/etc/hosts.deny</file>
631 geprüft werden. Außerdem werden Sie vor unautorisierten
632 Zugriffsversuchen gegen Ihren Mail-Daemon durch angemessenes
633 Protokollieren gewarnt werden wollen.
634
635 <p>In jedem Fall können Sie Mail-Zustellversuche auf dem SMTP-Level
636 ablehnen, indem Sie die <file>/etc/exim/exim.conf</file> abändern,
637 damit Sie Folgendes enthält:
638
639 <example>
640 receiver_verify = true
641 </example>
642
643 <p>Auch wenn Ihr Mail-Server keine Mails zustellen wird, ist diese
644 Konfiguration für den Relay-Tester auf <url
645 id="http://www.abuse.net/relay.html"> nötig, um festzustellen, dass
646 Ihr Server <em>nicht</em> relaisfähig ist.
647
648 <!-- Jens: up to here for know -->
649 <p>If you want a relay-only setup, however, you can consider changing
650 the mailer daemon to programs that can <em>only</em> be configured to
651 forward the mail to a remote mail server. Debian provides currently
652 both <package>ssmtp</package> and <package>nullmailer</package> for
653 this purpose. In any case, you can evaluate for yourself any of the
654 mail transport agents
655 <footnote>
656 To retrieve the list of mailer daemons available in Debian try:
657 <example>
658 $ apt-cache search mail-transport-agent
659 </example>
660 <p>The list will not include <prgn>qmail</prgn>, which is distributed
661 only as source code in the <package>qmail-src</package> package.
662 </footnote>
663 provided by Debian and see which one suits best to the system's
664 purposes.
665
666 <sect1>Providing secure access to mailboxes
667
668 <p>If you want to give remote access to mailboxes there are a number
669 of POP3 and IMAP daemons available.<footnote>
670 A list of servers/daemons which support these
671 protocols in Debian can be retrieved with:
672 <example>
673 $ apt-cache search pop3-server
674 $ apt-cache search imap-server
675 </example>
676 </footnote>
677 However, if you provide IMAP access note that it is a general file
678 access protocol, it can become the equivalent of a shell access
679 because users might be able to retrieve any file that they can
680 through it.
681
682 <p>Try, for example, to configure as your inbox path
683 <tt>{server.com}/etc/passwd</tt> if it succeeds your IMAP daemon is
684 not properly configured to prevent this kind of access.
685
686 <p>Of the IMAP servers in Debian the <prgn>cyrus</prgn> server (in the
687 <package>cyrus-imapd</package> package) gets around this by having all
688 access be to a database in a restricted part of the file system. Also,
689 <prgn>uw-imapd</prgn> (either install the <package>uw-imapd</package>
690 or better, if your IMAP clients support it,
691 <package>uw-imapd-ssl</package>) can be configured to chroot the users
692 mail directory but this is not enabled by default. The documentation
693 provided gives more information on how to configure it.
694
695 <p>Also, you might want to run an IMAP server that does not need valid
696 users to be created on the local system (which would grant shell
697 access too), both <package>courier-imap</package> (for IMAP) and
698 <package>courier-pop</package> <package>teapop</package> (for POP3)
699 and <package>cyrus-imapd</package> (for both POP3 and IMAP) provide
700 servers with authentication methods beside the local user
701 accounts. <prgn>cyrus</prgn> can use any authentication method that
702 can be configured through PAM whileas <prgn>teapop</prgn> might use
703 databases (such as <package>postgresql</package> and
704 <package>mysql</package>) for user authentication.
705
706
707 <p>FIXME: Check: <package>uw-imapd</package> might be configured with
708 user authentication through PAM too..
709
710 <sect1>Sicherer Empfang von Mails
711 <p>
712 Das Lesen und Empfangen von Mails ist das gebräuchlichste
713 Klartext-Protokoll. Wenn Sie POP3 oder IMAP benutzen, um Ihre Mails zu
714 erhalten, senden Sie ein Klartext-Passwort über das gesamte Netz, so
715 dass ziemlich jeder Ihre Mails von nun an lesen kann. Benutzen Sie
716 statt-
717 dessen SSL (Secure Sockets Layer) um Ihre Mails zu empfangen. Wenn Sie
718 einen Shell-Account auf dem Rechner, der als POP oder IMAP-Server agiert,
719 haben, ist die andere Alternative ssh. Hier ist eine beispielhafte
720 <file>fetchmailrc</file> um dies zu zeigen:
721
722 <example>
723 poll mein-imap-mailserver.org via "localhost"
724 with proto IMAP port 1236
725 user "ref" there with password "hackmich" is alex here warnings 3600
726 folders
727 .Mail/debian
728 preconnect 'ssh -f -P -C -L 1236:my-imap-mailserver.org:143 -l ref
729 mein-imap-mailserver.org sleep 15 &lt;/dev/null &gt; /dev/null'
730 </example>
731
732 <p>Die wichtige Zeile ist die preconnect-Zeile. Sie startet eine
733 ssh-Verbindung und erstellt den notwendigen Tunnel, durch den automatisch
734 alle Verbindungen zum lokalen Port 1236 verschlüsselt an den
735 IMAP-Mail-Server weitergeleitet werden. Eine andere Möglichkeit
736 wäre es, fetchmail mit SSL-Unterstützung zu benutzen.
737
738 <p>Wenn Sie verschlüsselte Mail-Dienste wie POP oder IMAP anbieten
739 möchten, <tt>apt-get install stunnel</tt> und starten Sie Ihren
740 Daemon auf diese Weise:
741
742 <example>
743 stunnel -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/popd
744 </example>
745
746
747 <p>Dieses Kommando umhüllt den angegeben Daemon (-l) an den Port
748 (-d) und nutzt ein bestimmtes Zertifikat (-p).
749
750
751
752 <sect id="sec-bind">Sichern von BIND
753
754 <p>Es gibt verschiedene Dinge mit denen Sie sich auseinander setzen
755 sollten, um einen Domain-Server-Daemon abzusichern, die ähnlich zu
756 den Überlegungen sind, wie man einen anderen Dienst absichert:
757
758 <list>
759
760 <item>Konfigurieren Sie den Daemon selbst so dass er von außen nicht
761 missbraucht werden kann (siehe auch <ref id="configure-bind">).
762 Dies schließt das Einschränken von
763 Abfragen durch Clients ein: Zonen-Transfers und rekursive Abfragen.
764
765 <item>Einschränken des Zugriffs des Daemon auf den Server
766 selbst, so dass dem Schaden für das System im Falle eines Einbruchs
767 Grenzen gesetzt sind. Hierzu gehört auch, den Daemon als
768 nicht-privilegierten User laufen zu lassen (siehe <ref id="user-bind">)
769 und ihn zu chrooten (siehe <ref id="chroot-bind">).
770
771 </list>
772
773 <sect1 id="configure-bind">Bind configuration to avoid misuse
774
775 <p>Sie sollten einige Informationen, die von außen abgefragt werden
776 können, zurückhalten, so dass man nicht wertvolle Informationen
777 über Ihre Organisation, die Sie nicht herausgeben wollen, abfragen
778 kann. Dies schließt die folgenden Optionen mit ein:
779 <em>allow-transfer</em>, <em>allow-query</em>, <em>allow-recursion</em>
780 und <em>version</em>. Sie können dies in dem global Abschnitt tun
781 (so wird es auf alle Zonen angewandt) oder jeweils pro Zone. Dies ist im
782 Paket <package>bind-doc</package> dokumentiert, sobald das Paket
783 installiert ist können Sie hierzu mehr in
784 <file>/usr/share/doc/bind/html/index.html</file> lesen.
785
786 <p>Stellen Sie sich vor, Ihr Server ist mit dem Internet und Ihrem
787 internen Netzwerk (Ihre interne IP ist 192.168.1.2) verbunden - ein
788 einfacher Server im heimischen Netzwerk. Sie möchten keinen Dienst
789 im Internet anbieten und DNS-Abfragen lediglich Ihrem internen Host
790 erlauben. Sie sollten dies einschränken, indem Sie folgendes in Ihre
791 <file>/etc/bind/named.conf</file> aufnehmen:
792
793 <example>
794 options {
795 allow-query { 192.168.1/24; } ;
796 allow-transfer { none; } ;
797 allow-recursion { 192.168.1/24; } ;
798 listen-on { 192.168.1.2; } ;
799 forward { only; } ;
800 forwarders { A.B.C.D; } ;
801 };
802 </example>
803
804 <p>Die <em>listen-on</em> Option bewirkt, dass sich DNS nur auf die
805 Schnittstelle bindet, die die interne Adresse hat, aber sogar wenn diese
806 Schnittstelle Verbindung zum Internet hat (zum Beispiel weil Sie NAT
807 benutzen), werden Abfragen nur akzeptiert, wenn sie von internen Hosts
808 kommen. Wenn das System mehrere Schnittstellen hat und Sie kein
809 <em>listen-on</em> gesetzt haben, könnten zwar nur interne Nutzer
810 Abfragen starten, aber, da der Port für Angreifer von außen
811 ansprechbar ist, könnten Sie versuchen den DNS abzustürzen
812 (oder durch Speicher-Überlauf-Attacken auszunutzen). Sie
813 könnten ihn sogar dazu bringen, lediglich auf 127.0.0.1 zu
814 hören, wenn Sie den DNS-Service nicht für ein anderes System
815 anbieten wollen.
816 </p>
817
818 <p>Der version.bind-Eintrag in der chaos class enthält die Version
819 des derzeit laufenden Bind-Prozesses. Diese Information wird oft von
820 automatischen Scannern und bösartigen Individuen dazu verwendet,
821 heraus zu finden, ob ein Bind für eine bestimmt Attacke verwundbar
822 ist. Indem Sie falsche oder gar keine Informationen im version.bind
823 Eintrag zur Verfügung stellen, minimieren Sie die
824 Wahrscheinlichkeit, dass jemand Ihren Server aufgrund der publizierten
825 Version attackieren wird. Um Ihre eigene Version anzugeben, benutzen Sie
826 die <em>Version</em> Direktive in der folgenden Art:
827 <example> options { ... verschiedene andere Optionen ...
828 version "Nicht verfuegbar."; }; </example>
829
830 <p>Das Ändern des version.bind Eintrags schützt eigentlich
831 nicht gegen Attacken, aber Sie können es als sinnvolle
832 Schutzvorrichtung ansehen.
833 </p>
834
835 <p>Eine beispielhafte <file>named.conf</file>-Konfigurationsdatei
836 könnte so aussehen:
837
838 <example>
839 acl internal {
840 127.0.0.1/32; // localhost
841 10.0.0.0/8; // intern
842 aa.bb.cc.dd; // eth0 IP
843 };
844
845 acl friendly {
846 ee.ff.gg.hh; // slave DNS
847 aa.bb.cc.dd; // eth0 IP
848 127.0.0.1/32; // localhost
849 10.0.0.0/8; // intern
850 };
851
852 options {
853 directory "/var/cache/bind";
854 allow-query { internal; };
855 allow-recursion { internal; };
856 allow-transfer { none; };
857 };
858 // Ab hier bis zur meineseite.bogus Zone
859 // ist alles im Grunde die unveränderte Debian-Standardeinstellung
860 logging {
861 category lame-servers { null; };
862 category cname { null; };
863 };
864
865 zone "." {
866 type hint;
867 file "/etc/bind/db.root";
868 };
869
870 zone "localhost" {
871 type master;
872 file "/etc/bind/db.local";
873 };
874
875 zone "127.in-addr.arpa" {
876 type master;
877 file "/etc/bind/db.127";
878 };
879
880 zone "0.in-addr.arpa" {
881 type master;
882 file "/etc/bind/db.0";
883 };
884
885 zone "255.in-addr.arpa" {
886 type master;
887 file "/etc/bind/db.255";
888 };
889
890 // Zone, die ich selbst hinzugefügt habe
891 zone "meineseite.bogus" {
892 type master;
893 file "/etc/bind/named.meineseite";
894 allow-query { any; };
895 allow-transfer { friendly; };
896 };
897 </example>
898
899 <P>Bitte prüfen Sie (erneut) die Debian-Fehler-Datenbank (BTS)
900 bezüglich Bind, insbesondere <url name="Bug #94760 (regarding ACLs
901 on zone transfers)" id="http://bugs.debian.org/94760">. Fühlen Sie
902 sich ruhig dazu ermutigt zu diesem Bugreport beizutragen, wenn Sie glauben,
903 nützliche Informationen hinzufügen zu können.
904
905 <sect1 id="user-bind">Ändern des BIND Users
906
907 <p>Bezüglich der Beschränkung von BINDs Privilegien müssen
908 Sie beachten, dass, wenn Sie BIND als nicht-root User laufen lassen, BIND
909 neue Netzwerk-Schnittstellen nicht automatisch entdecken kann, zum Beispiel
910 wenn Sie eine PCMCIA-Karte in Ihr Notebook stecken. Lesen Sie README.Debian in Ihrer
911 Dokumentation (<file>/usr/share/doc/bind/README.Debian</file>) für
912 mehr Informationen hierzu. Es gab in letzter Zeit Sicherheitsprobleme
913 mit BIND, so dass es nützlich ist, den User zu wechseln, wenn es
914 möglich ist. Wir werden die Schritte, die dazu nötig sind,
915 detailliert aufführen. Wenn Sie dies automatisch machen lassen wollen,
916 probieren Sie das Skript in <ref id="bind-chuser"> aus.
917
918 <p>Um BIND unter einem anderen User laufen zu lassen, müssen Sie
919 zunächst einen separaten User und eine separate Gruppe dafür
920 erstellen (es ist <em>keine</em> gute Idee für alle Dienste, die
921 Sie nicht als root laufen lassen, den User nobody und die Gruppe nogroup
922 zu benutzen). In diesem Beispiel wird der User und die Gruppe
923 <tt>named</tt> benutzt. Sie können diese anlegen, indem Sie die
924 folgenden Kommandos eingeben:
925 <example>
926 addgroup named
927 adduser --system --home /home/named --no-create-home --ingroup named \
928 --disabled-password --disabled-login named
929 </example>
930
931 <p>Beachten Sie, dass der User <tt>named</tt> sehr eingeschränkt
932 ist. Wenn Sie &ndash; aus welchen Gründen auch immer &ndash; ein weniger
933 eingeschränktes Setup haben möchten, benutzen Sie:
934 <example>
935 adduser --system --ingroup named named
936 </example>
937
938 <p>Editieren Sie nun <tt>/etc/init.d/bind</tt> mit Ihrem Lieblings-Editor
939 und ändern Sie die Zeile, die mit
940 <example>
941 start-stop-daemon --start
942 </example>
943
944 anfängt zu<footnote>Note that depending on your bind version you might not have the
945 <tt>-g</tt> option, most notably if you are using woody and installing
946 bind9 (9.2.1-2.woody).</footnote>:
947 <example>
948 start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
949 </example>
950
951 <P>Change the permissions of files that are used by Bind, including <file>
952 /etc/bind/rndc.key</file>:
953
954 <example>
955 -rw-r----- 1 root named 77 Jan 4 01:02 rndc.key
956 </example>
957
958 and where bind creates its pidfile, using, for example, <file>/var/run/named</file> instead of <file>/var/run</file>:
959
960 <example>
961 $ mkdir /var/run/named
962 $ chown named.named /var/run/named
963 $ vi /etc/named.conf
964 [ ... update the configuration file to use this new location ...]
965 options { ...
966 pid-file "/var/run/named/named.pid";
967 };
968 [ ... ]
969 </example>
970
971 <p>Außerdem müssen Sie, um zu verhindern, dass irgendetwas als root
972 läuft, die <tt>reload</tt>-Zeile auskommentieren:
973
974 <example>
975 reload)
976 /usr/sbin/ndc reload
977 </example>
978
979 <p>und in Folgendes ändern:<!--Jens: <p> überprüfen -->
980 <example>
981 reload)
982 $0 stop
983 sleep 1
984 $0 start
985 </example>
986
987 <p>Beachten Sie: Abhängig von Ihrer Debian-Version, müssen Sie
988 vielleicht auch die <tt>restart</tt>-Zeile ändern. Dies wurde in der
989 Version <tt>1:8.3.1-2</tt> von Debians BIND-Paket repariert.
990
991 <p>Alles was Sie jetzt noch tun müssen, ist bind durch
992 '/etc/init.d/bind restart' neu zu starten, und dann Ihr Syslog auf zwei
993 Einträge. wie die folgenden, prüfen:
994 <p>
995 <example>
996 Sep 4 15:11:08 nexus named[13439]: group = named
997 Sep 4 15:11:08 nexus named[13439]: user = named
998 </example>
999
1000
1001 <p>Voilá! Ihr named läuft <em>nicht mehr</em> als root. Wenn Sie mehr
1002 Informationen darüber lesen wollen, warum BIND nicht
1003 als nicht-root User auf Debian-Systemen läuft, sehen Sie bitte in
1004 der Fehlerdatenbank zu Bind nach, insbesondere <url name="Bug #50013:
1005 bind should not run as root" id="http://bugs.debian.org/50013"> und
1006 <url name="Bug #132582: Default install is potentially insecure"
1007 id="http://bugs.debian.org/132582">,
1008 <url name="Bug #53550" id="http://bugs.debian.org/53550">,
1009 <url name="Bug #128120" id="http://bugs.debian.org/52745">, und
1010 <url name="Bug #128120" id="http://bugs.debian.org/128129">.
1011 Fühlen Sie sich ruhig dazu ermuntert, etwas zu den Fehlermeldungen
1012 beizutragen, wenn Sie denken, nützliche Informationen beitragen zu
1013 können.
1014
1015
1016 <sect1 id="chroot-bind">Chrooten des Name-Servers
1017
1018 <p>Um die größtmögliche BIND-Sicherheit zu erreichen,
1019 müssen Sie nun ein Chroot-Gefängnis (siehe <ref id="chroot">)
1020 um Ihren Daemon herum bauen. Es gibt einen sehr einfachen Weg dies zu
1021 erreichen: Die <tt>-t</tt> Option (siehe die Handbuchseite <manref
1022 name="named" section="8"> oder Seite 100 von
1023 <url id="http://www.nominum.com/content/documents/bind9arm.pdf"
1024 name="Bind's 9 documentation (PDF)">). Dies wird Bind selbst in ein bestimmtes
1025 Verzeichnis chrooten lassen, ohne dass Sie einen eigenes
1026 Chroot-Gefängnis aufsetzen müssen, oder sich Sorgen um dynamische
1027 Bibliotheken machen müssen. Die einzigen Dateien, die in diesem
1028 Chroot-Gefängnis benötigt werden, sind:
1029
1030 <example>
1031 dev/null
1032 etc/bind/ - sollte die named.conf und alle Server-Zonen enthalten
1033 sbin/named-xfer - wenn Sie Namen transferieren
1034 var/run/named/ - sollte die pid und den Cache des Name-Server (falls es
1035 ihn gibt) enthalten. Dieses Verzeichnis muss für
1036 den named-User schreibbar sein.
1037 var/log/named - Wenn Sie in einer Datei protokollieren, muss dies
1038 für den named-User schreibbar sein.
1039 dev/log - syslogd sollte hierauf hören, wenn named so
1040 konfiguriert ist, dass er darüber protokolliert.
1041 </example>
1042
1043
1044 <p>Damit Ihr Bind Daemon vernünftig läuft, braucht er bestimmt
1045 Zugriffsrechte auch die named-Dateien. Dies ist eine einfache
1046 Angelegenheit, da die Konfigurations-Dateien immer in <tt>/etc/named/</tt>
1047 liegen. Beachten Sie, dass er lediglich Lesezugriff benötigt, es
1048 sei denn, es handelt sich um einen sekundären oder
1049 zwischen speichernden Name-Server. Wenn dies der Fall ist, müssen Sie
1050 ihm Lese- und Schreibzugriff auf die notwendigen Zonen gewähren (so
1051 dass Zonen-Transfers vom primären Server funktionieren).
1052
1053 <p>Mehr Informationen über das Chrooten von Bind finden Sie unter
1054 <url name="Chroot-BIND-HOWTO"
1055 id="http://www.tldp.org/HOWTO/Chroot-BIND-HOWTO.html"> (betrifft Bind
1056 9) und <url name="Chroot-BIND8-HOWTO"
1057 id="http://www.tldp.org/HOWTO/Chroot-BIND8-HOWTO.html"> (betrifft
1058 Bind 8). Diese Dokumente sollten auch nach der Installation des Paketes
1059 <package>doc-linux-text</package> (Text-Version) oder
1060 <package>doc-linux-html</package> (HTML-Version) verfügbar sein. Ein
1061 anderes nützliches Dokument ist <url
1062 id="http://web.archive.org/web/20011024064030/http://www.psionic.com/papers/dns/dns-linux">.
1063
1064 <p>Wenn Sie für Bind 8.2.3 (aus Debian Potato) ein komplettes
1065 Chroot-Gefängnis aufsetzen (d.h. Sie benutzen nicht nur <tt>-t</tt>) ,
1066 stellen Sie sicher, dass Sie die folgenden Dateien darin haben:
1067
1068 <example>
1069 dev/log - syslogd sollte hierauf hören
1070 dev/null
1071 etc/bind/named.conf
1072 etc/localtime
1073 etc/group - mit einer einzigen Zeile: "named:x:GID:"
1074 etc/ld.so.cache - mit ldconfig erstellt
1075 lib/ld-2.1.3.so
1076 lib/libc-2.1.3.so
1077 lib/ld-linux.so.2 - symbolischer Link auf ld-2.1.3.so
1078 lib/libc.so.6 - symbolischer Link auf libc-2.1.3.so
1079 sbin/ldconfig - kann gelöscht werden, nachdem Chroot aufgesetzt wurde
1080 sbin/named-xfer - wenn Sie Namen transferieren
1081 var/run/
1082 </example>
1083
1084 <p>Sorgen Sie auch dafür, dass <prgn>syslogd</prgn> auf
1085 $CHROOT/dev/log achtet, so dass der Name-Server seine
1086 syslog-Einträge in das lokale System-Protokoll schreiben lassen
1087 kann.
1088
1089 <p>Wenn Sie Probleme mit dynamischen Bibliotheken vermeiden wollen,
1090 können Sie Bind statisch kompilieren. Sie können hierzu
1091 <prgn>apt-get</prgn> mit der <tt>source</tt> Option benutzen. Es kann
1092 sogar die Pakete herunterladen, die Sie zum Kompilieren benötigen.
1093 Sie müssten etwas ähnliches wie das hier tun:
1094
1095 <!-- FIXME: Does bind use autoconf? -->
1096 <example>
1097 $ apt-get --download-only source bind build-dep bind
1098 $ cd bind-8.2.5-2
1099 (ändern Sie das Makefile.in, so dass CFLAGS die Option '-static'
1100 beinhaltet bevor die @CFLAGS@ Definition von autoconf verwendet wird)
1101 $ dpkg-buildpackage -rfakeroot
1102 $ cd ..
1103 $ dpkg -i bind-8.2.5-2*deb
1104 </example>
1105
1106 <p>Nach der Installation werden Sie die Dateien in das Chroot-Gefängnis
1107 verschieben müssen <footnote>es sei denn, Sie benutzen die
1108 <tt>instdir</tt> Option, wenn Sie <prgn>dpkg</prgn> aufrufen, aber dann
1109 wird das chroot-Gefängnis etwas komplizierter </footnote>. Sie
1110 können die <tt>init.d</tt> Skripten in <file>/etc/init.d</file>
1111 lassen, so dass das System automatisch den Name-Server starten wird, aber
1112 editieren Sie sie in dem Sie bei den <prgn>start-stop-daemon</prgn>
1113 Aufrufen in diesen Skripten <tt>--chroot /location_of_chroot</tt>
1114 hinzufügen.
1115
1116 <p>For more information on how to set up chroots see <ref id="chroot">.
1117
1118 <p>FIXME, merge info from
1119 <url id="http://people.debian.org/~pzn/howto/chroot-bind.sh.txt">,
1120 <!-- <url id="http://people.pdxlinux.org/~karlheg/"> (Bind9 in Debian), -->
1121 <url id="http://www.cryptio.net/~ferlatte/config/"> (Debian-spezifisch),
1122 <url id="http://web.archive.org/web/20021216104548/http://www.psionic.com/papers/whitep01.html"> und
1123 <url id="http://csrc.nist.gov/fasp/FASPDocs/NISTSecuringDNS.htm">.
1124 <!-- und
1125 <url id="http://www.acmebw.com/papers/securing.pdf">. -->
1126
1127 <sect>Absichern von Apache
1128
1129 <p>FIXME: Add content: modules provided with the normal Apache installation
1130 (under /usr/lib/apache/X.X/mod_*) and modules that can be installed
1131 separately in libapache-mod-XXX packages.
1132
1133 <p>Sie können den Zugriff auf Ihren Apache Server einschränken,
1134 wenn Sie ihn nur intern benutzen wollen (zum Beispiel zu Testzwecken,
1135 oder um auf die <package>doc-central</package> Archive zuzugreifen, etc.)
1136 und nicht wollen, dass von außen auf ihn zugegriffen werden kann. Um
1137 dies zu tun benutzen Sie die <tt>Listen</tt> oder <tt>BindAddress</tt>
1138 Direktiven in der Datei <file>/etc/apache/http.conf</file>.
1139
1140 <p>Benutzen von Listen:
1141 <example>
1142 Listen 127.0.0.1:80
1143 </example>
1144 <p>Benutzen von BindAddress:
1145 <example>
1146 BindAddress 127.0.0.1
1147 </example>
1148
1149 <p>Starten Sie anschließend den Apache mit <tt>/etc/init.d/apache
1150 restart</tt> neu, und Sie werden sehen, dass er nur auf die lokale
1151 Schleife achtet.
1152
1153 <p>In jedem Fall sollten Sie, wenn Sie nicht die ganze Funktionalität
1154 die Apache zur Verfügung stellt benutzen wollen, mal einen Blick auf
1155 die anderen Web-Server aus Debian werfen, zum Beispiel
1156 <package>dhttpd</package>.
1157
1158 <p>Die <url name="Apache Documentation"
1159 id="http://httpd.apache.org/docs/misc/security_tips.html"> stellt viele
1160 Informationen zu Sicherheitsmaßnahmen, die Sie auf einem Apache
1161 Web-Server anwenden können, bereit (die gleichen Informationen
1162 erhalten Sie unter Debian auch durch das Paket
1163 <package>apache-doc</package>).
1164 <!-- Removed Jens: There was a FIXME in the past when this was missing, readd?
1165 It can also be useful to read the
1166 <url name="Apache Security Configuration Document"
1167 id="http://www.intersectalliance.com/projects/ApacheConfig/index.html">
1168 provided by <url name="InterSect Alliance"
1169 id="http://www.intersectalliance.com/">. -->
1170
1171 <p>More information on further restricting Apache by setting up a
1172 chroot jail is provided in <ref id="chroot-apache-env">.
1173
1174 <sect1>Disabling users from publishing web contents
1175
1176 <p>The default Apache installation in Debian permits users to publish
1177 content under the <file>$HOME/public_html</file>. This content can
1178 be retrieved remotely using an URL such as:
1179 http://your_apache_server/~user.
1180
1181 <p>If you do not want to permit this you must change the
1182 <file>/etc/apache/http.conf</file> configuration file commenting out:
1183
1184 <example>
1185 LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
1186 </example>
1187
1188 But if the module was linked statically (you can check this running
1189 <tt>apache -l</tt>) you must add the following instead:
1190
1191 <example>
1192 Userdir disabled
1193 </example>
1194
1195 <p>Note: The <tt>disabled</tt> keyword is only available in Apache 1.3
1196 and above. In you are using older versions of apache, you need to change
1197 the configuration file and add:
1198
1199 <!-- This can be removed since woody provides Apache 1.3 -->
1200
1201 <example>
1202 &lt;Directory /home/*/public_html&gt;
1203 AllowOverride None
1204 Order deny,allow
1205 Deny from all
1206 &lt;/Directory&gt;
1207 </example>
1208
1209 <p>An attacker might still do user enumeration, since the answer
1210 of the web server will be a <em>403 Permission Denied</em> and not a
1211 <em>404 Not available</em>.
1212
1213 <sect1>Logfiles permissions
1214
1215 <p>Apache logfiles, since 1.3.22-1, are owned by user 'root' and group
1216 'adm' with permissions 640 this permissions are changed after
1217 rotation. An intruder that accessed the system through the web server
1218 would not be able (without privilege escalation) to remove old log
1219 file entries.
1220
1221 <!-- FIXME: what do you mean with "this permissions are changed after -->
1222 <!-- rotation" -->
1223
1224 <sect1>Published web files
1225
1226 <p>Apache files are located under <file>/var/www</file>. Just after
1227 installation the default file provides some information on the system
1228 (mainly that it's a Debian system running Apache). The default
1229 webpages are owned by user root and group root by default, whileas the
1230 Apache process runs as user www-data and group www-data. This should
1231 make attackers that compromise the system through the web server
1232 harder to deface the site. You should, of course, substitute the
1233 default web pages (which might provide information you do not want to
1234 show to outsiders) with your own.
1235
1236 <p>
1237
1238 <sect>Absichern von finger
1239 <p>Wenn Sie einen finger-Dienst laufen lassen wollen, fragen Sie sich
1240 bitte zuerst, ob Sie das auch tun müssen. Wenn Sie müssen,
1241 werden Sie feststellen, dass Debian viele finger-Daemonen zur
1242 Verfügung stellt (hier die Ausgabe von <prgn>apt-cache search
1243 fingerd</prgn>):
1244
1245 <list>
1246 <item>cfingerd - Konfigurierbarer finger-Daemon
1247 <item>efingerd - Ein weiterer Unix-finger-Daemon mit anpassbarer Ausgabe
1248 <item>ffingerd - Ein sicherer finger-Daemon
1249 <item>fingerd - Remote-User Informationsserver
1250 <item>xfingerd - BSD-ähnlicher finger-Daemon mit qmail Unterstützung
1251 </list>
1252 <p><package>ffingerd</package> ist der empfohlene finger-Daemon, wenn Sie
1253 vorhaben, einen öffentlichen Dienst anzubieten. In jedem Fall sind
1254 Sie dazu angespornt, ihn über inetd, xinetd oder tcpserver laufend
1255 aufzusetzen: Schränken Sie die Anzahl der Prozesse die gleichzeitig
1256 laufen dürfen ein. Schränken Sie den Zugriff auf den
1257 Finger-Daemon von bestimmten Hosts ein (indem Sie tcp-wrapper benutzen)
1258 und lassen Sie ihn nur auf die Schnittstellen achten, auf die er achten
1259 muss.
1260
1261 <!--
1262 # This is quite personal, IMHO, since this is due to the fact that
1263 # root privileges are dropped on startup. I prefer an attacker to erase
1264 # a service's log files than to erase all of my system's logs. Anyhow, this
1265 # can be improved by changing user permissions after rotation.
1266 -->
1267
1268 <sect id="chroot">Allgemeine chroot- und suid-Paranoia
1269
1270 <!--
1271 <p>Wahrscheinlich ist es nur fair zu sagen, dass die Komplexität von
1272 BIND der Grund dafür ist, warum er in den letzten Jahren so oft
1273 für Attacken verwundbar war.
1274
1275 <p>Dies trifft auch auf andere Programme mit komplexen Funktionen und
1276 größerer Nutzergemeinde zu, einschließlich sendmail und einige
1277 ftp-Daemonen (z.B. wu-ftpd). (Natürlich kann auch ein Programm ohne
1278 viele Funktionen, das seine Nutzer nicht zufrieden stellt, unsicher sein,
1279 abgesehen davon, dass es nutzlos ist.)
1280 -->
1281
1282 <p><prgn>chroot</prgn> is one of the most powerful possibilities to
1283 restrict a daemon or a user or another service. Just imagine a jail
1284 around your target, which the target cannot escape from (normally, but
1285 there are still a lot of conditions that allow one to escape out of
1286 such a jail). If you do not trust a user or a service, you can create
1287 a modified root environment for him. This can use quite a bit of disk
1288 space as you need to copy all needed executables, as well as
1289 libraries, into the jail. But then, even if the user does something
1290 malicious, the scope of the damage is limited to the jail.
1291
1292 <!-- Consider removing this:
1293 <p>A good example for this case is, if you do not authenticate against
1294 <file>/etc/passwd</file> but use LDAP or MySQL instead. So your
1295 ftp-daemon only needs a binary and perhaps a few libraries. A
1296 <prgn>chroot</prgn>ed environment would be an excellent security improvement;
1297 if a new exploit is found for this ftp-daemon, then attackers can only exploit
1298 the UID of the ftp-daemon-user and nothing else.
1299 -->
1300
1301 <p>Many services running as daemons could benefit from this sort of
1302 arrangement as. The daemons that you install with your Debian
1303 distribution will not come, however, chrooted <footnote> It does try
1304 to run them under <em>minimum priviledge</em> which include running
1305 daemons with their own users instead of having them run as root
1306 </footnote> per default.</p>
1307
1308 <p>This includes: name servers (such as <prgn>bind</prgn>), web
1309 servers (such as <prgn>apache</prgn>), mail servers (such as
1310 <prgn>sendmail</prgn>) and ftp servers (such as
1311 <prgn>wu-ftpd</prgn>). It is probably fair to say that the complexity
1312 of BIND is the reason why it has been exposed to a lot of attacks in
1313 recent years (see <ref id="sec-bind">).
1314
1315 <p>However, Debian does provide some software that can help set up
1316 <prgn>chroot</prgn> environments. See <ref id="auto-chroot">.
1317
1318 <!--
1319 <p>In jedem Fall sollten Sie, wenn Sie diese laufen lassen, ähnliche
1320 Arrangements für sie in Erwägung ziehen &ndash; entziehen von
1321 root-Privilegien, einsperren in ein chroot-Gefängnis &ndash; oder
1322 ersetzen durch ein sichereres Äquivalent.
1323 -->
1324
1325 <p>Anyway, if you run any service on your system, you should consider
1326 running them as secure as possible. This includes: revoking root
1327 privileges, running in a restricted environment (such as a chroot
1328 jail) or replacing them with a more secure equivalent.</p>
1329
1330 <p>However, be forewarned that a <prgn>chroot</prgn> jail can be
1331 broken if the user running in it is the superuser. So, you need to
1332 make the service run as a non-privileged user. By limiting its
1333 environment you are limiting the world readable/executable files the
1334 service can access, thus, you limit the possibilities of a privilege
1335 escalation by use of local system security vulnerabilities. Even in
1336 this situation you cannot be completely sure that there is no way for
1337 a clever attacker to somehow break out of the jail. Using only server
1338 programs which have a reputation for being secure is a good additional
1339 safety measure. Even minuscule holes like open file handles can be
1340 used by a skilled attacker for breaking into the system. After all,
1341 <prgn>chroot</prgn> was not designed as a security tool but as a
1342 testing tool.</p>
1343
1344 <sect1 id="auto-chroot">Making chrooted environments automatically
1345
1346 <p>There are several programs to chroot automatically servers and
1347 services. Debian currently (accepted in May 2002) provides Wietse
1348 Venema's <prgn>chrootuid</prgn> in the <package>chrootuid</package>
1349 package, as well as <package>compartment</package> and
1350 <package>makejail</package>. These programs can be used to set up a
1351 restricted environment for executing any program
1352 (<prgn>chrootuid</prgn> enables you to even run it as a restricted
1353 user).
1354
1355 <p>Some of these tools can be used to set up the chroot environment
1356 easily. The <prgn>makejail</prgn> program for example, can create and
1357 update a chroot jail with short configuration files (it provides
1358 sample configuration files for <prgn>bind</prgn>, <prgn>apache</prgn>,
1359 <prgn>postgresql</prgn> and <prgn>mysql</prgn>). It attempts to guess
1360 and install into the jail all files required by the daemon using
1361 <prgn>strace</prgn>, <prgn>stat</prgn> and Debian's package
1362 dependancies. More information at <url
1363 id="http://www.floc.net/makejail/">. <prgn>Jailer</prgn> is a similar
1364 tool which can be retrieved from <url
1365 id="http://www.balabit.hu/downloads/jailer/"> and is also available
1366 as a Debian GNU package.
1367
1368 <!-- FIXME Site is down?
1369 <p>Also useful to create chroots (or jails) is
1370 <package>deb.pl</package>, a script that analyses dependencies of a
1371 set of files.
1372 -->
1373
1374 <sect>Allgemeine Klartextpasswort-Paranoia
1375 <p>
1376 Sie sollten versuchen, jeden Netzwerk-Dienst, der seine Passworte als
1377 Klartext über das Netz sendet oder empfängt, wie zum Beispiel
1378 FTP/Telnet/NIS/RPC, vermeiden. Der Autor empfiehlt jedem ssh anstelle von
1379 telnet und ftp zu verwenden.
1380
1381 <p>Vergessen Sie jedoch nicht, dass die Migration von telnet zu ssh die
1382 Sicherheit in keinster Weise erhöht, wenn Sie weiterhin Klartext-
1383 Protokolle verwenden. Am besten wäre es ftp, telnet, pop, imap und
1384 http zu entfernen und durch ihre entsprechenden verschlüsselten
1385 Dienste zu ersetzen. Sie sollten in Erwägung ziehen von diesen
1386 Diensten zu deren SSL-Versionen zu wechseln: ftp-ssl, telnet-ssl,
1387 pop-ssl, https ...
1388
1389 <p>Die meisten der oben aufgelisteten Tipps gelten für jedes
1390 unixoide System (Sie werden sie in jedem anderen sicherheitsrelevanten
1391 Dokument, das Sie jemals lesen, wiederfinden, wenn es sich auf Linux und
1392 andere Unices bezieht).
1393
1394 <sect>NIS deaktivieren
1395
1396 <p>Sie sollten, wenn möglich, nicht NIS, den Network Information
1397 Service, benutzen, da er das gemeinsame Nutzen von Passworten erlaubt. Dies kann
1398 sehr unsicher sein, wenn Ihr Setup fehlerhaft ist.
1399
1400 <p>Wenn Sie Passwörter zwischen verschiedenen Maschinen teilen
1401 müssen, sollten Sie andere alternativen in Erwägung ziehen. Zum
1402 Beispiel können Sie einen LDAP Server aufsetzen, und PAM auf Ihren
1403 System so konfigurieren, dass es den LDAP Server zur User
1404 Authentifizierung kontaktiert. Sie finden ein detailliertes Setup in dem
1405 <url name="LDAP-HOWTO"
1406 id="http://www.tldp.org/HOWTO/LDAP-HOWTO.html">
1407 (<file>/usr/share/doc/HOWTO/en-txt/LDAP-HOWTO.txt.gz</file>).
1408
1409 <p>Sie können mehr über NIS-Sicherheit in dem
1410 <url
1411 name="NIS-HOWTO" id="http://www.tldp.org/HOWTO/NIS-HOWTO.html">
1412 (<file>/usr/share/doc/HOWTO/en-txt/NIS-HOWTO.txt.gz</file>) lesen.
1413
1414
1415 <p>FIXME (jfs): Add info on how to set this up in Debian
1416
1417 <sect id="rpc">Sichern von RPC-Diensten
1418
1419 <p>Sie sollten RPC abschalten, wenn Sie es nicht benötigen.
1420
1421 <p>Remote Procedure Call (RPC) is a protocol that programs can use to
1422 request services from other programs located on different computers.
1423 The <prgn>portmap</prgn> service controls RPC services by mapping
1424 RPC program numbers into DARPA protocol port numbers; it must be
1425 running in order to make RPC calls.
1426
1427 <p>RPC-based services have had a bad record of security holes, although
1428 the portmapper itself hasn't (but still provides information to
1429 a remote attacker).
1430 Einige DDoS (distributed denial of service) Angriffe benutzen
1431 RPC-Löcher, um in das System einzudringen und als so genannter
1432 Agent/Handler zu fungieren.
1433
1434 <p>You only need RPC if you are using an RPC-based service. The most
1435 common RPC-based services are NFS (Network File System) and NIS
1436 (Network Information System). See the previous section for more
1437 information about NIS. The File Alteration Monitor (FAM) provided by the
1438 package <package>fam</package> is also an RPC service, and thus
1439 depends on <package>portmap</package>.
1440
1441 <p>NFS services are quite important in some networks. If that is the case
1442 for you, then you will need to find a balance of security and
1443 usability for your network. (You can read more about NFS security in
1444 the <url name="NFS-HOWTO"
1445 id="http://www.tldp.org/HOWTO/NFS-HOWTO.html">
1446 (<file>/usr/share/doc/HOWTO/en-txt/NFS-HOWTO.txt.gz</file>).)
1447
1448 <sect1>Disabling RPC services completely
1449
1450 <p>Das Abschalten von portmap ist relativ einfach. Es gibt
1451 verschiedene Methoden. Die einfachste in einem Debian 3.0 oder neueren System ist
1452 einfach das Paket <package>portmap</package> zu deinstallieren. Wenn Sie
1453 eine andere Version laufen haben, werden Sie den Dienst, wie in
1454 <ref id="disableserv"> beschrieben, abschalten müssen, weil
1455 das Programm Teil des Pakets <package>net-base</package> (das
1456 nicht deinstalliert werden kann, ohne das System kaputt zu machen) ist.
1457
1458 <p>Notice that some desktop environments (notably, GNOME) use RPC
1459 services and need the portmapper for some of the file management
1460 features. If this is your case, you can limit the access to RPC
1461 services as described below.
1462
1463 <sect1>Limiting access to RPC services
1464
1465 <p>Unfortunately, in some cases removing RPC services from the system is not
1466 an option. Some local desktop services (notably SGI's <package>fam</package>)
1467 are RPC based and thus need a local portmapper. This means that under
1468 some situations, users installing a desktop environment (like GNOME)
1469 will install the portmapper too.
1470
1471 <P>There are several ways to limit access to the portmapper and to
1472 RPC services:
1473
1474 <list>
1475 <item>Block access to the ports used by these services
1476 with a local firewall (see <ref id="firewall-setup">).
1477 <item>Block access to these services using tcp wrappers, since
1478 the portmapper (and some RPC services) are compiled with
1479 <file>libwrap</file> (see <ref id="tcpwrappers">). This means that you can
1480 block access to them through the <file>hosts.allow</file> and
1481 <file>hosts.deny</file> tcp wrappers configuration.
1482 <item>Since version 5-5, the <package>portmap</package> package
1483 can be configured to listen only on the loopback interface. To do this,
1484 modify <file>/etc/default/portmap</file>, uncomment the following line:
1485 <tt>#OPTIONS="-i 127.0.0.1"</tt> and restart the portmapper. This
1486 is sufficient to allow local RPC services to work while at the same time
1487 prevents remote systems from accessing them (see,
1488 however, <ref id="limit-bindaddr">).
1489 </list>
1490
1491 <sect id="firewall-setup">Hinzufügen von Firewall-Fähigkeiten
1492
1493 <p>Das Debian GNU/Linux Betriebssystem hat die eingebauten
1494 Fähigkeiten des Linux Kernels. Dies heißt, dass Sie, wenn Sie ein
1495 Potato (Debian 2.2) System installiert haben (mit dem standardmäßigen Kernel 2.2)
1496 werden Sie <prgn>ipchains</prgn> Firewall-Unterstützung im Kernel
1497 haben. Das Paket <package>ipchains</package> sollte bereits (aufgrund seiner
1498 Priorität) installiert sein.
1499 Wenn Sie Debian 3.0 (oder 3.1) installiert haben (mit
1500 dem standardmäßigen 2.4er Kernel) unterstützt der Kernel Ihr
1501 <!-- Jens: FIXME -->
1502 <prgn>iptables</prgn> (netfilter). Der Hauptunterschied zwischen
1503 <prgn>ipchains</prgn> und <prgn>iptables</prgn> ist, dass letzteres auf
1504 <em>stateful packet inspection</em> (zustandsbehaftete Paketuntersuchung),
1505 so dass Ihnen sicherere (und einfacher zu erstellende)
1506 Filterkonfigurationen zur Verfügung stehen.
1507
1508 <sect1>Firewallen des lokalen Systems
1509
1510 <p>Sie können eine Firewall dazu benutzen, den Zugriff auf Ihr
1511 lokales System und sogar die Kommunikation von ihm nach Außen absichern.
1512 Firewall-Regeln können dazu benutzt werden, Prozesse, die nicht
1513 vernünftig konfiguriert werden können, zu schützen, aber
1514 <em>nicht</em>, um Dienste für Netzwerke, IP-Adressen, etc. zur
1515 Verfügung zu stellen.
1516
1517 <p>Dieser Schritt ist aber hauptsächlich deshalb als letzter in
1518 dieser Anleitung, weil es <em>viel</em> besser ist, sich nicht alleine
1519 auf die Fähigkeiten der Firewall zu verlassen, um ein System zu
1520 schützen. Die Sicherheit eines Systems setzt sich aus mehreren
1521 Ebenen zusammen; eine Firewall sollte die letzte sein, wenn alle Dienste
1522 abgehärtet worden sind. Sie können sich sicherlich leicht eine
1523 Konfiguration vorstellen, bei der ein System lediglich von einer
1524 eingebauten Firewall geschützt, und der Administrator glückselig
1525 die Firewall-Regeln aus irgendwelchen Gründen
1526 (Probleme mit dem Setup, Verdruss, Denkfehler) entfernt. Dieses System
1527 wäre weit geöffnet für Angriffe, wenn es keine andere
1528 Schutzmaßnahmen auf dem System gibt.
1529
1530 <p>Andererseits können Firewall-Regeln auf dem lokalen System
1531 dafür sorgen, dass böse Dinge nicht passieren. Sogar wenn die
1532 bereitgestellten Dienste sicher konfiguriert sind, kann eine Firewall
1533 vor Misskonfigurationen oder frisch installierten Diensten, die noch
1534 nicht passend konfiguriert sind, schützen. Außerdem wird eine strenge
1535 Konfiguration <em>nach Hause telefonierende</em> Trojaner am
1536 Funktionieren hindern, es sei denn, der Firewall-Code wurde entfernt.
1537 Beachten Sie, dass ein Eindringling <em>keinen</em> Superuser-Zugriff
1538 benötigt, um ferngesteuerte Trojaner zu installieren (da es
1539 erlaubt ist, sich an Ports zu binden, wenn es sich nicht um einen
1540 privilegierten Port handelt und die Fähigkeiten (Capabilities) noch vorhanden
1541 sind).
1542
1543 <p>Demzufolge wäre ein passendes Firewall-Setup, eines mit einer
1544 standardmäßigen deny policy (also alles ablehnt, was nicht ausdrücklich
1545 erlaubt ist), und weiterhin:
1546
1547 <list>
1548
1549 <item>eingehende Verbindungen werden nur zu lokalen Diensten von
1550 erlaubten Maschinen gestattet
1551
1552 <item>ausgehende Verbindungen werden nur von Diensten erlaubt, die auf
1553 Ihrem System benutzt werden (DNS, Web-Surfen, pop, email, ...)
1554 <footnote>Im Gegensatz zu persönlichen Firewalls für
1555 andere Betriebssysteme, stellt Debian GNU/Linux (noch) keine
1556 Firewall-Erstellungs-Schnittstelle zur Verfügung, die Regeln
1557 erstellen kann, die einzelne Prozesse oder User einschränken.
1558 Jedoch kann der iptables-Code so konfiguriert werden, dass er dies kann
1559 (siehe dazu das "owner" Modul in der Handbuchseite <manref name="iptables"
1560 section="8">).</footnote>
1561
1562 <item>die forward-Regel verbietet alles (es sei denn, Sie beschützen
1563 andere Systeme, siehe unten)
1564
1565 <item>alle anderen eingehenden und ausgehenden Verbindungen werden
1566 abgelehnt.
1567
1568 </list>
1569
1570 <sect1>Schützen anderer Systeme durch eine Firewall
1571
1572 <p>Eine Debian-Firewall kann auch so installiert werden, dass Sie, mit
1573 Firewall-Regeln, Systeme <em>hinter</em> ihr beschützt, indem es die
1574 Angriffsfläche zum Internet hin einschränkt. Eine Firewall kann
1575 so konfiguriert werden, dass ein Zugriff von Systemen außerhalb
1576 des lokalen Netzwerks auf interne Dienste (Ports) unterbunden wird.
1577 Zum Beispiel muss auf einem Mail-Server lediglich Port 25
1578 (auf dem der Mail-Dienst aufsetzt) von außen zugänglich sein. Eine
1579 Firewall kann so konfiguriert werden, dass sogar wenn es neben den öffentlich
1580 zugänglichen noch andere Netzwerkdienste gibt, direkt an diese gesendete Pakete verwirft (dies
1581 nennt man <em>filtern</em>).
1582
1583 <p>Sie können eine Debian GNU/Linux Maschine sogar so konfigurieren,
1584 dass sie als Bridge-Firewall (überbrückender Schutzwall)
1585 fungiert, d.h. eine filternde Firewall, die komplett transparent zum
1586 gesamten Netzwerk erscheint, ohne IP-Adresse auskommt, und daher
1587 nicht direkt attackiert werden kann. Abhängig von dem installierten
1588 Kernel müssen Sie vielleicht den Bridge-Firewall Patch installieren,
1589 und dann <em>802.1d Ethernet Bridging</em> in der Kernel Konfiguration
1590 und der neuen Option <em>netfilter ( firewalling ) Support</em>
1591 auswählen. Sehen Sie dazu <ref id="bridge-fw">, um zu erfahren, wie
1592 man dies auf einem Debian GNU/Linux System aufsetzt.
1593
1594 <sect1>Aufsetzen einer Firewall
1595
1596 <p>The default Debian installation, unlike other Linux distributions,
1597 does not yet provide a way for the administrator to setup a firewall
1598 configuration throughout the default installation but you can install
1599 a number of firewall configuration packages (see <ref
1600 id="firewall-pack">).
1601
1602 <p>Natürlich ist die Konfiguration einer Firewall immer vom
1603 System und dem Netzwerk abhängig. Ein Administrator muss vorher
1604 das Netzwerklayout und die Systeme, die er beschützen will, kennen,
1605 und ob andere netzwerkspezifischen Erwägungen (wie NAT oder Routing)
1606 berücksichtigt werden müssen. Seien Sie vorsichtig, wenn Sie Ihre
1607 Firewall konfigurieren. Wie Laurence J. Lane im
1608 <package>iptables</package> Paket sagt:
1609
1610 <p><em>Die Werkzeuge können leicht falsch verwendet werden und eine
1611 Menge Ärger verursachen, indem sie den gesamten Zugang zu einem
1612 Computernetzwerk stilllegen. Es ist nicht völlig ungewöhnlich,
1613 dass sich ein Systemadministrator, der ein System verwaltet, das Hunderte
1614 von Kilometer entfernt ist, irrtümlicherweise selbst davon ausgeschlossen
1615 hat. Man kann es sogar schaffen, sich von dem Computer aus zu sperren, dessen
1616 Tastatur unter seinen Fingern liegt. Lassen Sie daher die gebotene Vorsicht
1617 walten.</em>
1618
1619
1620 <p>Vergessen Sie nicht: Das einfache Installieren von
1621 <package>iptables</package> (oder dem älterem Firewallcode) gibt Ihnen
1622 keine Sicherheit, es stellt lediglich die Software zur Verfügung. Um
1623 eine Firewall zu haben, müssen Sie sie konfigurieren.
1624
1625 <p>Wenn Sie keine Ahnung haben, wie Sie Ihre Firewall-Regeln manuell
1626 aufsetzen sollen, sehen Sie in dem <em>Packet Filtering HOWTO</em> und
1627 <em>NAT HOWTO</em> aus dem Paket <package>iptables</package>, zu finden
1628 unter <file>/usr/share/doc/iptables/html/</file> nach.
1629
1630 <p>Wenn Sie nicht viel über Firewalls wissen, sollten Sie beginnen, indem Sie das
1631 <url id="http://www.tldp.org/HOWTO/Firewall-HOWTO.html"
1632 name="Firewalling and Proxy Server HOWTO"> lesen.
1633 Installieren Sie das Paket <package>doc-linux-text</package>
1634 wenn Sie es offline lesen wollen.
1635 If you want to ask questions or need help setting up a firewall
1636 you can use the debian-firewall mailing list, see
1637 <url id="http://lists.debian.org/debian-firewall">.
1638 Sehen Sie auch <ref
1639 id="references"> für weitere (allgemeinere) Verweise.
1640
1641 <sect2 id="firewall-pack">Using firewall packages
1642
1643 <p>Setting up manually a firewall can be complicated for novice (and
1644 sometimes even expert) administrators. However, the free software
1645 community has created a number of tools that can be used to easily
1646 configure a local firewall. Be forewarned that some of this tools are
1647 oriented more towards local-only protection (also known as
1648 <em>personal firewall</em>) and some are more versatile and can be
1649 used to configure complex rules to protect whole networks.
1650
1651 <p>Some software that can be used to set up firewall
1652 rules in a Debian system is:
1653
1654 <list>
1655 <item><package>firestarter</package>, a GNOME application oriented
1656 towards end-users that includes a wizard useful to quickly setup
1657 firewall rules. The application includes a GUI to be able to monitor
1658 when a firewall rule blocks traffic.
1659 <item><package>fwbuilder</package>, an object oriented GUI which
1660 includes policy compilers for various firewall platforms including
1661 Linux' netfilter, BSD's pf (used in OpenBSD, NetBSD, FreeBSD and
1662 MacOS X) as well as router's access-lists. It is similar to enterprise
1663 firewall management software. Complete fwbuilder's functionality is
1664 also available from the command line.
1665 <item><package>shorewall</package>, a firewall configuration tool
1666 which provides support for IPsec as well as limited support for traffic
1667 shaping as well as the definition of the firewall rules. Configuration
1668 is done through a simple set of files that are used to generate the
1669 iptables rules.
1670 <item><package>guarddog</package>, a KDE based firewall configuration
1671 package oriented both to novice and advanced users.
1672 <item><package>knetfilter</package>, a KDE GUI to manage firewall
1673 and NAT rules for iptables (alternative/competitor to the guarddog tool
1674 although slightly oriented towards advanced users)
1675 <item><package>bastille</package>, this hardening application is
1676 described in <ref id="automatic-harden">, one of the hardening steps
1677 that the administrator can configure is a definition of the allowed and
1678 disallowed network traffic that is used to generate a set of firewall
1679 rules that the system will execute on startup.
1680 <item><package>mason</package>, an application which can propose
1681 firewall rules based on the network traffic your system "sees".
1682 <item><package>ferm</package>
1683 <item><package>lokkit</package> or <package>gnome-lokkit</package>
1684 <item><package>ipac-ng</package>, helps setup not traditional firewall
1685 rules but network traffic classification rules.
1686 <item><package>filtergen</package>
1687 <item><package>fiaif</package>
1688 <item><package>hlfl</package>
1689 <item><package>kmyfirewall</package>
1690 <item><package>netscript-2.4</package>
1691 </list>
1692 <!-- No longer available :
1693 fwctl
1694 fireflier
1695 easyfw
1696 firewall-easy
1697 gfcc
1698 -->
1699
1700 <p>Notice that some of the packages outlined previously will
1701 introduce firewalling scripts to be run when the system boots.
1702 Test them extensively before rebooting or you might find yourself
1703 locked from the box. If you mix different firewalling packages you
1704 can have undesired effects, usually, the firewalling
1705 script that runs last will be the one that configures the system
1706 (which might not be what you pretend). Consult the package
1707 documentation and use either one of these setups.
1708
1709 <p>As mentioned before, some programs, like firestarter, guarddog
1710 and knetfilter, are administration GUIs using either GNOME or KDE
1711 (last two). These applications are much more user-oriented
1712 (i.e. for home users) than some of the other packages in the list
1713 which might be more administrator-oriented. Some of the programs
1714 mentioned before (like <prgn>bastille</prgn>) are focused at setting up
1715 firewall rules to protect the host they run in but are not necessarily
1716 designed to setup firewall rules for firewall hosts that protect a
1717 network (like <prgn>shorewall</prgn> or <prgn>fwbuilder</prgn>).
1718
1719 <p>There is yet another type of firewall application: application proxies.
1720 If you are looking into setting up an an enterprise-level that does
1721 packet filtering and provides a number of transparent proxies that can
1722 do fine-grain traffic analysis you should consider using
1723 <package>Zorp</package>, which provides this in a single program.
1724 You can also manually setup this type of firewall host using the
1725 proxies available in Debian for different services
1726 like for DNS using <package>bind</package> (properly configured),
1727 <package>dnsmasq</package>, <package>pdnsd</package> or
1728 <package>totd</package>
1729 for FTP using <package>frox</package> or <package>ftp-proxy</package>,
1730 for X11 using <package>xfwp</package>,
1731 for IMAP using <package>imapproxy</package>,
1732 for mail using <package>smtpd</package>,
1733 or for POP3 using <package>p3scan</package>. For other protocols you
1734 can either use a generic TCP proxy like <package>simpleproxy</package>
1735 or a generic SOCKS proxy like <package>dante-server</package>,
1736 <package>tsocks</package> or <package>socks4-server</package>.
1737 Typically, you will also use a web caching system (like
1738 <package>squid</package>) and a web filtering system (like
1739 <package>squidguard</package> or <package>dansguardian</package>).
1740
1741 <sect2>Manual init.d configuration
1742 <p>Another possibility is to manually configure your firewall rules
1743 through an init.d script that will run all the <prgn>iptables</prgn>
1744 command. Take the following steps:
1745
1746 <list>
1747 <item>Review the script below and adapt it to your needs.
1748
1749 <item>Test the script and review the syslog messages to see which
1750 traffic is being dropped. If you are testing from the network you will
1751 want to either run the sample shell snippet to remove the firewall (if
1752 you don't type anything in 20 seconds) or you might want to comment
1753 out the <em>default deny</em> policy definitions (<em>-P INPUT
1754 DROP</em> and <em>-P OUTPUT DROP</em>) and check that the system will
1755 not drop any legitimate traffic.
1756
1757 <item>Move the script to <file>/etc/init.d/myfirewall</file>
1758
1759 <item>Configure the system to run the script before any network is
1760 configured:
1761 <example>
1762 #update-rc.d myfirewall start 40 S . stop 89 0 6 .
1763 </example>
1764
1765 </list>
1766
1767 <p>This is the sample firewall script:
1768
1769 <example>
1770 #!/bin/sh
1771 # Simple example firewall configuration
1772 #
1773 # Caveats:
1774 # - This configuration applies to all network interfaces
1775 # if you want to retrict this to only a given interface use
1776 # '-i INTERFACE' in the iptables calls.
1777 # - Remote access for TCP/UDP services is granted to any host,
1778 # you probably will want to restrict this using '--source'
1779 #
1780 # chkconfig: 2345 9 91
1781 # description: Activates/Deactivates the firewall at boot time
1782 #
1783 # You can test this script before applying with the following shell
1784 # snippet, if you do not type anything in 10 seconds the firewall
1785 # rules will be cleared.
1786 #---------------------------------------------------------------
1787 # while true; do test=""; read -t 20 -p "OK? " test ; \
1788 # [ -z "$test" ] && /etc/init.d/firewall clear ; done
1789 #---------------------------------------------------------------
1790
1791 PATH=/bin:/sbin:/usr/bin:/usr/sbin
1792
1793 # Services that the system will offer to the network
1794 TCP_SERVICES="22" # SSh only
1795 UDP_SERVICES=""
1796 # Services the system will use from the network
1797 REMOTE_TCP_SERVICES="80" # web browsing
1798 REMOTE_UDP_SERVICES="53" # DNS
1799 # Network that will be used for remote mgmt
1800 # (if undefined, no rules will be setup)
1801 # NETWORK_MGMT=192.168.0.0/24
1802
1803 if ! [ -x /sbin/iptables ]; then
1804 exit 0
1805 fi
1806
1807 fw_start () {
1808
1809 # Input traffic:
1810 /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
1811 # Services
1812 for PORT in $TCP_SERVICES; do
1813 /sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT
1814 done
1815 for PORT in $UDP_SERVICES; do
1816 /sbin/iptables -A INPUT -p udp --dport ${PORT} -j ACCEPT
1817 done
1818 # Remote management
1819 if [ -n "$NETWORK_MGMT" ] ; then
1820 /sbin/iptables -A INPUT -p tcp --src ${NETWORK_MGMT} --dport ${SSH_PORT} -j ACCEPT
1821 else
1822 /sbin/iptables -A INPUT -p tcp --dport ${SSH_PORT} -j ACCEPT
1823 fi
1824 # Remote testing
1825 /sbin/iptables -A INPUT -p icmp -j ACCEPT
1826 /sbin/iptables -A INPUT -i lo -j ACCEPT
1827 /sbin/iptables -P INPUT DROP
1828 /sbin/iptables -A INPUT -j LOG
1829
1830 # Output:
1831 /sbin/iptables -A OUTPUT -j ACCEPT -o lo
1832 /sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
1833 # ICMP is permitted
1834 /sbin/iptables -A OUTPUT -p icmp -j ACCEPT
1835 # So are security package updates
1836 /sbin/iptables -A OUTPUT -p tcp -d security.debian.org --dport 80 -j ACCEPT
1837 for PORT in $REMOTE_TCP_SERVICES; do
1838 /sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT
1839 done
1840 for PORT in $REMOTE_UDP_SERVICES; do
1841 /sbin/iptables -A INPUT -p udp --dport ${PORT} -j ACCEPT
1842 done
1843 # All other connections are registered in syslog
1844 /sbin/iptables -A OUTPUT -j LOG
1845 /sbin/iptables -A OUTPUT -j REJECT
1846 /sbin/iptables -P OUTPUT DROP
1847 # Other network protections
1848 echo 1 > /proc/sys/net/ipv4/tcp_syncookies
1849 echo 0 > /proc/sys/net/ipv4/ip_forward
1850 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
1851 echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
1852 echo 1 > /proc/sys/net/ipv4/ip_always_defrag
1853 echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
1854 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
1855 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
1856 echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
1857
1858 }
1859
1860 fw_stop () {
1861 /sbin/iptables -F
1862 /sbin/iptables -t nat -F
1863 /sbin/iptables -t mangle -F
1864 /sbin/iptables -P INPUT DROP
1865 /sbin/iptables -P FORWARD DROP
1866 /sbin/iptables -P OUTPUT ACCEPT
1867 }
1868
1869 fw_clear () {
1870 /sbin/iptables -F
1871 /sbin/iptables -t nat -F
1872 /sbin/iptables -t mangle -F
1873 /sbin/iptables -P INPUT ACCEPT
1874 /sbin/iptables -P FORWARD ACCEPT
1875 /sbin/iptables -P OUTPUT ACCEPT
1876 }
1877
1878
1879 case "$1" in
1880 start|restart)
1881 echo -n "Starting firewall.."
1882 fw_stop
1883 fw_start
1884 echo "done."
1885 ;;
1886 stop)
1887 echo -n "Stopping firewall.."
1888 fw_stop
1889 echo "done."
1890 ;;
1891 clear)
1892 echo -n "Clearing firewall rules.."
1893 fw_clear
1894 echo "done."
1895 ;;
1896 *)
1897 echo "Usage: $0 {start|stop|restart|clear}"
1898 exit 1
1899 ;;
1900 esac
1901 exit 0
1902 </example>
1903
1904 <sect2>Configuring firewall rules through ifup
1905
1906 <p>You can use also the network configuration in
1907 <file>/etc/network/interfaces</file> to setup your firewall rules. For
1908 this you will need to:
1909
1910 <list>
1911 <item>Create your firewalling ruleset for when the interface is active.
1912
1913 <item>Save your ruleset with <prgn>iptables-save</prgn> to a file in
1914 <file>/etc</file>, for example <file>/etc/iptables.up.rules</file>
1915
1916 <item>Configure <file>etc/network/interfaces</file> to run use the
1917 configured ruleset:
1918
1919 <example>
1920 iface eth0 inet static
1921 address x.x.x.x
1922 [.. interface configuration ..]
1923 pre-up iptables-restore < /etc/iptables.up.rules
1924 </example>
1925
1926 </list>
1927
1928 <p>You can optionally also set a set of rules to be applied when the
1929 network interface is <em>down</em> creating a set of rules, saving it
1930 in <file>/etc/iptables.down.rules</file> and adding this directive to the
1931 interface configuration:
1932
1933 <example>
1934 post-down iptables-restore < /etc/iptables.down.rules
1935 </example>
1936
1937 <p>For more advanced firewall configuration scripts through
1938 <package>ifupdown</package> you can use the hooks available to each
1939 interface as in the <file>*.d/</file> directories called with
1940 run-parts (see <manref name="run-parts" section="8">).
1941
1942 <sect2>Machen Sie es auf die (alte) Debian-Art
1943
1944 <P><strong>NOTE</strong>: This information only applies to iptables
1945 in <em>woody</em>. Versions later than 1.2.7-8 don't any longer
1946 have the init.d script described here. Users of Debian 3.1 or later
1947 releases should either setup firewalling rules manually or use
1948 any of the firewall generation programs described previously.
1949
1950 <p>Wenn Sie Debian 3.0 oder neuer benutzen, werden Sie feststellen, dass Sie bereits
1951 das Paket <package>iptables</package> installiert haben. Dies ist die
1952 Unterstützung für die Netfilter-Implementation in 2.4.4+
1953 Kerneln. Da das System nach der Installation aber keine Firewall-Regeln
1954 kennen kann (Firewall-Regeln sind zu systemspezifisch), müssen Sie
1955 iptables einschalten. Wie auch immer: Die Skripte wurden so
1956 konfiguriert, dass der Administrator Firewall-Regeln aufsetzen kann und
1957 die init-Skripte sie dann <em>lernen</em> können und so immer als
1958 das Setup der Firewall fungieren.
1959
1960 <p>Hierzu müssen Sie Folgendes tun:
1961
1962 <list>
1963
1964 <item>Konfigurieren Sie das Paket so, dass es mit dem System gestartet
1965 wird. Bei neueren Versionen (seit 1.2.6a-1) werden Sie während der
1966 Installation hiernach gefragt. Sie können es hinterher wieder mit
1967 <tt>dpkg-reconfigure -plow iptables</tt> ändern. <em>Wichtig</em>:
1968 Bei älteren Versionen geschah dies noch durch Editieren von
1969 <file>/etc/default/iptables</file>, so dass die Variable
1970 <tt>enable_iptables_initd</tt> auf <em>true</em> gesetzt wurde.
1971
1972 <item>Erstellen Sie Ihr Firewall-Setup mit iptables, benutzen Sie
1973 dazu die Kommandozeile (siehe <manref name="iptables" section="8">) oder
1974 andere der Tools aus Debians Firewall-Paketen (siehe <ref
1975 id="firewall-pack">). Sie müssen einen Satz von Firewall-Regeln
1976 erstellen, die benutzt werden sollen wenn die Firewall <em>aktiv</em> ist,
1977 und einen anderen wenn die Firewall <em>inaktiv</em> (dies können
1978 auch nur leere Regeln sein) ist.
1979
1980 <item>Sichern Sie die erstellten Regeln mit den Skripten
1981 <tt>/etc/init.d/iptables save active</tt> und <tt>/etc/init.d/iptables
1982 save inactive</tt>.
1983 <!-- Jens: FIXME -->
1984
1985 </list>
1986
1987 <p>Sobald dies geschehen ist, ist Ihr Firewall-Setup im Verzeichnis
1988 <file>/var/lib/iptables/</file> gespeichert und wird beim System-Boot
1989 ausgeführt (oder wenn das initd Skript mit <em>start</em> und
1990 <em>stop</em> gestartet wird). Beachten Sie, dass die standardmäßigen
1991 Einstellungen unter Debian vorsehen, den Firewall-Code in den Multiuser-Runleveln
1992 (2 bis 5) sehr früh (10) zu starten. Außerdem wird er im singleuser-
1993 Runlevel (1) gestoppt. Ändern Sie dies, wenn es nicht Ihren lokalen
1994 Richtlinien entspricht.
1995
1996 <p>Please read the inline comments in the
1997 <file>/etc/default/iptables</file> configuration file for more
1998 information on the issues regarding this package.
1999
2000 <sect2>Testing your firewall configuration
2001
2002 <p>Testing your firewall configuration is as easy, and as dangerous,
2003 as just running your firewall script (or enabling the configuration
2004 you defined in your firewall configuration application). However,
2005 if you are not careful enough and you are configuring your firewall
2006 remotely (like through an SSH connection) you could lock yourself
2007
2008 <p>There are several ways to prevent this. One is running a
2009 script in a separate terminal that will remove the firewall configuration
2010 if you don't feed it input. An example of this is:
2011
2012 <example>
2013 $ while true; do test=""; read -t 20 -p "OK? " test ; \
2014 [ -z "$test" ] && /etc/init.d/firewall clear ; done
2015 </example>
2016
2017 <p>Another one is to introduce a backdoor in your system through an
2018 alternate mechanism that allows you to either clear the firewall
2019 system or punch a hole in it if something goes awry. For this you
2020 can use <package>knockd</package> and configure it so that a certain
2021 port connection attempt sequence will clear the firewall (or
2022 add a temporary rule). Even though the packets will be dropped
2023 by the firewall, since <prgn>knockd</prgn> binds to the interface
2024 and <em>sees</em> you will be able to work around the problem.
2025
2026 <p>Testing a firewall that is protecting an internal network is
2027 a different issue, you will want to look at some of the tools
2028 used for remote vulnerability assesment (see <ref id="vuln-asses">) to
2029 probe the network from the outside in (or from any other direction)
2030 to test the effectiveness of the firewall configuation.
2031
2032 <!--
2033 <sect2 id="firewall-pack">Nutzen von Firewall-Paketen
2034
2035 <p>Das manuelle Aufsetzen einer Firewall kann für neue (und
2036 manchmal auch für erfahrene) Administratoren kompliziert sein.
2037 Hierfür hat die Freie-Software Gemeinschaft eine große Zahl von
2038 Tools erstellt, die zur einfachen Konfiguration einer Lokalen Firewall
2039 benutzt werden können. Seien Sie vor gewarnt, dass einige dieser
2040 Tools sich mehr auf lokalen Schutz konzentrieren (auch <em>personal
2041 firewall</em> genannt), während andere vielseitiger sind, und dazu
2042 benutzt werden können, komplexere Regelwerke zum Schutz ganzer Netzwerke zu
2043 erstellen.
2044
2045 <p>Einige Programme, die unter Debian zum Aufsetzen von Firewall-Regeln
2046 benutzt werden können, sind:
2047
2048 <list>
2049 <item><package>firestarter</package>, oriented towards end-users
2050 including a wizard to quickly defined the firewall rules.
2051 <item><package>knetfilter</package>
2052 <item><package>fwbuilder</package>, an object oriented GUI which
2053 includes policy compilers for various firewall platforms including
2054 iptables as well as router's access-lists.
2055 <item><package>shorewall</package> which provides support for IPsec as
2056 well as limited support for traffic shaping as well as the definition
2057 of the firewall rules.
2058 <item><package>mason</package>, das basierend auf dem Netzwerkverkehr,
2059 denn Ihr System "sieht", Firewall-Regeln vorschlagen kann
2060 <item><package>bastille</package> (unter anderem besitzt diese neue Version
2061 von bastille unter den Abhärtungsstufen die Möglichkeit,
2062 Firewall-Regeln während des Starts auszuführen)
2063 <item><package>guarddog</package>, a KDE based firewall configuration
2064 package (alternative/competitor to the knetfilter package)
2065 <item><package>ferm</package>
2066 <item><package>fwctl</package>
2067 <item><package>easyfw</package>
2068 <item><package>firewall-easy</package>
2069 <item><package>ipac-ng</package>
2070 <item><package>gfcc</package>
2071 <item><package>lokkit</package> oder <package>gnome-lokkit</package>
2072 </list>
2073
2074 <p>Die Pakete gfcc, firestarter und knetfilter sind graphische
2075 Administrations-Schnittstellen, die entweder GNOME (die ersten beiden)
2076 oder KDE (das letzte) benutzen und die eher benutzerorientiert sind (z.B.
2077 für Heimanwender) als die anderen Pakete in der Liste, die sich eher
2078 an Administratoren richten.
2079
2080 <p>Seien Sie vor gewarnt, dass manche der zuvor skizzierten Pakete eigene
2081 Firewall-Skripte einführen, die beim Systemstart ausgeführt
2082 werden sollen, dies wird zweifellos mit dem allgemeinen Setup (wenn
2083 konfiguriert) kollidieren und dürfte zu unerwünschten Nebeneffekten führen.
2084 Das Firewall-Skript, das zuletzt ausgeführt wird, wird das System
2085 konfigurieren (was Sie so vielleicht nicht vorhatten). Sehen Sie hierzu
2086 in der Paket-Dokumentation nach und benutzen Sie nur eines dieser Setups.
2087 Allgemeiner: Andere Programme, die helfen die Firewall-Regeln
2088 aufzusetzen, können in den Konfigurationsdateien anderer
2089 rum pfuschen.
2090 -->

  ViewVC Help
Powered by ViewVC 1.1.5