A levelezés SMTP részét megoldhatnánk Sendmail használatával, amely a FreeBSD alaprendszerének szerves része, de inkább egy rugalmasabb (és könnyebben konfigurálható) kiszolgálót fogunk használni: a postfix programot. Első dolgunk tehát, hogy feltelepítsük a postfix programot, LDAP támogatással (OPENLDAP legyen megjelölve, kell ezen túl még a DOVECOT, a SASL2 és a TLS, a Dovecot esetén válasszuk ki az LDAP és a MANAGESIEVE opciót):
$ portinstall -i postfix
---> Session started at: Sun, 18 Jan 2009 12:45:52 +0100
---> Found 6 ports matching 'postfix':
mail/postfix1
mail/postfix21
mail/postfix22
mail/postfix23
mail/postfix24
mail/postfix
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 71 packages found (-1 +1) (...). done]
Install 'mail/postfix1'? [yes] n
Install 'mail/postfix21'? [yes] n
Install 'mail/postfix22'? [yes] n
Install 'mail/postfix23'? [yes] n
Install 'mail/postfix24'? [yes] n
Install 'mail/postfix'? [yes]
[Gathering depends for mail/postfix .. done]
---> Fresh installation of mail/postfix started at: Sun, 18 Jan 2009 12:46:07 +0100
[...]
Added group "postfix".
Added group "maildrop".
Added user "postfix".
You need user "postfix" added to group "mail".
Would you like me to add it [y]? y
Done.
[...]
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y
[...]
Added group "postfix".
Added group "maildrop".
Added user "postfix".
You need user "postfix" added to group "mail".
Would you like me to add it [y]? y
[...]
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y
[...]
+ mail/postfix
---> Packages processed: 1 done, 0 ignored, 0 skipped and 0 failed
---> Session ended at: Sun, 18 Jan 2009 12:57:23 +0100 (consumed 00:11:31)
Mint láthatjuk, a ports adatbázisban általában a verziószám nélküli csomagnév a legfrissebb stabil kiadás (vannak kivételek!), de ha szükségünk lenne egy régebbi kiadásra, akkor azt is fel tudjuk telepíteni. A postfix engedélyezéséhez módosítanunk kell a jail rc.conf állományát:
postfix_enable="YES"
Mielőtt elindítanánk a postfix programot, szükséges az aliases adatbázisát rendbe tenni, a /etc/aliases.db friss dátummal kell szerepeljen a listában:
$ newaliases
[root@mail:~]$ ls -l /etc/aliases*
lrwxr-xr-x 1 root wheel 12 Jan 14 14:42 /etc/aliases -> mail/aliases
-rw-r--r-- 1 root wheel 16384 Jan 18 12:58 /etc/aliases.db
Ezek után újraindíthatjuk a jail-t, és kipróbálhatjuk, működik-e a postfix:
$ /etc/rc.d/jail restart mail
Stopping jails: mail.jails.javaforum.hu.
Configuring jails:.
Starting jails: mail.jails.javaforum.hu.
$ tail -f /bpool/jails/v7.1.0/logserver/data/192.168.2.4-2009-01/mail.2009-01-18
Jan 18 12:59:29 mail postfix/postfix-script[74056]: fatal: the Postfix mail system is not running
Jan 18 12:59:31 mail postfix/postfix-script[74315]: starting the Postfix mail system
Jan 18 12:59:31 mail postfix/master[74316]: daemon started -- version 2.5.5, configuration /usr/local/etc/postfix
$ telnet mail.jails.javaforum.hu 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.jails.javaforum.hu ESMTP Postfix
quit
221 2.0.0 Bye
Connection closed by foreign host.
$ tail -2 /bpool/jails/v7.1.0/logserver/data/192.168.2.4-2009-01/mail.2009-01-18
Jan 18 13:01:57 mail postfix/smtpd[75119]: connect from mail.jails.javaforum.hu[192.168.2.4]
Jan 18 13:02:08 mail postfix/smtpd[75119]: disconnect from mail.jails.javaforum.hu[192.168.2.4]
Mint látjuk, már a logserver jail-be loggol, mivel, ezt örökölte a template jail-től (figyeljünk oda, hogy a helyes DNS beállítást másoljuk át ebbe a jail-be is, mivel azt nem örökli a template fájlrendszerből).
Az aliases beállítása
A postfix beállítását az aliases adatbázisával kezdjük. Az aliases egy egyszerű listát kezel arról, hogy egy konkrét felhasználó milyen egyéb neveken kaphat levelet. Ha belenézünk a /etc/aliases fájlba, akkor láthatjuk, hogy a root kap meg szinte minden levelet, a root pedig a saját email címünk aliasa:
[...]
root: root@javaforum.hu
# Basic system aliases -- these MUST be present
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts
_dhcp: root
_pflogd: root
bin: root
bind: root
[...]
Mint láthatjuk, ha küldünk egy levelet a postmaster címre, akkor az aliases alapján a root kapja meg a levelet. Nem akarunk állandóan ebben az állományban turkálni, ezért ezt LDAP alá szervezzük. Kezdő lépésként meg kell adnunk az LDAP szerverünk címét és azt a domént, ahol keresni fogunk (ezen még módosítani fogunk):
server_host = ldap.jails.javaforum.hu
search_base = ou=Aliases,ou=Mail,dc=javaforum, dc=hu
query_filter = (mailLocalAddress=%s)
result_attribute = mailRoutingAddress
Ezek után módosítanunk kell a postfix konfigurációt is, hogy tudjon az LDAP lehetőségről, egyszerűen írjuk a main.cf fájl végére:
alias_maps = hash:/etc/aliases
virtual_alias_maps = ldap:/usr/local/etc/postfix/ldap-aliases.cf
A módosításainkat main.cf végére célszerű írnunk, mivel a minta állomány sok tippet és leírást tartalmaz, amit a végére írunk, az felülírja a fentebb található alapértelmezett értékeket, mellékesen pedig egy helyre kerülnek azok a dolgok, amiket mi írtunk bele.
Majd indítsuk újra a postfix szolgáltatást:
$ /usr/local/etc/rc.d/postfix restart
postfix/postfix-script: stopping the Postfix mail system
postfix/postfix-script: starting the Postfix mail system
Közben nézzük a logserver jail-ben a postfix logját:
$ tail -4 /bpool/jails/v7.1.0/logserver/data/192.168.2.4-2009-01/mail.2009-01-18
Jan 18 13:39:07 mail postfix/postfix-script[80377]: stopping the Postfix mail system
Jan 18 13:39:07 mail postfix/master[74316]: terminating on signal 15
Jan 18 13:39:07 mail postfix/postfix-script[80433]: starting the Postfix mail system
Jan 18 13:39:07 mail postfix/master[80434]: daemon started -- version 2.5.5, configuration /usr/local/etc/postfix
Látszólag minden tökéletes, próbáljunk meg levelet küldeni:
$ telnet 192.168.2.4 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.jails.javaforum.hu ESMTP Postfix
HELO 192.168.2.4
250 mail.jails.javaforum.hu
Mail from: root
250 2.1.0 Ok
Rcpt to: root
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test message
Test message
.
250 2.0.0 Ok: queued as 4BB7813BF8
quit
221 2.0.0 Bye
Connection closed by foreign host.
S nézzük meg, mit művelt közben a postfix:
Jan 18 13:40:17 mail postfix/smtpd[80937]: connect from mail.jails.javaforum.hu[192.168.2.4]
Jan 18 13:40:32 mail postfix/smtpd[80937]: 4BB7813BF8: client=mail.jails.javaforum.hu[192.168.2.4]
Jan 18 13:40:42 mail postfix/cleanup[80946]: 4BB7813BF8: message-id=<20090118124032.4BB7813BF8@mail.jails.javaforum.hu>
Jan 18 13:40:42 mail postfix/qmgr[80436]: 4BB7813BF8: from=<root@mail.jails.javaforum.hu>, size=398, nrcpt=1 (queue active)
Jan 18 13:40:42 mail postfix/cleanup[80946]: AF7B013BFA: message-id=<20090118124032.4BB7813BF8@mail.jails.javaforum.hu>
Jan 18 13:40:42 mail postfix/local[80950]: 4BB7813BF8: to=<root@mail.jails.javaforum.hu>, orig_to=<root>, relay=local, delay=16, delays=15/0.02/0/0.01, dsn=2.0.0, status=sent (forwarded as AF7B013BFA)
Jan 18 13:40:42 mail postfix/qmgr[80436]: AF7B013BFA: from=<root@mail.jails.javaforum.hu>, size=545, nrcpt=1 (queue active)
Jan 18 13:40:42 mail postfix/qmgr[80436]: 4BB7813BF8: removed
Jan 18 13:40:42 mail postfix/smtp[80951]: connect to mail.javaforum.hu[91.83.48.130]:25: Connection refused
Jan 18 13:40:42 mail postfix/smtp[80951]: AF7B013BFA: to=<root@javaforum.hu>, orig_to=<root>, relay=none, delay=0.07, delays=0.01/0.02/0.04/0, dsn=4.4.1, status=deferred (connect to mail.javaforum.hu[91.83.48.130]:25: Connection refused)
Jan 18 13:40:43 mail postfix/smtpd[80937]: disconnect from mail.jails.javaforum.hu[192.168.2.4]
Láthatjuk, hogy a levelet megkapta, próbálta kézbesíteni a root felhasználónak, de kiolvasta az aliases adatbázisból, hogy a levelet továbbítania kell a root@javaforum.hu címre, ezért megpróbál csatlakozni a gép publikus IP címére, ahol még nincs beállítva a 25-ös port, ezért egy “Connection refused” üzenet után elcsöndesedik, és később még megpróbálkozik a levél kézbesítésével.
A root felhasználót még a helyi aliases adatbázisból szedi a postfix, akkor fordul az LDAP felé, ha itt nem leli, tegyük próbára:
$ telnet 192.168.2.4 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.jails.javaforum.hu ESMTP Postfix
HELO 192.168.2.4
250 mail.jails.javaforum.hu
Mail from: root
250 2.1.0 Ok
Rcpt to: webmaster
550 5.1.1 <webmaster>: Recipient address rejected: User unknown in local recipient table
quit
221 2.0.0 Bye
Connection closed by foreign host.
Nézzük a naplózbejegyzéseket:
Jan 18 14:19:15 mail postfix/qmgr[80436]: AF7B013BFA: from=<root@mail.jails.javaforum.hu>, size=545, nrcpt=1 (queue active)
Jan 18 14:19:15 mail postfix/smtp[86226]: connect to mail.javaforum.hu[91.83.48.130]:25: Connection refused
Jan 18 14:19:15 mail postfix/smtp[86226]: AF7B013BFA: to=<root@javaforum.hu>, orig_to=<root>, relay=none, delay=2313, delays=2313/0.02/0.02/0, dsn=4.4.1, status=deferred (connect to mail.javaforum.hu[91.83.48.130]:25: Connection refused)
Jan 18 14:31:05 mail postfix/smtpd[88135]: connect from mail.jails.javaforum.hu[192.168.2.4]
Jan 18 14:31:18 mail postfix/smtpd[88135]: NOQUEUE: reject: RCPT from mail.jails.javaforum.hu[192.168.2.4]: 550 5.1.1 <webmaster>: Recipient address rejected: User unknown in local recipient table; from=<root> to=<webmaster> proto=SMTP helo=<192.168.2.4>
Jan 18 14:31:40 mail postfix/smtpd[88135]: disconnect from mail.jails.javaforum.hu[192.168.2.4]
Hát ezzel nem jutottunk több információhoz, állítsuk át más címre az ldap-aliases.cf fájlban az LDAP szerver címét, indítsuk újra a postfix szolgáltatást, majd nézzük meg ismét:
$ telnet 192.168.2.4 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.jails.javaforum.hu ESMTP Postfix
HELO 192.168.2.4
250 mail.jails.javaforum.hu
Mail from: root
_
A postfix nem válaszol, várunk-várunk, de csak nem. Nézzük meg, írt-e valamit a logba:
Jan 18 14:41:04 mail postfix/smtpd[89766]: connect from mail.jails.javaforum.hu[192.168.2.4]
Jan 18 14:41:11 mail postfix/trivial-rewrite[89770]: warning: dict_ldap_connect: Unable to bind to server ldap://192.168.2.4:389 as : -1 (Can't contact LDAP server)
Jan 18 14:41:11 mail postfix/trivial-rewrite[89770]: fatal: ldap:/usr/local/etc/postfix/ldap-aliases.cf(0,lock|fold_fix): table lookup problem
Jan 18 14:41:12 mail postfix/master[89758]: warning: process /usr/local/libexec/postfix/trivial-rewrite pid 89770 exit status 1
Nocsak, azért látszik, hogy a postfix már használná az LDAP szolgáltatást, az előbb mindössze annyi volt a probléma, hogy az üres adatbázisban nem találta a hivatkozott felhasználót, ezért teljesen helyes választ adott. Állítsuk vissza az ldap-aliases.cf eredeti állapotát, és indítsuk újra a postfix szolgáltatást.
LDAP – levelezéshez
Mint mondottam volt, az LDAP alapvetően kevés dolgot támogat, fel kell vennünk különféle sémákat, amelyek az attribútumokat hordozzák, lépjünk be az LDAP jail-be, és fűzzük hozzá a slapd.conf fájl megfelelő helyére az alábbi pár sort, majd indítsuk újra a jail-t (a sorokat ne duplázzuk, ha már benne lenne a fájlban):
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/misc.schema
Adjunk hozzá pár dolgot az LDAP adatbázishoz, ezt megtehetjük a mail jail-en belülről is, hiszen telepítettünk fel openldap-client csomagot:
dn: ou=Mail,dc=javaforum,dc=hu
objectClass: organizationalUnit
ou: Mail
dn: ou=Users,ou=Mail,dc=javaforum,dc=hu
objectClass: organizationalUnit
ou: Users
dn: ou=Groups,ou=Mail,dc=javaforum,dc=hu
objectClass: organizationalUnit
ou: Groups
dn: ou=Aliases,ou=Mail,dc=javaforum,dc=hu
objectClass: organizationalUnit
ou: Aliases
Vegyünk fel egy felhasználót is, mint alias:
dn: uid=webmaster,ou=Aliases,ou=Mail,dc=javaforum,dc=hu
objectClass: inetOrgPerson
objectClass: inetLocalMailRecipient
uid: webmaster
mailLocalAddress: webmaster
mailRoutingAddress: root
sn: webmaster
cn: webmaster
Nosza, vegyük fel LDAP-ba a két LDIF állományt, majd indítsuk újra a postfix szolgáltatást és lássuk:
$ /usr/local/etc/rc.d/postfix restart
postfix/postfix-script: stopping the Postfix mail system
postfix/postfix-script: starting the Postfix mail system
[root@mail:~]$ telnet 192.168.2.4 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.jails.javaforum.hu ESMTP Postfix
HELO 192.168.2.4
250 mail.jails.javaforum.hu
Mail from: root
250 2.1.0 Ok
Rcpt to: webmaster
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test message
Test message
.
250 2.0.0 Ok: queued as 751C213C6F
quit
221 2.0.0 Bye
Connection closed by foreign host.
Nos, az aliases az adatokat már LDAP adatbázisból veszi… de a levelezés még mindig nem megy jól, mivel még mindig úgy gondolja a postfix, hogy a @javaforum.hu nem ő, tehát neki kézbesítenie kell a leveleket…
Vegyük fel a main.cf állományba a megfelelő domén értékeket:
myhostname = mail.javaforum.hu
mydomain = javaforum.hu
myorigin = mail.jails.javaforum.hu
mydestination = mail.jails.javaforum.hu
mynetworks = 127.0.0.1/32, 91.83.48.130/32, 192.168.1.0/24, 192.168.2.0/24
A myhostname mondja meg, hogy mi a levelező szolgáltatást nyújtó szerver hosztneve, a mydomain mondja meg, hogy alapvetően melyik domén tartozik a levelezéshez, a myorigin kerül a levelek fejlécébe, a mydestination mondja meg, hogy milyen leveleket kell fogadni, illetve a mynetworks adja meg azokat a forrás címeket, amelyről a postfix el fog fogadni leveleket. A módosítás után indítsuk újra a postfix szolgáltatást.
A felhasználók levelei
Ha LDAP adatbázisból vesszük a felhasználóinkat, akkor nem kell őket felvennünk UNIX felhasználóként, azonban ez kissé megnehezíti a levelezést, főképp a levelek tárolását: ekkor jön jól a postfix virtuális-domén kezelése. Ennek a lényege, hogy a levelek a postfix tulajdonába alá kerülnek (uid és gid 125).
A tároláshoz hozzunk létre egy ZFS fájlrendszert, és csatoljuk a megfelelő helyre:
$ zfs create bpool/jails/data/mail
[root@freebsd:~]$ zfs set compression=gzip-9 bpool/jails/data/mail
[root@freebsd:~]$ zfs set mountpoint=/bpool/jails/v7.1.0/mail/mails bpool/jails/data/mail
[root@freebsd:~]$ chown 125:125 /bpool/jails/v7.1.0/mail/mails
A tároláshoz egy /mails/domén/uid könyvtárszerkezetet hozunk majd létre, de ne szaladjunk előre, lássuk a postfix konfigurációt, s vegyük fel a main.cf állomány végére az alábbit:
virtual_mailbox_domains = ldap:/usr/local/etc/postfix/ldap-domains.cf
virtual_mailbox_base = /
virtual_mailbox_maps = ldap:/usr/local/etc/postfix/ldap-mailbox.cf
virtual_minimum_uid = 125
virtual_uid_maps = static:125
virtual_gid_maps = static:125
Mint látjuk, kettő új LDAP konfigot kell felvennünk majd.
A virtual_mailbox_domains
Első körben fel kell vennünk egy root bejegyzést, illetve az alá virtuális doméneket:
dn: ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
objectClass: top
objectClass: organizationalUnit
ou: VirtualUsers
dn: ou=javaforum.hu,ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
objectClass: top
objectClass: organizationalUnit
ou: javaforum.hu
dn: ou=javakocsma.hu,ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
objectClass: top
objectClass: organizationalUnit
ou: javakocsma.hu
Ezek után létre kell hoznunk a postfix számára az ldap-domains.cf állományt:
server_host = ldap.jails.javaforum.hu
search_base = ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
query_filter = (ou=%s)
result_attribute = ou
A virtual_mailbox_maps
dn: uid=auth.gabor@javaforum.hu,ou=javaforum.hu,ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
objectClass: account
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: posixAccount
uid: auth.gabor@javaforum.hu
uidNumber: 0
gidNumber: 0
mailRoutingAddress: maildir:/mails/javaforum.hu/auth.gabor/
homeDirectory: /mails/javaforum.hu/auth.gabor/
mailHost: javaforum.hu
cn: Gabor Auth
userPassword:: YmRjNzgyNDViYTNiM2MxODYzMjgzYzAyMzczMjA0NTgK
mailLocalAddress: auth.gabor@javaforum.hu
mailLocalAddress: franko@javaforum.hu
A jelszót simán MD5 hash alapon generálhatjuk, amelyet aztán Base64-el újfent elkódolunk:
$ echo -n "jelszoka" | md5 | base64
YmRjNzgyNDViYTNiM2MxODYzMjgzYzAyMzczMjA0NTgK
Hozzuk létre a második LDAP konfig állományt it:
server_host = ldap.jails.javaforum.hu
search_base = ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
query_filter = (mailLocalAddress=%s)
result_attribute = homeDirectory
Nos, minden kész, indítsuk újra a postfix szolgáltatást, és próbáljuk ki, mit dolgoztunk:
$ /usr/local/etc/rc.d/postfix restart
postfix/postfix-script: stopping the Postfix mail system
postfix/postfix-script: starting the Postfix mail system
[root@mail:~]$ telnet 192.168.2.4 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.javaforum.hu ESMTP Postfix
HELO 192.168.2.4
250 mail.javaforum.hu
Mail from: root
250 2.1.0 Ok
Rcpt to: auth.gabor@javaforum.hu
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test message
Test message
.
250 2.0.0 Ok: queued as 6AF8A13CB5
quit
221 2.0.0 Bye
Connection closed by foreign host.
Szépen elfogadta a levelet, nézzük meg a naplóban, hogy mit csinált vele:
Jan 18 15:17:30 mail postfix/smtpd[95480]: connect from mail.jails.javaforum.hu[192.168.2.4]
Jan 18 15:17:48 mail postfix/smtpd[95480]: 6AF8A13CB5: client=mail.jails.javaforum.hu[192.168.2.4]
Jan 18 15:17:59 mail postfix/cleanup[95496]: 6AF8A13CB5: message-id=<20090118141748.6AF8A13CB5@mail.javaforum.hu>
Jan 18 15:17:59 mail postfix/qmgr[95472]: 6AF8A13CB5: from=<root@mail.jails.javaforum.hu>, size=405, nrcpt=1 (queue active)
Jan 18 15:17:59 mail postfix/virtual[95499]: 6AF8A13CB5: to=<auth.gabor@javaforum.hu>, relay=virtual, delay=21, delays=21/0.03/0/0.18, dsn=2.0.0, status=sent (delivered to maildir)
Jan 18 15:17:59 mail postfix/qmgr[95472]: 6AF8A13CB5: removed
Hmm… valahova eltette, nézzük meg, hova:
$ cat /mails/javaforum.hu/auth.gabor/new/1232288279.Vde5f3a0fI7M779613.mail.jails.javaforum.hu
Return-Path: <root@mail.jails.javaforum.hu>
X-Original-To: auth.gabor@javaforum.hu
Delivered-To: auth.gabor@javaforum.hu
Received: from 192.168.2.4 (mail.jails.javaforum.hu [192.168.2.4])
by mail.javaforum.hu (Postfix) with SMTP id 6AF8A13CB5
for <auth.gabor@javaforum.hu>; Sun, 18 Jan 2009 15:17:38 +0100 (CET)
Subject: Test message
Message-Id: <20090118141748.6AF8A13CB5@mail.javaforum.hu>
Date: Sun, 18 Jan 2009 15:17:38 +0100 (CET)
From: root@mail.jails.javaforum.hu
To: undisclosed-recipients:;
Test message
Nos, a levelek szépen belekerülnek a nekik szánt fájlrendszerbe, készítsünk gyorsan egy új postafiókot, amely minden érkező email címet begyűjt (catchall cím, vagyis @javaforum.hu), illetve egy címet, amelyre a rendszer leveleit fogadjuk (system@javaforum.hu):
dn: uid=info@javaforum.hu,ou=javaforum.hu,ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
objectClass: account
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: posixAccount
uid: info@javaforum.hu
cn: Info
uidNumber: 0
gidNumber: 0
mailLocalAddress: info@javaforum.hu
mailLocalAddress: @javaforum.hu
mailRoutingAddress: maildir:/mails/javaforum.hu/info/
homeDirectory: /mails/javaforum.hu/info/
mailHost: javaforum.hu
userPassword:: e01ENX1MU0Nta1FMMHRmc25VYmhsVTgzcUJBPT0=
dn: uid=system@javaforum.hu,ou=javaforum.hu,ou=VirtualUsers,ou=Mail,dc=javaforum,dc=hu
objectClass: account
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: posixAccount
uid: system@javaforum.hu
cn: System
uidNumber: 0
gidNumber: 0
mailRoutingAddress: maildir:/mails/javaforum.hu/system/
homeDirectory: /mails/javaforum.hu/system/
mailHost: javaforum.hu
mailLocalAddress: system@javaforum.hu
mailLocalAddress: root@javaforum.hu
userPassword:: e01ENX1ETGtGODZMOW92ejhFNmUyd2pnQlRRPT0=
Az egész LDAP dolgot azért csináltuk, hogy ne kelljen a mail jail állományai között turkálni, ezért a változásnak azonnal mennie kell:
$ telnet 192.168.2.4 25
Trying 192.168.2.4...
Connected to mail.jails.javaforum.hu.
Escape character is '^]'.
220 mail.javaforum.hu ESMTP Postfix
HELO 192.168.2.4
250 mail.javaforum.hu
Mail from: root
250 2.1.0 Ok
Rcpt to: mindegymi@javaforum.hu
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test message
Test message
.
250 2.0.0 Ok: queued as 1DB0C13CB8
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail:~]$ less /mails/javaforum.hu/info/new/1232288891.Vde5f3a0fI11M842315.mail.jails.javaforum.hu
Return-Path: <root@mail.jails.javaforum.hu>
X-Original-To: mindegymi@javaforum.hu
Delivered-To: mindegymi@javaforum.hu
Received: from 192.168.2.4 (mail.jails.javaforum.hu [192.168.2.4])
by mail.javaforum.hu (Postfix) with SMTP id 1DB0C13CB8
for <mindegymi@javaforum.hu>; Sun, 18 Jan 2009 15:27:46 +0100 (CET)
Subject: Test message
Message-Id: <20090118142757.1DB0C13CB8@mail.javaforum.hu>
Date: Sun, 18 Jan 2009 15:27:46 +0100 (CET)
From: root@mail.jails.javaforum.hu
To: undisclosed-recipients:;
Test message
Ez is megjött. Az SMTP és LDAP integráció kipipálható…
A postfix könyvtára
Mivel a jail fájlrendszerébe becsatoltunk egy könnyen mozgatható fájlrendszert, célszerű úgy beállítani a postfix programot, hogy a saját átmeneti állományait a /mails/postfix könyvtárba tegye a /var/spool/postfix helyett. Ennek annyi előnye van, hogy ha át kell költöztetni a levelezést egy másik jail-be, akkor az átmeneti hiba okán még nem kézbesített levelek is költöznek.
Állítsuk le a postfix szolgáltatást, és mozgassuk át az átmeneti állományokat:
$ /usr/local/etc/rc.d/postfix stop
postfix/postfix-script: stopping the Postfix mail system
[root@mail:~]$ mv /var/spool/postfix/ /mails/
mv: /var/spool/postfix/public/cleanup is a socket (not copied).
mv: /var/spool/postfix/public/flush is a socket (not copied).
mv: /var/spool/postfix/public/showq is a socket (not copied).
mv: /var/spool/postfix/private/tlsmgr is a socket (not copied).
mv: /var/spool/postfix/private/bounce is a socket (not copied).
mv: /var/spool/postfix/private/error is a socket (not copied).
mv: /var/spool/postfix/private/verify is a socket (not copied).
mv: /var/spool/postfix/private/rewrite is a socket (not copied).
mv: /var/spool/postfix/private/retry is a socket (not copied).
mv: /var/spool/postfix/private/smtp is a socket (not copied).
mv: /var/spool/postfix/private/local is a socket (not copied).
mv: /var/spool/postfix/private/discard is a socket (not copied).
mv: /var/spool/postfix/private/relay is a socket (not copied).
mv: /var/spool/postfix/private/proxymap is a socket (not copied).
mv: /var/spool/postfix/private/anvil is a socket (not copied).
mv: /var/spool/postfix/private/virtual is a socket (not copied).
mv: /var/spool/postfix/private/lmtp is a socket (not copied).
mv: /var/spool/postfix/private/defer is a socket (not copied).
mv: /var/spool/postfix/private/trace is a socket (not copied).
mv: /var/spool/postfix/private/scache is a socket (not copied).
mv: /var/spool/postfix/private/proxywrite is a socket (not copied).
Módosítsuk a main.cf állományt:
queue_directory = /mails/postfix
Majd indítsuk el:
$ /usr/local/etc/rc.d/postfix start
postsuper: Renamed to match inode number: 1 message
postsuper: warning: QUEUE FILE NAMES WERE CHANGED TO MATCH INODE NUMBERS
postfix/postfix-script: starting the Postfix mail system
Észrevette a kis piszok, hogy áthelyeztük a könyvtárát… 🙂
TLS/SSL
Napjainkban a biztonságos – titkosított – kapcsolat nélkülözhetetlen. A biztonságos kapcsolathoz szükségünk van egy hitelesített privát kulcsra, ha nincs pénzünk hitelesítésre, akkor készíthetünk magunknak is privát kulcsot, amelyet magunk írunk alá:
$ openssl genrsa -des3 -out javaforum.hu.key 4096
Generating RSA private key, 4096 bit long modulus
...........................................................................................................................................................................++
..++
e is 65537 (0x10001)
Enter pass phrase for javaforum.hu.key:
3473:error:28069065:lib(40):UI_set_result:result too small:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/ui/ui_lib.c:849:You must type in 4 to 1023 characters
Enter pass phrase for javaforum.hu.key:
3473:error:28069065:lib(40):UI_set_result:result too small:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/ui/ui_lib.c:849:You must type in 4 to 1023 characters
Enter pass phrase for javaforum.hu.key:
Verifying - Enter pass phrase for javaforum.hu.key:
[root@mail:~]$
[root@mail:~]$
[root@mail:~]$ openssl req -new -key javaforum.hu.key -out javaforum.hu.csr
Enter pass phrase for javaforum.hu.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:HU
State or Province Name (full name) [Some-State]:Pest
Locality Name (eg, city) []:Budapest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:javaforum.hu
Organizational Unit Name (eg, section) []:javaforum.hu
Common Name (eg, YOUR name) []:Gabor Auth
Email Address []:auth.gabor@javaforum.hu
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@mail:~]$ openssl x509 -req -days 365 -in javaforum.hu.csr -signkey javaforum.hu.key -out javaforum.hu.crt
Signature ok
subject=/C=HU/ST=Pest/L=Budapest/O=javaforum.hu/OU=javaforum.hu/CN=Gabor Auth/emailAddress=auth.gabor@javaforum.hu
Getting Private key
Enter pass phrase for javaforum.hu.key:
[root@mail:~]$ openssl rsa -in javaforum.hu.key -out javaforum.hu.unsecured.key
Enter pass phrase for javaforum.hu.key:
writing RSA key
[root@mail:~]$ mv javaforum.hu.crt /mails/
[root@mail:~]$ mv javaforum.hu.csr /mails/
[root@mail:~]$ mv javaforum.hu.key /mails/
[root@mail:~]$ mv javaforum.hu.unsecured.key /mails/
A Postfix képes biztonságos csatornán fogadni a leveleket, egyszerűen fel kell vennünk a main.cf állományba az alábbiakat (az utolsó sor csak a szépség kedvéért van ott, ezt fogja kiírni a levelező szerverünk, ha valaki benéz hozzánk):
mtpd_tls_cert_file = /mails/javaforum.hu.crt
smtpd_tls_key_file = /mails/javaforum.hu.unsecured.key
smtpd_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
A master.cf fel van készítve az SMTPS protokoll kezelésére, egyszerűen ki kell törölnünk a komment jeleket az alábbi három sor elől:
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
Dovecot, POP3S és IMAPS
A Dovecot fel van készítve a biztonságos kapcsolatra, egyszerűen csak meg kell mondanunk, hogy hol találja a kulcsokat:
ssl_disable = no
ssl_cert_file = /mails/javaforum.hu.crt
ssl_key_file = /mails/javaforum.hu.unsecured.key
Levélküldés azonosítással
Gyakori igény, hogy akiknek levelezési lehetőséget adunk, annak SMTP lehetőséget is, amelyet a saját nevével és jelszavával tud használni, lehetőleg TLS felett, így biztonságosan és kényelmesen tud minden felhasználónk levelezni.
Első lépésképp be kell állítanunk a postfix main.cf állományában a következőket:
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
Mint láthatjuk, a dovecot fogja adni az azonosítás hátterét, erről a dovecot.conf állományban tudunk rendelkezni, vessünk egy pillantást az alábbi részletre:
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = dovecot
group = dovecot
}
client {
path = /mails/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
Amint a két szolgáltatást újraindítjuk, már működik is szépen a biztonságos kapcsolat és az SMTP azonosítás.
Szükséges portok
A biztonságos kapcsolat más porton fut, mint a normál, ezért a levelező szerverünk felé az alábbi átirányítások szükségesek (majd az ipnat újratöltése):
# Postfix
rdr bge0 91.83.48.130/32 port 25 -> 192.168.2.4 port 25 tcp
rdr bge0 91.83.48.130/32 port 465 -> 192.168.2.4 port 465 tcp
# Dovecot
rdr bge0 91.83.48.130/32 port 110 -> 192.168.2.4 port 110 tcp
rdr bge0 91.83.48.130/32 port 143 -> 192.168.2.4 port 143 tcp
rdr bge0 91.83.48.130/32 port 993 -> 192.168.2.4 port 993 tcp
rdr bge0 91.83.48.130/32 port 995 -> 192.168.2.4 port 995 tcp