Μετά το milter-quota, ένα ακόμα milter βασισμένο στο sample.pl του Sendmail::Milter. Χρειάζεται και το Net::LDAP.
Υποθέτει ότι έχουμε έναν authoritative LDAP με όλα τα emails για τα domains που είναι υπεύθυνος ο mail server μας. Αν κάποιος πάει να μας στείλει mail με envelope from address (από δικό μας domain) που όμως δεν υπάρχει στον LDAP, το κάνουμε REJECT. Ετσι γλιτώνουμε το spam και backscatter από πολλά malware που στέλνουν κάνοντας randomize το from address και κολάνε το domain στο τέλος..
use Net::LDAP; sub envfrom_callback { my $ctx = shift; my @args = @_; $email=@args[0]; # format is <user @dom.ain> $email =~ s/< (.*)>/$1/; # strip <> ($username, $domain) = split (/@/, $email); #print "username=$username domain=$domain\n"; $ldap = Net::LDAP->new("ldapserver"); $ldap->bind("cn=postmaster,ou=sendmail,dc=mail", password=>"xxxx"); $mesg = $ldap->search(filter=>"(sendmailMTAClassValue=$domain)", base=>"sendmailMTAClassName=LDAPRoute,ou=classes,ou=sendmail,dc=mail"); @entries = $mesg->entries; if (@entries) { # domain exists in our LDAP #print "domain $domain exists in our LDAP, so perform user lookup\n"; $mesg2 = $ldap->search(filter=>"(mailLocalAddress=$username\@$domain)", base=>"ou=$domain,ou=hosted,dc=mail"); @entries2 = $mesg2->entries; if (@entries2) { # user exists in ldap #print "address $username\@$domain exists in ldap. accept.\n"; return SMFIS_CONTINUE; } else { #print "address $username\@$domain does not exist in ldap. reject.\n"; $ctx->setreply('550', '5.7.1', "Reject: your From address $email does not exist."); #rfc3463 return SMFIS_REJECT; } } else { # domain is not in our LDAP #print "domain $domain does not exist in LDAP. accept.\n"; return SMFIS_CONTINUE; } }
Αλλα παρόμοια milters:
Καθολου ασχημη η ιδεα σου, αλλα για καθε smtp connection στο mail to: θα πρεπει να εχεις κανει implement αυτο το «milter». Αυτο συμενει spawn του perl binary ανα smtp, καλεσμα βιβλιοθηκων κτλ κτλ. Σιγουρα θα εχεις μικροτερο προβλημα με τη queue σου και τα bounce, αλλα μπορεις να εχεις περισοτερα smtp dos. Το καλυτερο ειναι να παρεις το patch qmail-ldap το οποιο εχει αυτο ακριβως το κωδικα στο smtp level και να τον κανεις πορτ για το sendmail!
Η ακομα καλυτερα για να γλυτωσεις δουλεια να βαλεις qmail σαν πρωτο layer smtp-in! ;-)
Με πιο απλα λογια, γραφτο σε ansi C βρε ψευτο-unixa :D
Yperoxo, apla yperoxo, kalh douleia ! Εαν το είχα δεί νωρίτερα το sample.pl δέν θα το έγραφα σε C ….
Κάνε το REJECT configurable για να μπορείς να το παίζεις και σε συνταγές spamassassin !
ciao.