Jul
26
2008
Um SSH erfolgreich gegen Bruteforce Attacken zu schützen bzw. diese abzuwehren, gibt es verschiedene Ansätze.
1. Logfile Analyse
SSH logged alle fehlgeschlagenen Login Versuche in eine Logdatei. Diese wird nach und untersucht und sollte eine bestimmte Anzahl ungültiger Logins durch die selbe IP gezählt worden sein, wird diese IP Adresse gesperrt.
Das bekannteste Tool für diese Aufgabe heißt Fail2Ban. Der Vorteil liegt darin, dass es zuverlässig funktioniert und auch für FTP, POP3, IMAP usw. verwendet werden kann.
2. Security through obscurity
Gewöhnlich werden Bruteforce Attacken von Zombi Servern im Internet ausgeführt. Die Bots scannen nach Port 22 und versuchen anschließend ihr Glück Username und Passwort zu erraten.
Um so schnell wie möglich, möglichst viele Server zu finden, gibt es kaum Bots die einen Rechner auf mehr als Port 22 testen. Daher ist es möglich den Rechner per Verlegen des SSH Ports vor diesen Bots zu bewahren. Natürlich besteht hierfür keinerlei Garantie und die Methodik Security through obscurity ist nicht als alleiniges Mittel anzusehen. Hierzu gibt es einen guten Wikipedia Eintrag.
3. Verzicht auf Passwort Authentifizierung
Es ist ohne Probleme möglich einen SSH Server zu konfigurieren, dass dieser zu einem erfolgreichem Login nur das Publiykey Verfahren zu lässt. Aufgrund der Tatsache dass dieses Verfahren als sehr sicher gilt, ist es die Beste Möglichkeit den SSH Server vor ungewünschten Logins zu schützen.
Jul
23
2008
Es gibt Dienste wie Nagios oder Cacti, die es einem Admin ermöglichen von extern sämtliche Dienste und Zustände eines Servers zu überwachen.
Heute möchte ich ein Tool vorstellen, dass nicht nur überwacht, sondern aktiv in das Geschehen eingreift.
Monit bietet verschiedene Kernfunktionen an: Überwachung von Ports, von Diensten, von Prozessen. Sowie Aktives Restarten dieser Dienste nach vorgegebenen Kriterien und Benachrichtigung via E-Mail.
Wer mehr wissen will besucht am Besten die offizielle Webseite.
Ich empfehle dringend das Tool selbst zu kompilieren, da die in Debian bereit gestellte Version buggy ist.
Installation von benötigen Libs und Paketen:
apt-get install gcc make libc6-dev flex libssl-dev openssl byacc btyacc bison
Installation von Monit:
cd /usr/src
wget http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz
tar xvfz monit-4.10.1.tar.gz
cd monit-4.10.1
./configure
make
make install
mkdir -p /var/lib/monit/monit.state
Nun fehlt nur noch eine Konfigurationsdatei um Monit zu sagen, was es tun soll.
Als Randbemerkung sei angemerkt dass die E-Mail Benachrichtigung nur funktioniert, wenn ein Mailserver plus das Paket mailx installiert ist.
Erstellen der Konfiguration:
nano /etc/monit/monitrc
# dort können alle auf der Webseiten von monit gennanten Funktionen eingetragen werden
# Als kleines Beispiel dient folgende Konfiguration:
## E-Mail Formatierung
set mail-format {
from: monit@meinem-server.de
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
## Einstellen der E-Mail Adresse für Alarme. Die "but not on { changed }" Section bedeutet
## dass bei einem Neustart des Dienstes (Verändertes Pid-File) keine E-Mail versendet wird
set alert alarm-postfach@meine-domain.de but not on { changed }
## Überwachung des MySQL Daemons
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
Anschließend kann Monit gestartet werden (Hier wird alle 180Sekunden geprüft):
/usr/local/bin/monit -d 180 -c /etc/monit/monitrc -s /var/lib/monit/monit.state
Wer möchte kann dies natürlich auch in einem init-Script erledigen.
Dies ist natürlich nur eine minimal Überwachung, es finden sich jedoch unter http://www.tildeslash.com/monit/doc/examples.php sehr gute Beispiele, die es einem ermöglichen nahezu alles zu überwachen.
Jul
21
2008
Szenario:
Es wird ein Webserver mit jeweils neustem Apache, MySQL und PHP benötigt. Distribution Debian Etch. Zyniker sagen: “Falsche Distribution gewählt”. Dem ist nichts hinzuzufügen.
mysql-5.0.51a-linux-i686-icc-glibc23.tar.gz ist installiert nach /usr/local/mysql. MySQL läuft.
Nun wurde PHP gegen die Files unter /usr/local/mysql/include kompiliert. Die configure Zeilen sahen so aus:
'--with-mysql=/usr/local/mysql' \
'--with-pdo_mysql=/usr/local/mysql' \
Nachdem ich fertig war spuckte sowohl der Apache als auch “make test” Fehler aus:
Beim Starten von Apache:
Syntax error on line 417 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: symbol floor, version libmysqlclient_15 not defined in file libmysqlclient.so.15 with link time reference
Bei “make test”:
/usr/src/php-5.2.6/sapi/cli/php: relocation error: /usr/src/php-5.2.6/sapi/cli/php: symbol isinf, version libmysqlclient_15 not defined in file libmysqlclient.so.15 with link time reference
Als Workaround habe ich libmysqlclient15-dev installiert und gegen die Debian Libs kompiliert:
'--with-mysql=/usr' \
'--with-pdo_mysql=/usr' \
Resultat: Keine Fehler mehr
Wer weiß woher der Fehler kommt, darf sich gerne melden. Auf jedenfall war das eine Version früher (sowohl MySQL als auch PHP) nicht der Fall.