Среда, 09 Май 2012 19:54

Установка и настройка сервера почты, фтп и жаббера, а также почтового шлюза. Этап 2.

Автор
Оцените материал
(7 голосов)

 Этап 2. Установка и настройка Zimbra и почтового шлюза.

Непосредственно, перед самой установкой, нам нужно убедиться, что для зимбры есть MX-запись на местном DNS-сервере. Как я уже сказал вначале, зимбра у меня находится в местной локальной сети, в которой присутствуют виндовые DNS-серверы. На них я и создал узел superserv.mydomain.domain и MX-запись для этого узла. На самом же нашем сервере нужно проверить, чтобы в файле /etc/sysconfig/network была запись: 

HOSTNAME=superserv.mydomain.domain

 А в файле /etc/hosts были записи вот такие: 

127.0.0.1 localhost
192.168.199.101 superserv.mydomain.domain superserv 

А в файле /etc/resolv.conf были записи: 

search mydomain.domain
nameserver 192.168.199.202
nameserver 192.168.199.199 

где 192.168.199.202 и 192.168.199.199 — ДНС-серверы, на которых и созданы вышеописанные записи. 

Если всё в порядке, то копируем дистрибутив зимбры с официального сайта на наш сервер. В моём случае, это была версия zcs-7.1.2_GA_3268.F13_64. Распаковываем архив в удобное место, заходим в распакованный каталог и вводим команду: 

./install.sh 

Запустится установщик. На первый вопрос, принимаем ли мы условия лицензии, ответим положительно: 

Do you agree with the terms of the software license agreement? [N] y 

Далее, установочный скрипт спросит, какие компоненты устанавливать. Я выбрал все, кроме zimbra-proxy: 

Select the packages to install

Install zimbra-ldap [Y] y
Install zimbra-logger [Y] y
Install zimbra-mta [Y] y
Install zimbra-snmp [Y] y
Install zimbra-store [Y] y
Install zimbra-apache [Y] y
Install zimbra-spell [Y] y
Install zimbra-memcached [N] y
Install zimbra-proxy [N] n 

Далее, скрипт просит подтверждения на установку выбранных компонентов: 

The system will be modified. Continue? [N] y 

После чего, начнут устанавливаться зимбровские пакеты. Ждём окончания этого процесса. В процессе установки скрипт может пожаловаться на отсутствие MX записи: 

DNS ERROR resolving MX for superserv.mydomain.domain
It is suggested that the domain name have an MX record configured in DNS
Change domain name? [Yes] 

Поскольку MX запись у меня создана для mydomain.domain и указывает на superserv.mydomain.domain – соглашаемся на изменение домена и указываем правильное доменное имя 

Create domain: [superserv.mydomain.domain] mydomain.domain 

Дальше скрипт выведет длинный список меню: 

Main menu

   1) Common Configuration:                                                  
   2) zimbra-ldap:                             Enabled                       
   3) zimbra-store:                            Enabled                       
        +Create Admin User:                    yes                           
        +Admin user to create:                 admin@mydomain.domain           
******* +Admin Password                        UNSET                         
        +Anti-virus quarantine user:           virus-quarantine.mttmfn6gpb@mydomain.domain
        +Enable automated spam training:       yes                           
        +Spam training user:                   spam.8tky4grlm0@mydomain.domain 
        +Non-spam(Ham) training user:          ham.sgd5cmme6x@mydomain.domain  
        +SMTP host:                            superserv.mydomain.domain          
        +Web server HTTP port:                 80                            
        +Web server HTTPS port:                443                           
        +Web server mode:                      http                          
        +IMAP server port:                     143                           
        +IMAP server SSL port:                 993                           
        +POP server port:                      110                           
        +POP server SSL port:                  995                           
        +Use spell check server:               yes                           
        +Spell server URL:                     http://superserv.mydomain.domain:7780/aspell.php
        +Configure for use with mail proxy:    FALSE                         
        +Configure for use with web proxy:     FALSE                         
        +Enable version update checks:         TRUE                          
        +Enable version update notifications:  TRUE                          
        +Version update notification email:    admin@mydomain.domain           
        +Version update source email:          admin@mydomain.domain           

   4) zimbra-mta:                              Enabled                       
   5) zimbra-snmp:                             Enabled                       
   6) zimbra-logger:                           Enabled                       
   7) zimbra-spell:                            Enabled                       
   8) Default Class of Service Configuration:                                
   r) Start servers after configuration        yes                           
   s) Save config to file                                                    
   x) Expand menu                                                            
   q) Quit 

Здесь, в первую очередь, надо изменить пароль админской учётки. Выбираем цифру 3, затем 4 и вводим админский пароль. Затем, в целях безопасности, я выбрал цифру 12 и указал режим веб-сервера: redirect. Это означает, что если пользователь зашёл через http://, то он будет переключён на https:// до конца сессии. Затем, выбираем r, а после неё — a. И, кстати сказать, нужно запомнить порты, по которым мы будем подключаться к зимбре. Их потом надо будет открыть на iptables. 

На последующие вопросы установочного скрипта отвечаем положительно: 

Save configuration data to a file? [Yes] y
Save config in file: [/opt/zimbra/config.11806] y
The system will be modified - continue? [No] y 

И ждём, пока скрипт закончит конфигурировать зимбру. В конце скрипт спросит, желаете ли вы уведомить компанию Zimbra о инсталяции их продукта на вашем сервере. Я отказался: 

Notify Zimbra of your installation? [Yes] n 

После этого, скрипт стартует зимбровские сервисы, устанавливает зимлеты и выполняет прочие действия. По окончании всего, мы получим уведомление: 

Configuration complete - press return to exit 

После установки, откроем нужные порты на iptables, чтобы к нашей зимбре можно было подключаться. Найдём файл /etc/sysconfig/iptables, найдём в нём строчку: 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 

и над ней, либо под ней введём вот такие строчки: 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7071 -j ACCEPT 

Затем, перезапустим фаервол командой: 

service iptables restart 

Чтобы зайти в административную консоль Zimbra, нужно в браузере ввести адрес: 

https://192.168.199.101:7071/zimbraAdmin 

Остальные настройки Зимбры пока не будем рассматривать. Отложим её до тех пор, пока не настроим второй сервер. Вот тогда уже будем настраивать почтовую систему целиком. 

Приступим к настройке второго сервера — почтового шлюза. 

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

Intel Pentium 4 2000Mhz
Asus P4T-E
RAM 256Mb RIMM
GeForce 4 MX440 (Хотя, видеокарта тут не играет никакой роли)
+ установил новый жёсткий диск, новый блок питания и две сетевые карты. 

При установке Fedora 13 i386 на этот комп у меня даже не запустилась привычная anaconda (графический интерфейс установки Fedora). Поэтому, вся установка была выполнена в консольном режиме. При этом, выбор устанавливаемых пакетов предоставлен не был. Из-за этого, установленная система состояла из самого-самого минимума. Тем не менее, обе сетевые карты благополучно распознались и заработали. 

Итак, давайте сразу определимся, что сетевуха eth0 подключена к интернету и имеет белый адрес. На этот белый адрес у нас уже зарегистрирован домен второго или третьего уровня и к нему имеются MX- и PTR-записи. И пусть он называется test.mydomain.ru. Ну, а сетевая карта eth1 подключена к локальной сети и пусть имеет адрес 192.168.199.150. 

На этом сервере, также, как и на первом, стоит выполнить те же самые операции, касающиеся обновлений, Selinux, ssh, apcupsd и ntp. Нужно это всё настроить также, как и на первом сервере. 

После чего, установим postfix и webmin заодним: 

yum -y install postfix
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.560-1.noarch.rpm
rpm -i webmin-1.560-1.noarch.rpm 

и откроем порты 25 и 10000, добавив в конфиг файервола строчки: 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT 

Не забываем перезапустить iptables. После чего, найдём файл /etc/postfix/main.cf и приведём его вот к такому виду: 

queue_directory = /var/spool/postfix 
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix

mail_owner = postfix

# имя хоста почтового шлюза. Это имя будет использоваться в течении сессии ehlo/helo smtp:
myhostname = test.mydomain.ru

# наш домен
mydomain = mydomain.ru

# подставляется к адресу отправителя или получателя если он указан не полностью.
myorigin = $myhostname

# сетевые интерфейсы, с которыми может работать postfix
inet_interfaces = all

# протоколы IPv4 и, если возможно, IPv6
inet_protocols = all

# Задаём имена доменов, для которых мы будем принимать почту
mydestination = $myhostname, localhost

# Так как на шлюзе требуется только пересылка почты, отключаем локальную доставку сообщений
local_recipient_maps =

# когда получатель почты неизвестен серверу, то шлём ответ "отклонить"
unknown_local_recipient_reject_code = 550

# сети, которым разрешено выполнять пересылку через данный сервер. Обычно сюда включают только внутреннюю локальную сеть, или вообще только IP внутреннего почтового сервера.
mynetworks = 192.168.199.101, 127.0.0.1

# в данной директиве определяем домены, для которых необходимо принимать почту.
relay_domains = $mydestination

# в этом файле мы укажем, на какой хост доставлять сообщения для домена test.mydomain.ru
transport_maps = hash:/etc/postfix/transport

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.7.4/samples
readme_directory = /usr/share/doc/postfix-2.7.4/README_FILES

# В этом файле мы укажем, что нужно префикс @mydomain.domain менять на @test.mydomain.ru
smtp_generic_maps = hash:/etc/postfix/generic 

Сохраняем этот конфиг. Затем, нам надо внести правки ещё в пару файлов. Найдём файл /etc/postfix/generic и в самый его конец добавим вот такую строчку: 

@mydomain.domain @test.mydomain.ru 

Сохраним и выполним вот такую команду: 

postmap hash:/etc/postfix/generic 

Нечто похожее проделаем с файлом /etc/postfix/transport. В его конец мы добавим строчку вот такую: 

test.mydomain.ru smtp:[192.168.199.101] 

Сохраним и выполним команду: 

postmap hash:/etc/postfix/transport 

Кое-что ещё: перед запуском postfix, сначала остановим демон sendmail: 

service sendmail stop 

Также, введём команду ntsysv и уберём sendmail из автозагрузки, а postfix же, наоборот, поставим в автозагрузку. Вот после этого, постфикс можно запустить: 

service postfix start 

Теперь, что касается настроек зимбры. В настройках первого сервера делаем также, как на этом скриншоте:  

  

Только в список доверенных сетей агента передачи данных добавим ещё и наш почтовый шлюз. Вот такой этот список должен быть: 

127.0.0.1/8 192.168.199.101/32 192.168.199.150/32 

Кое-что нам нужно будет добавить в конфиг зимбровского postfix. Этот конфиг находится вот тут: /opt/zimbra/postfix-2.7.4.2z/conf/main.cf. В его конец мы добавим строчку: 

smtp_generic_maps = hash:/opt/zimbra/postfix-2.7.4.2z/conf/generic 

Это нужно для преобразования адресов @test.mydomain.ru в @mydomain.domain. Ну а в файл /opt/zimbra/postfix-2.7.4.2z/conf/generic пропишем: 

@test.mydomain.ru @mydomain.domain 

Затем, выполним команду: 

/opt/zimbra/postfix-2.7.4.2z/sbin/postmap hash:/opt/zimbra/postfix-2.7.4.2z/conf/generic 

После чего, перезапустим зимбру командой: 

service zimbra restart 

Надо сказать, что, после перезапуска зимбры, не все её процессы потом запускаются снова. Поэтому, для подстраховки, я всегда проверяю их вот таким методом: 

su zimbra
zmcontrol status 

И если в ответ вижу что-то типа: 

antispam Running
antivirus Stopped
zmclamdctl is not running
ldap Running
logger Running
mailbox Running
memcached Running
mta Running
snmp Running
spell Running
stats Running
zmconfigd Running 

то выполняю команду: 

zmcontrol start 

Как правило, после этого все незапустившиеся процессы стартуют, и можно продолжать работать. Только не забываем, после этого, выходить из сеанса пользователя zimbra командой exit. 

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

Первым делом, на втором сервере нам надо включить форвардинг и некоторые модули для iptables. Находим файл /etc/sysctrl.conf и поправим там одну строчку: 

net.ipv4.ip_forward = 1 

Также, сделаем вот такую команду: 

echo "1" > /proc/sys/net/ipv4/ip_forward 

Таким образом мы включили forwarding пакетов в iptables. Теперь, найдём файл /etc/sysconfig/iptables-config. В нём тоже приведём соответствующую строчку вот в такой вид: 

IPTABLES_MODULES="nf_conntrack_ftp ip_nat_ftp" 

Эти модули нам будут нужны для корректной работы с ФТП, который мы ещё не настроили пока. Сейчас же можно приступать к настройке Iptables. Приведём файл /etc/sysconfig/iptables вот к такому виду: 

*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# это правило позволяет первому серверу выходить наружу по определённым портам.
-A POSTROUTING -p tcp -m tcp -m multiport -s 192.168.199.101 -o eth0 -j SNAT --to-source <ваш.белый.ip.адрес> --dports 80,8080,21
# а правила ниже позволяют извне заходить на наш первый сервер. (тоже, лишь по определённым портам)
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 21 -j DNAT --to-destination 192.168.199.101:21
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 49152:65534 -j DNAT --to-destination 192.168.199.101:49152-65534
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 80 -j DNAT --to-destination 192.168.199.101:80
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 443 -j DNAT --to-destination 192.168.199.101:443
COMMIT
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A FORWARD -i lo -j ACCEPT
# правило ниже позволяет пропускать форвардируемый трафик из локалки во внеху.
-A FORWARD -i eth1 -j ACCEPT
# два правила ниже позволяют пропускать форвардируемый извне трафик через наш фаервол (по определённым портам)
-A FORWARD -p tcp -m tcp -m multiport -m state -i eth0 --state NEW,ESTABLISHED,RELATED -j ACCEPT --dports 21,80,8080,443
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
# не забываем открыть 25 порт, чтоб извне почта доходила до нашего почтового шлюза.
-A INPUT -p tcp -m tcp -i eth0 --dport 25 -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -m state -s 127.0.0.1 --state RELATED -j ACCEPT
-A INPUT -m state -s 127.0.0.1 --state RELATED -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT 

Сохраним и перезапустим iptables. После чего, у нас должен появиться проброс портов извне. Иными словами, если бы зайдём по адресу ftp://<ваш.белый.ip.адрес>, то попадём на наш фтп-сервис, который потом настроим на первом сервере. Аналогично и если мы зайдём по адресу http://<ваш.белый.ip.адрес> — мы попадём в вэб-интерфейс зимбры. 

Последнее, что нам нужно от второго сервера — это глобальный почтовый фильтр. И будем мы это делать с помощью недавно установленного вебмина. Но перед этим, на всякий случай, проверьте, установлен ли у вас пакет procmail. Если не установлен, то установим командой: 

yum -y install procmail 

Теперь, заходим в вэбмин. Слева в меню выбираем servers, а в нём -- Procmail Mail Filter. И там сразу видим вот такое предупреждение: Warning - any rules defined below will not be used : Procmail is not enabled in your Postfix configuration. The configuration file /etc/postfix/main.cf must have the mailbox_command option set to /usr/bin/procmail. Это означает, что наш postfix не настроен на работу с procmail. Для того, чтобы это исправить, найдём в файле /etc/postfix/main.cf строчку: 

#mailbox_command = /some/where/procmail 

И справим её на: 

mailbox_command = /usr/bin/procmail 

Затем, найдём строчку: 

#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp 

И исправим её на: 

mailbox_transport = procmail 

и прямо под ней добавим ещё одну строчку: 

procmail_destination_recipient_limit = 1 

Сохраняем и идём редактировать следующий файл /etc/postfix/master.cf. В нём в самом начале находим строчку: 

smtp inet n - n - - smtpd 

и прямо под ней добавляем новую строчку (впереди строчки три пробела): 

   -o content_filter=procmail: 

и в самый конец файла добавляем строчку: 

procmail unix - n n - - pipe flags=Rq user=mail argv=/usr/bin/procmail -f SENDER=${sender} -t RECIPIENT=${recipient} -m /etc/procmailrc 

Сохраняем. Вкратце, мы всем этим сделали следующее: указали постфиксу на почтовый фильтр procmail, указали что procmail будет использоваться в качестве транспорта и в файле master.cf этот самый транспорт и прописали. Когда я это всё делал, то у меня возникли естественные вопросы по поводу всех флагов в транспорте procmail. Пришлось обратиться к документации postfix и вот к этой статье

Итак, флаги R и q: 

R — Добавить обратный путь: в заголовок сообщения добавляется адрес отправителя конверта.
q — Заключить в кавычки, если в командной строке $sender, $original_recipient и $recipient имеется пробел и другие специальные символы (имеется ввиду текст налево от самого правого символа @ ) согласно 8-разрядной прозрачной версии RFC 822. Это рекомендуется для поставки через UUCP или BSMTP. 

Ключи -f, -t, -m означают следующее: 

-f от_кого — Заставляет procmail подменять в поле "From" значение от_кого как отправителя (вместо -f может быть использовано устаревшее -p). Если от_кого содержит только -, как единственное значение, в этом случае procmail лишь обновит временной штамп поля "From" (если таковой имеется, если нет, то он будет создан).
-t — Смягчает последствия ошибок при доставке почты. То есть, если procmail не в состоянии доставить посту по назначению, почта не отбрасывается, а возвращается в очередь отправки. Через некоторое время будет предпринята другая попытка доставить почту.
-m — Переводит procmail в режим работы почтового фильтра общего назначения. В этом режиме в командной строке должен быть указан один файл конфигурации. После него может быть указано неограниченное количество аргументов. Если файл конфигурации является абсолютным путём, начинающимся с /etc/procmailrc без ссылок на вышестоящие каталоги (то есть, не может быть упомянут каталог уровнем выше), в этом случае procmail, при отсутствии нарушений безопасности, принимает тождество владельца файла конфигурации (или символической ссылки). 

После того как мы «подружили» postfix и procmail нам надо удалить пакет sendmail, иначе procmail будет пытаться дальше передать почту через sendmail. Ну а нам этого не нужно. У нас для этого уже есть настроенный postfix. 

yum -y remove sendmail 

Теперь перезапускаем постфикс: 

service postfix restart 

Но не спешим проверять работоспособность. Сначала нам надо прописать правила в самом procmail, чтобы письма доходили до сервера с зимброй. В /etc/postfix создаём папку procmail и назначаем её владельцем пользователя mail. Владеющая группа тоже пусть будет mail: 

chown mail:mail /etc/postfix/procmail 

Затем, находим файл /etc/procmailrc и наполняем его вот таким содержимым: 

MAILDIR=/etc/postfix/procmail
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$MAILDIR/procmail.lock
SHELL=/bin/bash
# тремя строчками выше мы задали необходимые переменные
# а ниже мы прописали два правила, которые позволят пропускать почту, адресуемую на @test.mydomain.ru и почту, исходящую с первого сервера.
:0H
* ^To.*@test.mydomain.ru
! $RECIPIENT
:0H
* ^From.*@mydomain.domain
! $RECIPIENT
# последнее правило будет уничтожать всё остальное.
:0
/dev/null 

Сохраним внесённые изменения. Вот теперь можно попробовать поотправлять почту с зимбры на какой-нибудь публичный почтовый сервер, например mail.ru. Само собой, что правила в procmailrc вы будете писать свои, которые вам нужны, и их, кстати, можно будет создавать при помощи webmin.

Добавлено: вот тут я описал настройку аналогичного почтового шлюза на FreeBSD для нескольких почтовых доменов:

http://technotrance.su/index.php/moi-stati/freebsd/item/23-mail-gateway-freebsd

Этап 3. Настройка ФТП-сервера.  

Вернуться обратно на:
Этап 1  

Перейти сразу на:
Этап 4

Прочитано 46614 раз Последнее изменение Четверг, 21 Март 2013 18:56

You have no rights to post comments

Вы здесь: Home Мои статьи Linux Fedora/CentOS/RedHat Установка и настройка сервера почты, фтп и жаббера, а также почтового шлюза. Этап 2.