App-of-the-month: Einmalpasswörter mit OPIE und freeauth

Mittwoch, 15. August 2007

Wer kennt es nicht, das auth log ist voll von gescheiterten Anmeldeversuchen per SSH. Immer wieder gibt es dabei panische Reaktionen von Betreibern des Servers, die alle in die Richtung gehen "Hilfe, man versucht mich zu hacken". Mitnichten, dies ist das übliche Hintergrundrauschen wenn Port 22 frei ist und ein SSHD dort lauscht. Wirkliche Gefahr ist dabei, so man root den ssh login nicht erlaubt, diesen auf einige User beschränkt, komplexe Passwörter nutzt, nicht gegeben. Auch die Nutzung eines keys und einer passphrase schafft hier Abhilfe.

Eine vollkommen andere Möglichkeit bietet da die Authentifizierung mit einem Einmalpasswort. Hier das RFC dazu.

Die bekannteste Möglichkeit dürfte hier sicherlich OPIE (One Time Passwords in Everything) sein. Dabei werden die Kennwörter für einen Benutzer im voraus generiert und sind nur für eine einmalige Anmeldung nutzbar. Bei der nächsten Anmeldung muss ein neues OPIE Kennwort eingegeben werden. Dieses Verfahren ist der Verwendung einer TAN Liste beim Online banking recht ähnlich.  Eine gute Beschreibung zur Nutzung von OPIE bietet das FreeBSD handbook, dieser Artikel und die manpage zu opie und opiepasswd.

Man kann aber auch noch einen Schritt weitergehen und einen SecureID Token (Zwei-Faktorauthentifizierung) nutzen. Diesen gibt es von der Firma RSA, wobei man aber auch auf das freie Projekt freeauth setzen kann und ein Java fähiges Mobiltelephon braucht.

Bei solchen Tokens, egal ob von RSA oder der Möglichkeit von freeauth, wird immer ein Zeitabhängiges Passwort erzeugt mit welchem der Benutzer sich auf dem System einloggen kann. Nach einer voreingestellten Zeit, beispielsweise 3 Minuten, wird ein neues Kennwort erzeugt. Das alte würde verfallen und eine Anmeldung wäre nur mit dem neuen Kennwort möglich. Hierzu muss freeauth auf dem entpsrechenden Server aktiviert werden, und das Java Programm, welches hier zu finden ist, muss auf dem Mobiltelefon installiert werden. Eine Liste der unterstützen Modelle gibt es hier einzusehen. Wer sich gerne ein Bild von der Anwendung auf dem Mobiltelephon machen möchte, findet hier einige Bilder.

Wie man sieht muss es nicht immer eine teure Lösung eines namenhaften Unternehmens sein, um gewissen Sicherheitsmaßnahmen im privaten Rahmen, oder professionellen Umfeld, konstengünstig nutzen zu können.

Überprüfe Deinen Postboten

Dienstag, 10. Juli 2007

ApplicationWer einen Mailserver aufsetzt, egal ob Sendmail, Postfix, Qmail oder Exim, der möchte diesen, nein, er muss diesen, vor der richtigen Inbetriebnahme testen ob er auch das macht was er machen soll. Das meist nicht viel, dennoch muss auch dies getestet werden, der Versand von E-Mails.

Sicherlich reicht hier telnet aus, die richtigen Kommandos wie HELO, EHLO, MAIL from:, RCPT to:, data und . vorausgesetzt, einfach geht es allerdings, auch wenn es um verschlüsselte Verbindungen geht, mit dem Programm swaks.

Dieses befindet sich in den Ports von FreeBSD:
#/usr/ports/mail/swaks

Nach der Installation, wo man über "make config" den MX lookup support und die TLS Unterstützung aktivieren kann, kann das Programm über
#swaks

aufgerufen werden.

Um nun einen Server zu testen, wird dieser mit dem Parameter -s aufgerufen:
#swaks -s mail.bsdgroup.de
sfpc001# swaks -s mail.bsdgroup.de
To: asg@grunix.de
=== Trying mail.bsdgroup.de:25...
=== Connected to mail.bsdgroup.de.
< -  220 mail.bsdgroup.de ESMTP NuttenPostfix on BSD
-> EHLO sfpc001.suedfac.com
< -  250-mail.bsdgroup.de
<-  250-PIPELINING
<-  250-SIZE 51200000
<-  250-ETRN
<-  250-STARTTLS
<-  250-AUTH PLAIN
<-  250-AUTH=PLAIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250 DSN
-> MAIL FROM:
< -  250 2.1.0 Ok
-> RCPT TO:

< ** 554 5.7.1 : Helo command rejected: Host not found
-> QUIT
< -  221 2.0.0 Bye
=== Connection closed with remote host.

Der Absender liess sich in diesem Falle nicht auflösen und so wurde die E-Mail nicht versendet.

Mit der Option -f kann auch die Absenderadresse festgelegt werden:
sfpc001# swaks -s mail.bsdgroup.de -f asg@encephalon.de

Man kann auch als Protokoll SSMTP angeben:
#swaks -s mail.bsdgroup.de --protocol=SSMTP -f asg@bsdgroup.de
To: asg@grunix.de
=== Trying mail.bsdgroup.de:465...

Ebenso ist es möglich TLS anzugeben und das Passwort. Über
#swaks --help

bekommt man alle Optionen angezeigt die das Programm bietet.

App-of-the-month: pfqueue

Dienstag, 22. Mai 2007
App of monthMit pfqueue haben Administratoren von Postfix (1.x und 2.x) sowie Exim (3 und 4) die Möglichkeit über ein Interface die Mailqueue zu beobachten und entsprechend einzugreifen.

pfqueue ist ein real-time scanner mit welchem man sich die Queue anzeigen lassen kann. Und nicht nur das, die in der Queue vorhandenen Nachrichten werden aufgelistet, können angezeigt werden (inklusive body), das Löschen der Nachrichten ist möglich ebenso diese auf "hold" zu setzen, wieder freizugeben und erneut in die Queue zu stellen.

Sicherlich, es gibt Programme wie mailq und postqueue, dennoch ist das consolen Programm (auf ncurses basierend) pfqueue einfacher zu bedienen und bietet einen besseren und schnelleren Überblick über die Queue. Die Arbeit fällt hiermit leichter.

Unter FreeBSD findet man unter
#/usr/ports/mail/pfqueue

Hier die Ausgabe von postqueue:
# postqueue -p
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
9DAFE7E8CE    58822 Fri May 18 13:08:37  asg@sfpc001.suedfac.com
(host smtp1.goneo.de[82.100.YYY.XXX] said: 450 : Sender address rejected: Domain not found (in reply to RCPT TO command))
juergen.dankxxxxx@freebsd-xxxxxxx.de

Für die meisten sicherlich ausreichend, dennoch sieht die Ausgabe von pfqueue ungleich besser und Übersichtlicher aus, wie man dem screenshot entnehmen kann.

Die Farben können, je nach Wunsch, auch ausgeschalten werden.

Neben dem Programm pfqueue kommt noch das Programm spfqueue mit. Mit diesem ist es möglich eine Queue auf einem entfernten Host mittels einem lokalen pfqueue anzeigen zu lassen. Dabei muss pfqueue mit der Option -r $Hostname gestartet werden und auf dem entfernten Server muss spfqueue aktiv sein.

App-of-the-month: tcpdrop

Donnerstag, 10. Mai 2007
App of monthEs gibt immer wieder den Wunsch eine bestehende Verbindung zu eigenen Server zu trennen. Selbst kann man sich ausloggen und somit die Verbindung sauber beenden, was aber wenn man andere User, die eine Verbindung zum eigenen Server aufgebaut haben, von diesem runterschmeissen möchte.

Hier bietet das Programm tcpdrop die Lösung, denn es kappt einfach die angegebene Verbindun zu Server. Sei es via FTP, SSH oder sonstigem, der verbundene Benutzer wird getrennt.

Als erstes steht immer die Frage im Raum, welche Verbindung soll getrennt werden, wie finde ich dies heraus? Nun, hierfür bietet sich das Programm sockstat an. Mit diesem lassen sich bestehende Verbindungen auf den Server anzeigen.
#sockstat -c | grep sshd

Hiermit werden alle Verbindungen auf den SSHD ausgegeben, was wie folgt aussehen könnte:
asg sshd 15242 3 tcp4 217.172.44.xx:22 82.193.243.xx:50951
root sshd 15231 3 tcp4 217.172.44.xx:22 82.193.243.xx:50951
asg sshd 15001 3 tcp4 217.172.44.xx:22 212.202.224.xx:59253
root sshd 14998 3 tcp4 217.172.44.xx:22 212.202.224.xx:59253

Um nun die Verbindung eines des Benutzers abzubrechen, ist folgende Syntax erfordlich:

#tcpdrop $lokale-IP-Adresse $Lokaler-TCP-Port $IP-Adresse-User $TCP-Port-User



Wenn also die Verbindung des Benutzers "asg" welcher von Server 82.193.243.xx mit dem Port 50951 auf unseren Server 217.172.44.xx auf Port 22 getrennt werden soll, ist folgendes einzugeben:




#tcpdrop 217.172.44.xx 22 82.193.243.xx 50951



Auf seiten des Server wird dabei folgende Meldung ausgegeben:




217.172.44.xx 22 82.193.243.xx 50951: dropped



Der Client der verbunden war wird diese Meldung erhalten:




Read from remote host example.com: Connection reset by peer. Connection to example.com closed.