Различия
Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
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> | ||