Gentoo Logo

[ << ] [ < ] [ Hauptseite ] [ > ] [ >> ]


10. Dienste absichern

Inhalt:

10.a. Apache

Apache kommt mit einer recht gut eingestellten Konfigurationsdatei, aber auch hier müssen wir einige Dinge verbessern, wie z.B. Apache an eine Adresse binden und verhindern, dass es keine Informationen preisgibt. Folgende Optionen sollten Sie in der Konfigurationsdatei anpassen:

Wenn Sie ssl in Ihrer /etc/make.conf vor der Installation von Apache nicht deaktiviert hatten, dann sollten Sie Zugang zu einem SSL-fähigen Server haben. Sie finden Beispielkonfigurationsdateien in /etc/apache2/vhosts.d. Die sind funktionierende Beispiele und am besten überprüft man diese oder deaktiviert sie.

Es ist wichtig Ihre Konfiguration(en) so zu definieren dass dass sie auf eine bestimmte IP hören (anstatt auf allen auf Ihrem System verfügbaren IP-Adressen). Zum Beispiel für die Datei 00_default_vhost.conf:

Befehlsauflistung 1.1: /etc/apache2/vhosts.d/00_default_vhost.conf

# Lassen Sie ihn auf Ihre IP hören
Listen 127.0.0.1

Wir empfehlen außerdem dass Sie die Anzeige von Informationen über Ihre Apache-Installation an die Welt deaktivieren. Standardmäßig wird die Konfiguration Serverversion und virtuellen Hostnamen zu vom Server generierten Seiten hinzufügen. Um die zu deaktivieren, setzen Sie die Variable ServerSignature auf Off:

Befehlsauflistung 1.2: /etc/apache2/modules.d/00_default_settings.conf

ServerSignature Off

Apache wird mit --enable-shared=max und --enable-module=all kompiliert. Dies wird von standardmäßig alle Module aktivieren, sodass Sie alle Module in der LoadModule-Sektion (also LoadModule und AddModule) in der Hauptkonfigurationsdatei /etc/apache2/httpd.conf auskommentieren müssen, die Sie nicht benötigen. Starten Sie den Dienst neu, indem Sie /etc/init.d/apache2 restart ausführen.

Die Dokumentation gibt es auf http://www.apache.org.

10.b. Bind

Dokumentation zu Bind finden Sie beim Internet Software Konsortium. Das "BIND 9 Administrator Reference Manual" ist auch in doc/arm verfügbar.

Die neueren BIND Ebuilds unterstützen chrooten von vorneherein. Folgen Sie nach dem emergen von bind diesen simplen Anweisungen:

Befehlsauflistung 2.1: Chrooten von BIND

# emerge --config bind

(Bevor Sie diesen Befehl ausführen, möchten Sie vielleicht das chroot
Verzeichnis in /etc/conf.d/named ändern. Ansonsten wird /chroot/dns verwendet.)

10.c. Djbdns

Djbdns ist eine DNS Implementierung auf deren Sicherheit der Autor bereit ist Geld zu wetten. Sie unterscheidet sich grundlegend von Bind 9, ist aber einen Versuch wert. Weitere Informationen finden sich auf http://www.djbdns.org.

10.d. FTP

Das Benutzen von FTP (File Transfer Protocol) ist im Allgemeinen eine schlechte Idee. Es benutzt unverschlüsselte Daten (Passwörter werden also als Klartext gesendet), lauscht auf zwei Ports (normalerweise 20 und 21), und anonyme Logins sind das, wonach Angreifer gerne suchen (um Warez zu verteilen). Da das FTP-Protokoll einige Sicherheitslücken enthält, benutzen Sie bitte alternativ sftpd oder HTTP. Wenn dies nicht möglich sein sollte, dann sichern Sie Ihre Dienste so gut wie nur möglich ab und bereiten Sie sich vor.

10.e. Mysql

Wenn nur lokale Anwendungen auf die mysql Datenbank zugreifen, dann entkommentieren Sie die folgende Zeile in /etc/mysql/my.cnf.

Befehlsauflistung 5.1: Deaktivieren des Netzwerkzugriff

skip-networking

Dann deaktivieren wir die Verwendung des Befehls LOAD DATA LOCAL INFILE, um ein nicht autorisiertes Lesen von lokalen Dateien zu verhindern. Dies ist relevant wenn neue SQL Injection Schwachstellen in PHP Applikationen gefunden werden.

Befehlsauflistung 5.2: Deaktivieren von LOAD DATA LOCAL INFILE in der [mysqld] Sektion

set-variable=local-infile=0

Als nächstes müssen wir die Beispielsdatenbank (test) entfernen und alle Accounts, außer dem lokalen root Account.

Befehlsauflistung 5.3: Entfernen der Beispielsdatenbank und aller unnötigen Benutzer

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;

Warnung: Seien Sie vorsichtig mit diesem Befehl, wenn Sie schon Benutzerkonten konfiguriert haben.

Notiz: Wenn Sie Passwörter vom MySQL Prompt aus geändert haben, sollten Sie immer ~/.mysql_history und /var/log/mysql/mysql.log bereinigen, da dort die ausgeführten SQL Befehle gespeichert werden, wie auch die Passwörter als Klartext.

10.f. Proftpd

Proftpd hatte mehrere Sicherheitsprobleme, aber es hat den Anschein als seien die meisten repariert worden. Nichtsdestotrotz empfiehlt sich die Aktivierung einiger weiterer Verbesserungen:

Befehlsauflistung 6.1: /etc/proftpd/proftpd.conf

ServerName "Mein FTP Daemon"
#Ident des Servers nicht anzeigen
ServerIdent on "Hau ab!"

#Vereinfacht es virtuelle Benutzer anzulegen
RequireValidShell off

#Benutzen Sie eine alternative Passwort- und Gruppendatei (passwd benutzt das Crypt-Format)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"

# Berechtigungen
Umask 077

# Timeouts und Beschränkungen
MaxInstances 30
MaxClients 10 "Nur 10 Verbindungen erlaubt"
MaxClientsPerHost 1 "Sie sind schon eingeloggt"
MaxClientsPerUser 1 "Sie sind schon eingeloggt"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20

#jeden "chrooten"
DefaultRoot ~

#nicht als root laufen lassen
User  nobody
Group nogroup

#Jeden Transfer protokollieren
TransferLog /var/log/transferlog

#Probleme mit Zeichenersetzung
DenyFilter \*.*/

Dokumentation findet man auf http://www.proftpd.org.

10.g. Pure-ftpd

Pure-ftpd ist ein Zweig des ursprünglichen trollftpd. Es wurde von Frank Dennis aus Funktionalitäts- und Sicherheitsgründen modifiziert.

Benutzen Sie virtuelle Server (niemals System Accounts) indem Sie die AUTH Option aktivieren. Setzen Sie diese auf -lpuredb:/etc/pureftpd.pdb und erstellen Sie Ihre Benutzer mit Hilfe von /usr/bin/pure-pw.

Befehlsauflistung 7.1: /etc/conf.d/pure-ftpd

AUTH="-lpuredb:/etc/pureftpd.pdb"

## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

Konfigurieren Sie Ihre MISC_OTHER Einstellung um anonymen Zugriff zu verwehren (-E), chrooten Sie jeden (-A), verhindern Sie, dass Benutzer Dateien lesen/schreiben können, welche mit einem "." (Punkt) beginnen (-X), maximale Idle Zeit (-I), beschränken Sie Rekursion (-L) und verwenden Sie eine sinnvolle umask Einstellung.

Warnung: Benutzen Sie nicht die -w oder -W Optionen! Wenn Sie eine Warez-Site wünschen, hören Sie auf dieses Handbuch zu lesen!

Dokumentation kann auf http://www.pureftpd.org gefunden werden.

10.h. Vsftpd

Vsftpd (kurz für "very secure ftp", also "sehr sicheres FTP") ist ein kleiner FTP-Dämon der mit einer vernünftigen Standardkonfiguration versehen ist. Er ist einfach und besitzt nicht so viele Möglichkeiten wie pureftp und proftp.

Befehlsauflistung 8.1: /etc/vsftpd

anonymous_enable=NO
local_enable=YES

#nur-lesen
write_enable=NO

#aktivieren der Protokollierung aller Transfers
xferlog_std_format=YES

idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist

ls_recurse_enable=NO

Wie Sie sehen können, gibt es bei diesem Dienst keine Möglichkeit individuelle Rechte zu verwenden, wenn es aber um anonyme Einstellungen geht ist er recht gut. Manchmal kann es hilfreich sein einen anonymen FTP Server zu haben (z.B. zur Verbreitung von Open Source) und dann leistet vsftpd hervorragende Arbeit.

10.i. Netqmail

Netqmail wird oft als ein sehr sicherer Mail-Server angesehen. Er wurde mit Sicherheit (und Paranoia) im Hinterkopf geschrieben. Standardmäßig erlaubt er kein Relaying und hatte seit 1996 kein Sicherheitsloch. Starten Sie einfach emerge netqmail und konfigurieren Sie ihn dann!

10.j. Samba

Samba ist ein Protokoll um Dateien mit Microsoft/Novell Netzwerken auszutauschen und sollte nicht über das Internet verwendet werden. Nichtsdestotrotz muss es gesichert werden.

Befehlsauflistung 10.1: /etc/samba/smb.conf

[global]
  #An ein Interface binden
  interfaces = eth0 10.0.0.1/32

  #Sicherstellen, dass verschlüsselte Passwörter verwendet werden
  encrypt passwords = yes
  directory security mask = 0700

  #Traffic von 10.0.0.* erlauben
  hosts allow = 10.0.0.

  #Aktiviert Benutzerauthentifizierung
  #(verwenden Sie nicht den share Modus)
  security = user

  #Verweigern von privilegierten Accounts
  invalid users = root @wheel

  #Maximalgröße die smb für ein Share anzeigt (ist kein Limit)
  max disk size = 102400

  #Die Passwortrichtlinie aufrecht erhalten
  min password length = 8
  null passwords = no

  #PAM verwenden (Wenn Support hinzugefügt)
  obey pam restrictions = yes
  pam password change = yes

Stellen Sie sicher, dass die Berechtigungenfür jedes Share korrekt gesetzt sind und denken Sie daran die Dokumentation zu lesen.

Starten Sie den Server nun neu und fügen Sie den Benutzer hinzu, der Zugriff auf diesen Dienst haben sollte. Dies geschieht durch /usr/bin/smbpasswd mit dem Parameter -a.

10.k. ssh

Die einzige Absicherung, die OpenSSH benötigt, ist die Aktivierung von stärkerer Authentifizierung, basierend auf der Public-Key Verschlüsselung. Viel zu viele Seiten (wie http://www.sourceforge.net, http://www.php.net und http://www.apache.org) haben unter unautorisiertem Eindringen in Ihre Systeme gelitten, wegen schlechten oder öffentlich gewordenen Passwörtern.

Befehlsauflistung 11.1: /etc/ssh/sshd_config

#Nur Version 2 aktivieren
Protocol 2

#Anmeldung als root deaktivieren, Benutzer müssen su verwenden um root zu erlangen
PermitRootLogin no

#Public Key Authentifizierung aktivieren
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Deaktivieren von .rhost und normaler Passwortauthentifizierung
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Nur Benutzern aus der wheel oder admin Gruppe den Zugang erlauben
AllowGroups wheel admin

#In diesen Gruppen nur folgende Benutzer zulassen
#Das @<Domainname> ist optional, aber ersetzt die
#ältere AllowHosts Direktive
AllowUsers kn@gentoo.org bs@gentoo.org

#Protokollierung
SyslogFacility AUTH
LogLevel INFO

(Ändern Sie dies auf Ihre Adresse)
ListenAddress 127.0.0.1

Stellen Sie auch sicher, dass Sie nicht UsePAM yes in Ihrer Konfigurationsdatei gesetzt haben, da so der Mechanismus zur Authentifizierung durch öffentliche Schlüssel überschreiben wird. Sie können aber auch PasswordAuthentication oder ChallengeResponseAuthentication deaktivieren. Weitere Informationen über diese Optionen finden Sie in der manual-Seite von sshd_config.

Nun ist alles, was Ihre Benutzer noch tun müssen, mit folgendem Befehl (auf der Maschine von der Sie sich einloggen wollen) einen Schlüssel zu erstellen:

Befehlsauflistung 11.2: Erstellen eines DSA Schlüsselpaars

# /usr/bin/ssh-keygen -t dsa

Eine Passphrase eintippen.

Befehlsauflistung 11.3: Ausgabe von ssh-keygen

Generierung des öffentlichen/privaten dsa Schlüsselpaares.
Geben Sie den Dateinamen ein unter dem der Schlüssel gespeichert wird (/home/kn/.ssh/id_rsa):[Enter drücken]
Verzeichnis erstellt '/home/kn/.ssh'.
Passphrase eingeben (leer für keine Passphrase): [Passphrase eingeben]
Dieselbe Passphrase erneut eingeben: [Erneut Passphrase eingeben]
Ihre Identifikation wurde in /home/kn/.ssh/id_dsa gespeichert.
Ihr öffentlicher Schlüssel wurde in /home/kn/.ssh/id_dsa.pub gespeichert.
Der Fingerabdruck des Schlüssels ist:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

Dies fügt zwei Dateien, mit den Namen id_dsa und id_dsa.pub, zu Ihrem ~/.ssh/ Verzeichnis hinzu. Die Datei id_dsa ist Ihr privater Schlüssel und sollte von allen Personen, außer Ihnen, ferngehalten werden. Die andere Datei id_dsa.pub soll an jeden Server verteilt werden zu dem Sie Zugriff haben. Fügen Sie den Schlüssel in das home Verzeichnis des Benutzers in ~/.ssh/authorized_keys ein und der Benutzer sollte die Möglichkeit haben sich einzuloggen:

Befehlsauflistung 11.4: Hinzufügen der id_dsa.pub Datei zur authorized_keys Datei

$ scp id_dsa.pub anderer-Host:/var/tmp/aktueller-Hostname.pub
$ ssh anderer-Host
password:
$ cat /var/tmp/aktueller-Hostname.pub >> ~/.ssh/authorized_keys

Ihre Benutzer sollten diesen privaten Schlüssel gut verwahren. Packen Sie ihn auf ein Medium, dass Sie immer mit sich tragen oder lassen Sie ihn auf ihrer Workstation (fügen Sie dies in die Passwortrichtlinien ein).

Mehr über OpenSSH finden Sie auf der Webseite.

10.l. Benutzung von xinetd

xinetd ist ein Ersatz für inetd (welchen Gentoo nicht hat), den Internet-Dienst-Daemon. Er unterstützt Zugriffskontrolle basierend auf den Adressen der entfernten Hosts und dem Zeitpunkt des Zugriffs. Es beinhaltet auch ausführliche Protokollfähigkeiten, inklusive Serverstartzeit, Adresse des entfernten Hosts, entfernter Benutzername, Serverlaufzeit und angeforderte Abläufe.

Wie bei allen anderen Diensten ist es wichtig eine gute Standardkonfiguration zu haben. Da xinetd aber von root ausgeführt wird und Protokolle unterstützt, deren Funktionsweise Sie möglicherweise nicht verstehen, raten wir Ihnen, es nicht zu benutzen. Wenn Sie es aber dennoch benutzen wollen, fügen Sie so mehr Sicherheit hinzu:

Befehlsauflistung 12.1: Installieren von xinetd

# emerge xinetd tcp-wrappers

Ergänzen Sie die Konfigurationsdatei um:

Befehlsauflistung 12.2: /etc/xinetd.conf

defaults
{
 only_from = localhost
 instances = 10
 log_type = SYSLOG authpriv info
 log_on_success = HOST PID
 log_on_failure = HOST
 cps = 25 30
}

# Dies konfiguriert pserver (cvs) durch xinetd mit den folgenden Einstellungen:
# maximal 10 Instanzen (10 Verbindungen gleichzeitig)
# Begrenzung von pserver auf tcp
# benutzen des Benutzer-cvs um diesen Dienst laufen zu lassen
# Anbinden der Schnittstelle an nur 1 IP
# Zulassen von Zugriff von 10.0.0.*
# Begrenzung der Zeit in der Entwickler auf das cvs
# zugreifen können von 08Uhr bis 17Uhr
# Benutzung von tcpd wrappers (Zugriffskontrolle kontrolliert durch
# /etc/hosts.allow und /etc/hosts.deny)
# max_load ist an der Maschine auf 1.0 gesetzt
# Das disable (sperren) Flag steht auf nein, aber ich bevorzuge es zu
# haben, für den Fall dass es gesperrt sein sollte.
service cvspserver
{
 socket_type = stream
 protocol = tcp
 instances = 10
 protocol = tcp
 wait = no
 user = cvs
 bind = 10.0.0.2
 only_from = 10.0.0.0
 access_times = 8:00-17:00
 server = /usr/sbin/tcpd
 server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
 max_load = 1.0
 log_on_failure += RECORD
 disable = no
}

Für weitere Information lesen Sie bitte man 5 xinetd.conf.

10.m. X

Standardmäßig ist Xorg konfiguriert als Xserver zu arbeiten. Dies kann gefährlich sein, denn X verwendet unverschlüsselte TCP Verbindungen und wartet auf xclients.

Wichtig: Wenn Sie diesen Dienst nicht benötigen, deaktivieren Sie ihn!

Wenn Sie aber Ihre Workstation als Xserver verwenden müssen, dann seien Sie vorsichtig mit dem /usr/X11R6/bin/xhost Befehl. Dieser Befehl erlaubt es Clients von anderen Hosts sich zu verbinden und Ihre Display zu benutzen. Dies kann hilfreich sein, wenn Sie eine X Anwendung von einem anderen Rechner benötigen und der einzige Weg über das Netzwerk führt, dies kann jedoch auch durch einen Angreifer ausgenutzt werden. Die Syntax lautet /usr/X11R6/bin/xhost +hostname

Warnung: Verwenden Sie das xhost + Feature niemals! Dies erlaubt es jeglichen Clients eine Verbindung aufzubauen und Kontrolle über Ihr X zu erlangen. Wenn ein Angreifer Zugang zu Ihrem X erlangt, kann er Ihre Tastenanschläge protokollieren und die Kontrolle über Ihren Desktop übernehmen. Wenn Sie es verwenden müssen, denken Sie immer daran, einen Host zu spezifizieren.

Eine sichere Lösung ist dieses Feature komplett zu deaktivieren, indem man X mit startx -- -nolisten tcp startet oder es permanent in der Konfiguration deaktiviert.

Befehlsauflistung 13.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Um sicherzustellen, dass startx nicht überschrieben wird, wenn eine neue Version von Xorg mit emerge installiert wird, müssen Sie es schützen. Fügen Sie die folgende Zeile zu /etc/make.conf hinzu:

Befehlsauflistung 13.2: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

Wenn Sie einen graphischen Loginmanager verwenden, müssen Sie die Sache anders angehen.

Für gdm (Gnome Display Manager)

Befehlsauflistung 13.3: /etc/X11/gdm/gdm.conf

[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp

Für xdm (X Display Manager) und kdm (Kde Display Manager)

Befehlsauflistung 13.4: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp

[ << ] [ < ] [ Hauptseite ] [ > ] [ >> ]


Drucken

Alles ansehen

Seite aktualisiert 2. April 2010

Zusammenfassung: Stellen Sie sicher, dass Ihre Daemons geschützt sind.

Kim Nielsen
Autor

John P. Davis
Bearbeiter

Eric R. Stockbridge
Bearbeiter

Carl Anderson
Bearbeiter

Jorge Paulo
Bearbeiter

Sven Vermeulen
Bearbeiter

Benny Chuang
Bearbeiter

Sune Jeppesen
Bearbeiter

Tiemo Kieft
Bearbeiter

Zack Gilburd
Bearbeiter

Dan Margolis
Bearbeiter

Joshua Saddler
Bearbeiter

Jan Hendrik Grahl
Übersetzer

Tobias Scherbaum
Übersetzer

Matthias Geerdsen
Übersetzer

Tobias Heinlein
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.