Teljes virtuális levelezőszerver/Postfix az adatbázishoz
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.
id alias destination
1 root foo@bar.com
2 postmaster foo@bar.com
## (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.
id domain destination
1 bar.com local:
2 virt-domain.com virtual:
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.
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.
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.
/etc/postfix/pgsql/virtual_mailbox_domains.cf
virtual_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)
A Postfix számára nem fontos a lekérdezés eredménye, inkább egy igen/nem válaszról van szó.
/etc/postfix/pgsql/virtual_mailbox_maps.cf
virtual_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)
/etc/postfix/pgsql/virtual_alias_maps.cf
virtual_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)
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.
/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
/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
/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
/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
/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
/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
/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
/etc/postfix/main.cf
Postfix 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
/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.
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.
/var/log/mail.log
Tesztüzenetek ellenőrzéseMar 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
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.