Zum Inhalt springen

Das schmuffligste Blog der Welt

Sinn und Unsinn der passiert

Archiv

Kategorie: Linux

Wer kennt sie nicht, die täglichen/nächtlichen SPAM Faxe. Wenn man alles elektronisch über einen zentralen Faxserver kaufen lässt und die Faxe als PDF per Mail bekommt, hat man zwar keine Papierkosten, aber es nervt halt einfach.
Die Faxe kommen auch regelmäßig mit unterdrückter Rufnummer rein, damit man

a) keinen Nummernfilter setzen kann und
b) keine (triviale) Möglichkeit hat den Absender herauszufinden oder bei der Bundesnetzagentur Beschwerde einzulegen.

Da CapiSuite per default keine Möglichkeit bietet, anonyme Faxe abzulehnen, muss das entsprechende Python Skript händisch um diese Funktion erweitert werden. Bei openSUSE befindet sich dieses Skript unter

/usr/lib64/capisuite/incoming.py

Die betreffende Eingangsfunktion für die Faxe (faxIncoming) muss jetzt um ein IF Statement erweitert werden und sieht dann (Auszug) so aus:

def faxIncoming(call,call_from,call_to,curr_user,config,already_connected):
  try:
    udir=cs_helpers.getOption(config,"","fax_user_dir")
    if (udir==None):
      capisuite.error("global option fax_user_dir not found! -> rejecting call")
      capisuite.reject(call,0x34A9)
      return
    if (call_from=="-"):
      capisuite.log("call from empty number. suppressed.",1,call)
      capisuite.reject(call,0x34A9)
      return
    udir=os.path.join(udir,curr_user)+"/"

Praktischerweise setzt CapiSuite bei unbekannter Rufnummer diese auf „-„, so kann man mit dem o.g. IF Statement ganz einfach einen Capi Reject senden.  Man kann so nett sein und ein 0x3495 (Call Rejected) senden oder wie ich ein 0x34A9 (Temporary failure). Hier eine Liste der Capi Fehlercodes: Link

Wenn nun ein Fax mit unterdrückter Nummer hereinkommt, sieht man im Logfile was genau passiert:

0x8c8750: Connection object created for incoming call PLCI 401 from - to x CIP 0x4
0x8c8750: call from empty number. suppressed.
0x8c8750: rejecting with cause 34a9
0x8c8750: Connection object deleted

Da ich einen termporären Fehler zurückgebe, versucht es der Spammer dann noch ein paar dutzend mal, was die Leitung – eventuell – etwas ausbremst und er nicht so viele SPAM Faxe verschicken kann wie sonst 😉

Hier das diff File für alle Schreibfaulen als tar.gz: incoming.py.tar.gz

For a english version scroll down!

Heute habe ich noch einen Leckerbissen: Ein Script für ESX3/ESX4 mit dem einfache, automatisierte VCB Backups möglich sind.
Über die Annotations kann die Variable DO_BACKUP als einfacher Text für jede VM gesetzt werden, z.B. DO_BACKUP=DAILY.
Das Skript liest diese Anmerkungen aus und sichert die Maschine dann täglich. Aber genug der Rede, hier ist der Download Link:

esx3_4_backup.sh

Voraussetzungen/Infos:
-es gibt die Methoden ONCE, DAILY, WEEKLY und MONTHLY
-DO_BACKUP muss immer am Ende der Annotations stehen. Also z.B. „Nur eine Testmaschine, blah blah blah, DO_BACKUP=WEEKLY“
-Annotations dürfen keine Sonderzeichen (ß,ü,ä,ö, usw) enthalten
-je nach Größe der Backup-LUNs muss die default Vorhaltezeit angepasst werden, sonst laufen die LUNs voll.
-es müssen die UUIDs für _alle_ Produktions-LUNs und Backup-LUNS angepasst werden
-über die Variable ESX müssen alle Hostnamen der ESXe richtig gesetzt sein
-remote SSH login für alle ESXe muss über ein root Zertifikat möglich sein. Default ist /root/.ssh/id_rsa

Ganz wichtig: bevor das Skript ausgeführt wird, sollte DEBUG=1 gesetzt werden. Außerdem solltet Ihr das Skript durchlesen, verstehen und auf eure Bedürfnisse anpassen! Das Skript löscht Dateien auf LUNs auf Konsolenebene, also OBACHT!
1. LESEN
2. VERSTEHEN
3. ZURÜCK ZU 1.

Ich lehne natürlich jegliche Haftung für gelöschte Daten ab. Benutzung auf eigene Gefahr!
(Für alle Schlaumeier: Ja, man kann das besser machen, awk überall durch cut ersetzen, sed zusammenziehen, blablabla. Help yourself.)

English version:

Today I have another gimmick for you: A script for ESX3/ESX4 which makes creating automated VCB backups very easy.
You can set a variable DO_BACKUP as text in the VMs annotations, e.g. DO_BACKUP=DAILY.
The script then reads the annotations, finds the variable and executes the desired vcbbackup.
Here is the download link:

esx3_4_backup.sh

Requirements/Infos:
-you can use backup methods ONCE, DAILY, WEEKLY und MONTHLY
-DO_BACKUP has to be defined at the end of the annotations, e.g. „This is a test machine, blah blah blah, DO_BACKUP=WEEKLY“
-annotations  must not contain special characters (ß,ü,ä,ö, etc)
-depending on the size of your backup LUNs you have to change the default keep times or your LUNs will end up with no space left.
-you have to set the correct UUIDs for  _all_ production and backup LUNS
-variable ESX must be set correctly to contain all ESX hostnames
-remote SSH login must be working for all ESX using a root certificate. Default is /root/.ssh/id_rsa

Very important: before you execute the script you should set DEBUG=1. Additionally you should read, understand and modify the script to fit your needs! The script deletes files directly from LUNs, be careful!
1. READ
2. UNDERSTAND
3. BACK TO 1.

This script comes without any warranty. Use at own risk!
(For all wise guys: yes you can solve this better, replace all awk with cut, shorten the seds, blablabla. Help yourself.)

Please scroll down for the english version of this article!

Heute habe ich ein besonderes Häppchen für alle Spamassassin Benutzer. Eine Bayesdatenbank mit ein paar Millionen gelernten Mails.
Die Datenbank stammt von einem ISP und hat die gelernten Mails von einigen tausend Kunden intus.

Im Detail:

spam_count    ham_count    token_count    oldest_token_age   newest_token_age
591151        4433526      144282         1259699456         1259823676

Also rund 4.4 Millionen HAM counts, knapp 600.00 SPAM counts.
Das ist schon ganz ordentlich 😉

Die Datenbank wurde mit

sa-learn -u public --backup > bayes_02-12-09

gesichert und kann mit

sa-learn -u public --restore ./bayes_02-12-09

wieder importiert werden. Der Pfad sowie der von euch verwendete User (hier: ‚public‘) sollte ggf.  angepasst werden. Vorher das File natürlich gunzippen!

Hier der Link (120MB!):
http://rapidshare.com/files/315578995/bayes_02-12-09.gz

As this is quite an international matter of interest, here the english version:

Today I have a special gimmick  for all Spamassassin users. A bayes database with a few million entries.
The database originates from a German ISP and contains the learned mail of a few thousand customers.

In detail:

spam_count    ham_count    token_count    oldest_token_age   newest_token_age
591151        4433526      144282         1259699456         1259823676

So we have about 4.4 million HAM counts and almost 600.00 SPAM counts.

That is quite a chunk 😉

The database had been dumped with

sa-learn -u public --backup > bayes_02-12-09

and can be imported with

sa-learn -u public --restore ./bayes_02-12-09

The path to the file and the user (‚public‘ in my example) has to be altered to fit your needs. Careful: The file is  gzipped and has to be unzipped before use!

Here is the link (120MB!)
http://rapidshare.com/files/315578995/bayes_02-12-09.gz

Tja, wer kennt das Problem nicht? Man sitzt mit seinem tollen Subnotebook auf dem Sofa, aber die Möhre hat nur einen Mono Quäker unter(!) der Tastatur eingebaut. So wird das natürlich nichts mit den Youtube Musikvideos oder den neuesten Demo-MP3s.

Wenn man dann auch noch einen 24/7 Linux Server samt 5.1 Anlage im Wohnzimmer stehen hat, dann stellt sich die Frage: Kann ich den Sound von meiner Windows Kiste nicht irgendwie per Netzwerk (Kabel o. WLAN) zum Server schicken und über meine Anlage anhören?
Einige Leute empfehlen hier ja Pulseaudio, aber davon halte ich ehrlich gesagt wenig. Ist ja auch nicht sonderlich Ressourcen schonend. Also was denn dann?

Zunächst sollte der Linux Server so weit eingerichtet sein, dass man mit aplay ein paar Testsounds ausgeben kann:

server:~ # aplay /usr/share/sounds/alsa/Front_Right.wav
Playing WAVE ‚/usr/share/sounds/alsa/Front_Right.wav‘ : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Sofern Ihr jetzt „Right“ aus den Lautsprechern hört, ist der Sound soweit eingerichtet und es kann losgehen.
Das tolle ist, aplay kann die Sounddaten nicht nur von einer Datei lesen, sondern auch von ’stdin‘:

server:~ # cat /usr/share/sounds/alsa/Front_Right.wav|aplay –
Playing WAVE ’stdin‘ : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Dies sollte wieder ein „Right“ ausgeben.
Koppelt man dies jetzt mit netcat, dann ist die Hälfte schon geschafft:

server:~ # netcat -l -p 12345|aplay – -f cd

Netcat hört jetzt auf Port 12345 auf Verbindungen und piped die eingehenden Daten an aplay. Letzterem sagt man noch, dass man als Format (-f cd) 16Bit Stereo bei 44.1kHz spielen will.
Der springende Punkt ist jetzt, wie man den Sound von Windows übers Netz schiebt. Dazu braucht man natürlich zunächst mal Netcat für Windows (http://www.netzwelt.de/download/6848-netcat.html). Dann muss man noch die Lautsprecherausgabe auf stdout umleiten. Leider ist mir bisher nur das Programm „LiveInCode“ (http://liveincode.rm.pp.ru/) als nutzbare Lösung bekannt. Und dies auch nur für Aufnahme Quellen.

Im Klartext bedeutet das, eure Windowskiste muss einen entsprechenden Mixerkanal haben, hier „Stereomix“ genannt:

mixer

Also. LiveInCode runterladen, entpacken. Netcat für Windows runterladen, am besten in das selbe Verzeichnis schieben.

Gestartet wird dann mit:

<pfad zu linco>\linco.exe -B 16 -C 2 -R 44100 |<pfad zu nc.exe>\nc.exe <hostname oder ip vom server> <port>

Linco codiert 16Bit (-B 16),  2 Kanäle (-C 2) bei 44100Hz (-R 44100). Also CD Format. Der Port für Netcat wäre in unserem Beispiel dann 12345.

Gestartet sieht das dann z.B. so aus:

C:\Dokumente und Einstellungen\User\Desktop>d:\linco\linco -B 16 -C 2 -R 44100 | d:\linco\nc server 12345
****
**** LineInCode v2.10(2003-12-31)
**** (C) 2003 Roman Mamedov
****
**** Using „SoundMAX HD Audio“
**** 44100 Hz, 16 Bit, Stereo
****
**** Press Ctrl-C to stop recording…

Wenn der Connect klappt, sollte Linux bzw. aplay melden, dass es einen entsprechenden Stream empfängt:

server:~ # netcat -l -p 12345|aplay – -f cd
Playing raw data ’stdin‘ : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

Spielt man nun einen Sound auf der Windows Maschine ab, sollte es aus den Lautsprechern der Anlage kommen. Einziger Nachteil:  Durch Linco kommt es zu einem Delay in der Ausgabe. Wer sich also Videos ansieht, wird den Versatz deutlich bemerken. Leider ist mir kein Programm bekannt, dass den Windows Speaker direkt auf stdout umleitet. Dann könnte man das Delay minimieren.