Nagios: Check if IP is SPAM-Blacklisted

Wenn man fuer mehr als nur eine feste IP-Adresse verantwortlich ist, und sicherstellen moechte, dass diese IPs nicht wegen irgendwelcher Sachen auf irgendwelchen SPAM-Blacklists eingetragen sind, dann ist es schoen das Schweizer-Taschenmesser eines Systemadministrators „Nagios“ um entsprechende Checks zu erweitern. Ich habe hierfuer check_bl gewaehlt.
Dafuer habe ich das Plugin selbst nach /usr/lib/nagios/plugins/ gelegt und in der /etc/nagios3/commands.cfg das folgende check command definiert:

define command{
        command_name    check_bl
        command_line    $USER1$/check_bl -H $HOSTADDRESS$ -B zen.spamhaus.org bl.spamcop.net dnsbl.ahbl.org dnsbl.njabl.org dnsbl.sorbs.net virbl.dnsbl.bit.nl rbl.efnet.org phishing.rbl.msrbl.net 0spam.fusionzero.com list.dsbl.org multihop.dsbl.org unconfirmed.dsbl.org blacklist.spambag.org blackholes.brainerd.net blackholes.uceb.org spamsources.dnsbl.info map.spam-rbl.com ns1.unsubscore.com psbl.surriel.com l2.spews.dnsbl.sorbs.net bl.csma.biz sbl.csma.biz dynablock.njabl.org no-more-funn.moensted.dk  ubl.unsubscore.com dnsbl-1.uceprotect.net dnsbl-2.uceprotect.net dnsbl-3.uceprotect.net spamguard.leadmon.net opm.blitzed.org bl.spamcannibal.org rbl.schulte.org dnsbl.ahbl.org virbl.dnsbl.bit.nl combined.rbl.msrbl.net
}

Anschliessend konnte ich fuer die vorhandene Hostgroup die alle Server beinhaltet die ich pruefen moechte, den check einrichten:

define service {
        hostgroup_name                  myserver-hostgroup
        service_description             BLACKLIST
        check_command                   check_bl
        use                             intranda-service
        notification_interval           0
}

Nagios neustarten, laeuft!

Using apt behind a proxy…

just had to configure it…. Add:

Acquire::http::proxy "http://user:pass@1.2.3.4:8080";

to your /etc/apt/apt.conf. If no username and password needed just remove that options. Replace IP (1.2.3.4) and port (8080) with your configuration. Do an

aptitude update

afterwards to check if it works ;-)

Update des eigenen Firefox Sync Servers

Nach einem Update von meinem Firefox auf die Version 5 konnte ich mich nicht mehr mit meinem eigenen Firefox Sync Server verbinden – wie ich die Einrichtung in diesem Blogpost damals beschrieben hatte. Abhilfe schaffte ein Update, und das ging:

tar -czf 2011-07-06-weave.tar.gz weave/
wget http://people.mozilla.com/%7Etelliott/weave_minimal.tgz
tar -xvf weave_minimal.tgz
mv weave_minimal/* weave/
chown -R www-data.www-data weave
rm weave_minimal.tgz
rmdir weave_minimal

Also nur die vorhandenen Dateien gegen die neuen austauschen und Rechte anpassen. Danach ging alles wieder problemfrei :-)

Remote Kommandos auf Server via xinetd ausfuehren / Adminfun

Es gibt Sachen die machen Spass, z.B. diese Spielerei. Es geht darum auf einem Server ein Remotekommando / Shellskript via Webbrowser auszufuehren, ohne das dafuer irgendeine grosse Software-Remotemanagement-Loesung laufen muss. Die Antwort ist der gute alte (x)inetd verbunden mit einem kleinen PHP-Skript. Ich kommentiere das jetzt hier nicht weiter sondern schreibe es einfach mal runter:

Als erstes muessen die Programme installiert werden:

 aptitude install xinetd php5-cli

Danach die folgende Datei unter /etc/xinetd.d/test ablegen

# description: xinetd + php = fun
service test
{
        socket_type     = stream        
        protocol	= tcp
	wait            = no
        user            = root
	server		= /usr/bin/php5
	server_args	= /root/test.php
	disable		= no
}

Anschliessend die /etc/services editieren und die folgende Zeile einfuegen:

test		44444/tcp			# test

und nun noch diese PHP-Datei unter /root/test.php ablegen:

<?php
echo "+++ xinetd + php = fun +++
 
";
 
## read parameter
$handle = fopen('php://stdin','r');
$input = fgets($handle);
fclose($handle);
 
## split get parameter 
$out1=str_replace("GET /", "", $input);
$out2=str_replace(" HTTP/1.1", "", $out1);
$parameter=explode("/", $out2);
 
## check if we shall do sth. and if we know it
if (trim($parameter[0]) == "doStuff") {
 
  if (empty($parameter[1])) {
    echo "no job start requested...
    ";
  }
 
  elseif (! trim(empty($parameter[1])) AND trim($parameter[1]) == "psaux") {
    $out = shell_exec('ps aux');
    echo "$out";
  }
 
}
else {
  echo "no job start requested...
";
}
?>

Ich denke die PHP-Datei erklaert sich von selber und kann beliebig erweitert werden. Ein Aufruf von http://example.net:44444/doStuff/psaux gibt dann die Ausgabe des Befehls „ps aux“ wieder. Nun sind bei dem shell_exec keine Grenzen gesetzt… ;-) Wichtig daran ist, dass wir die GET Parameter via stdin auslesen, da der xinetd das Zeugs ja nicht per GET an das php-Skript weiterleitet. Aber was solls… Der Kreativitaet sind da keine Grenzen gesetzt.

Ich wuerde natuerlich noch den Zugriff ueber irgendeine iptables Regel beschraenken ala:

iptables -A INPUT -p tcp -m tcp --dport 44444 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 44444 -j REJECT

Und ueber Security von wegen das Skript als root laufen zu lassen usw. reden wir hier nicht weiter, es geht ja auch nicht darum das als Superloesung zu verkaufen, sondern einfach als simple kleine Adminspielerei ;-)