Postfix + VirtualMailBox + ClamSmtp

Автор xdriver (C) xmaksim(@)mail(.)ru
Применение Ubuntu 8.04 в качестве платформы для развертывания почтовой системы.

После установки системы Ubuntu 8.04 необходимо убедиться, что на DNS сервере имеется МХ запись.

dig mx domain1.net

Установка PostFix

aptitude install postfix

Установите mailx – это позволит выполнять в консоли утилиту mail

aptitude install mailx

Установим поддержку в Postfix Maildir Mailboxes (формат хранения почтовых сообщений, который не требует блокировки файла для поддержания целостности почтового сообщения, потому что сообщение хранится в раздельных файлах с уникальными именами. Собственно Maildir это директория с тремя поддиректориями с именами tmp new и cur.

Отредактируем для этого main.cf и добавим в него строки:

home_mailbox = Maildir/

mailbox_command = procmail -a «$EXTENSION»

Перезагрузите Postfix.

/etc/init.d/postfix restart

Добавим поддержку виртуальных почтовых ящиков

Смысл состоит в том, чтобы Postfix использовал учетные записи не системные, а виртуальные, известные ему одному. Это более оправданно из соображений безопасности. Предполагается, что у вас имеется два (для примера) почтовых домена domain1.net и domain2.net тогда все почта будет располагаться как:

/home/vmail/-domain1.net/info/
/home/vmail/-domain1.net/sales/

/home/vmail/-domain2.net/info/
/home/vmail/-domain2.net/sales/

Далее идут каталоги, оговариваемые выше, т.е. new cur tmp.

Продолжаем править файл main.cf

myhostname = localhost

Все виртуальные почтовые ящики должны иметь владельца vmail, входящего в группу vmail c uid 5000

groupadd -g 5000 vmail
useradd -m -u 5000 -g 5000 -s /bin/bash vmail

Добавим в main.cf поддержку virtual_mail_box:

virtual_mailbox_domains = /etc/postfix/vhosts
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmaps
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

Создадим файл и добавим в него следующее:

vi /etc/postfix/vhosts

добавить:

domain1.net
domain2.net

Это и есть наши создаваемые почтовые домены.

Создадим файл /etc/postfix/vmaps в него добавим в двух столбцах виртуальные почтовые адреса и место расположения (mailbox) этих адресов в системе:

vi /etc/postfix/vmaps

info@domain1.net domain1.net/info/
sales@domain1.net domain1.net/sales/
info@domain2.net domain2.net/info/
sales@domain2.net domain2.net/sales/

Конвертируем vmaps в хэш файл

postmap /etc/postfix/vmaps

Перезагрузим Postfix

/etc/init.d/postfix restart

Пример реально работающего конфига:

smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no
myhostname = localhost
home_mailbox = Maildir/
virtual_mailbox_domains = /etc/postfix/vhosts
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmaps
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mynetworks = 127.0.0.0/8 192.168.10.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Проверка виртуальных mailbox

Пошлите письмо info@domain1.net из консоли:

mail info@domain1.net

Проверьте этот же почтовый ящик:

cd /home/vmail/domain1/info/new
ls

Там должно находиться тестовое письмо

Следующий шаг – создание не системных аккаунтов.

Будем использовать plain text file и в паре с Dovecot, который по заверениям создателей очень легок, гибок и безопасен.

Установим его:

aptitude install dovecot-common dovecot-imapd dovecot-pop3d

Внесем изменения в его конфиг (предварительно сохранив оригинал):

base_dir = /var/run/dovecot/
protocols = imap pop3
disable_plaintext_auth = no
shutdown_clients = yes
log_path = /var/log/dovecot
info_log_path = /var/log/dovecot.info
log_timestamp = "%Y-%m-%d %H:%M:%S "
ssl_disable = yes
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_greeting = Dovecot ready.
mail_location = maildir:/home/vmail/%d/%n
mmap_disable = no
valid_chroot_dirs = /var/spool/vmail
protocol imap {
login_executable = /usr/lib/dovecot/imap-login
mail_executable = /usr/lib/dovecot/imap
}
protocol pop3 {
login_executable = /usr/lib/dovecot/pop3-login
mail_executable = /usr/lib/dovecot/pop3
pop3_uidl_format = %08Xu%08Xv
}
auth_executable = /usr/lib/dovecot/dovecot-auth
auth_verbose = yes
auth default {
mechanisms = plain digest-md5
passdb passwd-file {
args = /etc/dovecot/passwd
}
userdb passwd-file {
args = /etc/dovecot/users
}
user = root
}

Теперь для добавления пользователей в нашу почтовую систему будем использовать bash скрипт.

Создайте файл vi /usr/sbin/adddovecotuser затем в него добавьте:

echo "$1" > /tmp/user
user=`cat /tmp/user | cut -f1 -d "@"`
domain=`cat /tmp/user | cut -f2 -d "@"`
echo "$user@$domain::5000:5000::/home/vmail/$domain/:/bin/false::" >> /etc/dovecot/users
/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user 5000:5000
echo $1 $domain/$user/ >> /etc/postfix/vmaps
postmap /etc/postfix/vmaps
postfix reload

Сделайте его исполняемым:

chmod +x /usr/sbin/adddovecotuser

установите утилиту whois – она нужна для другой утилиты mkpasswd:

aptitude install whois

Создайте файл
vi /usr/sbin/mkdovecotpasswd
и добавьте в него:

mkpasswd --hash=md5 $2 > /tmp/hash
echo "$1:`cat /tmp/hash`" >> /etc/dovecot/passwd

Сделайте его исполняемым:

chmod +x /usr/sbin/mkdovecotpasswd

Теперь пользователей можно добавлять скриптом /usr/sbin/adddovecotuser а пароль ему задавать скриптом /usr/sbin/mkdovecotpasswd

Пример:

mkdovecotpasswd info@domain1.net password (пароль)

Защитим файл пароля:

chmod 640 /etc/dovecot/passwd

Перезагрузите dovecot:

/etc/init.d/dovecot restart

Тестируем Dovecot:

telnet mail.domain1.net 110

Trying 192.168.10.5...
Connected to mail.domain1.net.
Escape character is '^]'.
+OK dovecot ready.
user info@domain1.net
+OK
pass password
+OK Logged in.
quit
+OK Logging out.

Для imap аналогично, только порт другой для входа.

Устанавливаем ClamSMTP вирусный фильтр smtp.

Кроме собственно smtp фильтра ClamAV может работать в режиме smtp прокси, причем прозрачно и фильтровать весь smtp трафик локальной сети. Работает на порту 10026.

установим ClamAV:

aptitude install clamav-daemon clamav

Внесем изменения в PostFix в файл main.cf

content_filter = scan:127.0.0.1:10026
receive_override_options = no_address_mappings

Внесем изменения в master.cf

# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Теперь добавим служебных пользователей:

adduser clamsmtp clamav

Перестартуем наши почтовые сервисы:

/etc/init.d/postfix restart
/etc/init.d/clamsmtp restart
/etc/init.d/clamav-daemon restart

Проверяем работу антивируса файлом с http://eicar.org/download/eicar_com.zip

В /var/log/mail.log должно быть (в случае отправки сообщения с вирусом) следующее:

localhost clamsmtpd: 100004: from=info@domain1.net, to=info@domain1.net, status=VIRUS:Eicar-
Test-Signature

На этом настройка почтовой системы закончена.

_____________________________________

Копирование материала разрешено только при наличии ссылки на источник:
неофициальный проект GNU/Linux ХМАО-Югра www.oslinux.ru

6
в среднем: 6 (10 votes)
Гость
Мне помогло
8

Хороший конфиг. Мне помог поднять Mail-сервер на Убунте 10.04
Почему не "отличный" - ща напишу.
Описание позволяет поднять postfix и dovecot, запустить размещение входящей почты по "ящикам" виртуальных пользователей и получение почты с помощью mail-клиента.
Я не стал прикручивать ClamAV - в моем случае это лишнее...
Однако 2 момента, о которых хотелось бы написать:
1) Данные настройки не учитывают того момента, что пользователь может находиться вне локальной сети когда отправляет почту по SMTP, что бывает часто. В моем случае, к примеру, так и есть. При этом, сервер в процессе отправки сообщения в Mail-клиенте выдает следующее:
5.7.1 Relay access denied
Все дело в отсутствии настроек, позволяющих удаленому пользователю авторизоваться, и наличии настроек, запрещающих отправку писем через Postfix из других сетей.
Я не силен в программировании, потому очень прошу автора подумать над доработкой столь удачной системы авторизации. Повторюсь. Конфиг очень понравился.
Особенно скрипты... О них далее...
2) скрипты adddovecotuser и mkdovecotpasswd можно объединить в один скрипт.
Что я и сделал. В моем случае этот скрипт зовется /usr/sbin/addpostuser и выглядит так:

echo "$1" > /tmp/user
user=`cat /tmp/user | cut -f1 -d "@"`
domain=`cat /tmp/user | cut -f2 -d "@"`
echo "$user@$domain::5000:5000::/home/vmail/$domain/:/bin/false::" >> /etc/dovecot/users
/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user 5000:5000
echo $1 $domain/$user/ >> /etc/postfix/vmaps
postmap /etc/postfix/vmaps
postfix reload
mkpasswd --hash=md5 $2 > /tmp/hash
echo "$1:`cat /tmp/hash`" >> /etc/dovecot/passwd

затем

chmod +x /usr/sbin/addpostuser

Весь смысл в том чтобы создавать одного пользователя запуском одной этой команды а не двух.
Это упрощает и ускоряет процесс забивания виртуальной базы пользователей.
Еще есть мысль в этом же скрипте реализовать механизм отсылки на вновь созданный ящик сообщения с приветствием и/или "куда обращаться если вдруг что-то нужно".
Мои скудные познания в синтаксисе и наборе Linux пока сильно мешают.
Спасибо.