Dovecot + SQL + ispcp

Fórumok

Sziasztok

Adva van egy Debian 6 + Ispcp 1.0.7 + Dovecot + sieve + spamassassin + roundcube (+ sieve, spamassassin plugin) rendszer.

Alapjaiban ezen leírás alapján http://isp-control.net/documentation/howto/mail/replace_courier_with_do…

A problémám az, hogy az ispcp bluefish kódolással tárolja a mail account jelszavakat SQL-ben.
A linkelt howtoban a dovecothoz való átjárhatóságot egy ispcp-dovecot-mngr perl scipttel oldották meg ami sql-ből lekérdezi és visszafejti a kódolt jelszót, majd átadja a dovecotnak.

Szeretném, ha 1:1-ben sqlből mehetne a dovecot auth default {passwd sql} szekcióban, mert:
- Brute force szintű loginok esetén a sok visszafejtés jelentős terhelést okoz.
- Feleslegesnek érzem a közbenső scriptet, hogyha ő is sql-hez fordul. Mehetne natívan a dovecot is.

Utánaolvasva a dovecot nem ismeri ezt a kódolást.
Aki tudja, a ispcp forkolt változata, az I-MSCP default támogatja a dovecotot. A balgák könnyen megoldották a dolgot: kódolatlanul tárolják a mail_users táblában a jelszavakat, így nem okoz gondot a dovecotnak közvetlen sql-ből lekérdezni. Érthető okok miatt ez nekem nem opció.

Mit lehetne kezdeni a helyzettel?
Ötleteléseim:
- Áttúrni az ispcp php fájljait és n+1 helyen átírni a decrypt/encrypt függvényeket -> ha nem muszáj, nem ezzel kezdeném.
- SQL-ben lévő userekből dovecot által emészthető formában file vagy másik táblában sql alapú passwd -t hoznék létre.

Szerintetek miként lehetne még áthidalni a problémát az ispcp lecserélése nélkül?

Hozzászólások

Nos úgy néz ki, hogy a belső függvény hívásokat átírva rábeszélhető, hogy a courier userdb helyett dovecot passwdb-be pakoljon egy általam meghatározott szintakt és jelszó kódolás szerint.
Tehát új mail hozzáféréseknél már real time menedzseli a passwdb-t, nem terheli az sql-t.
Már csak arra kell scriptet írni, hogy az sql-ben meglévő bluefish jelszavakból legenerálja 1x a teljes CRAM-MD5-ös passwdb-t.

Meg is van. A /var/www/ispcp/engine mappába kell elhelyezni.


#!/usr/bin/perl

use FindBin;
use lib "$FindBin::Bin/";
require 'ispcp_common_code.pl';
use strict;
use warnings;
use Sys::Syslog;

my $real_password                                                       = '';
my @rows;

my $sql = "SELECT mail_pass, mail_addr FROM mail_users WHERE mail_pass != '_no_' ";
my ($rs, $rows) = doSQL($sql);

my $i=0;
foreach (@$rows) {
my $line = @$rows[$i];
($rs,$real_password) = decrypt_db_password(@$line[0]);
print "username:@$line[1]:@$line[0]:$real_password
";
$i++;
}

Biztos szebben is meg lehet oldani, viszont működik és 1x kell a migrálás idejére.
Sorban kiprinteli mailcim:cryptpass:plainpass formában
Ebből pedig már könnyen el lehet készíteni a dovecot passdb-t.

A teszt sikeres volt. 60 párhuzamos pop3 kapcsolódás 5 másodperc timeouttal brutus brute-force programmal tesztelve.
ispcp-dovecot-mng: 100% cpu (bluefish encode/decode miatt)
Dovecot natív passdb használatával 1-7% egy xeon 5620-as processzor 1 magján VPS-ben.

tarolj tobb hash-t az SQL-edben. vagy irj egy storprocot, ami megoldja. egyebkent az nem blowfish (mert az nem visszafejtheto).
egyebkent, meg ha visszafejtheto a kodolas az SQL-ben, akkor meg irsz egy storprocot ra, es minden el van intezve.

en ezt megoldottam fapadosan, csinaltam patchet szinte mindenhez es az sql gyari hash fvg.-t hasznalom. Jo megoldas, viszont a frissites nyugosebb