Az volt a feladat, hogy egy gépen két e-mail szerver fusson, amelyikből az egyik rendesen szolgáljon ki domaineket, és küldjön-fogadjon leveleket, míg a másik csak kifelé küld, és külön file-ba logoz, hogy azt külön lehessen kezelni. A szerveren a Postfix adott volt, és mivel szeretek mindent, amit csak lehet csomagból feltenni a rendszer frissítését megkönnyítendő, így nem tehettem fel egy … Ööööööö, hát igen, az ember mindig tanul, lehetett volna feltenni egy exim-et mondjuk, mert ezek (mail szerverek) nem ütik egymást csomag szinten, mint egy-két cucc… Na mindegy.
Szóval a Postfix már fent volt, így a feladat, hogy legyen belőle két példány. Gondolam, hogy a /etc/postfix-et lemásolni még kevés lesz, valahogy rá kell venni a Postfix-ot is, hogy onnan olvassa a beállításokat, meg ugye jó volna, ha ez a példány is elindulna rendszerinduláskor, így a /etc/init.d/postfix-et is le kellett másolni. De ez még kevés, mert a Postfix a rendszer alapértelmezett könyvtárában (/etc/postfix Ubuntu-n) keresi a main.cf file-t, megoldás kellett arra, valami elegáns, amivel rá lehet venni, hogy azt olvassa fel, amelyiket én akarom. Ez pedig a MAIN_CONFIG környezeti változó, amit beleraktam a script elejébe, és beállítottam a /etc/postfix2-re. Boldogság. Aztán van neki egy chroot könyvtára, a /var/spool/postfix, abból is kellett egy másolat. Meg van egy /var/lib/postfix, bár talán ide csak akkor pakolászik, ha SSL is van, de talán a levélküldésnél használhat SSL-t a Postfix, mint kliens, szóval jobb ezt is lemásolni. Aztán jött a config file-ok faragása. main.cf-ben a következőket kellett belőni:
queue_directory=/var/spool/postfix2 data_directory=/var/lib/postfix2 syslog_facility=local7 syslog_name=postfix2 inet_interfaces = loopback-only
A syslog_facility persze lehet bármi, amit a rendszer megért, de a local0-7 az, amit nem használnak programok, így abba csak az megy, amit én akarok.
A master.cf-ben meg ezt:
smtp inet n - - - - smtpd
lecserélni erre:
125 inet n - - - - smtpd
feltéve, hogy a 125-ös portra akarjuk rakni a második Postfix példányt és csak a loopback interface-re bind-olni (inet_interfaces). Én kiirtottam mindenféle spam, meg vírusirtó bejegyzést mind a main.cf, mind a master.cf file-okból, mert nincs rá szükség. Ha mégis lenne, akkor azoknak is kell keresni egy külön portot a master.cf-ben.
A kisebb szívás az init.d-ben lemásolt postfix script miatt volt, mert a /var/spool/postfix másolás miatt a futó példány PID file-ját is lemásoltam, meg egyéb más file-okat, így a script azt hitte, hogy már fut, és ahelyett, hogy kiírta volna, hogy már fut, csak OK-t írt, mintha elindította volna, de persze nem futott, és meg kerestem a logokban, hogy miért nem indul el… Miután ezt leküzdöttem jött a logolás. Hát az a mulya rsyslogd egy HUP-ra nem teljesen olvassa újra a config-ját, így hiába csináltam a /etc/rsyslog.d alá egy file-t a következő tartalommal, nem jöttek létre a file-ok, én meg megint csak töprengtem, hogy mit csinálhattam rosszul:
$AddUnixListenSocket /var/spool/postfix2/dev/log local7.info -/var/log/mail2.info local7.warn -/var/log/mail2.warn local7.err /var/log/mail2.err
Persze semmit, csak a reload/HUP nem volt elég, restart kellett. Azt hiszem ennyi, ha ez mégsem működne neked, írj kommentet, és megnézem a szerveren 🙂