Projekt

Allgemein

Profil

Absichern mit denyHosts » Historie » Version 13

Josef Braun, 11.09.2012 15:35

1 8 Josef Braun
{{toc}}
2 2 Josef Braun
3 1 Josef Braun
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 9 Josef Braun
h2. DenyHosts aus dem Repository installieren
24
25 10 Josef Braun
Unter Opensuse kann dieses Tool auch aus einem Repository installiert werden welches auf der nachfolgenden Url zu finden ist:
26 9 Josef Braun
27
http://download.opensuse.org/repositories/network:/utilities/openSUSE_12.1/
28
29
Eine Installation mittels Zypper unter Einbindung dieses Tools erfolgt dann wie folgendermaßen:
30
31
<pre>
32
zypper addrepo --check --refresh --keep-packages -n "Network Utilities - Denyhosts" http://download.opensuse.org/repositories/network:/utilities/openSUSE_12.1/ network-utilities-repo
33 11 Josef Braun
34 9 Josef Braun
</pre>
35
36
Die Installation des Tools dann mittels
37
38
<pre>
39
zypper in denyhosts
40 12 Josef Braun
41 9 Josef Braun
</pre>
42
43 13 Josef Braun
durchführen. 
44 9 Josef Braun
Anschließend die Konfiguration anhand nachfolgendem Muster vornehmen bzw. adaptieren.
45 1 Josef Braun
46
h2. DenyHosts herunterladen
47
48
Hier wird beschrieben, wie der SSH-Zugang mit dem Tool DenyHosts (http://denyhosts.sourceforge.net/index.html) abgesichert wird.
49
50
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.
51
52
h2. Tests, ob der Server überhaupt geeignet für DenyHosts ist
53
54
# Als Root auf dem Server anmelden
55
# In der Datei /etc/hosts.deny ergänzen und dann abspeichern:
56
<pre>
57
sshd: 127.0.0.1
58
</pre>
59
# vom Server aus einen ssh-Zugriff auf localhost durchführen
60
<pre>
61
ssh localhost
62
</pre>
63
# Es sollte folgende Fehlermeldugn erscheinen:
64
<pre>
65
 ssh_exchange_identification: Connection closed by remote host
66
</pre>
67
# 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
68
# Aus der Datei /etc/hosts die oben ein gegebene Zeile wieder entfernen und abspeichern
69
70
h2. Installation
71
72
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:
73
<pre>
74
 python setup.py install 
75
</pre>
76
Dieses Tool nimmt sämtliche Kopiervorgänge vor.
77
78
h2. Konfiguration
79
80 3 Josef Braun
Einen Symbolic Link ins etc Verzeichnis legen
81
82
<pre>
83
ln -s /usr/share/denyhosts /etc/denyhosts
84
</pre>
85
86 1 Josef Braun
Wechseln Sie in das Verzeichnis /usr/share/denyhosts
87
88
Hier liegt die Konfigurationsdatei sowie das Programm daemon-control, der das Tool startet, beendet oder restartet.
89
90
Bearbeiten Sie nun die Datei denyhosts.cfg-dist: Passen Sie mindestens folgende Einträge auf Ihr System an:
91
92
<pre>
93
SECURE_LOG = /var/log/messages
94
HOSTS_DENY = /etc/hosts.deny
95
</pre>
96
97
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.
98
99
100
Danach benennen Sie die Datei um:
101
<pre>
102
mv denyhosts.cfg-dist denyhosts.cfg
103 3 Josef Braun
104
# bzw. 
105
cp denyhosts.cfg-dist denyhosts.cfg
106 1 Josef Braun
</pre>
107 2 Josef Braun
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:
108 1 Josef Braun
109
<pre>
110 4 Josef Braun
#DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
111 1 Josef Braun
DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"
112 4 Josef Braun
#DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
113 3 Josef Braun
DENYHOSTS_LOCK = "/var/run/denyhosts.pid"
114 1 Josef Braun
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"
115
</pre>
116
117 2 Josef Braun
Zusätzlich ist für OpenSUSE in der ersten leeren Zeile der folgende Block einzufügen (Vermeidung des insserv-Fehlers):
118
<pre>
119
### BEGIN INIT INFO
120
# Provides:          denyhosts
121
# Required-Start: $network $remote_fs
122
# Required-Stop: $network $remote_fs
123
# Default-Start: 3 5
124
# Default-Stop: 0 1 2 6
125
# Description: Start the denyhosts  daemon
126
### END INIT INFO
127
</pre>
128
129 1 Josef Braun
Nun muss auch dieses Programm noch umbenannt werden:
130
131
<pre>
132
mv daemon-control-dist daemon-control
133 3 Josef Braun
134
# bzw.
135
cp daemon-control-dist daemon-control
136 1 Josef Braun
</pre>
137
138
139
h2. Aktivieren
140
141
Starten Sie nun das Programm:
142
143
<pre>
144 2 Josef Braun
/usr/share/denyhosts/daemon-control start
145 1 Josef Braun
</pre>
146
147
148
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
149
150
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).
151
152
http://www.server-wissen.de/sicherheit-und-absicherung-von-server/linux-serverabsicherung/39-ssh-attacken-mit-denyhosts-abwehren/
153
154
h2. Automatisieren
155
156 2 Josef Braun
im Ordner /etc/init.d und /usr/bin einen Symlink erstellen (nur einzelne Zeilen kopieren und einfügen)
157 1 Josef Braun
<pre>
158
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
159
ln -s /usr/share/denyhosts/daemon-control /usr/bin/rcdenyhosts
160
</pre>
161 2 Josef Braun
oder zum Kopieren 
162
<pre>
163
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts && ln -s /usr/share/denyhosts/daemon-control /usr/bin/rcdenyhosts
164
</pre>
165 1 Josef Braun
166 2 Josef Braun
167 1 Josef Braun
und die entsprechenden Runlevel erzeugen
168 4 Josef Braun
169
entweder als
170
171
<pre>
172
insserv denyhosts
173
</pre>
174
175
oder über 
176
177 1 Josef Braun
<pre>
178
ln -s /etc/init.d/denyhosts /etc/init.d/rc3.d/S09denyhosts
179
ln -s /etc/init.d/denyhosts /etc/init.d/rc3.d/K02denyhosts
180
ln -s /etc/init.d/denyhosts /etc/init.d/rc5.d/S09denyhosts
181
ln -s /etc/init.d/denyhosts /etc/init.d/rc5.d/K02denyhosts
182
</pre>
183 2 Josef Braun
oder zum Kopieren
184
<pre>
185
ln -s /etc/init.d/denyhosts /etc/init.d/rc3.d/S09denyhosts && ln -s /etc/init.d/denyhosts /etc/init.d/rc3.d/K02denyhosts && ln -s /etc/init.d/denyhosts /etc/init.d/rc5.d/S09denyhosts && ln -s /etc/init.d/denyhosts /etc/init.d/rc5.d/K02denyhosts
186
</pre>
187 1 Josef Braun
188 2 Josef Braun
189 1 Josef Braun
h2. Alternativ: DenyHosts mit cron starten
190
191
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:
192
193
# crontab -e
194
195
The above command will launch the crontab editor. To launch DenyHosts every 20 minutes you would then add the following line to the crontab:
196
197
<pre>
198
0,20,40 * * * * python PATH_TO_DENYHOSTS/denyhosts.py -c PATH_TO_DENYHOSTS_CONFIG/denyhosts.cfg
199
</pre>
200
201
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:
202
203
<pre>
204
0,20,40 * * * * python /usr/local/bin/denyhosts.py -c /usr/local/etc/denyhosts/denyhosts.cfg
205
</pre>
206
207
Once you have edited the crontab you should then save it. Assuming you didn't make any errors, the crontab will automatically install itself.
208
209 2 Josef Braun
For more information regarding the crontab format please see the crontab man page (man 5 crontab).
210 5 Josef Braun
211
h2. Hilfe über die FAQ
212
213
zu finden auf http://www.denyhosts.net/faq.html
214 7 Josef Braun
215 6 Josef Braun
u.a. auch DenyHosts Frequently Asked Questions 
216
How can I prevent a legitimate IP address from being blocked by DenyHosts? http://denyhosts.sourceforge.net/faq.html#3_7
Redmine Appliance - Powered by TurnKey Linux