Projekt

Allgemein

Profil

Wiki Kunterbunt » Absichern_mit_denyHosts.txt

Absichern mit denyhosts - Josef Braun, 01.01.2010 10:14

 
1
{{>toc}}
2

    
3
h1. Absichern mit denyHosts
4

    
5
SSH Attacken mit denyhosts abwehren
6
SSH - Secure Shell
7

    
8
Über ssh werden alle Daten verschlüsselt übertragen, von daher ist es zur Konfiguration und Wartung eines Root-Servers eine beliebte Shell. Passwörter und Eingaben können nicht oder nur sehr schwer entschlüsselt werden … und wenn, dann dauert es Jahre. Ein beliebter Sport ist es, den ssh-Zugang mit Anfragen zu bombadieren, User herauszufinden und Passwörter zu hacken. Dabei werden Listen von Usern durchgegangen, die mit einer weiteren Liste von Passwörter abgefragt werden. Meist sind es aber Service-Accounts, die kein Passwort hinterlegt haben, aber dennoch einen ssh-Zugang zulassen.
9

    
10
Grundsätzlich sollte in der /etc/passwd kein Account mit einer Shell hinterlegt sein, ausser denen, die auch benutzt werden. Selten arbeiten Systemadministratoren z.B. mit den Accounts mysql, wwwrun, news, named oder ähnlichen. Bei diesen sollte folgende Einstellung gemacht werden:
11

    
12
In der Datei /etc/passwd
13

    
14
<pre>
15
mysql:x:60:103:MySQL database admin:/var/lib/mysql:/bin/false
16
</pre>
17

    
18

    
19

    
20
false hinterlegt keine Shell sondern loggt einen Anwender sofort wieder aus. In manchen Distributionen (z.B. SuSE) steht hier bash, welches die Shelloberfläche ist. Hat der Account mysql kein Passwort hinterlegt und eine bash als Oberfläche, so steht einem Login nichts im Wege. Nun können Eindringlinge zwar mit dem Account mysql arbeiten. Also sollten solche Service-Accounts immer mit false konfiguriert sein.
21
SSH-Angriffe aktiv abwehren
22

    
23

    
24
h2. DenyHosts herunterladen
25

    
26
Hier wird beschrieben, wie der SSH-Zugang mit dem Tool DenyHosts (http://denyhosts.sourceforge.net/index.html) abgesichert wird.
27

    
28
Dieses Tool ist ein Zusatzprogramm, welches die Logfiles der SSH-Programme überwacht und IPs, die sich mehr als 5 mal (frei wählbar) falsch angemeldet haben, in die /etc/hosts.deny eintragen. IPs, die in dieser Datei stehen, werden dann entweder für einen bestimmten Service (ssh) oder für den gesamten Zugang geblockt.
29

    
30
h2. Tests, ob der Server überhaupt geeignet für DenyHosts ist
31

    
32
# Als Root auf dem Server anmelden
33
# In der Datei /etc/hosts.deny ergänzen und dann abspeichern:
34
<pre>
35
sshd: 127.0.0.1
36
</pre>
37
# vom Server aus einen ssh-Zugriff auf localhost durchführen
38
<pre>
39
ssh localhost
40
</pre>
41
# Es sollte folgende Fehlermeldugn erscheinen:
42
<pre>
43
 ssh_exchange_identification: Connection closed by remote host
44
</pre>
45
# wenn diese Meldung erscheint, dann wurde ssh mit tcp_wrappers kompiliert, wenn ein normaler Zugriff m,öglich war, dann war der Server ohne tcp_wrapper kompiliert
46
# Aus der Datei /etc/hosts die oben ein gegebene Zeile wieder entfernen und abspeichern
47

    
48
h2. Installation
49

    
50
Voraussetzung ist, dass python auf dem Server installiert ist. Laden Sie sich das Programm herunter und entpacken es. Danach wechseln Sie in das entpackte Verzeichnis und installieren das Programm mit dem Befehl:
51
<pre>
52
 python setup.py install 
53
</pre>
54
Dieses Tool nimmt sämtliche Kopiervorgänge vor.
55

    
56
h2. Konfiguration
57

    
58
Wechseln Sie in das Verzeichnis /usr/share/denyhosts
59

    
60
Hier liegt die Konfigurationsdatei sowie das Programm daemon-control, der das Tool startet, beendet oder restartet.
61

    
62
Bearbeiten Sie nun die Datei denyhosts.cfg-dist: Passen Sie mindestens folgende Einträge auf Ihr System an:
63

    
64
<pre>
65
SECURE_LOG = /var/log/messages
66
HOSTS_DENY = /etc/hosts.deny
67
</pre>
68

    
69
Falls Sie über alle Block-Vorgänge per email unterrichtet werden möchten, gibt es den Bereich ADMIN_EMAIL. Hier können Sie Ihre email-Adresse hinterlegen, dann werden Sie bei jedem Eintrag in die hosts.deny darüber unterrichtet. Lassen Sie dieses Feld leer, bekommen Sie auch keine email.
70

    
71

    
72
Danach benennen Sie die Datei um:
73
<pre>
74
mv denyhosts.cfg-dist denyhosts.cfg
75
</pre>
76
Nun muss das Dämon-Kontrollprogramm (daemon-control-dist) angepasst werden. Falls die Installation per setup.py vorgenommen wurde, sollten die Einträge stimmen. Prüfen Sie diese 3 Zeilen zu beginn des Programmes:
77

    
78
<pre>
79
DENYHOSTS_BIN = "/var/local/bin/denyhosts.py"
80
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
81
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"
82
</pre>
83

    
84
Nun muss auch dieses Programm noch umbenannt werden:
85

    
86
<pre>
87
mv daemon-control-dist daemon-control
88
</pre>
89

    
90

    
91
h2. Aktivieren
92

    
93
Starten Sie nun das Programm:
94

    
95
<pre>
96
daemon-control start
97
</pre>
98

    
99

    
100
Der erste Start nimmt je nach grösse Der ssh-Logdatei einige Zeit in Anspruch. Sie sollten aber nach einiger Zeit die Shell-Eingabeaufforderung wieder sehen. DenyHosts loggt alle Aktivitäten in ein Logfile, normalerweise /var/log/denyhosts
101

    
102
Beim ersten Start wird die ssh-Logdatei vollständig analysiert und auch vergangene SSH-Attacken werden registriert und die IPs erkannt. Nun können Sie in der DenyHost Logdatei, sowie in der Datei /etc/hosts.deny IPs sehen, die geblockt werden (sofern Ihr System schon SSH-Attacken hinter sich hat).
103

    
104
http://www.server-wissen.de/sicherheit-und-absicherung-von-server/linux-serverabsicherung/39-ssh-attacken-mit-denyhosts-abwehren/
105

    
106
h2. Automatisieren
107

    
108
im Ordner /etc/init.d und /usr/bin einen Symlink erstellen
109
<pre>
110
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
111
ln -s /usr/share/denyhosts/daemon-control /usr/bin/rcdenyhosts
112
</pre>
113

    
114
und die entsprechenden Runlevel erzeugen
115
<pre>
116
ln -s /etc/init.d/denyhosts /etc/init.d/rc3.d/S09denyhosts
117
ln -s /etc/init.d/denyhosts /etc/init.d/rc3.d/K02denyhosts
118
ln -s /etc/init.d/denyhosts /etc/init.d/rc5.d/S09denyhosts
119
ln -s /etc/init.d/denyhosts /etc/init.d/rc5.d/K02denyhosts
120
</pre>
121

    
122
h2. Alternativ: DenyHosts mit cron starten
123

    
124
Presumably, you will need to run DenyHosts as root (in order for DenyHosts to update /etc/hosts.deny and read entries from /var/log), so you first must become root. Once you have either logged in as root (or used su - root, for instance) you can then run the following command:
125

    
126
# crontab -e
127

    
128
The above command will launch the crontab editor. To launch DenyHosts every 20 minutes you would then add the following line to the crontab:
129

    
130
<pre>
131
0,20,40 * * * * python PATH_TO_DENYHOSTS/denyhosts.py -c PATH_TO_DENYHOSTS_CONFIG/denyhosts.cfg
132
</pre>
133

    
134
You will need to substitute your site-specific paths above. As an example, if you installed DenyHosts in /usr/local/etc and maintain your configuration file there as well, then the following crontab entry would be appropriate:
135

    
136
<pre>
137
0,20,40 * * * * python /usr/local/bin/denyhosts.py -c /usr/local/etc/denyhosts/denyhosts.cfg
138
</pre>
139

    
140
Once you have edited the crontab you should then save it. Assuming you didn't make any errors, the crontab will automatically install itself.
141

    
142
For more information regarding the crontab format please see the crontab man page (man 5 crontab). 
(2-2/2)
Redmine Appliance - Powered by TurnKey Linux