Leslie Schnee – Blog

Frankfurt und Umgebung

Durchsuche Beiträge mit Schlagwörtern Linux

Vor allem auf unseren Mailservern kommt es vor, dass wir viele Dateien in "toten" Postfächern löschen müssen, in denen sich zehntausende Spam-Mails angesammelt haben (jede E-Mail=eine Datei). Wird ein bestimmter Wert von Dateien in einem Verzeichnis überschritten, erhalten wir folgende Fehlermeldung:

turbohermes:[..]/Maildir/new# rm *
bash: /bin/rm: Argument list too long

Der Befehl wird so leider nicht ausgeführt.
Folgender Befehl schafft Abhilfe und löscht sämtliche Dateien im Ordner:

ls|xargs rm

Löbliches Kuba

1 Kommentar

Wie man heute bei heise online lesen kann, setzt Kuba künftig auf ein von der Universität entwickeltes, mit staatlichen Hilfen finanziertes Linux. Das auf Gentoo basierende Betriebssystem trägt den Namen Nova und soll Windows auf den meisten Computern im Land ersetzen. Hintergrund sind befürchtete Spionagefunktionen im Betriebssystem von Microsoft.

Heute ist ein schöner Tag! Nicht nur weil Linux weiter auf dem Vormarsch ist. Es kribbelt. Stark wie schon lange nicht mehr.

Nachtrag: Der letzte Satz stiftete bei zwei Bekannten offenbar Verwirrung, wie sie mir per E-Mail mitteilten. Ich sage nur "Schmetterlinge". Viele Schmetterlinge. I am just happy! Das ist ein Blog, da gehört so was rein!! Auch wenn das mit Kuba nicht wirklich was zu tun hat. :-)

Leider kommt es auf unserem Mailrelay-Server sehr oft vor, dass beispielsweise über gehackte Formulare, Content-Management-Systeme oder sonstige PHP-Scripte Unmengen an Spam versendet werden.

Wir haben bei PS-Webhosting einen eigenen Mailserver, der von den einzelnen Webhosting-Servern die (Formular-)Mails bekommt und dann versendet. Die einzelnen Hosting-Server leiten also Mails, die zum Beispiel mit der mail Funktion von PHP verschickt werden (Anmeldebestätigungen von Foren, Mails aus Kontaktformularen) an diesen Server weiter. Üblicherweise werden so höchstens einige hundert Mails pro Minute versendet. Sind es einige Tausend, ist das erstmal verdächtig und deutet auf Spam hin[*]. Hierfür haben wir ein Script geschrieben, auf dessen Erläuterung ich jetzt mal verzichte. Es sollte aber für den Einen oder Anderen durchaus hilfreich sein, und wenn es nur als Denkanstoß dient:

#!/bin/bash
MSGSENT=0
LASTMCOUNTFILE="/var/run/mail.count"
let CURMCOUNT=`cat /var/log/qmail/current  | grep 'accepted' | grep -v '194.116.187.' | wc -l`+`qmailctl queue | head -1 | tr -d ' ' | cut -d: -f2`
if [ ! -f $LASTMCOUNTFILE ]
then
echo $CURMCOUNT > $LASTMCOUNTFILE
exit 1
fi
LASTMCOUNT=`head -1 $LASTMCOUNTFILE`
let DIFFMCOUNT=$CURMCOUNT-$LASTMCOUNT
if [ $DIFFMCOUNT -ge 1200 ]
then
if  [ $DIFFMCOUNT -ge 2600 ]
then
svc -d /service/qmail-send
ADDMESS="+-DELIVERSTOP-"
wget -O/dev/null -q "http://xxx.xxxxxxx.de/alertscript?from=Abuse&text=eMAIL-MENGENWARNUNG$ADDMESS+($DIFFMCOUNT+$HOSTNAME)"
MSGSENT=1
fi
if [ $MSGSENT -eq 0 -a `dig @194.116.186.1 +noall +answer txt mailcount-$HOSTNAME.1800s.timer.ps-server.net | tr -s '\t' ' ' | cut -d' ' -f2` -ge 1780 ]
then
wait 1
#wget -O/dev/null -q "http://xxx.xxxxxxx.de/alertscript?from=Abuse&text=eMAIL-MENGENWARNUNG$ADDMESS+($DIFFMCOUNT+$HOSTNAME)"
fi
fi
echo $CURMCOUNT > $LASTMCOUNTFILE

"http://xxx.xxxxxxx.de/alertscript" ist dabei ein externes Programm, welches uns die Meldung, dass der Mailserver angehalten wurde, auf unsere Pager schickt. Das Programm hat also erkannt, dass im Zeitraum X mehr als üblich E-Mails verschickt wurden und den Mailversand mit

svc -d /service/qmail-send

angehalten. Eingehende Mails werden aber weiter angenommen und landen in der Queue.

Die Queue und die einzelnen Mails darin finden wir in einer Standardinstallation unter /var/qmail/queue/mess. In diesem Ordner finden sich verschiedene Unterordner, in denen sich die Mails als Textdatei befinden. Wir schauen uns eine der Mails mit less an und versuchen nun zunächst die Ursache ausfindig zu machen. Praktischerweise werden bei uns bei Formular-Mails die UID des Kunden und der Server immer in den Mailheader geschrieben, sodass man anhand der Server-Logfiles die Ursache recht schnell ermitteln kann.

Anschließend stoppen wir auf dem Mailserver Qmail komplett (wichtig!!) mit

qmailctl stop

damit die Queue beim Löschen nicht durcheinander kommt. Falls noch nicht vorhanden, installieren wir mit apt-get unter Debian-Linux qmail-remove und rufen es wie folgt auf der Konsole auf:

qmail-remove -p Suchbegriff

(Suchbegriff aus der Spam-Mail, also z.B. Viagra, Porn, Paypal..)

Dies listet erst einmal alle Treffer auf. Anschließend löschen wir endgültig mit:

qmail-remove -p Suchbegriff -r

-r verschiebt die E-Mails dann in einen Ordner /var/qmail/queue/yanked. Bei älteren Systemen dauert das mit dem Verschieben aber länger, deshalb kann man auch -d auswählen, dann werden die Spam-Mails direkt gelöscht.

Viel Erfolg!

[*] Das größte Problem bei dem oben genannten Spam-Erkennungs-Script liegt darin, dass zum Beispiel legale größere Newsletter von Kunden auch als Spam erkannt werden und der Mailserver anhält. Für diese vertrauenswürdigen Kunden haben wir wiederum ein eigenes System zum Versand der Newsletter eingerichtet.

Vielleicht wird's ja mal gebraucht.
Auf der Konsole:

 
wget -r ftp://user:passwort@ftp.xyz.de/

Es ist also mit wget nicht nur möglich, Dateien oder Websites über http:// zu holen, sondern auch Daten von einem FTP-Server.

Soeben falle ich über eine alte Version der Website unseres ehemaligen Angebots planet-school.de. Und was lese ich da groß und stolz auf der Startseite?

02.05.2001: Mehr RAM ! Nach einem Speicherupdate läuft turboliesel.planet-school.de nun mit 192MB RAM. Wir finden, dass sich die allgemeine Server-Geschwindigkeit dadurch merklich verbessert hat. Das Update war nötig, da es zu Verzögerungen kam, wenn sehr viele User-CGI-Scripte gleichzeitig aufgerufen wurden.

Ja, das waren noch Zeiten, als Server mit 192 MB RAM hochperformant liefen. Heute hat keiner unserer Server weniger als 2 GB RAM, die meisten sogar 4 GB. Und da auch bei uns gilt "Rente mit 67" ist die gute alte turboliesel heute immer noch im Einsatz. Neben einigen Kunden liegt auch mein Blog auf diesem Server, der allerdings inzwischen ebenfalls auf 2 GB RAM aufgerüstet wurde und einen schnelleren Prozessor besitzt. Das kann ich im Jahr 2009 stolz behaupten! :-)

Wieder mal ein nützlicher Linux-Tipp, diesmal zum von mir auf dem Sony Vaio eingesetzten Linux Betriebssystem Kubuntu. Sehr störend finde ich, dass man nach einer Standardinstallation keinen root-Zugriff zum Beispiel in der Konsole hat; ich verabscheue das Arbeiten mit sudo geradezu, auch wenn es unter Sicherheitsaspekten sicherlich auch Vorteile bietet. Aber wer gewissenhaft mit seinem root-Kennwort umgeht und nicht unbedingt dasselbe Kennwort wie für den Standardlogin benutzt, geht im Grunde kein erhöhtes Risiko ein.

Den gesperrten root-User schaltet man einfach wie folgt frei:

schnee@leela:~$ sudo passwd root

Jetzt einfach zunächst das normale User-Kennwort eingeben und dann zweimal ein neues root-Kennwort eingeben. Anschließend kann man mit dem Befehl su jederzeit root werden.

Normalerweise sollten die Werte für den schnellen Zugriffsmodus auf IDE-Festplatten unter Linux automatisch gesetzt sein. Manchmal aber fliegen diese auch raus und der Server oder PC wird spürbar langsam. Mit dem Tool hdparm kann man eine IDE-Platte im laufenden Betrieb optimieren.

Erstmal fragen wir die aktuellen Werte ab:

 
turbomorbo:~# hdparm /dev/hdc
 
/dev/hdc:
 multcount    =  0 (off)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 65535/16/63, sectors = 120103200, start = 0

unmaskirq und multcount auf off und IO_support nur 16 Bit suggeriert uns hier schon, dass etwas nicht stimmt. Dies lässt sich auf jeden Fall optimieren:

hdparm -d1 -u1 -c1 -m16 /dev/hdc

Als Ergebnis erhalten wir:

 
turbomorbo:~# hdparm /dev/hdc
 
/dev/hdc:
 multcount    = 16 (on)
 IO_support   =  1 (32-bit)
 unmaskirq    =  1 (on)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 65535/16/63, sectors = 120103200, start = 0

Erst gestern konnten wir damit den Blog und die Gallery2 meines Freundes Ian, der seine Seiten auf einem relativ alten System hostet, deutlich beschleunigen.

Viel Erfolg!

In Zukunft werde ich hier in unregelmäßigen Abständen nützliche Shell-Scripte veröffentlichen, die uns bei PS-Webhosting einige Arbeit abnehmen. Sie sind unter Debian Linux lauffähig.

Heute: Anlegen einer mySQL-Datenbank mit Zufallspasswort.

Verwendung:

turbozoidberg:~/utils# ./newdb
Usage: ./newdb dbname [password]

Inhalt der Datei:

 
#!/bin/sh
 
MYSQLADMIN_USER="root"
MYSQLADMIN_PASSWORD="mySQL_root_Passwort"
MYSQLADMIN_HOST="mySQL_Hostname (z.B. localhost)"
 
MYSQLDATABASE="$1"
MYSQLUSER="$1"
MYSQLPASSWORD="$2"
# IP-Nummer(n) der Server, die auf die Datenbank zugreifen dürfen:
MYSQLHOST="123.123.123.%"
 
if [ -z "$MYSQLPASSWORD" ]
then
  MYSQLPASSWORD="`pwgen 8 1`"
fi
 
if [ $# -lt 1 -o $# -gt 2 ]
then
  echo "Usage: $0 dbname [password]"
  exit
fi
 
mysql -u$MYSQLADMIN_USER -p$MYSQLADMIN_PASSWORD -h$MYSQLADMIN_HOST mysql << EOF
CREATE DATABASE \`$MYSQLDATABASE\`;
GRANT USAGE ON *.* TO \`$MYSQLUSER\`@\`$MYSQLHOST\` IDENTIFIED BY "$MYSQLPASSWORD" WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER,LOCK TABLES,CREATE TEMPORARY TABLES ON \`$MYSQLDATABASE\`.* TO \`$MYSQLUSER\`@\`$MYSQLHOST\`;
EOF
 
echo "MySQL:"
echo "Datenbankname: $MYSQLDATABASE"
echo "Benutzername : $MYSQLUSER"
echo "Passwort     : $MYSQLPASSWORD"

Die Datei einfach zum Beispiel als "newdb" abspeichern und auf der Shell mit

./newdb Datenbankname <Passwort>

aufrufen. Ohne Passwort wird ein zufälliges Passwort mit pwgen generiert.

Viel Spaß!