Здравствуйте.
Пытаюсь запилить почтовик в связке postfix, mysql и dovecot, но что-то идет не так (freebsd 10.3). Какие-то глобальные конфиги даже не пытался пихать, пока с простейшим не фурчит.echo "test" | mail root
May 15 12:36:56 mail2 postfix/pickup[1285]: 6ECFB2199B58: uid=0 from=<root>
May 15 12:36:56 mail2 postfix/cleanup[1405]: 6ECFB2199B58: message-id=<20170515093656.6ECFB2199B58@mail2.tratata.local>
May 15 12:36:56 mail2 postfix/qmgr[1286]: 6ECFB2199B58: from=<root@tratata.local>, size=297, nrcpt=1 (queue active)
May 15 12:36:56 mail2 postfix/trivial-rewrite[1406]: warning: do not list domain tratata.local in BOTH mydestination and virtual_mailbox_domains
May 15 12:36:56 mail2 postfix/trivial-rewrite[1406]: warning: do not list domain tratata.local in BOTH mydestination and virtual_mailbox_domains
May 15 12:36:56 mail2 postfix/local[1407]: 6ECFB2199B58: to=<mailadmin@tratata.local>, orig_to=<root>, relay=local, delay=0.05, delays=0.02/0.01/0/0.01, dsn=5.1.1, status=bounced (unknown user: "mailadmin")
May 15 12:36:56 mail2 postfix/cleanup[1405]: 7767E2199B5A: message-id=<20170515093656.7767E2199B5A@mail2.tratata.local>
May 15 12:36:56 mail2 postfix/bounce[1408]: 6ECFB2199B58: sender non-delivery notification: 7767E2199B5A
May 15 12:36:56 mail2 postfix/qmgr[1286]: 7767E2199B5A: from=<>, size=2271, nrcpt=1 (queue active)
May 15 12:36:56 mail2 postfix/trivial-rewrite[1406]: warning: do not list domain tratata.local in BOTH mydestination and virtual_mailbox_domains
May 15 12:36:56 mail2 postfix/qmgr[1286]: 6ECFB2199B58: removed
May 15 12:36:56 mail2 postfix/local[1407]: 7767E2199B5A: to=<mailadmin@tratata.local>, orig_to=<root@tratata.local>, relay=local, delay=0.01, delays=0/0/0/0, dsn=5.1.1, status=bounced (unknown user: "mailadmin")
May 15 12:36:56 mail2 postfix/qmgr[1286]: 7767E2199B5A: removed
Почтовый /usr/local/etc/postfix/main.cf
compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
myhostname = mail2.tratata.local
mydomain = tratata.local
myorigin = $mydomain
mydestination = mail2.tratata.local, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks_style = subnet
alias_maps = hash:/etc/mail/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
inet_protocols = ipv4
meta_directory = /usr/local/libexec/postfix
shlib_directory = /usr/local/lib/postfix
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/virtual/domains.sql
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/virtual/users.sql
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
cat /usr/local/etc/postfix/virtual/domains.sql
unix:file=/tmp/mysql.sock
user = reader
password = 12345678
dbname = mail
table = domains
select_field = domain
where_field = domaincat /usr/local/etc/postfix/virtual/users.sql
unix:file=/tmp/mysql.sock
user = reader
password = 12345678
dbname = mail
table = users
select_field = concat ( '/mail', home )
where_field = email
сам файл для создания mysql простейший:
create database mail DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
use mail;
create table domains (
domain char(32) NOT NULL UNIQUE
);
insert into domains value ( 'tratata.local' );
create table users (
email VARCHAR(32) NOT NULL UNIQUE PRIMARY KEY,
home VARCHAR(16) NOT NULL UNIQUE,
password VARCHAR(64) NOT NULL
) ENGINE = InnoDB;
insert into users value ('mailadmin@tratata.local','mailadmin','12345');
insert into users value ('test@tratata.local','test','12345');
grant select on mail.* to 'reader'@'localhost';
grant select on mail.* to 'reader'@'127.0.0.1';
grant select on mail.* to 'reader'@'::1';
use mysql;
update user set password=password('12345678') where user='reader';
flush privileges;
ну и довекотовский /usr/local/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=/tmp/mysql.sock dbname=mail user=reader password=12345678
default_pass_scheme = PLAIN
user_query = select concat ( '/MAIL/', home ) as home from users where email = '%u'
password_query = select password from users where email = '%u'
May 15 12:36:56 mail2 postfix/trivial-rewrite[1406]: warning: do not list domain tratata.local in BOTH mydestination and virtual_mailbox_domains
------------------
> May 15 12:36:56 mail2 postfix/trivial-rewrite[1406]: warning: do not list domain tratata.local
> in BOTH mydestination and virtual_mailbox_domainsНу в общем-то я лог и выложил, чтобы это было видно. Только в чем проблема то, что не так то? о_О
> Только в чем проблема то, что не так то? о_Оdo not list domain tratata.local in BOTH mydestination and virtual_mailbox_domains
вам перевести со словарем или сами осилите гугл транслейт?
> вам перевести со словарем или сами осилите гугл транслейт?доброжелательность на технических форумах всегда была интересной)))
спс, я уже разобрался, удалил $mydomain в mydestination, после чего данная ошибка ушла, но, к сожалению, это еще не все. :(
Вылез какой-то косяк с обращением dovecot. ((
При такой же попытке echo "test" | mail root теперь вылезает вот это:May 15 20:00:55 mail2 postfix/pickup[2290]: CF2172199B58: uid=0 from=<root>
May 15 20:00:55 mail2 postfix/cleanup[2296]: CF2172199B58: message-id=<20170515170055.CF2172199B58@mail2.tratata.local>
May 15 20:00:55 mail2 postfix/qmgr[2291]: CF2172199B58: from=<root@tratata.local>, size=297, nrcpt=1 (queue active)
May 15 20:00:56 mail2 dovecot: auth-worker(2301): sql(root@tratata.local): unknown user
May 15 20:00:56 mail2 postfix/pipe[2298]: CF2172199B58: to=<root@tratata.local>, orig_to=<root>, relay=dovecot, delay=0.51, delays=0.02/0.03/0/0.46, dsn=5.1.1, status=bounced (user unknown)
May 15 20:00:56 mail2 postfix/cleanup[2296]: 557382199BA0: message-id=<20170515170056.557382199BA0@mail2.tratata.local>
May 15 20:00:56 mail2 postfix/bounce[2302]: CF2172199B58: sender non-delivery notification: 557382199BA0
May 15 20:00:56 mail2 postfix/qmgr[2291]: 557382199BA0: from=<>, size=2232, nrcpt=1 (queue active)
May 15 20:00:56 mail2 postfix/qmgr[2291]: CF2172199B58: removed
May 15 20:00:56 mail2 dovecot: auth-worker(2301): sql(root@tratata.local): unknown user
May 15 20:00:56 mail2 postfix/pipe[2298]: 557382199BA0: to=<root@tratata.local>, relay=dovecot, delay=0.02, delays=0/0/0/0.01, dsn=5.1.1, status=bounced (user unknown)
May 15 20:00:56 mail2 postfix/qmgr[2291]: 557382199BA0: removed
Вообще, в /etc/mail/aliases у меня добавлена строчка:
root: mailadmin@tratata.local
после чего делался хэш postalias /etc/mail/aliases
При этом в /usr/local/etc/dovecot/conf.d/10-master.conf
# Internal user is used by unprivileged processes. It should be separate from
# login user, so that login processes can't disturb other processes.
#default_internal_user = dovecot
service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn't necessary, the user should be changed to
# $default_internal_user.
#user = root
}при этом там же
service auth {
unix_listener auth-userdb {
mode = 0777
}
}
потому что там же написано
# To give the caller full permissions to lookup all users, set the mode to
# something else than 0666 and Dovecot lets the kernel enforce the
# permissions (e.g. 0777 allows everyone full permissions).
>May 15 20:00:56 mail2 dovecot: auth-worker(2301): sql(root@tratata.local): unknown user
>May 15 20:00:56 mail2 postfix/pipe[2298]: CF2172199B58: to=<root@tratata.local>, orig_to=<root>, relay=dovecot, delay=0.51, delays=0.02/0.03/0/0.46, dsn=5.1.1, status=bounced (user unknown)Что там насчет словаря говорили? Какие у вас сложности возникают с фразой "unknown user" - сложность перевода или сложность понимания к чему оно относится?
Попробуйте показать, что вы думали над проблемой, а не тупо копипастите логи из консоли.
Помогают думающим, а не копипастерам.ИМХО.
>Какие у вас сложности возникают с фразой "unknown user" - сложность перевода или сложность понимания к чему оно относится?То, что неизвестный пользователь - это понятно и так, тут хорошо английский знать и не требуется. И то, что sql'ные запросы от dovecot, вероятно, выдают ему не то, что ему нужно - в принципе тоже, т.е. те запросы, которые в файле dovecot-sql.conf.ext нарисованы, потому что
select concat ( '/MAIL/', home ) as home from users where email = '%u'
непосредственно из mysql от пользователя reader выдает Empty set (0.00 sec), также как и
select password from users where email = '%u'
а как тогда правильно то написать?> show tables from mail;
+----------------+
| Tables_in_mail |
+----------------+
| domains |
| users |
+----------------+> select * from users;
+-------------------------+-----------+----------+
| email | home | password |
+-------------------------+-----------+----------+
| mailadmin@tratata.local | mailadmin | 12345 |
| test@tratata.local | test | 12345 |
+-------------------------+-----------+----------+> select * from domains;
+---------------+
| domain |
+---------------+
| tratata.local |
+---------------+
> вероятно, выдают ему не то, что ему нужно - в принципе
> тоже, т.е. те запросы, которые в файле dovecot-sql.conf.ext нарисованыхотя нет, туплю, забыл поменять %u на значение
выдается все нормально там
select concat ( '/MAIL/', home ) as home from users where email = 'mailadmin@tratata.local';
+-----------------+
| home |
+-----------------+
| /MAIL/mailadmin |
+-----------------+select password from users where email = 'mailadmin@tratata.local';
+----------+
| password |
+----------+
| 12345 |
+----------+
> выдается все нормально тамНу вот и чудно, значит всё ок.
> Ну вот и чудно, значит всё ок.чудного мало, то, что улетает почта на mailadmin@tratata.local и появляется в /mail - это хорошо, но как сделать то так, чтобы почта на root'а прилетала виртуальному mailadmin@tratata.local ???
>> Ну вот и чудно, значит всё ок.
> чудного мало, то, что улетает почта на mailadmin@tratata.local и появляется в /mail
> - это хорошо, но как сделать то так, чтобы почта на
> root'а прилетала виртуальному mailadmin@tratata.local ???т.е. чтобы всякая фигня в стандартном /var/mail не скапливалась
>> Ну вот и чудно, значит всё ок.
> чудного мало, то, что улетает почта на mailadmin@tratata.local и появляется в /mail
> - это хорошо, но как сделать то так, чтобы почта на
> root'а прилетала виртуальному mailadmin@tratata.local ???Для этого нужно
либо:
- сконфигурировать virtual_alias_maps
либо:
Сконфигурировать для mydomain/myorigin отдельный домен (отдельный от виртуального), и тогда уже заработает локальный alias_maps.
> Для этого нужно
> либо:
> - сконфигурировать virtual_alias_mapsаллиллуйя
первый конкретный ответ от вас в этой теме
спс, вроде полетела почта на root'а с приземлением на mailadmin@tratata.local
> Вообще, в /etc/mail/aliases у меня добавлена строчка:
> root: mailadmin@tratata.local
> после чего делался хэш postalias /etc/mail/aliasesКонечно в базе мускула нет такого пользователя root.
Надо сделать еще алиас-таблицу:
/etc/postfix/virtual
#
root@tratata.local root
#
сделать postmap /etc/postfix/virtual
После добавить в main.cf :
#
# первым в список
virtual_alias_maps = hash:/etc/postfix/virtual,
#обязательно первым!
#
Как то так.
А вообще легче поставить готовую сборку типа iredmail
20 минут и у вас готовый работающий почтовик postfix+dovecot+msql(ldap) + вебморда
А там напильником до совершенства.
Один минус - ставить нужно начистую систему без постфикса мускула и довекота.
>[оверквотинг удален]
> #
> # первым в список
> virtual_alias_maps = hash:/etc/postfix/virtual,
> #обязательно первым!
> #
> Как то так.
> А вообще легче поставить готовую сборку типа iredmail
> 20 минут и у вас готовый работающий почтовик postfix+dovecot+msql(ldap) + вебморда
> А там напильником до совершенства.
> Один минус - ставить нужно начистую систему без постфикса мускула и довекота.спс
> аллиллуйя
> первый конкретный ответ от вас в этой темену так первый конкретный вопрос - вот и первый конкретный ответ.
Ознакомьтесь с _https://habrahabr.ru/post/328530/
> Вообще, в /etc/mail/aliases у меня добавлена строчка:
> root: mailadmin@tratata.local
> после чего делался хэш postalias /etc/mail/aliasestratata.local теперь подчиняется настройкам "виртуальных доменов", а /etc/mail/aliases - настройка "локальных доменов" aka mydestination.