Mailman telepítése virtuális domainekre

Boobaa küldte be 2007. 03. 09., péntek, 15:22 időpontban

(Felhasználási feltételek a cikk végén.)

Előfeltételek: beállított, tesztelt és működő Postfix (tudjon leveleket küldeni és fogadni) és Apache.

Feltevések: gépünk IP-címe 1.2.3.4, hostneve foo. A Postfixnek beállított myhostname mondjuk domain1.hu. A gép elérhető foo.domain1.hu névvel is. A @domain1.hu, @domain2.hu és @domain3.hu leveleit kezeljük, mindet virtuálisan (azaz mindegyik domain elsődleges MX-e 1.2.3.4). A foo.domain1.hu számára nem szükséges MX-et bejegyeztetni. Apache webszervert használunk, mindegyik domain külön VirtualHost bejegyzéssel rendelkezik; a foo.domain1.hu-t állítottuk be https-en (azaz az 1.2.3.4 IP-hez tartozó biztonságos domain a foo.domain1.hu). Bonyolításképpen https-en tesszük elérhetővé a Mailman felületeit.

Telepítés: mi sem egyszerűbb: pacman -S mailman.

Beállítás: több dologra is oda kell figyelnünk, hiszen a Mailman mind levelező, mind böngészőprogramból elérhető.

Apache beállítása: /etc/httpd/conf/ssl.conf végére:

ScriptAlias /mailman/ /home/mailman/cgi-bin/
Alias /pipermail/ /home/mailman/archives/public/
<Directory /home/mailman/archives/public>
 Options FollowSymLinks
</Directory>

Postfix beállítása: az /etc/postfix/main.cf-ben ellenőrizzük (vagy állítsuk be) a következőket:

recipient_delimiter = +
transport_maps = hash:/etc/postfix/transport
mailman_destination_recipient_limit = 1
relay_domains = foo.domain1.hu

Ugyanitt az alias_maps-hez adjuk hozzá a következőt (a már ottlevő dolgok meghagyásával, vesszővel elválasztva):

hash:/home/mailman/data/aliases

Az /etc/postfix/transport-hoz adjuk hozzá a következő sort:

foo.domain1.hu mailman:

Dolgoztassuk fel ezt a fájlt:

postmap /etc/postfix/transport

Az /etc/postfix/master.cf-hez adjuk hozzá a következő sorokat:

mailman unix - n n - - pipe
 flags=FR user=mailman:nogroup
 argv=/home/mailman/postfix-to-mailman.py ${nexthop} ${user}

Mailman beállítása: több részből áll. A programokat mindig /home/mailman könyvtárban állva kell indítani. Először ellenőrizzük a jogosultságokat: bin/check_perms. Ha hibát talál, rootként javítható bin/check_perms -f futtatásával. A privát archívumokról vegyük le a world-executable bitet:

chown o-x archive/private

Töltsük le a postfix-to-mailman szkriptet, a fentieknek megfelelően tegyük a /home/mailman/postfix-to-mailman.py helyre, és adjunk rá futtatás jogot:

chmod o+x /home/mailman/postfix-to-mailman.py

A fájl elején állítsuk be a következő sorokat:

MailmanHome = "/home/mailman";
MailmanOwner = "postmaster@domain1.hu";

A listák általános beállításait a /home/mailman/Mailman/mm_cfg.py fájlban végezzük el, írjuk a végére ezeket a sorokat:

MTA = 'Postfix'
DEFAULT_EMAIL_HOST = 'foo.domain1.hu'
DEFAULT_URL_HOST = 'foo.domain1.hu'
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
DEFAULT_SERVER_LANGUAGE = 'hu'
DEFAULT_URL_PATTERN = 'https://%s/mailman/'
PUBLIC_ARCHIVE_URL = 'https://%(hostname)s/pipermail/%(listname)s'

Állítsuk be a Mailman aliasait, futtassuk a következőket:

bin/genaliases
cd data
chown mailman aliases aliases.db
chmod g+w aliases aliases.db

Állítsuk be a Mailman rendszeresen futtatandó részeit:

cd /home/mailman/cron
crontab crontab.in -u mailman

Indítsuk újra az érintett szolgáltatásokat:

service httpd restart
service postfix restart
service mailman start

Ha a Mailman levelező részét szeretnénk elindítani bootkor:

service mailman add

Létre kell hoznunk egy rendszerszintű levelezőlistát:

cd /home/mailman
bin/newlist mailman

Hozzunk létre egy saját listát is:

bin/newlist domain1-ertesites

A böngészőnkben nyissuk meg a következő oldalt:

https://foo.domain1.hu/mailman/admin/domain1-ertesites/?VARHELP=general/host_name

(az imént megadott jelszó kell hozzá), és állítsuk át a lista kimenő szervercímét foo.domain1.hu-ról domain1.hu-ra. Ezáltal a kimenő levelekben elrejtettük a (még virtuálisan sem létező) foo.domain1.hu domaint. Ahhoz, hogy ezekre a levelekre válaszolni is lehessen, létre kell hozni néhány aliast:

domain1-ertesites@domain1.hu -> domain1-ertesites@foo.domain1.hu
domain1-ertesites-bounces@domain1.hu -> domain1-ertesites-bounces@foo.domain.hu
domain1-ertesites-request@videsign.hu -> domain1-ertesites-request@foo.domain1.hu

Ezzel a módszerrel lehet több virtuális domainünkben is azonos című lista (azaz lehet pl. hirlevel@domain1.hu és hirlevel@domain2.hu címen elérhető levelezőlistánk is). Természetesen mindegyik listának egyedi neve kell legyen (ezért szerepel a fenti példában az ertesites előtt a domain1- kitétel is), ezt azonban további aliasokkal elrejthetjük. A hírleveles példánál maradva a következő aliasokra lesz tehát szükségünk:

domain1-hirlevel@domain1.hu -> domain1-hirlevel@foo.domain1.hu
domain1-hirlevel-bounces@domain1.hu -> domain1-hirlevel-bounces@foo.domain1.hu
domain1-hirlevel-request@videsign.hu -> domain1-hirlevel-request@foo.domain1.hu
domain2-hirlevel@domain2.hu -> domain2-hirlevel@foo.domain1.hu
domain2-hirlevel-bounces@domain2.hu -> domain2-hirlevel-bounces@foo.domain1.hu
domain2-hirlevel-request@videsign.hu -> domain2-hirlevel-request@foo.domain1.hu
hirlevel@domain1.hu -> domain1-hirlevel@foo.domain1.hu
hirlevel@domain2.hu -> domain2-hirlevel@foo.domain1.hu

A lényeg az utolsó két sor, de figyeljünk oda rá, hogy a foo.domain1.hu mindig maradjon foo.domain1.hu. Az egész játéknak ugyanis az a trükkje, hogy ezen a (virtuálisan sem létező) foo.domain1.hu domainen megy át az összes levelezőlistánk összes levele, amit a Postfix transport táblája irányít a postfix-to-mailman.py szkript felé, ami végeredményben megfelelő módon továbbítja a listás leveleket a Mailman felé.

Felhasznált irodalom: Dan Langille leírása, GNU Mailman - Installation Manual.

Figyelem! A cikk írója semmiféle felelősséget nem vállal az itt leírtakkal kapcsolatban, különösen, de nem kizárólagosan levelek elveszítésével, rossz helyre történő kézbesítésével és hasonlókkal kapcsolatban. Ez a cikk a Creative Commons Nevezd meg!-Ne add el!-Így add tovább! 2.5 Magyarország Licenc feltételeinek megfelelően szabadon felhasználható. Bármi hiba esetén kéretik értesíteni a cikk szerzőjét.