Logistik-Skripte für die große MUG-Mail Migration

Heue Nacht ist es in ~ 40 Stunden Dauerbetrieb geschafft worden: Die Medizinische Universität Graz hat 2600 User von einem externen Microsoft Exchange Server auf das eigene Groupwise System migriert.

Als kleiner Vorgeschmack auf den vollständigen Bericht hier der Link zu den verwendeten Skripten, mit denen die logistische Aufteilung der Exportfiles auf unsere 30 Import-Rechner erfolgte:

http://subversion.fladi.at/meduni/

Die Skripte sind alle in Python geschrieben und nicht wirklich kommentiert. Das Layout der Datenbank hinter den Skripten werde ich noch nachliefern. Aber zuerst werde ich nochmal eine Kontrolle über alle Systeme fahren und dann nach 40 Stunden durchgehender Arbeit endlich in Bett gehen.

Zum Abschluss aber noch ein paar Fotos von der Migration und den daran Beteiligten.

Man mekrt uns die Müdigkeit wohl anEin Teil der Import-RechnerRobert beim KontrollgangJochen :-)Evangelos schon leicht genervt

Posted
Erster Tag im Produktivbetrieb

Bei uns auf der MedUni geht es drunter und drüber. Nach der großen Migration am Wochenende, die wider Erwarten recht gut über die Bühne gegangen ist, befinden wir uns nun mitten im ersten Tag des Produktivbetrieb des neuen Groupwise System.

Das Telefon klingelt in einem fort, User stolpern über exotische Clients, Die IMAP-Prozesse am Server verschwinden ohne Kommentar ... ein normaler Arbeitstag nach der Migration eben.

Posted
Filtering mails for Courier-IMAP with maildrop

Spam has become a pain for every mailadministrator. It's flooding mailboxes and messing up message queues.Spam at its finest

In order to prevent Spam from reaching my mailboxes which reside on a Courier-IMAP I combined several anti-spam measures into a maildropfilter rule set. The server is running on Debian Etch and provides mail service through the Courier-Suite which in my case consists of the following packages:

  • courier-authdaemon
  • courier-authlib
  • courier-authlib-ldap
  • courier-authlib-userdb
  • courier-base
  • courier-imap
  • courier-imap-ssl
  • courier-ldap
  • courier-maildrop
  • courier-mta
  • courier-mta-ssl
  • courier-ssl

The MTA delivers incoming mails into the users maildir ($HOME/Maildir) using "/usr/bin/maildrop". Filtering Spam takes place inside maildrop which reads it's global configuration from "/etc/courier/maildroprc".

Attention: Debian has two maildrop-packages, maildrop and couier-maildrop! Both work well, but they were build in different ways. maildrop reads its config from /etc/maildroprc while courier-maildrops expects it to reside in /etc/courier/maildroprc.

The filters used to sort out Spam are consulted in this order (using their Debian package names):

I'm thinking about adding other filters such as DCC or Razor too but for now the above combination works pretty well for me. Each Email-account represents a real POSIX-user with it's home directory on a big storage device. That's because each filter saves user-dependant settings and data in the user's home directory e.g. Bogofilter stores it's bayesian database in '~/.bogofilter/wordlist.db'.

To pass the incoming mail through all of the filters maildrop uses the global configuration file which calls the filters in the appropriate order.

# Maildropfilter for uni.fladi.at # Default actions to take for incoming mails # Check if Junk folder exists. # Otherwise create new one and subscribe to it. `test -d $DEFAULT/.Junk` if( $RETURNCODE == 1 ) { `/usr/bin/maildirmake -f Junk $DEFAULT` `echo INBOX.Junk >> $DEFAULT/courierimapsubscribed` } # Check for whitelist. # If none found create an empty file, otherwise lookup would fail # later on. `test -r $DEFAULT/whitelist` if( $RETURNCODE == 1 ) { `/usr/bin/touch $DEFAULT/whitelist` } # Lookup sender in whitelist. # If no occurance is found in the file the mail is passed to a # sequence of anti spam tools. import SENDER if (!lookup($SENDER, "$DEFAULT/whitelist")) { # Initialise SPAM marker. # 0 ... no spam # 1 ... spam SPAM=0 # Pass mail to bogofilter and update the users bogofilter-db. # Bogofilter adds an extra header indication its suggestion whether # the mailis spam or ham. exception { xfilter "/usr/bin/bogofilter -u -e -p" if (/^X-Bogosity: Spam/) { # Spam detected. Set marker to 1. SPAM=1 } } # Pass mail to spamassassin. # Spamassassin adds an extra header indication its suggestion # whether the mailis spam or ham. exception { xfilter "/usr/bin/spamc" if (/^X-Spam-Flag: YES/) { # Spam detected. Set marker to 1. SPAM=1 } } # Pass mail to razor. # Razor is deactivated due to errors in MIME handling. #exception { # cc "|/usr/bin/razor-check" # if ($EXITCODE == 0) # { # xfilter "/usr/bin/reformail -A'X-Razor: Spam'" # EXITCODE=0 # # Spam detected. Set marker to 1. # SPAM=1 # } # else # { # xfilter "/usr/bin/reformail -A'X-Razor: Ham'" # EXITCODE=0 # } #} # Pass mail to pyzor. # Pyzor indicates its result by passing a return value of 0 which # indicates spam. exception { cc "|/usr/bin/pyzor check" if ($EXITCODE == 0) { xfilter "/usr/bin/reformail -A'X-Pyzor: Spam'" EXITCODE=0 # Spam detected. Set marker to 1. SPAM=1 } else { xfilter "/usr/bin/reformail -A'X-Pyzor: Ham'" EXITCODE=0 } } # Pass mail to DCC. # DCC is deactivated because it indicates too much false positives. #exception { # cc "|/usr/bin/dccproc -Rw whiteclnt -c CMN,25 >/dev/null" # if ($EXITCODE == 67) # { # EXITCODE=0 # xfilter "/usr/bin/reformail -A'X-DCC: Spam'" # SPAM=1 # } # else # { # xfilter "/usr/bin/reformail -A'X-DCC: Ham'" # EXITCODE=0 # } #} # If SPAM marker has been set to 1 by any of the above tests push # the mail into the appropriate folder. # To track detected Spam there's an "echo" statement which writes # to syslog. if ($SPAM == 1) { echo "Spam detected!" to "$DEFAULT/.Junk" } } # Check if vacation has been set for this user. `test -f .vacation.msg` if ($RETURNCODE == 0) { # Vacation file found. # Answer mail with /usr/bin/vacation. cc "|/usr/bin/vacation $LOGNAME" xfilter "/usr/bin/reformail -A'X-Vacation: Sent'" } # All done. If mail has not been deliverd yet, drop it into the # regular inbox.

To instruct Couier-MTA to deliver mails through maildrop the DEFAULTDELIVERY in /etc/courier/courier has to be changed:

DEFAULTDELIVERY="| /usr/bin/maildrop"

Incoming should now be dropped into the "Junk" folder.

Download /etc/courier/maildroprc

Posted
GEGEN STASI 2.0.at

Auf deutschen Nachrichtenplattformen wird in letzter Zeit immer häufiger von den Plänen des dort amtierenden Bundesinnenministers Wolfgang Schäuble berichtet, in denen er den Aufbau einer flächendeckenden Überwachung fordert und forciert. Da im Zuge dieser Diskussion immer wieder die Änderungen der Verfassung und des Grundgesetzes, sowie der Aufweichung des Datenschutzes die Rede ist, formiert sich im Internet der Widerstand der Bürger, allen voran die Blogger melden sich mit lautstarkem Protest zu Wort.Das Bild darf unter einer Creative-Commons-Lizenz verwendet werden.

Hier in Österreich sind auch bereits die ersten Auswirkungen der allgemein vorherrschenden Datensammel- und Überwachungswut zu entdecken. So dachte unser hiesiger Innenminister Günther Platter im Juli 2007 bereits laut über einen "Behörden-Trojaner" nach, ähnlich dem Konzept des "Bundestrojaners" seines deutschen Amtskollegen.

Vielleicht ist es Zeit, sich dem Beispiel der deutschen Initiativen anzunehmen, und auch hier in Österreich bereits präventiv gegen die Errichtung eines modernen "Überwachungsstaates" aktiv zu werden.

Posted
Vom Präbichl auf den Reichenstein

Da das Wetter wirklich traumhaft war, ging's dieses Wochenende auf den Reichenstein (2165 Meter). Ausgangspunkt war der Präbichlhof wo es einen großen Parkplatz für die Autos gibt. Als wir um ca. 8 Uhr los gingen waren bereits einige Gruppen auf dem Weg nach oben. Da wir sehr flott unterwegs waren entschlossen wir uns, noch einen kleinen Abstecher zum Rotthörl zu machen und dann unterhalb der Felsen zurück zum Theklasteig zu gehen. Der Schnee, der einige Wochen zuvor gefallen war, lag in den schattigeren Mulden noch teilweise bis zu einem halben Meter hoch. Über die Stiege und die Serpentinen unterhalb der Hütte ging es dann zum Gipfel, von wo aus sich uns eine traumhafte Aussicht auf die Steiermark bot. Überall lag noch Nebel in den Tälern und die Berggipfel waren schon großteils mit Schnee angezuckert.

Nach einer Jause in der Reichensteinhütte marschierten wir das Plateau entlang zur großen Scharte, wo wir dann in Richtung Erzberg absteigen wollten. Der Weg, der von dort zurück zum Parkplatz führen sollte, erwies sich aber als sehr schlecht gepflegt, und nur spärlich markiert. Wir kamen zweimal vom Weg ab und mussten uns durch Gestrüpp und Unterholz wieder den richtigen Weg suchen. Im jetzigen Zustand sollte dieser Weg (Markierungsnummer 685) auf jeden Fall gemieden werden.

Mit etwas Verspätung erreichten wir um 15:45 Uhr dann wieder den Parkplatz. Dank des tollen Wetters hat sich diese Tour wirklich bezahlt gemacht.

Der Präbichlhof als AusgangspunktDer Präbichl noch im NebelDer HochturmHochlandrinderDer ReichensteinMartinaIm Hintergrund schon der erste SchneeDer Durchstieg beim RotthörlOb diese roten Pflanzen für den Namen “Rotthörl” verantwortlich sind?Die Sonne kommt über das RotthörlDas Tal der KrumpenalmAuf der anderen Seite des Tals liegt der TheklasteigDer schmale Weg vom Rotthörl zum TheklasteigTrofaiach liegt noch unter einer NebeldeckeÜberall schon SchneeGar nicht so ungefährlich, immerhin ging es mehr als hundert Meter schräg bergabDie Westseite des ErzbergsEisenerzDer Aufstieg führt durch diese FelsenDer Kaiserschild nördlich vom ReichensteinKurze Rast am Bankerl vor der StiegeDie StiegeReger FlugverkehrMitten in der StiegeDie Reichensteinhütte ist in SichtWer findet die Gämsen?Die serpentinen zum GipfelTraumhafte AussichtDer Weg zur ReichensteinhütteKurz unterhalb des GipfelkreuzesDer Präbichl vom Gipfel aus gesehenDer Nebel lichtet sich im TalAm Gipfel (2165 Meter)Der kalte Wind erfordert passende KleidungIm Hintergrund der KaiserschildWieder zurück hinab zur HütteDie Krumpenalm mit dem KrumpenseeDie ReichensteinhütteEs geht weiter nördlich zur großen ScharteBlick vom Plateau hinab zum ErzbergAm PlateauDer Abstieg zum KrumpenalmReger GegenverkehrVor der großen ScharteImmer wieder treffen wir auf SchneeDerAbsteig zur großen ScharteSchon fast ein KlettersteigDie letzen Meter hinab wird es nochmals recht steilNichts für Leute mit HöhenangstMartina mitten in der FelswandVor uns der ErzbergDer total zugewachsene Weg von der großen Scharte hinabWir haben den Weg verloren und stehen vor einem Wäldchen aus SträuchernDa müssen wir mitten durchEine verlassene AlmEine kleine Höhle liegt am WegEs geht nur wenige Meter hinab, dann scheint sie zu Ende zu seinEin Paragleiter taucht auf den letzten Kilometern auf

Posted