суббота, 20 сентября 2008 г.

Postfix+VirtualMailBox+ ClamSmtp на Ubuntu

источник

Вот уже несколько лет Ubuntu Linux занимает ведущие позиции на пользовательских десктопах и пользуется заслуженной любовью своих почитателей. Все под рукой, все удобно…нет проблем с мультимедиа, с дополнительным оборудованием тоже. А как в плане его юзабильности как серверной платформы? каков он, как сервер? Так ли все хорошо и удобно там, как на десктопе?

Этой статейкой я хочу начать цикл описательных работ по использованию Ubuntu Linux (далее просто Ubuntu) в качестве сервера и, как мне кажется, многим будет интересно это прочитать и реально использовать.
В этой статье я буду описывать применение Ubuntu 8.04 Server i386 Hardy Heron в качестве платформы для развертывания почтовой системы Postfix+VirtualMailBox+ClamSmtp.

В дальнейшем (в рамках цикла) опишу как присоединить к этому всему spamassassin. После чего перейдем к описанию исчерпывающего руководства Postfix Complete Virtual Mail System, где уже описана почтовая система уровня серьезного провайдера без каких либо ограничений.

Все нюансы теории можно прочесть на официальном сайте Postfix, мы же перейдем прямо к делу-построению рабочей системы, хотя кое-что я буду стараться объяснять более подробно.Материал рассчитан на начинающих системных инженеров, которым нужно быстро поднять почтовую систему, приемлемую для обслуживания предприятия небольших размеров или малого офиса.

После установки собственно системы Ubuntu 8.04 Server i386 Hardy Heron, вы должны убедиться, что на DNS сервере имеется МХ запись о вашем почтовом сервере. Проверить это несложно, набрав команду в консоли dig mx yourdomain.com и если все в порядке – устанавливаем сам Postfix командой

sudo aptitude install postfix

Далее я буду опускать приставку sudo, полагая что вам и так очевидна необходимость выполнения подобных действий в режиме суперпользователя.

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

aptitude install mailx

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

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

home_mailbox = Maildir/

В этом же удалите строку

mailbox_command = procmail -a «$EXTENSION»

/etc/init.d/postfix restart перезагрузите Postfix.

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

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

/home/vmail/-domain1.com/info/
/home/vmail/-domain1.com/sales/
/home/vmail/-domain2.com/info/
/home/vmail/-domain2.com/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.com
domain2.com

это наши почтовые домены, используемые для примера, я говорил о них раньше.

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

vi /etc/postfix/vmaps

info@domain1.com domain1.com/info/
sales@domain1.com domain1.com/sales/
info@domain2.com domain2.com/info/
sales@domain2.com domain2.com/sales/

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

postmap /etc/postfix/vmaps

/etc/init.d/postfix restart

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

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

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
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 10.0.16.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

теперь самое главное :) проверка виртуальных mailbox
пошлите письмо info@domain1.com из консоли

mail info@domain1.com и проверьте его почтовый ящик

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

я там нашел свое письмо…а вы? :)

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

Мы не будем использовать ни mysql ни openldap. Вместо этого мы будем использовать нечто более простое 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
}

тут все в общем ясно. Кто теряется немного – читаем описание конфига dovecot на сайте его разработчиков.

Теперь важно усвоить, что больше НЕТ никаких команд типа useradd и passwd для добавления пользователей в нашу почтовую систему. Их мы будем добавлять, используя 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.com password(это сам пароль!!!)

правда здорово?? :-)
укрепим немного файл пароля:

chmod 640 /etc/dovecot/passwd

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

/etc/init.d/dovecot restart

Тестируем Dovecot:

telnet mail.domain1.com 110
Trying 69.60.109.217..
Connected to mail.domain1.com.
Escape character is ‘^]’.
+OK dovecot ready.
user info@domain1.com
pass password
quit
Те, окончательно должно быть так:
Trying 69.60.109.217…
Connected to mail.domain1.com.
Escape character is ‘^]’.
+OK dovecot ready.
user info@domain1.com
+OK
pass password
+OK Logged in.
quit
+OK Logging out.

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

Теперь устанавливаем ClamSMTP вирусный фильтр smtp.
Пару слов о нем – это кроме собственно smtp фильтра может работать в режиме smtp прокси, причем прозрачно и фильтровать весь smtp трафик локальной сети.Работает на порту 10026.
установим его:

aptitude install clamav-daemon clamav

внесем изменения в main.cf

content_filter = scan:127.0.0.1:10026
receive_override_options = no_address_mappings

внесем изменения в master.cf (НЕ путайте с main.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

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

sudo adduser clamsmtp clamav

рестартимся:

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

Все! Проверяем (лучше всего файлом с http://eicar.org/download/eicar_com.zip
В /var/log/mail.log должно быть (после отправки сообщения с вирусом конечно!) нечто следующее:

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

все…и не пугайтесь этих скриптов и команд. Просто копируйте их и вставляйте себе в файлы и все получится. Этот код отработан и работоспособен, я проверил все лично!
Задавайте вопросы на форуме и ждите продолжения, если стало интересно. Удачи вам всем! DIO (Деревянко Александр, Краснодар).


Комментариев нет:

Неактивный атрибут "скрытый" или как снять атрибут скрытый после вируса

Некоторые пользователи компьютеров часто сталкиваются с проблемой, когда папки и файлы вдруг становятся скрытыми. Или, проще говоря, исчез...