Linux: Netzwerkkarte MAC adresse simulieren/ändern
ifconfig eth0 down ifconfig eth0 hw ether 00:1A:4B:7F:65:2C ifconfig eth0 up
Archive for the ‘ Linux ’ Category
ifconfig eth0 down ifconfig eth0 hw ether 00:1A:4B:7F:65:2C ifconfig eth0 up
Stand gerade vor dem Problem eine Liste von IP Adressen in eine Zeile umzusortieren. Nur für den Fall das ich es später noch mal brauche ;-)
cat <file> | sed -n ‘H;${g;s/\n/\ /g;p}’
Ich habe gestern Abend Spamassassin von Version 3.2.5-2+lenny2 auf 3.3.1-1. Beim anschließenden testen habe ich im Header der festgestellt, dass eingehende E-Mails nicht mehr durch den Spam-Filter laufen.
X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-100 required=14.31 tests=[]
Eine erhöhung das Amavis Log Levels auf 4 brachte den Fehler zu Tage.
Aug 26 10:02:04 mx02.o-o-s.de prequeue_filter[28157]: (28157-01) (!!)SA failed: Can't locate object method "READ" via package "Amavis::IO::FileHandle" at /usr/local/share/perl/5.10.0/Mail/SpamAssassin/Message.pm line 143, <GEN71> line 169. at (eval 104) line 420, <GEN71> line 169.
Dre Grund dafür ist
package Amavis::IO::FileHandle now supports a method READ (i.e. invoked
by a perl functions sysread through a tied hash), which is needed by
SpamAssassin revisions since 2008-09-25 (3.3), bringing a little speedup
to transferring a message from amavisd to SpamAssassin, and avoiding a
Perl I/O bug (perl bug 39060; SA: bug 5985) on some installations;
Dieser Fehler ist in amavisd-new 2.6.2+ behoben, jedoch lässt sich amavisd-new nicht ohne Konflikte aus dem sid Zweig installieren, daher muss die Datei /usr/sbin/amavisd-new manuell angepasst werden. Dazu muss die Zeile nach SA prepare von
my($data_representation) = 'GLOB'; # pass data to SA as ARRAY or a GLOB
auf
my($data_representation) = 'ARRAY'; # pass data to SA as ARRAY or a GLOB
geändert werden.
Ich habe mich rein aus interesse die Tage mit dem Aufbau einer eigenen SBL beschäftigt. Eine SBL ist eine DNS-Zone, in der IP Adressen von Spammern imReverse Format eingetragen werden. Dies ermöglich Postfix, policyd-weight und Spamassassin anschließend die Sender IP Adressen bei eingehenden Mails gegen diese DNS-Zone zu prüfen. Wurde ein entsprechender Eintrag gefunden, kann die E-Mail als Spam behandelt werden.
Beispiel: Meldet sich ein Server mit der IP Adresse 192.168.0.1 und möchte eine E-Mails bei uns los werden, so prüft das ensprechende Programm (Postfix, policyd-weight oder Spamassassin) ob diese IP Adresse in der SBL sbl.o-o-s.de eingetragen ist.
nslookup 1.0.168.192.sbl.o-o-s.de
Ist dies der Fall, wird eine IP aus dem 127.0.0.x Netz zurück geliefert, die jedoch nicht 127.0.0.1 sein darf. Ist dies der Fall, weiß das Programm, dass diese IP Adresse auf der Blackliste steht und behandelt die E-Mails entsprechend.
Im Internet gibt es schon zig SBLs, von denen einige besser als andere Funktionieren. Wie gesagt, ich wollte rein aus Interesse eine eigene SBL aufbauen.
Um eine SBL füttern zu können, benötigt man zu aller erst Spam Mails. Ich hab schon länger zum testen zwei Domains, die nur genau dem Zweck dienen, Spam Mails ein zu sammeln.
Sobald Spam Mails vorhanden sind, müssen die IP Adressen aus den Mails extrahiert werden. Dazu habe ich ein reaöltiv simples Script geschrieben, dass nur die im header vorhandenen IPs heraus filtert. Ursprünglich war mein Gedanke, die Hostnamen aus dem Header per dig aufzulösen, jedoch ist dies relativ schwierig, da die Header Zeilen nicht immer identisch aussehen. Da ich jedoch keine Professionelle SBL aufbauen wollte, reichte es mir die vorhandenen IP Adressen zu filtern.
Das Script kann hier herunter geladen werden. Im Kopfbereich des Scriptes muss der Pfad zum Mailverzeichniss mit dem Spam Mails sowie der Pfad zum sbl zone file angegeben werden.
Da meine sbl eine Dubdomain der Domain o-o-s.de ist, muss zuerst in der Zone o-o-s.de.zone ein Eintrag für die Subomain hinzugefügt werden.
sbl 10800 IN NS ns.o-o-s.de.
Anschließend kann die Subdomain sbl.o-o-s.de eingerichtet werden.
$TTL 10800 @ 2560 IN SOA ns.o-o-s.de. postmaster.o-o-s.de. ( 2010082404 ; serial YYYYMMDDnn 3600 ; refresh ( 1 h) 900 ; retry ( 15 min) 1209600 ; expire ( 14 day) 10800 ) ; minimum ( 3 hours) @ 10800 IN NS ns.o-o-s.de. @ 10800 IN A 83.169.42.112
Wird nun das Script ausgeführt, so werden die IP Adressen aus dem Header der Spam Mails wiefolgt in der Zone eingetragen.
100.124.78.80 IN A 127.0.0.10
Wenn alles richtig funktioniert, ist es nun an der Zeit, die SBL auszuwerten. Es gibt dafür mehrere Möglichkeiten.
Um die SBL mittels policyd-weight abzufragen, muss in der Datei /etc/policyd-weight.conf die SBL aktiviert werden.
[...] @dnsbl_score = ( # HOST, HIT SCORE, MISS SCORE, LOG NAME 'pbl.spamhaus.org', 3.25, 0, 'DYN_PBL_SPAMHAUS', 'sbl-xbl.spamhaus.org', 4.35, -1.5, 'SBL_XBL_SPAMHAUS', 'bl.spamcop.net', 3.75, -1.5, 'SPAMCOP', 'dnsbl.njabl.org', 4.25, -1.5, 'BL_NJABL', 'ix.dnsbl.manitu.net', 4.35, 0, 'IX_MANITU', 'sbl.o-o-s.de', 3.35, 0, 'OOS_DE' ); [...]
Sollte die Konfigurationsdatei nicht exisiteren, kann diese mittels
policyd-weight defaults > /etc/policyd-weight.conf
angelegt werden.
Postfix kann die SBL ebenfalls auswerten. Jedoch ist dabei zu beachten, dass Postfix die E-Mails anhand der SBL nicht bewertet, sondern direkt rejected.
/etc/postfix/main.cf
smtpd_recipient_restrictions = [...] reject_rbl_client sbl.o-o-s.de [...]
Zu guter letzt noch die Auswertung durch Spamassassin. Hierzu muss eine neue Konfigurationsdatei angelegt werden, in der die Regeln definiert werden.
/etc/mail/spamassassin/99_local_bl.cf
header RCVD_IN_OOSBL eval:check_rbl('oos', 'sbl.o-o-s.de.')
describe RCVD_IN_OOSBL Received via IP listed by sbl.o-o-s.de
tflags RCVD_IN_OOSBL net
score RCVD_IN_OOSBL 2.5
Den effektiven Datendurchsatz eines remote Servers zu messen gestaltet sich oft schwierig, da eine entsprechende Gegenstelle fehlt um den wirklichen Datendurchsatz testen zu können. Bei gemieteten Servern gibt es aber häufig einen FTP-Server auf dem ein Backup abgelegt werden kann. Dieser eignet sich auch zum testen.
#!/bin/bash #ifconfig eth0 mtu 1500 /usr/bin/ftp -inv <FTP-Server> <<ENDFTP user <username> <kennwort> put "|dd if=/dev/zero bs=1M count=100" test bye ENDFTP
ALternativ ist netcat eine Lösung, aber hierbei muss man auf beide Maschinen Zugriff haben.