Замена qmail+courier на postfix+cyrus-imapd
Автор: Филиппов Алексей
Связь: fa13@bk.ru
Дата создания: 13 мая 2006
Постоянный адрес статьи: http://phas13.blogspot.com/2008/08/qmailcourier-postfixcyrus-imapd.htm
На obln установлено следующее ПО:
- qmail - MTA
- courier – IMAP сервер
- FreeRadius – Сервер RADIUS
Сервер крутится под Dibian.
Задача – заменить данный сервер.
Заменяющий сервер имеет установленный SLES9 SP2. Программное обеспечение, которое заменит работающее на старом сервере:
- postfix – MTA
- clamav – Антивирусная проверка почты
- FreeRadius – Сервер RADIUS
- cyrus-imapd – IMAP и POP сервер
Сервер IMAP в новом варианте не нужен, вроде бы, так как почтовые ящики пользователей на нем храниться не будут, но для совместимости со старым почтовым сервером, нужно настроить. Задача сервера принять почту из внешнего мира и перенаправить ее дальше – в центральный офис, в районные подразделения или в ХГЭС.
Ита-а-а-к...
Ну первым делом проставляем все необходимые пакеты. Пока только FreeRADIUS не ставим, так как это отдельная тема для разговора. На всякий случай ставим пакеты cyrus-imapd и cyrus-sasl – они нам понадобятся, если будет необходимо на этой почтовке хранить пользовательские ящики.
Логинимся под пользователем root и меняем пароль пользователю postfix
root> passwd postfix
Я временно поставил пароль mailsys.
Настраиваем пользователя postfix, по умолчанию под этим пользователем залогиниться невозможно...
root> cp -a /etc/skel/ /home/postfix
root> chown -R postfix:postfix /home/postfix
root> usermod -d /home/postfix postfix
root> usermod -s /bin/bash postfix
Дальше под пользователем root модифицируем файл /etc/postfix/main.cf, конечно предварительно сохранив оригинал файла под именем, в которое включаем текущую дату.
inet_interfaces = all
mailbox_size_limit = 0
message_size_limit = 1024000
mydestination = $myhostname, localhost.$mydomain
mydomain = mycorp.com.ua
myhostname = bluebird.mycorp.com.ua
virtual_mailbox_domains = alexsf.org
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_transport = cyrus
В принципе пока с файлом /etc/postfix/main.cf закончили.
После этого перезапускаем postfix
root> /etc/init.d/postfix restart
Теперь приступаем к классному файлу /etc/postfix/transport. Задача сего замечательного файла в том, чтоб сказать почтовке, как и куда переруливать приходящую почту. То есть, грубо говоря, тут прописываются пути доставки электронной почты, которые перекрывают аналогичные настройки файла /etc/postfix/main.cf
co.mycorp.com.ua smtp:antey.co.mycorp.com.ua
gs.mycorp.gov.ua smtp:192.65.13.62
nkres.mycorp.gov.ua smtp:192.65.12.232
brres.mycorp.gov.ua smtp:192.65.11.65
bzres.mycorp.gov.ua smtp:192.65.11.65
cpres.mycorp.gov.ua smtp:192.65.11.65
crres.mycorp.gov.ua smtp:192.65.11.65
gnres.mycorp.gov.ua smtp:192.65.11.65
gpres.mycorp.gov.ua smtp:192.65.11.65
gsres.mycorp.gov.ua smtp:192.65.11.65
ivres.mycorp.gov.ua smtp:192.65.11.65
klres.mycorp.gov.ua smtp:192.65.11.65
kvres.mycorp.gov.ua smtp:192.65.11.65
nsres.mycorp.gov.ua smtp:192.65.11.65
ntres.mycorp.gov.ua smtp:192.65.11.65
nvres.mycorp.gov.ua smtp:192.65.11.65
skres.mycorp.gov.ua smtp:192.65.11.65
vares.mycorp.gov.ua smtp:192.65.11.65
vlres.mycorp.gov.ua smtp:192.65.11.65
vpres.mycorp.gov.ua smtp:192.65.11.65
vrres.mycorp.gov.ua smtp:192.65.11.65
После этого пересоздаем файлик transport.db:
root> postmap /etc/postfix/transport
root> /etc/init.d/postfix reload
Вот. С этим замечательным файликом закончили... Дальше...
А вот теперь посерьезнее. Прикручиваем clamav...
Первым делом в каталоге /var/
root> mkdir /var/
root> chown vscan:vscan /var/
Настраиваем clamav. Все настройки clamav находятся в файле /etc/clamav.conf
ArchiveBlockMax
ArchiveMaxFileSize 1M
ArchiveMaxRecursion 5
ArchiveMaxFiles 1000
FixStaleSocket
Foreground
LocalSocket /var/lib/clamav/clamd-socket
LogFacility
LogFile /var/
LogFileUnlock
LogFileMaxSize 0
LogSyslog
LogVerbose
PidFile /var/lib/clamav/clamd.pid
ScanRAR
User vscan
Подробное описание указанных в /etc/clamav.conf параметров можно почитать в манах для clamav.conf (man clamav.conf).
После этого необходимо запустить демон clamd:
root> /etc/init.d/clamd start
Кроме того, нам необходимо, чтоб clamd автоматически стартовал при запуске системы:
root> ln -s /etc/init.d/clamd /etc/init.d/rc3.d/K08clamd
root> ln -s /etc/init.d/clamd /etc/init.d/rc3.d/S14clamd
root> ln -s /etc/init.d/clamd /etc/init.d/rc5.d/K08clamd
root> ln -s /etc/init.d/clamd /etc/init.d/rc5.d/S14clamd
Чтоб не делать это руками, можно использовать «Runlevel Editor» в yast. Указать там автостарт сервиса, да и всех делов...
Теперь настраиваем автоматическое обновление антивирусных баз clamav. За сие замечательное занятие отвечает демон freshclam. Все его настройки храняться в файле /etc/freshclam.conf:
Checks 2
DatabaseMirror database.clamav.net
DatabaseOwner vscan
HTTPProxyServer st.mycorp.gov.ua
HTTPProxyPort 3128
LogFacility
LogSyslog
NotifyClamd
PidFile /var/lib/clamav/freshclam.pid
UpdateLogFile /var/
Подробнее о параметрах файла /etc/freshclam.conf можно почитать в манах для freshclam.conf (man freshclam.conf).
Естественно, в настройках прокси необходимо указать корректные данные.
Кроме того, нам необходимо, чтоб freshclam автоматически стартовал при запуске системы:
root> ln -s /etc/init.d/freshclam /etc/init.d/rc3.d/K08freshclam
root> ln -s /etc/init.d/freshclam /etc/init.d/rc3.d/S14freshclam
root> ln -s /etc/init.d/freshclam /etc/init.d/rc5.d/K08freshclam
root> ln -s /etc/init.d/freshclam /etc/init.d/rc5.d/S14freshclam
Чтоб не делать это руками, можно использовать «Runlevel Editor» в yast. Указать там автостарт сервиса, да и всех делов...
Теперь нужно установить clamsmtp, приблуда необходима для связи postfix с clamav. В моем случае я выкачал http://memberwebs.com/nielsen/software/clamsmtp/clamsmtp-1.6.tar.gz. Архив распаковал во временную директорию /_tmp/clamsmtpd. Далее устанавливаем:
root> cd /_tmp/clamsmtpd/clamsmtp-1.6
root> ./configure
root> make
root> make check
root> make install
root> mkdir /usr/local/etc
root> cp doc/clamsmtpd.conf /usr/local/etc
root> cd /
root> rm -r /_tmp
Настраиваем этот самый clamsmtp. Его настройки хранятся в файле /usr/local/etc/clamsmtpd.conf. Оригинал сохраняем, исходную копию редактируем:
OutAddress: 10026
Listen: 0.0.0.0:10025
ClamAddress: /var/lib/clamav/clamd-socket
TempDirectory: /tmp
User: vscan
Теперь нужно, чтоб clamsmtpd стартовал при запуске системы...
Качаем http://memberwebs.com/nielsen/software/clamsmtp/contrib/clam_x_rc_script.tar.gz. Это есть скрипт для автостарта clamsmtpd, созданный специально для SuSE. Из архива файлик clamgate копируем в /etc/init.d. После этого редактируем его.
user=clamav меняем на user=vscan
Ставим # (то есть по виндузятному наречию рэмим) перед строчками:
su -m $user -c "$prefix/sbin/clamd"
rc_check
[ -f $piddir/clamd.pid ] && kill `cat $piddir/clamd.pid`
rc_check
checkproc -p $piddir/clamd.pid $prefix/sbin/clamd
rc_check
Смысл сего шага в том, чтоб отключить запуск демона clamd через сей замечательный скрипт. Ну ведь логично – зачем нам это делать здесь, если это уже сделано в другом месте???
Потом выполняем:
root> ln -s /var/lib/clamav /var/run/clamav
root> ln -s /usr/sbin/clamd /usr/local/sbin/clamd
Это делается для того, чтоб удовлетворить требования скрипта по расположению каталогов. Можно конечно руками его порихтовать, но в данном случае работы меньше, да и глюков тоже.
Теперь собственно ставим линки на автозагрузки:
root> ln -s /etc/init.d/clamgate /etc/init.d/rc3.d/K08clamgate
root> ln -s /etc/init.d/clamgate /etc/init.d/rc3.d/S14clamgate
root> ln -s /etc/init.d/clamgate /etc/init.d/rc5.d/K08clamgate
root> ln -s /etc/init.d/clamgate /etc/init.d/rc5.d/S14clamgate
Тут засада есть в том, что yast какого-то перца не дает сделать линки через Runlevel Editor, поэтому придется ручками :). Хотя попробуйте, может Вам даст...
Прикольно получается... Читаеш этот ман, и думаешь, всего и делов то... А как вспомнишь, сколько трахался... Уффф...
Но ведь это еще не все!!!
Донастраиваем postfix. Нам нужно, чтоб проходящую через себя почту он отправлял на clamsmtpd, а тот после проверки на вирусы возвращал ее обратно postfix-у... Опять беремся за файлик /etc/postfix/main.cf. Дописываем туда два параметра:
# Первая строка говорит postfix о том, что необходимо пересылать всю почту через
#сервис #(фильтр) 'scan' на 10025-ый порт, который, как раз, открыт clamsmtpd
content_filter = scan:127.0.0.1:10025
#Вторая строчка говорит о том, чтобы postfix не делал никаких манипуляций с
#адресами до того, как они дойдут до content_filter. Так что получается, что фильтр
#работает с реальными почтовыми адресами, а не с результатами перевода в
#виртуальные псевдонимы, маскарадингом и т.п.
receive_override_options = no_address_mappings
Теперь беремся за файлик /etc/postfix/master.cf. В данном файле описывается, как должны работать демоны postfix (ведь ни для кого не секрет, что postfix – это набор демонов, которые вместе и называются postfix). Дописываем в этот файл следующее:
# 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:10026 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
Естественно, после этого необходимо перезапустить postfix. Как это сделать вы уже должны сами сообразить. Если нет, то зря я столько времени распинался ;)
Так, поехали дальше. На obln были настроены какие-то ящики почтовые. Нужно быть готовым к тому, что на нашем сервере тоже понадобится поднимать IMAP4 или POP3 для фиг знает кого. Для этого нам понадобится cyrus-imapd.
Далее будем предполагать, что наша почтовая система должна будет обслуживать домен alexsf.org, помимо локального почтового домена.
Конфигурируем postfix. В файл /etc/main.cf добавляем:
virtual_mailbox_domains = alexsf.org
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_transport = cyrus
Конфигурируем cyrus-imapd. Главный конфиг imap сервера - /etc/imapd.conf. Кроме параметров по умолчанию туда необходимо дописать следующие параметры:
admins: cyrus
altnamespace: yes
autocreatequota: 10000
defaultdomain: mycorp.com.ua
quotawarn: 95
sasl_pwcheck_method: auxprop
sasl_sasldb_path: /etc/sasldb2
timeout: 720
virtdomains: on
В данном случае в параметре admins необходимо указать список учетных записей, которые будут иметь доступ к администрированию почтовых доменов. Если необходимо, чтоб какая-то учетная запись администрировала конкретный почтовый домен – читайте маны по imapd.conf ;)
ВНИМАНИЕ!!! Пользователи, указанные в параметре admins никогда не должны иметь почтовых ящиков и получать почту!!! Можно сложить почтовку!!!
Теперь необходимо пользователю cyrus обеспечить доступ к базе sasl на запись и чтение, так как предполагается, что cyrus будет единственным сервисом, который будет пользоваться этой базой. От пользователя root выполняем:
root> chown cyrus:mail /etc/sasldb2
root> chmod 644 /etc/sasldb2
Тут есть один нюанс. Если в базе нет ни одного пароля, то она не существует. То есть такой файл отсутствует. В таком случае этот шаг нужно будет выполнить после задания пароля для пользователя curys с использованием утилиты saslpasswd2.
Теперь необходимо запустить службы saslauthd и cyrus:
root> /etc/init.d/saslauthd start
root> /etc/init.d/cyrus start
Кроме того, нам необходимо, чтоб saslauthd и cyrus автоматически стартовали при запуске системы:
root> ln -s /etc/init.d/saslauthd /etc/init.d/rc3.d/K15saslauthd
root> ln -s /etc/init.d/saslauthd /etc/init.d/rc3.d/S07saslauthd
root> ln -s /etc/init.d/saslauthd /etc/init.d/rc5.d/K15saslauthd
root> ln -s /etc/init.d/saslauthd /etc/init.d/rc5.d/S07saslauthd
root> ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/K14cyrus
root> ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/S08cyrus
root> ln -s /etc/init.d/cyrus /etc/init.d/rc5.d/K14cyrus
root> ln -s /etc/init.d/cyrus /etc/init.d/rc5.d/S08cyrus
Чтоб не делать это руками, можно использовать «Runlevel Editor» в yast. Указать там автостарт сервиса, да и всех делов...
Ну и меняем пароль пользователю cyrus. Я пока ставлю пароль cyrus, при вводе почтовки в промышленную эксплуатацию необходимо сделать нормальный сложный пароль:
root> passwd cyrus
После этого необходимо внести пользователя cyrus в базу sasl. Делаем это уже под пользователем cyrus (первая команда выполняется от root – это вход в систему под пользователем cyrus):
root> /usr/sbin/saslpasswd2 -c cyrus
root> su cyrus
Ну и теперь создадим почтовый ящик, собственно говоря, ради чего все сие действо и делалось. Допустим, ящик у нас будет zzz@alexsf.org
Сначала под root редактируем /etc/postfix/virtual, добавляем туда строку:
После чего:
root> postmap /etc/postfix/virtual
root> /etc/init.d/postfix reload
После этого логинимся под пользователем cyrus, и делаем следующее:
cyrus> /usr/sbin/saslpasswd2 -c zzz -u alexsf.org
cyrus> cyradm --user cyrus localhost
IMAP password:
localhost> cm user.zzz@alexsf.org
localhost> cm user.zzz.Drafts@alexsf.org
localhost> cm user.zzz.Sent@alexsf.org
localhost> cm user.zzz.Trash@alexsf.org
localhost> sam user.zzz@alexsf.org zzz@alexsf.org write
localhost> sq user.zzz@alexsf.org 10000
Все, теперь у нас есть почтовый ящик zzz@alexsf.org и доступ к нему имеет пользователь zzz@alexsf.org. Не удивляйтесь такому странному имени пользователя – в винде все так же, только скрыто... А так как здесь все руками, то от полных имен пользователей с указаниями домена никуда не денешься, по крайней мере на данном этапе. В ящике есть набор папок по умолчанию, пользователь может создавать свои, какие ему больше понравятся. На ящике стоит квота в 10 Мб. Обратите внимание – в файле /etc/postfix/virtual указывается конкретный ящик. Сделано это для защиты от спама и применимо для маленькой почтовки с небольшим количеством почтовых ящиков. Если это будет громадина вроде облэнерго, то лучше сделать, чтоб перенаправление шло на домен, а не на ящик.
Но и это еще не все. Настраиваем логирование IMAP сервера. Под пользователем root редактируем файл /etc/syslog.conf, добавляем в него строку:
daemon.* /var/
После этого под пользователем root:
root> mkdir /var/
root> /etc/init.d/syslog restart
В результате все сообщения IMAP сервера будут записываться в файл /var/
Теперь настраиваем ротацию журнальных файлов. В каталоге /etc/logrotate.d создаем файлик imap с таким содержимым:
/etc/logrotate.d/imap
/var/
compress
copytruncate
daily
missingok
notifempty
rotate 100
}
Комментариев нет:
Отправить комментарий