Archiv für Juli, 2008

Jul 26 2008

Linux: SSH Bruteforce Protection

Erstellt von Dominik unter Security

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.

Keine Kommentare bisher

Jul 23 2008

Debian Linux HowTo: Dienste Überwachen mittels Monit

Erstellt von Dominik unter Debian

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.

Keine Kommentare bisher

Jul 21 2008

Debian Linux: libmysqlclient_15 not defined in file libmysqlclient.so.15

Erstellt von Dominik unter Debian

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.

Keine Kommentare bisher

Zurück »