Postfix Dovecot MYSQL

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
a
2. sor: 2. sor:
 
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.<br />
 
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.<br />
 
Az általam válaszott szerver alkalazások, inkoklás miért ezek mellett döntöttem:
 
Az általam válaszott szerver alkalazások, inkoklás miért ezek mellett döntöttem:
* MTA (Mail Transfer Agent): Postfix.
+
* [http://en.wikipedia.org/wiki/Message_transfer_agent MTA] (Mail Transfer Agent): [http://www.postfix.org/ 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 és beépítve támogat erős jelszótároló megoldásokat.
+
* [http://en.wikipedia.org/wiki/Message_delivery_agent MDA] (Mail Delivery Agent): [http://www.dovecot.org/ 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([http://en.wikipedia.org/wiki/Salt_%28cryptography%29 Salted] [http://en.wikipedia.org/wiki/SHA-2 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 [http://www.courier-mta.org/ Courier]-t is, de sokkal nagyobb volt a memóriaigénye a tesztidőszak alatt.
* DBS: MYSQL. A MYSQL az egyik széleskörűen 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).
+
* [http://en.wikipedia.org/wiki/DBMS DBMS]: [http://www.mysql.com/ 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).
 
== Működés áttekintése ==
 
== Működés áttekintése ==
 
== Egy gyakorlati megvalósítás ==
 
== Egy gyakorlati megvalósítás ==
=== Dovecor beállítása ===
 
 
=== Postfix beállítása ===
 
=== Postfix beállítása ===
  +
==== Adattárolás és adatbázis kapcsolat ====
 
<br />
 
<br />
  +
Adattáblák felépítése:
  +
* users:
  +
<pre>
  +
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`)
  +
)
  +
</pre>
  +
* domains:
  +
<pre>
  +
CREATE TABLE `domains` (
  +
`domainID` int(11) NOT NULL AUTO_INCREMENT,
  +
`domain` varchar(45) NOT NULL,
  +
PRIMARY KEY (`domainID`)
  +
)
  +
</pre>
  +
* forwardings:
  +
<pre>
  +
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`)
  +
)
  +
</pre>
  +
* transport:
  +
<pre>
  +
CREATE TABLE `transport` (
  +
`transportID` int(11) NOT NULL AUTO_INCREMENT,
  +
`domain` varchar(45) DEFAULT NULL,
  +
`transport` varchar(45) DEFAULT NULL,
  +
PRIMARY KEY (`transportID`)
  +
)
  +
</pre>
 
A /etc/postfix/ mappába a következő fileokra van szükség, amik az adatbázissal kötik össze.
 
A /etc/postfix/ mappába a következő fileokra van szükség, amik az adatbázissal kötik össze.
* mysql_virtual_alias_maps.cf - címfordítások:
+
* Miden file elejére be kell illeszteni az adatbázis kapcsolat adatait ezek az adatokatok:
  +
<pre>
  +
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>
  +
</pre>
  +
* mysql_virtual_email2email.cf - [http://www.postfix.org/postconf.5.html#virtual_alias_maps virtual_alias_maps]: felhasználók azonosítására szolgál
  +
<pre>
  +
query = SELECT concat(user, '@', domain) FROM users WHERE user='%u' AND domain="%d"
  +
</pre>
  +
* mysql_virtual_alias_maps.cf - [http://www.postfix.org/postconf.5.html#virtual_alias_maps virtual_alias_maps]: címfordítások
 
<pre>
 
<pre>
user = mail
 
password = ****
 
hosts = 10.10.10.22
 
dbname = mail
 
 
query = SELECT destination FROM forwardings WHERE source='%s' AND active = '1'
 
query = SELECT destination FROM forwardings WHERE source='%s' AND active = '1'
 
</pre>
 
</pre>
* mysql_virtual_domains_maps.cf - postfix által kiszolgált domainek listája:
+
* mysql_virtual_domains_maps.cf - [http://www.postfix.org/postconf.5.html#virtual_mailbox_domains virtual_mailbox_domains]: a server által kiszolgált domainek listája
 
<pre>
 
<pre>
user = mail
 
password = ****
 
hosts = 10.10.10.22
 
dbname = mail
 
 
query = SELECT domain FROM domains WHERE domain='%s'
 
query = SELECT domain FROM domains WHERE domain='%s'
  +
</pre>
  +
* mysql_virtual_email_verify.cf - [http://www.postfix.org/postconf.5.html#smtpd_sender_login_maps smtpd_sender_login_maps]: bejelentkezett felhasználó emailcímének lekérdezésére szolgál
  +
<pre>
  +
query = SELECT user FROM users WHERE user='%u'
  +
</pre>
  +
* mysql_virtual_mailbox_maps.cf - [http://www.postfix.org/postconf.5.html#virtual_mailbox_maps virtual_mailbox_maps]: a felhasználók fiókjainak a helyét adja meg
  +
<pre>
  +
query = SELECT CONCAT(domain,'/',user) FROM users WHERE user='%u' AND active = '1'
  +
</pre>
  +
* mysql_virtual_transports.cf - [http://www.postfix.org/postconf.5.html#transport_maps transport_maps]:
  +
<pre>
  +
query = SELECT transport FROM transport WHERE domain='%s'
  +
</pre>
  +
==== main.cf ====
  +
==== master.cf ====
  +
=== Dovecot beállítása ===
  +
* /etc/dovecot/conf.d/auth-sql.conf.ext - az alkalmazott DBMS specifikálása:
  +
<pre>
  +
passdb {
  +
driver = sql
  +
args = /etc/dovecot/dovecot-sql.conf.ext
  +
}
  +
userdb {
  +
driver = sql
  +
args = /etc/dovecot/dovecot-sql.conf.ext
  +
}
  +
</pre>
  +
* /etc/dovecot/dovecot-sql.conf.ext - dovecot mysql lekérései:
  +
<pre>
  +
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'
 
</pre>
 
</pre>

A lap 2012. szeptember 29., 01:16-kori változata

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