Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
ideapool:почта [2010/09/14 13:08] создано |
ideapool:почта [2010/09/15 00:24] (текущий) |
||
---|---|---|---|
Строка 8: | Строка 8: | ||
- Поставить **postfix** | - Поставить **postfix** | ||
- | Самым разумным, на мой взгляд, является организация ящиков в виде редиректов на основной ящик пользователя из профиля SMF. То есть члены определённой группы SMF автоматически получают адрес login@ubuntu.ru, который является редиректом на их основной почтовый адрес из профиля. | + | Самым разумным, на мой взгляд, является организация ящиков в виде редиректов на основной ящик пользователя из профиля SMF. То есть члены определённой группы SMF автоматически получают адрес login@ubuntu.ru, который является редиректом на их основной почтовый адрес из профиля. Плюс можно будет добавить несколько адресов вручную, естественно тоже редиректами. |
+ | |||
+ | Проще говоря мы предоставляем пользователям адрес, но не предоставляем почтовый ящик. Ящики и так уже у всех есть, накой плодить сущности? | ||
Преимущества: безопасность сервера (нет ни авторизации, ни фильтров спама, ни вообще какого-либо доступа пользователей к SMTP) и идеальная простота для конечного пользователя. Ибо ящики и так уже у всех есть и пытаться стать ещё одним почтовым провайдером просто бесполезно. | Преимущества: безопасность сервера (нет ни авторизации, ни фильтров спама, ни вообще какого-либо доступа пользователей к SMTP) и идеальная простота для конечного пользователя. Ибо ящики и так уже у всех есть и пытаться стать ещё одним почтовым провайдером просто бесполезно. | ||
Строка 133: | Строка 135: | ||
permit_mynetworks | permit_mynetworks | ||
reject_unauth_destination | reject_unauth_destination | ||
+ | permit | ||
# Ограничения на данные. Не принимаем в случае некорректной передачи | # Ограничения на данные. Не принимаем в случае некорректной передачи | ||
Строка 139: | Строка 142: | ||
</code> | </code> | ||
- | Как видно, postfix для определения валидных получателей использует одну стандартную карту - **/etc/postfix/mailboxes/aliases**. Её мы будем генерить раз в сутки на основе БД SMF таким вот скриптом: | + | Как видно, postfix для определения валидных получателей использует одну стандартную карту - **/etc/postfix/mailboxes/smf-aliases**. Её мы будем генерить раз в сутки на основе БД SMF таким вот скриптом: |
<code perl> | <code perl> | ||
- | # Скрипт чуть позже | + | #!/usr/bin/perl |
+ | |||
+ | use 5.010; | ||
+ | use DBI; | ||
+ | |||
+ | ############################################################# | ||
+ | |||
+ | # Настройки базы данных | ||
+ | $MYSQL_host = 'localhost'; | ||
+ | $MYSQL_port = '3306'; | ||
+ | $MYSQL_user = 'mail'; | ||
+ | $MYSQL_pass = 'Passw0rd'; | ||
+ | $MYSQL_db = 'smf'; | ||
+ | |||
+ | # Параметры SMF - группа пользователей почты и префикс таблиц | ||
+ | $SMF_GID = '9'; | ||
+ | $SMF_prefix = 'smf_'; | ||
+ | |||
+ | # Обслуживаемый домен | ||
+ | $domain = "ubuntu.ru"; | ||
+ | |||
+ | # Файл псевдонимов | ||
+ | $postfix_file = "/etc/postfix/mailboxes/smf-aliases"; | ||
+ | |||
+ | ############################################################# | ||
+ | |||
+ | $dbh = DBI->connect("DBI:mysql:$MYSQL_db:$MYSQL_host:$MYSQL_port",$MYSQL_user,$MYSQL_pass) or die "Hey guys! We've got a big error here..."; | ||
+ | |||
+ | # Выполняем запрос | ||
+ | my $sth = $dbh->prepare("SELECT memberName, realName, emailAddress | ||
+ | FROM ${SMF_prefix}members | ||
+ | WHERE (ID_GROUP = $SMF_GID OR FIND_IN_SET($SMF_GID, additionalGroups))"); | ||
+ | $sth->execute() or die "Hey guys! We've got a big error here..."; | ||
+ | |||
+ | # Открываем файл псевдонимов для Postfix | ||
+ | open ALIASES, ">$postfix_file" or die "Can't open $postfix_file\n"; | ||
+ | |||
+ | # Анализируем ответ | ||
+ | foreach my $row ($sth->fetchrow_hashref()) { | ||
+ | my $user = $row->{realName}; | ||
+ | # Если имя пользователя содержит неразрешённые символы - пропускаем его | ||
+ | # Разрешены любые буквы, цифры и символы ".", "-" и "_" | ||
+ | next if $user =~ /[^\w.-_]/; | ||
+ | # Пишем псевдоним в файл | ||
+ | say ALIASES "$user\@$domain\t$row->{emailAddress}"; | ||
+ | } | ||
+ | |||
+ | # Закрываем файл псевдонимов и создаём хеш для postfix'а | ||
+ | close ALIASES; | ||
+ | `/usr/sbin/postmap hash:$postfix_file`; | ||
</code> | </code> | ||
- | Итого поставленная цель достигнута. Кроме того, можно вручную добавлять алиасы, чтобы не создавать лишние аккаунты в SMF. Для этого служит вторая карта - **local-aliases**, которая заполняется по необходимости вручную. | + | Добавляем скрипт в cron и радуемся жизни. Итого поставленная цель достигнута. Кроме того, можно вручную добавлять алиасы, чтобы не создавать лишние аккаунты в SMF. Для этого служит вторая карта - **local-aliases**, которая заполняется по необходимости вручную. |
+ | |||
+ | В качестве дополнения к этому: | ||
+ | |||
+ | * [[jabber|Свой Jabber сервер]] | ||
+ | |||
+ | |||
+ | <note important>В дальнейшем при необходимости эту схему можно расширить путём добавления реальных почтовых ящиков со всеми причиндалами в виде авторизации, IMAP и прочих прелестей. Сделать это просто и не потребуется изменения уже работающей системы, предложенной выше, только её надстройка.</note> |