1 Greylisting mit Plesk 8.3 und Debian 4.0|Artikel|Projekt OsUp

Greylisting mit Plesk 8.3 und Debian 4.0

Installation


Download: qmail-1.05_greylisting_plesk8.tar.gz

In den src Ordner wechseln "/usr/src/" wechseln.
server:~ # cd /usr/src
server:/usr/src # wget http://www.os-up.eu/uploads/LINUXPACKETE/qmail-1.05_greylisting_plesk8.tar.gz
server:/usr/src # tar xvfz qmail-1.05_greylisting_plesk8.tar.gz
qmail-1.05/
qmail-1.05/BLURB
qmail-1.05/BLURB2
qmail-1.05/BLURB3
(...)
qmail-1.05/qmail-smtpd.c.rej
qmail-1.05/qmail-spp.oDie Datei "local_scan.c" muss editiert werden, da auf keinen Fall die Default-Werte genommen werden dürfen.

strato:/usr/src # cd qmail-1.05

#bei Plesk 8 fehlt leider eine Datei:
echo "-lssl -lcrypto" >ssl.lib

server:/usr/src/qmail-1.05 # vi local_scan.c

---
#define MYSQLHOST "localhost"
#define MYSQLUSER "greylist"
#define MYSQLPASS "topSecret"
#define MYSQLDB   "qmail"
#define BLOCK_EXPIRE  4 /* minutes until email is accepted */
#define RECORD_EXPIRE 1500 /* minutes until record expires */
#define RECORD_EXPIRE_GOOD 36 /* days until record expires after accepting email */
---

Nun muss man noch in der Datei tls.c die Zeile 12 auskommentieren:

// const char *strerror(int);

Ansonsten erhällt man diese Fehlermeldung:
tls.c:12: error: conflicting types for 'strerror'/usr/include/string.h:256: error: previous declaration of 'strerror' was here"

Da Greylisting mit der MySQL-Datenbank "qmail" und der Tabelle "relaytofrom" arbeitet, müssen ein paar Befehle im "MySQL Monitor" eingegeben werden (siehe Original von Brent). Wahlweise kann man auch einfach die mitgeliefert "qmail.sql" importieren (Idee: TJ). Die Login-Daten in der "qmail.sql" müssen an die "local_scan.c" angepasst werden.

strato:/usr/src/qmail-1.05 # vi qmail.sql
strato:/usr/src/qmail-1.05 # mysql -u admin -p < qmail.sql
Enter password:
strato:/usr/src/qmail-1.05 #Um zu überprüfen, ob Benutzer und Tabelle auch wirklich angelegt wurden, sollte man den MySQL-Monitor starten.

strato:/usr/src/qmail-1.05 # mysql -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8974 to server version: 4.1.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE mysql;
Database changed
mysql> SELECT User, Password FROM user WHERE User = 'greylist'
+-------------+-------------------------------------------+
| User        | Password                                  |
+-------------+-------------------------------------------+
| greylist    | *930DAB011CE31AB33910A8A1F011CE98AA9D40FB |
+-------------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW COLUMNS FROM qmail.relaytofrom;
+----------------+-----------------------+------+-----+---------------------+----------------+
| Field          | Type                  | Null | Key | Default             | Extra          |
+----------------+-----------------------+------+-----+---------------------+----------------+
| id             | bigint(20)            |      | PRI | NULL                | auto_increment |
| relay_ip       | varchar(16)           | YES  | MUL | NULL                |                |
| mail_from      | varchar(255)          | YES  | MUL | NULL                |                |
| rcpt_to        | varchar(255)          | YES  | MUL | NULL                |                |
| block_expires  | datetime              |      |     | 0000-00-00 00:00:00 |                |
| record_expires | datetime              |      |     | 0000-00-00 00:00:00 |                |
| blocked_count  | bigint(20)            |      |     | 0                   |                |
| passed_count   | bigint(20)            |      |     | 0                   |                |
| aborted_count  | bigint(20)            |      |     | 0                   |                |
| origin_type    | enum('MANUAL','AUTO') |      |     | MANUAL              |                |
| create_time    | datetime              |      |     | 0000-00-00 00:00:00 |                |
| last_update    | timestamp             | YES  |     | CURRENT_TIMESTAMP   |                |
+----------------+-----------------------+------+-----+---------------------+----------------+
12 rows in set (0.00 sec)

mysql> quit


Unter Debian 4.0 sollte man unter /usr/lib das Verzeichniss mysql anlegen. per apt-get install libmysqlclient15-dev libssl-dev installieren.
Dann kopiert man alle libmysqlclient* Dateien von /usr/lib nach /usr/lib/mysql.

Jetzt muss man die Dateien mit "make" kompilieren. Dazu gibt es im neuen Paket eine "install.sh" die vorher prüft, ob alle benötigten RPMs (siehe "Voraussetzungen") installiert wurden. Der Befehl "rpm" steht auf vielen Linux-Distributionen zur Verfügung. Ich habe das Shell-Skript mit SuSE und Debian getestet. Sollte "install.sh" eine Fehlermeldung bringen, die nichts mit den fehlenden Paketen "openssl-devel" oder "mysql-devel" zu tun hat, dann kann man hier auch nur "make" eingeben (siehe Original von Brent).

server:/usr/src/qmail-1.05 # ./install.sh
( cat warn-auto.sh; \
echo CC=\'`head -1 conf-cc`\' \
echo LD=\'`head -1 conf-ld`\' \
) > auto-ccld.sh
cat auto-ccld.sh make-load.sh > make-load
(...)
./load spfquery spf.o ip.o ipme.o ipalloc.o strsalloc.o \
now.o dns.o datetime.a stralloc.a alloc.a str.a substdio.a \
case.a error.a fs.a `cat dns.lib` `cat socket.lib`
#############################################################
#### 'make' finished. Please check for critical errors!  ####
#############################################################Um den "make" zu kontrollieren kann man den untenstehende Befehl eingeben. Der Befehl sollte die Zahl "85" zurückliefern.

server:/usr/src/qmail-1.05 # ls -l | grep -cv '\..\{1,12\}$\|conf-\|make-\|Makefile\|warn-\|[[:upper:]].$'
85Der "make" sollte eigentlich nur dann fehlschlagen, wenn wichtige Pakete fehlen. Deshalb müssen jetzt nur noch die neuen Dateien kopiert werden und die Dateirechte gesetzt werden.

server:/usr/src/qmail-1.05 # /etc/rc.d/qmail stop
server:/usr/src/qmail-1.05 # cp qmail-envelope-scanner /var/qmail/bin/.
server:/usr/src/qmail-1.05 # cp qmail-smtpd /var/qmail/bin/.
server:/usr/src/qmail-1.05 # chown root.qmail /var/qmail/bin/qmail-envelope-scanner
server:/usr/src/qmail-1.05 # chown root.qmail /var/qmail/bin/qmail-smtpd
server:/usr/src/qmail-1.05 # /etc/rc.d/qmail startDanach habe ich ein CATCH-ALL für meine Domain aktiviert und ein "tail" lieferte

tail -f /tmp/greylist_dbg.txt

 --------
protocol = notneeded4qmail increase@blindsz.com
increase@blindsz.com -> cloidtd@clausvb.de (62.227.194.124) Doesn’t Exists Block
--------
protocol = notneeded4qmail Scott@blueskyimages.co.uk
Scott@blueskyimages.co.uk -> christo@clausvb.de (86.196.215.34) Doesn’t Exists Block
--------
protocol = notneeded4qmail logic-s.com@usedoffset.com
logic-s.com@usedoffset.com -> www@clausvb.de (200.120.143.210) Doesn't Exists Block
--------
protocol = notneeded4qmail erika_mustermann@yahoo.de
erika_mustermann@yahoo.de -> www@clausvb.de (217.146.177.35) Doesn't Exists Block
--------
protocol = notneeded4qmail erika_mustermann@yahoo.de
erika_mustermann@yahoo.de -> www@clausvb.de (217.146.177.35) Exists Accept id = 10 expire = 1
--------Kritische Fehler
Obwohl ich einige der Warnungen bereinigt habe, können noch folgende "Fehler" auftreten:

qmail-qmtpd.c: In function 'resources':
qmail-qmtpd.c:16: warning: incompatible implicit declaration of built-in function '_exit'

qmail-smtpd.c: In function 'tls_verify':
qmail-smtpd.c:783: warning: pointer targets in assignment differ in signedness

spfquery.c: In function 'main':
spfquery.c:30: warning: incompatible implicit declaration of built-in function 'strdup'Diese Warnungen sind alle normal und treten (vielleicht) nicht bei allen Linux-Distributionen auf. Der C-Code ist nicht sauber programmiert und nicht auf unterschiedlichen Systemen getestet worden. Diese Warnungen können ignoriert werden. Die folgende Fehler sind jedoch kritisch:

qmail-remote.c:663: warning: return type of `main' is not `int'
make: *** [qmail-remote.o] Error 1

./compile: line 3: exec: cc: not found
make: *** [qmail-local.o] Error 127

collect2: ld returned 1 exit status
make: *** [qmail-envelope-scanner] Error 1

local_scan.c:255: error: `mysql' undeclared (first use in this function)
*** Error code 1

tls.c:12: error: conflicting types for 'strerror'
/usr/include/string.h:256: error: previous declaration of 'strerror' was here
make: *** [tls.o] Error 1Die Fehler haben unterschiedliche Ursachen. Den Fehler in der Datei "tls.c" habe ich (dank TJ) gefixt. Es muss sichergestellt sein, das die Pakete "gcc", "mysql-devel" und "openssl-devel" installiert sind. Sollte dennoch einer der oben genannten Fehler auftreten, dann bitte einen Post im Forum machen, danke!

Cleanup-Perl-Skript von Brent Meshier
Um die Datenbank regelmäßig aufzuräumen sollte man ein PERL-Skript in der "/etc/cron.daily" plazieren, mit folgendem Inhalt:

 #!/usr/bin/perl
use strict;
use warnings;

use constant DBD => 'DBI:mysql:qmail:localhost:3306'
use constant DBUSER => 'greylist'
use constant DBPASS => 'topSecret'

use DBI;

system("cat /dev/null > /tmp/greylist_dbg.txt");

my $dbh = DBI->connect(DBD, DBUSER, DBPASS)
or die "can't connect to db ", $DBI::errstr, ":$!";

$dbh->do("DELETE FROM relaytofrom
WHERE record_expires < NOW() - INTERVAL 1 HOUR
AND origin_type = 'AUTO'");
$dbh->do("OPTIMIZE TABLE relaytofrom"); $dbh->disconnect;
exit;

Die Passwörter müssen entsprechend angepasst werden. Das oben gepostete Skript wurde von Gerard Earley in einigen Punkten überarbeitet.


                    

Sie k?nnen keine Kommentare abgeben!