Teljes virtuális levelezőszerver/Postfix az adatbázishoz

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Complete Virtual Mail Server/Postfix to Database and the translation is 100% complete.
Other languages:

Postfix telepítése

A Postfix telepítése meglehetősen egyszerű. Kövesse az alapvető telepítési utasításokat a Postfix esetében.

Postfix összekapcsolása

Miután a Postfix a legegyszerűbb szinten már működik, ideje összekapcsolni az adatbázissal.

Hozzáférés megszerzése

PostgreSQL

Szükség van egy adatbázis-felhasználóra az adatbázis lekérdezéséhez:

user $createuser -U postgres --pwprompt postfix
Enter password for new role: $password
Enter it again: $password

A Postfix felhasználónak is szüksége van bizonyos jogosultságokra a táblázatokon:

user $psql -U postfixadmin postfix
postfix=>GRANT SELECT ON alias TO postfix;
postfix=>GRANT SELECT ON domain TO postfix;
postfix=>GRANT SELECT ON mailbox TO postfix;

MySQL

Ha Ön a MySQL adatbázis szoftvert használja a PostgreSQL helyett, akkor kövesse az alábbi utasításokat. Töltse le a SQL dump fájlt, és mentse el genericmailsql.sql néven, mivel hamarosan szükség lesz rá.

Először telepítse a MySQL adatbázis szoftvert:

root #emerge --ask mysql

Hozzon létre egy kezdeti adatbázist:

root #/usr/bin/mysql_install_db

Kövesse a képernyőn megjelenő utasításokat a root jelszó hozzáadásához a MySQL szoftverben, különben az adatbázis teljesen nyitott lesz.

Indítsa el a MySQL adatbázisszervert, és hozza létre a mailsql adatbázist:

root #/etc/init.d/mysql start
root #mysqladmin -u root -p create mailsql
root #mysql -u root -p mailsql < genericmailsql.sql

Indítsa el a mysql klienst, hogy megadja a megfelelő jogosultságokat a mailsql adatbázishoz:

root #mysql -u root -p mysql
mysql>GRANT SELECT,INSERT,UPDATE,DELETE ON mailsql.* TO mailsql@localhost IDENTIFIED BY '$password';
Query OK, 0 rows affected (0.02 sec)
mysql>FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>quit

Ellenőrizze, hogy az új mailsql felhasználó csatlakozni tud-e a MySQL szerverhez:

root #mysql -u mailsql -p mailsql

Az új adatbázis alapértelmezett értékekkel és táblázatokkal van beállítva két domén számára. A következő táblázatok találhatók benne:

  • alias - Helyi e-mail alias és mailman alias információk.
  • relocated - Áthelyezett felhasználói e-mail cím térképek.
  • transport - Alapértelmezett e-mail átviteli információk az összes hosztolt doménhez.
  • users - Minden felhasználói fiók információja.
  • virtual - Virtuális domén e-mail alias térképek.
CODE Példa az alias táblázatra
id   alias      destination
1    root       foo@bar.com
2    postmaster foo@bar.com
CODE Példa az user táblázatra
## (Line wrapped for clarity.)
id email            clear     name     uid     gid     homedir     \
  maildir                                quota  postfix
10 foo@virt-domain.com $password realname virtid  virtid  /home/vmail \
  /home/vmail/virt-domain.com/foo/.maildir/        y
13 foo@bar.com      $password realname localid localid /home/foo   \
  /home/foo/.maildir/                           y

A virtid uid és gid értékei a vmail felhasználó és csoport értékeivel kell, hogy megegyezzenek.

CODE Példa a transport táblázatra
id   domain          destination
1    bar.com         local:
2    virt-domain.com virtual:
CODE Példa a virtual táblázatra
id   email                destination
3    root@virt-domain.com other@email.address

Lekérdezés

Minden ilyen lekérdezést tesztelni kell az adatbázison annak érdekében, hogy a lekérdezések helyesen legyenek megírva. Ehhez azonban elengedhetetlen, hogy az adatbázis megfelelően fel legyen töltve, hogy hasznos legyen. Ha postfixadmin-t használ, akkor ezt könnyedén el lehet végezni a felhasználói felületről. Ellenkező esetben egyszerű INSERT SQL lekérdezéseket kell megírni és végrehajtani.

Note
A teljes útmutató alatt a testuser felhasználót használjuk a következő jelszóval: secret.

PostgreSQL

A postfix adatbázishoz való kapcsolása nem különleges, a postfix csupán előre meghatározott SQL rutinokat hajt végre. Ezek az SQL lekérdezések lekérdezésenként egy fájlban tárolódnak egy könyvtárban.

root #mkdir /etc/postfix/pgsql

Legyen tisztában azzal, hogy ezeknek a fájloknak a beállítás információiban lévő hibák nyomon követése meglehetősen bonyolult lehet. Legyen alapos mind a fájlok tartalmával, mind azok nevével. Az ezekben a fájlokban lévő sok hiba a levélnaplóban lesz jelezve, például "user example@example.com doesn't exist" ("felhasználó example@example.com nem létezik") formában, bármiféle további magyarázat nélkül.

Note
A következő fájlokban a 'hosts' változó szándékosan van megjegyzésként feltüntetve. Ha nincsenek host számítógépek definiálva, akkor a helyi UNIX socket kerül felhasználásra.
FILE /etc/postfix/pgsql/virtual_mailbox_domains.cfvirtual_mailbox_domains
# virtual_mailbox_domains.cf
user            = postfix
password        = $password
dbname          = postfix
#hosts          = localhost
query           = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1';

A legjobb, ha a lekérdezést az adatbázison teszteli (másolás és beillesztés segítségével), hogy megbizonyosodjon arról, hogy nincsenek elírások a lekérdezésben:

root #psql -U postfix postfix
postfix=>SELECT domain FROM domain WHERE domain = 'example.com' AND backupmx = '0' AND active = '1';
     domain      
----------------------
 example.com
(1 row)
Note
A Postfix számára nem fontos a lekérdezés eredménye, inkább egy igen/nem válaszról van szó.
FILE /etc/postfix/pgsql/virtual_mailbox_maps.cfvirtual_mailbox_maps
# virtual_mailbox_maps.cf
user            = postfix
password        = $password
dbname          = postfix
#hosts          = localhost
query           = SELECT maildir FROM mailbox WHERE local_part='%u' AND domain='%d' AND active='1';

Itt is a legjobb, ha ismét végrehajtja a lekérdezést az adatbázison:

root #psql -U postfix postfix
postfix=>SELECT maildir FROM mailbox WHERE local_part='testuser' AND domain='example.com' AND active='1';
      maildir
-------------------
 example.com/testuser/
(1 row)
FILE /etc/postfix/pgsql/virtual_alias_maps.cfvirtual_alias_maps
# virtual_alias_maps.cf
user            = postfix
password        = $password
dbname          = postfix
#hosts          = localhost
query           = SELECT goto FROM alias WHERE address='%s' AND active='1';

Hajtsa végre a lekérdezést az adatbázison, hogy ellenőrizze annak kimenetét:

root #psql -U postfix postfix
postfix=>SELECT goto FROM alias WHERE address='testuser@example.com' AND active='1';
       goto       
------------------
 testuser@example.com
(1 row)
Note
A postfixadmin minden felhasználóhoz létrehoz egy alias-t. Ez nem szükséges a postfix megfelelő működéséhez, hanem kifejezetten a postfixadmin számára szükséges.

MySQL

Állítsa be a szükséges beállításokat a Postfix számára, hogy együttműködjön az adatbázissal minden egyéb szállítási igény esetében. Ne felejtse el minden értéket lecserélni a megfelelő user, user id, password, alias, e-mail stb. nevére.

FILE /etc/postfix/mysql-aliases.cf
user         = mailsql
password     = $password
dbname       = mailsql
table        = alias
select_field = destination
where_field  = alias
hosts        = unix:/var/run/mysqld/mysqld.sock
FILE /etc/postfix/mysql-relocated.cf
user         = mailsql
password     = $password
dbname       = mailsql
table        = relocated
select_field = destination
where_field  = email
hosts        = unix:/var/run/mysqld/mysqld.sock
FILE /etc/postfix/mysql-transport.cf(Opcionális)
user         = mailsql
password     = $password
dbname       = mailsql
table        = transport
select_field = destination
where_field  = domain
hosts        = unix:/var/run/mysqld/mysqld.sock
FILE /etc/postfix/mysql-virtual-gid.cf(Opcionális)
user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = gid
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock
FILE /etc/postfix/mysql-virtual-maps.cf
user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = maildir
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock
FILE /etc/postfix/mysql-virtual-uid.cf(Opcionális)
user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = uid
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock
FILE /etc/postfix/mysql-virtual.cf
user         = mailsql
password     = $password
dbname       = mailsql
table        = 'virtual'
select_field = destination
where_field  = email
hosts        = unix:/var/run/mysqld/mysqld.sock

Hozzáférési jogok

Kizárólag a Postfix rendelkezzen hozzáférési jogokkal ezekhez a fájlokhoz, mivel jelszavakat tartalmaznak.

root #chown root:postfix -R /etc/postfix/
root #find /etc/postfix/ -name "*.cf" -exec chmod -c 640 '{}' \+

Postfix csatlakoztatása a lekérdezésekhez

Postgres

FILE /etc/postfix/main.cfPostfix csatlakoztatása a postgres-hez
#
# Settings required to support virtual mail delivery using lookups in
# the Postgres database.
#
 
# A list of all virtual domains serviced by this instance of postfix.
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql/virtual_mailbox_domains.cf
 
# Look up the mailbox location based on the email address received.
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf
 
# Any aliases that are supported by this system
virtual_alias_maps = pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf

MySQL/MariaDB

FILE /etc/postfix/main.cf
## (Győződjön meg arról, hogy nincsenek más alias_maps definíciók.)
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf
 
local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname
 
virtual_transport = virtual
## (A mydestination által felsorolt domének nem szerepelhetnek a
##  virtual_mailbox_domains paraméterben.)
virtual_mailbox_domains = virt-domain.com, $other-virtual-domain.com
 
virtual_minimum_uid = 1000
## (Cserélje ki a $vmail-gid -t a vmail csoport GID-jával.)
virtual_gid_maps = static:$vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
## (Cserélje ki a $vmail-uid -t a vmail felhasználó UID-jával.)
virtual_uid_maps = static:$vmail-uid

A Postfix 2.0.x verziójában számos jelentős változás történt az 1.1.x kiadáshoz képest. Különösen a transport, virtual-gid és virtual-uid táblázatok már nem szükségesek. Ezeket a táblázatokat továbbra is tartalmazzák, hogy támogassák a potenciálisan eltérő használati eseteket.

Note
Javasolt elolvasni a VIRTUAL_README fájlt, amely a postfix dokumentációk része, további információkért.

Adatbázis kapcsolat tesztelése

A Postfix újraindítása szükséges ahhoz, hogy csatlakozni tudjon az adatbázishoz:

root #/etc/init.d/postfix restart

Ellenőrizze a /var/log/mail.log fájlban az esetleges problémákat, például hibás jogosultságokat.

A telnet használatával a levelezőszerver ismét tesztelhető, hogy ellenőrizze, helyesen használja-e az adatbázist:

user $telnet localhost 25
Trying 127.0.0.1...
Connected to foo.example.com.
Escape character is '^]'.
220 foo.example.com ESMTP Postfix
mail from:me@you.com
250 2.1.0 Ok
rcpt to:testuser@example.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Testmail to ensure Postfix is still working.
.
250 2.0.0 Ok: queued as EA94F164C7
mail from:me@you.com
250 2.1.0 Ok
rcpt to:test.user@example.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Testmail to ensure Postfix is still really working.
.
250 2.0.0 Ok: queued as 3A276164C7
quit
221 2.0.0 Bye
Connection closed by foreign host.
FILE /var/log/mail.logTesztüzenetek ellenőrzése
Mar 16 19:25:15 foo postfix/smtpd[32321]: connect from unknown[127.0.0.1]
Mar 16 19:25:32 foo postfix/smtpd[32321]: EA94F164C7: client=unknown[127.0.0.1]
Mar 16 19:25:42 foo postfix/cleanup[32330]: EA94F164C7: message-id=<>
Mar 16 19:25:42 foo postfix/qmgr[31681]: EA94F164C7: from=<me@you.com>, size=215, nrcpt=1 (queue active)
Mar 16 19:25:42 foo postfix/virtual[32332]: EA94F164C7: to=<testuser@example.com>, relay=virtual, delay=22, delays=22/0.02/0/0.05, dsn=2.0.0, status=sent (delivered to maildir)
Mar 16 19:25:42 foo postfix/qmgr[31681]: EA94F164C7: removed
Mar 16 19:26:05 foo postfix/smtpd[32321]: 3A276164C7: client=unknown[127.0.0.1]
Mar 16 19:26:14 foo postfix/cleanup[32330]: 3A276164C7: message-id=<>
Mar 16 19:26:14 foo postfix/qmgr[31681]: 3A276164C7: from=<me@you.com>, size=199, nrcpt=1 (queue active)
Mar 16 19:26:15 foo postfix/smtp[32338]: 3A276164C7: to=<test.user@example.com>, orig_to=<test.user@example.com>, relay=virtual, delay=23, delays=22/0.02/0.57/0.39, dsn=2.0.0, status=sent (delivered to maildir)
Mar 16 19:26:15 foo postfix/qmgr[31681]: 3A276164C7: removed
Warning
Ha a vda USE jelölőzászló be van állítva, akkor előfordulhat, hogy a tesztüzenetek (Soft) visszapattannak a túlzottan kihasznált lemezterület kvóta miatt. Két lehetőség van: Újrafordítás a vda USE jelölőzászló nélkül, majd újrafordítás a vda USE jelölőzászló engedélyezésével, amikor a kvótákat állítja be. Vagy ugorjon előre a kvóta támogatási részhez, kövesse az ottani lépéseket, majd térjen vissza ide.