| 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 |
<Location />
|
| 539 |
Order Deny,Allow
|
| 540 |
Deny From All
|
| 541 |
Allow From 127.0.0.1
|
| 542 |
</Locationi>
|
| 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 </dev/null > /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 – aus welchen Gründen auch immer – 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 |
<Directory /home/*/public_html>
|
| 1203 |
AllowOverride None
|
| 1204 |
Order deny,allow
|
| 1205 |
Deny from all
|
| 1206 |
</Directory>
|
| 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 – entziehen von
|
| 1321 |
root-Privilegien, einsperren in ein chroot-Gefängnis – 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 |
-->
|