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"
- mysql_virtual_alias_maps.cf - virtual_alias_maps: címfordítások
query = SELECT destination FROM forwardings WHERE source='%s' AND active = '1'
- mysql_virtual_domains_maps.cf - virtual_mailbox_domains: a server által kiszolgált domainek listája
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'
- mysql_virtual_transports.cf - transport_maps:
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'