Postfix Dovecot MYSQL

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen Carpoon (vitalap | szerkesztései) 2012. szeptember 29., 01:16-kor történt szerkesztése után volt.

Tartalomjegyzék

1 Szerver alkalmazások kiválasztása

Az email rendszert amit bemutatok egy honlap rendszerhez tartozik. Szempont volt hogy közös felhasználói adatábzis legyes és hogy minden platform képes legyen a felhasználókat authentikálni. A rendzser minden felhasználója autómatikusan kapott egy email címet.
Az általam válaszott szerver alkalazások, inkoklás miért ezek mellett döntöttem:

  • MTA (Mail Transfer Agent): Postfix.
  • MDA (Mail Delivery Agent): Dovecot. Több open source rendszert megnézetem, ezek közül a dovecot jól skálázható, robusztus. Natívan támogatja a felhasználók adatbázisban tárolását és az SSHA(Salted Safe Hash Algorithm) agloritmust. Dovecot további előnye, hogy a levelek fiókokba helyezését is el tudja látni így az esetlegesen eltérő megvalósítások mailbox megvalósítások nem okoznak hibát. Élesben kipróbáltam a Courier-t is, de sokkal nagyobb volt a memóriaigénye a tesztidőszak alatt.
  • DBMS: MYSQL. A MYSQL az egyik széleskörben alkalmazott adatbáziskezelő rendszer, könnyen használható különböző programozási nyelvek alól, ami a project megvalósításánál fontos szempont volt (php, node.js, java, stb).

2 Működés áttekintése

3 Egy gyakorlati megvalósítás

3.1 Postfix beállítása

3.1.1 Adattárolás és adatbázis kapcsolat


Adattáblák felépítése:

  • users:
CREATE TABLE `users` (
  `userID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user` varchar(128) NOT NULL,
  `domain` varchar(128) NOT NULL,
  `password` varchar(128) DEFAULT '',
  `active` int(11) NOT NULL DEFAULT '0',
  `quota` int(10) unsigned NOT NULL DEFAULT '10485760',
  PRIMARY KEY (`userID`)
)
  • domains:
CREATE TABLE `domains` (
  `domainID` int(11) NOT NULL AUTO_INCREMENT,
  `domain` varchar(45) NOT NULL,
  PRIMARY KEY (`domainID`)
)
  • forwardings:
CREATE TABLE `forwardings` (
  `forwardingsID` int(11) NOT NULL AUTO_INCREMENT,
  `source` varchar(128) NOT NULL,
  `destination` varchar(128) NOT NULL,
  `active` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`forwardingsID`)
)
  • transport:
CREATE TABLE `transport` (
  `transportID` int(11) NOT NULL AUTO_INCREMENT,
  `domain` varchar(45) DEFAULT NULL,
  `transport` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`transportID`)
)

A /etc/postfix/ mappába a következő fileokra van szükség, amik az adatbázissal kötik össze.

  • Miden file elejére be kell illeszteni az adatbázis kapcsolat adatait ezek az adatokatok:
user = <adatbázis felhasználónév - mail>
password = <adatbázisjelszó - ****>
hosts = <adatbázis címe - x.x.x.x>
dbname = <adatábzis tábla neve - mail>
  • mysql_virtual_email2email.cf - virtual_alias_maps: felhasználók azonosítására szolgál
query = SELECT concat(user, '@', domain) FROM users WHERE user='%u' AND domain="%d"
query = SELECT destination FROM forwardings WHERE source='%s' AND active = '1'
query = SELECT domain FROM domains WHERE domain='%s'
  • mysql_virtual_email_verify.cf - smtpd_sender_login_maps: bejelentkezett felhasználó emailcímének lekérdezésére szolgál
query = SELECT user FROM users WHERE user='%u'
  • mysql_virtual_mailbox_maps.cf - virtual_mailbox_maps: a felhasználók fiókjainak a helyét adja meg
query = SELECT CONCAT(domain,'/',user) FROM users WHERE user='%u' AND active = '1'
query = SELECT transport FROM transport WHERE domain='%s'

3.1.2 main.cf

3.1.3 master.cf

3.2 Dovecot beállítása

  • /etc/dovecot/conf.d/auth-sql.conf.ext - az alkalmazott DBMS specifikálása:
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
  • /etc/dovecot/dovecot-sql.conf.ext - dovecot mysql lekérései:
driver = mysql
connect = host=<adatbázis címe - x.x.x.x> dbname=<adatbázis felhasználónév - mail> user=<adatábzis tábla neve - mail> password=<adatbázisjelszó - ****>
default_pass_scheme = SSHA256
password_query = SELECT user as user, password, concat('/var/vmail/', domain,'/%n') as userdb_home, concat('maildir:/var/vmail/', domain,'/%n') as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM users WHERE user = '%n' AND active ='1'
user_query = SELECT concat('/var/vmail/', domain,'/%n') as home, concat('maildir:/var/vmail/', domain,'/%n') as mail, 150 AS uid, 8 AS gid, concat('*:bytes=', quota) AS quota_rule FROM users WHERE user = '%n' AND active = '1'
Személyes eszközök