MIMEDefang and virii

OK so you use MIMEDefang together with ClamAV[*] to check incoming messages for viral content. But given the fact that an infected machine will bomb you with many many messages, why should you check every message sent for a given time window? This is what I came up with:

The default mimedefang-filter(5) has the following check which discards viral messages:

if ($FoundVirus) {
  md_graphdefang_log('virus', $VirusName, $RelayAddr);
  md_syslog('warning', "Discarding because of virus $VirusName");
  return action_discard();
}

Changing it to:

if ($FoundVirus) {
  # OK log $RelayAddr
  # If you are on a Debian-like system you have to put
  # use DB_File in /etc/mail/mimedefang.pl.conf
  # otherwise you have to put it somewhere in mimedefang-filter
  my %vbl;
  my $now;
  tie %vbl, 'DB_File', "/var/cache/local/virbl/virbl.db", O_CREAT|O_RDWR, 0644, $DB_BTREE or die;
  $now = time;
  $vbl{$RelayAddr} = $now;
  untie %vbl;
  md_graphdefang_log('virus', $VirusName, $RelayAddr);
  md_syslog('warning', "Discarding because of virus $VirusName");
  return action_discard();
}

logs $RelayAddr (the IP address of the infected machine) together with a timestamp in a BerkeleyDB B-Tree. In our example this is /var/cache/local/virbl/virbl.db. You have to make this file writeable by the user that runs MIMEDefang on your system. And now using the following sendmail.mc code one can block this IP address prior to inspecting the message content:

LOCAL_CONFIG
# .db is appended by sendmail automagically
Kvirbl btree -a.FOUND /var/cache/local/virbl/virbl

LOCAL_RULESETS
# Always remember:  In sendmail the LHS and the RHS of the sendmail.mc/.cf is 
# separated with tabs and not spaces.  So do not copy-paste this fragment,
# type it.
SLocal_check_relay
R$*                     $: $&{client_addr}
R$*                     $: $(virbl $1 $: $1.NOTFOUND $)
# The next line broken in two for readability
R$* . FOUND             $#error $@ 5.7.1 $: You have sent us mail containing
           a virus and are blocked from our systems for an hour.

So now you need an expiration proccess. How long shall these IP addresses remain in your database? I keep them for one hour. It seems to be a reasonable default. A simple expiry script is the following perl snippet:

#!/usr/bin/perl
use DB_File;
$db = shift or die;
$threshold = shift or die;
tie %d, 'DB_File', $db, O_RDONLY, 0644, $DB_BTREE;
$now = time;
foreach $i (keys %d) {
        $diff = $now - $d{$i};
        if ($diff > $threshold) {
                delete $d{$i};
        }
}
untie %d;

You can run this script from cron every ten minutes or so. I’ve written my expiry program in C and run it every two minutes. If you also want to do this, you have to remember that the perl snippet on mimedefang-filter that logs $RelayAddr and the timestamp stores the timestamp as a string and not as an integer.

[*] There exist many HOWTOs on how to setup MIMEDefang to work with ClamAV. Just use Google.

1000 Euros Generation

Βρήκα το site αυτό από τη δημοσίευση [pdf document] μιας παράταξης στο ΕΔ του ΤΕΕ (που το αναδημοσίευσε από τη Καθημερινή).

"…But "1.000 EUROs GENERATION" is also the story about all those people like Claudio, who nowadays are building up an entire generation named "Milleuristi" (o "G1000"). Young employees between 25 and 35 years who, despite their poor earnings, keep on thinking of their future in a positive way and without self-commiserations…."

Ελπ(ί|ή)ζω να προλάβω να το διαβάσω…

Update #1: Πριν κάτι μέρες είδα το βιβλίο μεταφρασμένο στα Ελληνικά.
Update #2: Αφού έκανες τον κόπο να διαβάσεις αυτό το post, δες και τη γενιά των €700.

Once upon a college

Λίγο καιρό αφότου κάποιες από τις προτάσεις της "επιτροπής σοφών" (για την Παιδεία – μου φαίνεται πως έχουμε πολλές σοφές επιτροπές) έφτασε σπίτι το τεύχος Μαΐου του 2006 του IEEE/Spectrum. Και το μάτι μου πέφτει αμέσως σε ένα άρθρο με τίτλο "The Olin Experiment". Πραγματικά πίστευα πως επρόκειτο για κάποιο πείραμα Η/Μ ή κάτι τέτοιο, σίγουρα όμως δε περίμενα πως πρόκειται για ένα εκπαιδευτικό πείραμα. Και τη στιγμή που οι δικοί μας "σοφοί" προτείνουν ως βελτιώσεις τις διαγραφές των "αιωνίων φοιτητών" (γιατί τι ενοχλούν αλήθεια;) ή τη μη μονιμότητα (tenure) όλων των βαθμίδων πριν τον Καθηγητή (ποια συγκεκριμένη κατηγορία Καθηγητών μπορεί να εξυπηρετεί κάτι τέτοιο;) αυτοί που βλέπουν πως το επίπεδό τους πέφτει, ούτε "εντατικοποιούν", ούτε διαγράφουν, αλλά δοκιμάζουν. Και να το γιατί:

"Engineering is fun, engineering is creative," he says, "but we have this kind of boot-camp model of engineering education: if you manage to get through the first two years, then we'll let you do some engineering."

Και πράγματι τουλάχιστον για τους Ηλεκτρολόγους Μηχανικούς του 1990 στο ΕΜΠ έτσι ήταν. Περάσαμε δυο χρόνια αγωνιζόμενοι με μαθηματικά και φυσικές διδασκόμενοι με τρόπο που δεν αφοροούσε Μηχανικούς (αλλά Μαθηματικούς και Φυσικούς). Πολύς κόσμος απογοητεύτηκε τα δυο πρώτα χρόνια και δεν είναι τυχαίο πως οι περισσότεροι που στο τέλος της φοίτησης χρωστούσαν μαθήματα, χρώσταγαν κυρίως από τα δύο πρώτα χρόνια. Είναι δυνατό να πρέπει να διδαχτώ το φαινόμενο Hall πέντε φορές; Να πρέπει να υπάρξουν 1000+ άτομα τα οποία χρώσταγαν Φυσική 4 (Κβαντική) για να υποψιαστούν ότι κάτι δε πάει καλά με την εξέταση -και όχι τη διδασκαλία- και τελικά να "φύγει" ο κόσμος με εύκολα θέματα; Να πρέπει να ξέρω να αναγνωρίζω όλες τις μορφές των διαφορικών εξισώσεων και να μαθαίνω το μετασχηματισμό Laplace στο τέλος του εξαμήνου (ενώ ταυτόχρονα μου τον έχει διδάξει Ηλεκτρολόγος Καθηγητής στην αρχή του εξαμήνου, γιατί αλλιώς δε θα μπορούσα να μάθω ηλεκτρικά κυκλώματα);

"Με άλλα όνειρα μπήκα στο Πολυτεχνείο", λέει ένας εξαιρετικός συνάδελφος αυτή την ώρα που συζητάμε για το Olin, "και με απογοήτευσε πολύ" (δε ξέρει ότι γράφω τώρα στο blog). Και μιλάμε για άνθρωπο που μόλις πήρε το Διδακτορικό του (15 χρόνια στο Ίδρυμα, όχι αστεία).

Δείτε και ένα ωραίο θεατρικό έργο: "The Olin College Curriculum" [.doc document]

secsup.org

Due to a customer having being stuck with a virus I found out this today:

http://www.secsup.org/complaints/

So I added these lines in our outgoing mail servers' sendmail.mc (for the future):

#Remember that sendmail distinguishes between LHS and RHS with TABS not spaces
LOCAL_CONFIG
F{MCI_DOMAINS} -o /etc/mail/mci-domains

LOCAL_RULESETS
SLocal_check_rcpt
R$*         $: $>canonify $1
R$- < @ $={MCI_DOMAINS} . > $*       $#error $@ 5.1.3 $: "Cannot send mail there.  See http://www.secsup.org/complaints/"

with /etc/mail/mci-domains containing:

mcimail.com
internetmci.com
networkmci.com
internetmci.net
networkmci.net

Meetings are toxic

Meetings are toxic (PDF document). Αυτό το είχα διαπιστώσει εδώ και καιρό, αλλά χτες το απόγευμα το έζησα, όχι στο μεγαλείο του, αλλά στην επιβεβαίωσή του. Χτες παρεβρέθηκα στη συνεδρίαση μιας επιτροπής της οποίας το αντικείμενο με ενδιαφέρει. Δεν είχα διάθεση να πάω όμως και πήγα μόνο και μόνο γιατί η υπηρεσία έκρινε πως η παρουσία μου ήταν απαραίτητη. Συμμετείχα σαν παρατηρητής. Αυτό που με στενοχώρησε είναι πως σε ότι με αφορούσε η συνεδρίαση, έχασα 2 ώρες για κάτι που για να ενημερωθώ χρειάζονταν 10 λεπτά. Αποτέλεσμα; Γύρισα σπίτι μου στις 21:30 και όχι γιατί υπήρξα παραγωγικός στη δουλειά μου (όπως τουλάχιστον εγώ θέλω να είμαι παραγωγικός).

Στη δουλειά σπάνια κάνουμε meetings. Συνήθως κρατάνε μέχρι 10 λεπτά, με εξαίρεση τα εναρκτήρια για μεγάλα έργα, τα οποία μπορεί και να πάνε μέχρι 2 ώρες. Αυτή η συμπίεση χρόνου στις συναντήσεις μας οφείλεται στους ακόλουθους λόγους:

  1. Είμαστε όλοι στο ίδιο μήκος κύματος
  2. Δεν συζητάμε δύο φορές το ίδιο πράγμα
  3. Δουλεύουμε χρόνια μαζί χωρίς προβλήματα
  4. Έχουμε αναπτύξει ένα κώδικα επικοινωνίας που μας επιτρέπει να λέμε μεταξύ μας μία πρόταση και να μη χρειάζεται να εξηγήσουμε με άλλες 10 τι εννοούμε ή τι επιπτώσεις / συνέπειες / απαιτήσεις θα έχει αυτό που είπαμε αμέσως πριν
  5. Αν δεν έχουμε να πούμε κάτι δε μιλάμε
  6. Ανεχόμαστε ο ένας τις παραξενιές του άλλου
  7. Γνωριζόμαστε τόσο καλά που δε χρειάζεται να εφευρίσκουμε δικαιολογίες για τις καθυστερήσεις. Κάτι καθυστερεί είτε γιατί είναι πολύ δύσκολο -οπότε όλοι βάζουν πλάτη- είτε γιατί κωλοβάρεσε κάποιος, οπότε τα βγάζει πέρα μόνος του
  8. Το #7 δουλεύει γιατί υπάρχει φιλότιμο
  9. Έχουμε γαμάτο προϊστάμενο που δεν επιτρέπει να “στρίβουν” οι συζητήσεις από το θέμα
  10. Μας ενδιαφέρει να μη χάνεται ο χρόνος μας