Alte Artikel

In der Presse


OpenSource im Studium (OSiS), Download bei heise
Download bei Shareware.de
Download bei Chip Online
Download bei Computer Bild

OpenSource im Büro, Download bei heise
Download bei Computer Bild
Download bei Chip.de

Logfile Tools, Download bei heise

HostingUndService.de Fahrtenbuch, Download bei heise

Durchgestrichene Links führen zu einer älteren Version der CD/DVD.

OSiS April erscheint später

Aus gesundheitlichen Gründen erscheint die OpenSource im Studium, Ausgabe April erst in 1-2 Wochen. Vielen Dank für Ihr Verständnis.

Die Freuden und der Hass eines schnellen Internets

Etwa ein Jahr lang bin ich eigentlich zufriedener Kunde von Unitymedia gewesen. Die Qualitätsvorteile liegen auf der Hand: Schneller Kabelanschluß mit 100 MBit, drei Rufnummern mit ISDN-Emulation sind für 40 Euro eine ordentliche Leistung. Außerdem investiert Unitymedia in Glasfasern und ist damit deutlich zukunftssicherer als diese Rosa Firma.

Als ich seinerzeit den Kabelanschluss beantragte, wurde mir recht zügig eine neue Dose als Ersatz meines alten Antennenanschluß gelegt. Nach der Montage funktioniert zwar das Internet mit optimaler Geschwindigkeit, jedoch das TV nicht mehr. Profis werden nun wohl aufstöhnen: Natürlich nicht, was will der Depp eigentlich?

Seinerzeit habe ich bei Unitymedia angerufen und um Rat gebeten. Das Credo meines Anrufes: Ich möge meinen (immerhin) recht modernen Fernseher auf Kabelanschluss umschalten, dann klappt das auch mit der Grundversorgung.

Seit heute bin ich aber echt sauer: Zwei Unitymedia-Techniker haben mich kurzerhand von der Grundversorgung abgeklemmt. Denn ich habe ja nur Internet und Telefon bei denen bestellt, von Fernsehen war nicht die Rede. Dafür solle ich zusätzlich zu den 40 Euro nochmals 17,90 Euro im Monat ausklinken.

Das ist ungefähr so, als wenn man sein Auto zum Ölwechsel in die Werkstatt gibt und der Mechaniker grinsend alle 4 Reifen durchsticht und dann sagt: Für 17,90 im Monat können Sie ja bei uns eine Reifenversicherung abschließen!

Sowohl Telekom, als auch Vodafone können hier nur maximal 50 MBit bereitstellen. Was tun? Siegt die Wut über die Vernunft?

Erbitte Kommentare…

Deppen aussperren

Nachdem wir im Januar 2014 unsere Dienste auf einen preiswerteren Server im Rechenzentrum der STRATO AG in Berlin umgezogen haben, erhielten wir auch eine neue IP-Adresse. Während die Aktualisierung der Domains kein Problem darstellte, wurde uns aber schon nach kurzer Zeit klar, daß wir hier eine Deppen-IP geerbt haben. Denn sofort nach der Installation und Konfiguration der Mailadressen, erhielten wir im Minutentakt Verbindungsversuche mit unbekanntem Benutzernamen und Kennwort.

Eine Handvoll T-Online Kunden mit “Endkunden-DSL” versucht sich seitdem hartnäckig in unseren SMTP-Server zwecks Mailversand einzuklinken, erhält aber mangels gültigem Benutzernamen/Kennwort keine Verbindung. Dies ist gut so, denn ansonsten wären wir bald ein im Internet verhasstes “Open Relay” über das jeder Spammer seine Pillenwerbung versenden könnte.

Dennoch wird für jeden Verstoß dieser Form ein vierzeiliger Eintraq in der Logdatei aufgezeichnet. Sucht der Admin dort zu Beweiszwecken nach einem erfolgten Mailversand, oder einem Fehlverhalten des Mailservers, ist die Logdatei durch zehntausende von Authentifizierungsfehlern aufgebläht. Und vor allem: Wer versucht, sich in einen Mailserver einzuhacken, hat möglicherweise noch mehr Ideen auf Lager. Besser, diesen Leuten gleich den Zugriff auf den Server wegnehmen, wie den streitenden Kindern das streitverursachende Spielzeug.

Aber was ist nun mit den Kunden, die auch das Recht haben, sich bei der Installation einer neuen Mailsoftware mal zu verschreiben? Klar, hier muß eine Softwarelösung her. Da ich “schon immer mal was mit PHP/SQLite3 machen” wollte, ist die Lösung in PHP geschrieben und verwendet die eingebettete Datenbank SQLite 3. Meine Programmierumgebung verfügt leider nur über eine veraltete Version von SQLite3, der mehrere Features abgehen, die bei allen SQL-Servern seit Jahrzehnten zum Standard gehören, so z.B. die Möglichkeit, mit dem “INSERT INTO…” statement mehrere Datensätze gleichzeitig in die Datenbank einzufügen. Ich bitte daher um Entschuldigung, wenn die Software nicht die schnellste ist. Außerdem habe ich einige Ideen nicht berücksichtigt, die weiterhin Zeit sparen könnten. Es ist mir aber egal, ob die Software 0,2 oder nur 0,15 Sekunden pro Aufruf läuft.

Kochrezept:

Man nehme einen fertig konfigurierten Mailserver unter Postfix mit konfiguriertem SASL, dazu die Firewall iptables, welche bereits im Linux-Kernel eingebaut ist. Man erstelle außerdem eine Datei /root/iptables.reset welche die Aufgabe hat, die Firewall auf die Basisfunktionen zurückzustellen. Das heißt keineswegs, daß die Firewall ausgeschaltet, oder “auf Null geschaltet” werden soll, sondern, daß die funktionierende Grundkonfiguration durch einfachen Aufruf dieses Script wiederhergestellt werden soll.

Die Logdatei nennt sich /var/log/mail.log. Sollte diese sich an anderer Stelle befinden, kann dieses im Script nebst ein paar anderen Parametern eingestellt werden.

Num zum (meines Erachtens gut kommentierten) Script:

<?php
/* BAN_AT:  Anzahl der "Verstöße", ab denen gebannt werden soll *
 * DATABASE_NAME: Dateiname für die SQLite Datenbank.
 * TAG: Es werden nur Verstöße berücksichtigt, die so viele Sekunden in der Vergangenheit liegen. 24*60*60 = 24 Stunden
 */
	$BAN_AT = 10;
	$DATABASE_FNAME = "bansaslfailures.sqlite3";
	$LOGFILE_FNAME = "/var/log/mail.log";
	$TAG = 24*60*60;

/* Mein Server ist auf englische Sprache eingestellt. Wenn man eine andere     * 
 * Sprache verwendet, müssen die Monatskürzel möglicherweise angepasst werden. */
 
	$monthsArray = array(1=>"Jan", 2=>"Feb", 3=>"Mar", 4=>"Apr", 5=>"May", 6=>"Jun", 7=>"Jul", 8=>"Aug", 9=>"Sep", 10=>"Oct", 11=>"Nov", 12=>"Dec");
	$thisYear = date("Y");
	
/* Ab hier nicht mehr rumfummeln, danke sehr! */

function myGetDate($zeile) {
	$tempMonth = sprintf("%02s", array_search(substr($zeile,0,3), $GLOBALS["monthsArray"]));
	$tempDay = sprintf("%02s", (int)substr($zeile,4,2));
	$tempHour = substr($zeile,7,2);
	$tempMinute = substr($zeile,10,2);
	$tempSecond = substr($zeile,13,2);
	$date1 = mktime($tempHour,$tempMinute,$tempSecond,$tempMonth,$tempDay,$GLOBALS["thisYear"]);
	$date2 = mktime($tempHour,$tempMinute,$tempSecond,$tempMonth,$tempDay,$GLOBALS["thisYear"]-1);
	$dateNow = time();
	if(abs($dateNow-$date1) < abs($dateNow-$date2)) return $date1; else return $date2;
}

function myGetIP($zeile) {
	preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $zeile, $matches);
	return $matches[0];
}


/* Datenbank intialisieren */

	$db = new SQLite3($DATABASE_FNAME);
	$db->exec("CREATE TABLE IF NOT EXISTS vorfaelle (ip CHARACTER(15), zeitpunkt INT)");
	$db->exec("CREATE TABLE IF NOT EXISTS state (lastexec INT)");
	$thisExecTime = time();
	$lastExecTime = $db->querySingle("SELECT MAX(lastexec) FROM state");
	$relevantTime = time()-$TAG;

/* Fehlermeldungen aus /var/log/mail.log herausfiltern */
	
	$lines=array();
	exec('egrep "authentication failure$" '.$LOGFILE_FNAME, $lines);

/* Aus den Zeilen der Fehlermeldung Uhrzeit und IP-Adresse ermitteln  *
 * und in der SQLite Datenbank abspeichern, wenn sie jünger sind, als *
 * das letzte Ausführungsdatum                                        */

	foreach($lines as $line) {
		$thisTime = myGetDate(substr($line,0,15));
		if($thisTime > $lastExecTime) {
			$thisIp = myGetIp($line);
			$query = "INSERT INTO vorfaelle (ip, zeitpunkt) VALUES ('".$thisIp."',".$thisTime.")";
			$db->exec($query);
			if($db->lastErrorCode() != 0) echo $db->lastErrorMsg()."<br>";
		}
	}

/* Letztes Datum der Ausführung merken, damit die Datenbank nicht *
 * jedes Mal erneut aufgebaut werden muß!                         */
 
	$db->query("INSERT INTO state (lastexec) VALUES ($thisExecTime)");
	unset($lines);
	
/* Verstöße der letzten 24 Stunden ermitteln */

	$query = "SELECT ip,count(zeitpunkt) as anzahl FROM vorfaelle WHERE zeitpunkt >= $relevantTime GROUP BY ip";
	$res = $db->query($query);

/* iptables auf den Ausgangszustand zurücksetzen und alle *
 * ermittelten Verstöße mit mehr als $BAN_AT Zeilen       *
 * vom Zugang zu unserem Rechner blocken. Dieser Ban gilt *
 * für alle Dienste - auch WWW und FTP!                   */

	exec('/root/iptables.reset');

	while($row = $res->fetchArray(SQLITE3_ASSOC)) {
		if($row["anzahl"] > $BAN_AT) {
			exec('/sbin/iptables -A INPUT -s '.$row["ip"].' -j REJECT');
		}
	}
	
/* Alle veralteten Vorfälle löschen, damit die SQLite3 *
 * Datenbank nicht zu groß wird!                       */
 
	$db->exec("DELETE FROM vorfaelle WHERE zeitpunkt < $relevantTime");
	$db->close();
?>

Dieses Script wird nun als Cronjob unter dem Benutzer root eingetragen. Dazu tippt man ein:
sudo crontab -e
und fügt die folgende Zeile hinzu:

*/10 * * * * php /root/scripts/bansaslfailures.php

In diesem Beispiel wird das Script alle 10 Minuten ausgeführt. In der Standardeinstellung wird jede IP, die in den letzten 24 Stunden mindestens 10 Mal mit falscher Benutzerkennung einen Loginversuch unternommen hat, für 24 Stunden vom Zugang zum Server ausgeschlossen. Nach 24 Stunden wird der Bann automatisch wieder aufgehoben.

Wenn man noch etwas unsicher in Computerdingen ist, sollte man sicherstellen, daß man sich – zum Beispiel über einen Konsolenzugang – ein Hintertürchen offenläßt, damit man sich beim rumfummeln mit dem eigenen Emailprogramm nicht selber für 24 Stunden aussperrt!

OpenSource im Studium, Ausgabe Februar 2014

Diesmal gibt es nur einige Updates (in alphabetischer Reihenfolge):

Astroburn Lite auf 1.80
Ccleaner auf 4.10
Disk Defrag auf 4.3.6
Dropbox auf 2.6.2
Evernote auf 5.1.2.2387
Firefox auf 24.2.0 ESR
GeoGebra auf 4.4.10
Gimp 2.8.10
Java Runtime auf 7u51
LibreOffice 4.2.0
MikTeX auf 2.9.5105
Personal Backup auf 5.5.04
Registry Defrag 7.4.0
TeX Maker auf 4.1.1
Thunderbird auf 24.2 ESR – Achtung, neue Oberfläche und Funktionen!

In der Aprilausgabe werde ich pünktlich zum Semesterbeginn einige Programme austauschen, deren Weiterentwicklung eingeschlafen ist; an prominenter Stelle finden wir hier das Zeichenprogramm DIA. Studienberater, welche die OSiS als Schulungsgrundlage eines Einführungskurses verwenden möchten, melden sich bitte bei mir per E-Mail: M.Stenzel(at)HostingUndService.de. Sie erhalten dann von mir zwecks Kursvorbereitung eine Vorab-DVD einige Wochen vor Semesterbeginn.

Wie immer wünsche ich viel Erfolg im Studium mit der ‘OpenSource im Studium’!