Вот уже несколько лет 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
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 (Деревянко Александр, Краснодар).
Комментариев нет:
Отправить комментарий