Инсталираме PostFix от репозиторите.
# apt-get install postfix
Избераме Internet Sait
Независимо, че избрахме mail name да е home.tlan.net, това не е от значение, защото тука хост името и домейн името няма да се присъединяват към пощенския домейн. Пощенския домейн и адресите ще се дефинират в MySQL базата. Горе казаното не е точно така. За пояснение: - домейна ни е home.tlan.net. - хоста също се казва по пълно име (FQDN) home.tlan.net. И тъй като си съпадат това е проблем. Реално би трябвало FQDN да е home.home.tlan.net. Нарочно сега ще оставим нещата така. На по-късен етап когато проверяваме правилността на работа на PostFix ще изясним нещата.
За да може да работи Postfix заедно с MySQL е нужна приставка към Postfix която ще инсталираме сега
# apt-get install postfix-mysql
Самата инсталация протича много бързо. В Postfix има два основни конфигуриращи файла. Това са /etc/postfix/main.cf и /etc/postfix/master.cf. Първото нещо е да направим копие на оригиналните файлове
# cp /etc/postfix/main.cf /etc/postfix/main.cf.original # cp /etc/postfix/master.cf /etc/postfix/master.cf.original
Особено важен файл за връзката Postfix-MySQL е /etc/postfix/main.cf. Малко отклонение: В гореспоменатия файл ще има много променливи но обърнете внимание на virtual_mailbox_domains, virtual_mailbox_maps и virtual_alias_maps. Тези променливи ще извикват други конфигурационни файлове в които ще е описана комуникацията с MySQL. Сложно малко но като създадем файловете ще стане ясно. Има два подхода за коригиране на /etc/postfix/main.cf. Единия е редакция чрез текстов редактор (примерно vi) и другия е чрез команди писани в терминал и те да попълват файла. За малко разнообразие и повишаване на знанията ще възприемем втория
Виртуални домейни.
# postconf virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Тази команда записа конфигурационен ред във файла /etc/postfix/main.cf, където се каза: - Postfix ще приеме данни за виртуалните домейни от базата на MySQL, където името на базата , потребителя който ще борави с тази база ще се опишат във файла /etc/postfix/mysql-virtual-mailbox-domains.cf. Това налага създаването и на самия файл
# vi /etc/postfix/mysql-virtual-mailbox-domains.cf user = pfuser password = pfpass hosts = 127.0.0.1 dbname = pfdb query = SELECT 1 FROM virtual_domains WHERE name='%s'
Няколко думи за файла. Дефинирахме потребителя pfuser с парола pfpass който се подвизава на хост 127.0.0.1 ще борави с базата pfdb и ще изпълни заявка към MySQL. Резултата от тази заявка ще е 1. Веднага проверка за верността на гореказаното. Не забравяйте, че всяка промяна по конфигурационните файлове на Postfix влизат в действие след рестарт на услугата Postfix.
# /etc/init.d/postfix restart # /etc/init.d/postfix status
Няма грешки , продължаваме с теста
# postmap -q home.tachko.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf 1
# postmap -q home.tlan.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf 1
Прекрасно всичко работи. Отново отклонение: От лакомия да е шарено и красиво, настроих си vim редактора с много екстри. Сложих в него добавки които слагаха скрити символи в конфигурационните файлове. Та доста дни изгубих докато си открия грешката. Стъпките ми бяха следните. - Проверка на файла mysql-virtual-mailbox-domains.cf. Макар, че точно там бяха грешките но невидими, аз се съгласявах, че потребителя, паролата, хоста, базата и заявката са с правилен синтаксис. - Щом синтаксиса е верен остава да е в правата на потребителя към базата или грешки в данните в самата база. Затова имитирах, че аз съм Postfix и изпълнявах стъпка по стъпка което той щеше да прави, а именно: Логвах се с потребителя pfuser дефиниран във файла към базата pfdb указана също във файла
# mysql -u pfuser -h 127.0.0.1 -p Enter password: pfpass
Сменях базата да е pfdb
MariaDB [(none)]> use pfdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Изпълнявах заявката от файла към MySQL
MariaDB [pfdb]> SELECT 1 FROM virtual_domains WHERE name='home.tlan.net'; 1 1 1 row in set (0.00 sec)
В случая само заменях %s с home.tachko.com Всичко това показваше, че логиката е правилна и работи вярно, но скритите символи във файла mysql-virtual-mailbox-domains.cf караха Postfix да се бърка. Правата на потребителя който се мъчи да се свърже към MySQL са органични. Забърсах конфигурационния файл, написах го на ръка внимателно и всичко се оправи.
Виртуални пощенски кутии
# postconf virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Отново въведохме конфигурационен ред в /etc/postfix/main.cf където указахме, че чрез файла /etc/postfix/mysql-virtual-mailbox-maps.cf ще се търсят виртуалните пощенски кутии в базата на MySQL. Създаваме и самия файл
# vi /etc/postfix/mysql-virtual-mailbox-maps.cf user = pfuser password = pfpass hosts = 127.0.0.1 dbname = pfdb query = SELECT 1 FROM virtual_users WHERE email='%s'
И отново да проверим как работи конфигурационния файл
# postmap -q tachko@home.tlan.net mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf 1
Прекрасно и това работи
Виртуални псевдоними.
# postconf virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf # vi /etc/postfix/mysql-virtual-alias-maps.cf user = pfuser password = pfpass hosts = 127.0.0.1 dbname = pfdb query = SELECT destination FROM virtual_aliases WHERE source='%s'
И проба
# postmap -q tit@home.tlan.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf tachko@home.tlan.net
Правилно tit@home.tlan.net пренасочва към tachko@home.tlan.net Има обаче един много важен момент. Примерно решавате всичко което идва до @home.tlan.net да се препраща до tachko@home.tlan.net. До тука добре. Това ще се изпълни, но тъй като @home.tlan.net е специфичен псевдоним той е с най-висок приоритет и това ще спре на практика пощата до другите потребители и само tachko@home.tlan.net ще получава поща. За да се избегне това се прави трик. Описват се в алиасите потребителите да получават поща до себе си
Адрес | Дестинация |
---|---|
@home.tachko.com | tachko@home.tlan.net |
tit@home.tlan.net | tit@home.tlan.net |
Поради всичко това е нужно да създадем още един конфигурационен ред в /etc/postfix/main.cf., той на практика ще препокрие горният, който създадохме за виртуалните псевдоними.
# postconf virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
Съответно се налага да създадете още един файл
# vi /etc/postfix/mysql-email2email.cf user = pfuser password = pfpass hosts = 127.0.0.1 dbname = pfdb query = SELECT email FROM virtual_users WHERE email='%s'
Тест към този файл.
# postmap -q tit@home.tlan.net mysql:/etc/postfix/mysql-email2email.cf tit@home.tlan.net
Проверяваме кой има право да чете файловете които създадохме
# ls -l /etc/postfix/mysql-* -rw-r--r-- 1 root root 121 Apr 24 23:08 /etc/postfix/mysql-email2email.cf -rw-r--r-- 1 root root 130 Apr 24 23:08 /etc/postfix/mysql-virtual-alias-maps.cf -rw-r--r-- 1 root root 118 Apr 24 23:06 /etc/postfix/mysql-virtual-mailbox-domains.cf -rw-r--r-- 1 root root 117 Apr 24 23:07 /etc/postfix/mysql-virtual-mailbox-maps.cf
Тези файлове трябва да могат да се четат само от root и postfix потребители, все пак паролата на базата данни е тука.
# chgrp postfix /etc/postfix/mysql-*.cf # chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf # ls -l /etc/postfix/mysql-* -rw-r----- 1 root postfix 121 Apr 24 23:08 /etc/postfix/mysql-email2email.cf -rw-r----- 1 root postfix 130 Apr 24 23:08 /etc/postfix/mysql-virtual-alias-maps.cf -rw-r----- 1 root postfix 118 Apr 24 23:06 /etc/postfix/mysql-virtual-mailbox-domains.cf -rw-r----- 1 root postfix 117 Apr 24 23:07 /etc/postfix/mysql-virtual-mailbox-maps.cf
Разположение на пощенските кутии
Следващия момент е разположението на пощенските кутии. Добра практика е да са на отделен дял. Когато инсталирахме Debian, папката /home беше създадена на отделен дял именно с такава цел. Така, че сега е нормално пощата да се разположи в /home/vmail. В бъдеще това ще позволи да се сложи много голям отделен диск и там да се складира цялата поща (ако има много поща). Така дяла /home на практика ще бъде отделен диск. Щом ще има домашна папка за електронната поща то трябва да има и собственик на тази папка. Собсвеника ще се казва vmail и ще е член на групата vmail
# groupadd -g 5000 vmail
До тука създадохме група vmail с GID 5000
# useradd -g vmail -u 5000 vmail -d /home/vmail -m
В групата vmail присъединихме потребител vmail с UID 5000 който е собственик на /home/vmail.
Параметъра –m пък създаде папката /home/vmail
Проверка на това което създадохме
# groups vmail vmail : vmail
Има създаден потребител и група vmail
# ls -ld /home/vmail/ drwxr-xr-x 2 vmail vmail 4096 Apr 14 15:33 /home/vmail/
Има създадена директория /home/vmail/ която е собственост на потребителя vmail който пък е член на групата vmail. Потребителя има пълни права върху директорията.
# id vmail uid=5000(vmail) gid=5000(vmail) groups=5000(vmail)
Ако не бяхме създали автоматично папката /home/vamil, то можеше всичко това да се направи после стъпка по стъпка
# mkdir -p /home/vmail/ # chown -R vmail:vmail /home/vmail/ # chmod -R 0700 /home/vmail/
Но това за сега не се налага. От чисто любопитство да надникнем в самия конфигурационен файл
# vi /etc/postfix/main.cf
Най отдолу съдържа следното
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
За сега приключваме с PostFix. Следва да се забавляваме с Dovecot