[ << ]
[ < ]
[ 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 |
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
|
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
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 ]
[ > ]
[ >> ]
Die Inhalte dieses Dokuments sind, sofern nicht explizit
anders genannt, unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert. Die Gentoo Name and Logo
Usage Guidelines treffen zu.
|