1. Устанавливаем сервер DNS (если у нас нет сервера DNS отвечающего за нашу зону):
sudo apt-get install bind9 dnsutils
2. Конфигурируем dns:
2.1. В файле /etc/bind/named.conf.options раскоментируем следующие строки и впишем в
них сервера dns провайдера или любые публичные сервера – google, opendns итд.
forwarders {
217.77.208.133;
208.67.222.222;
};
2.2. Конфигурируем наш DNS сервер ответственным за нашу доменную зону и вписываем
наш будущий почтовый сервер как MX запись в базу DNS сервера.
Создаем прямую и обратную зоны для нашей сети. В файл /etc/named.conf.local
дописываем конфигурацию зон:
zone "cactus.com" {
type master;
file "/etc/bind/db.cactus.com";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.cactus.com_rev";
};
2.3. Создаем файлы зон с соответствующими записями:
sudo cp /etc/bind/db.local /etc/bind/db.cactus.com
sudo vim /etc/bind/db.cactus.com
sudo cp /etc/bind/db.127 /etc/bind/db.cactus.com_rev
sudo vim /etc/bind/db.cactus.com_rev
2.4. Содержание файлов для моего случая при сети 192.168.0.0.24 и доменной зоне
cactus.com в которой наш сервер числится за «троих» и выполняет роль сервера dns,
веб сервера и почтового сервера, следующее:
db.cactus.com
$TTL 604800
@ IN SOA cactus.com. dnsmaster.cactus.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS cactus.com.
@ IN NS dns.cactus.com.
@ IN A 192.168.0.50
@ IN MX 10 mail.cactus.com.
mail IN A 192.168.0.50
dns IN A 192.168.0.50
www IN A 192.168.0.50
db.cactus.com_rev
$TTL 604800
@ IN SOA cactus.com. dnsmaster.cactus.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dns.
50 IN PTR dns.cactus.com.
50 IN PTR www.cactus.com.
50 IN PTR mail.cactus.com.
3. Для того что бы наш сервер мог работать со своим же dns, ему необходимо указать самого
себя как сервер dns в настройках сети. Для этого правим файл /etc/network/interfaces и в
разделе касательно нашего сетевого интерфейса, который настроен на нашу сеть
192.168.0.0/24 вписываем следующие строки:
dns-nameservers 127.0.0.1
dns-search cactus.com
В итоге секция файла будет выглядеть так:
auto eth0
iface eth0 inet static
address 192.168.0.50
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 127.0.0.1
dns-search cactus.com
Перезапускаем сетевой интерфейс и почти все готово
sudo ifdown eth0 && sudo ifup eth0
Осталось изменить имя узла:
sudo hostname mail.cactus.com
В файл /etc/hostname вписываем вместо того имени что там есть, наше новое имя узла
mail.cactus.com
4. Переходим к установке почтовой системы. Устанавливаем необходимые пакеты.
sudo apt-get install mysql-server postfix postfix-mysql dovecot-common dovecot-mysql
dovecot-imapd dovecot-pop3d postgrey amavis clamav clamav-daemon spamassassin php5-
imap
5. Во время установки вас попросят ввести пароль пользователя root сервера mysql – введите
и запомните его. Он нам понадобится позже. В моем случае это mysqlpassword.
6. Так же во время установки будет проведена базовая настройка postfix. Выберите Internet-
сайт. Системное почтовое имя – название домена cactus.com
7. Для работы с SSL перегенерируем сертификаты на сервере:
sudo make-ssl-cert generate-default-snakeoil --force-overwrite
8. Для работы с веб интерфейсом устанавливаем LAMP
sudo tasksel install lamp-server
9. sudo apt-get install php-apc php5-memcache php5-curl php5-gd php-xml-parser
10. Конфигурируем PHP для работы с будущими компонентами почтовой системы, в файл
/etc/php5/apache2/php.ini вносим следующую строку:
expose_php = Off
11. Настраиваем безопасность работы веб сервера. В файл /etc/apache2/conf.d/security
пишем:
ServerTokens Prod
ServerSignature Off
12. Включаем https на веб сервере:
sudo a2enmod rewrite ssl
sudo a2ensite default-ssl
13. Для работы веб интерфейса установим и настроим пакет memcached:
sudo apt-get install memcached
14. Для расширения возможностей антивируса и системы борьбы со спамом
доустанавливаем:
sudo apt-get install libnet-dns-perl pyzor razor arj bzip2 cabextract cpio file gzip nomarch pax
unzip zip
15. Создаем базу данных для хранения информации почтовой системы (пользователи,
пароли):
sudo mysql –u root –p
create database mail;
grant all on mail.* to 'mail'@'localhost' identified by 'password';
16. Устанавливаем Postfix Admin для управления почтовой системой через вебинтерфейс:
wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.5/postfixadmin-2.3.5.tar.gz
gunzip postfixadmin-2.3.5.tar.gz
tar -xf postfixadmin-2.3.5.tar
mv postfixadmin-2.3.5 /var/www/postfixadmin
chown -R www-data:www-data /var/www/postfixadmin
17. Конфигурируем postfixadmin для работы с нашим mysql сервером. Открываем файл
/var/www/postfixadmin/config.inc.php, ищем и корректируем следующие строки:
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'https://mail.cactus.com/postfixadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mail';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'mail';
$CONF['admin_email'] = 'postmaster@cactus.com';
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';
$CONF['encrypt'] = 'md5crypt';
$CONF['domain_path'] = 'NO';
$CONF['domain_in_mailbox'] = 'YES';
18. Заходим по адресу https://mail.cactus.com/postfixadmin/setup.php и вводим пароль для
конфигурации postfixadmin (пароль придумать самому). Потом генерируем хэш пароля,
копируем его и вставляем в следующий параметр файла
/var/www/postfixadmin/config.inc.php:
$CONF['setup_password'] = '...очень длинная строка ппц какая длинная...';
19. Потом возвращаемся к вебстранице и создаем учетную запись администратора для
postfixadmin-а. Вводим пароль который придумали на предыдущем пункте (не хеш! А
пароль), вводим имя админа(точнее его почтовый адрес в системе), и пароль. Жмем
кнопку Add.
20. Далее заходим по адресу https://mail.cactus.com/postfixadmin, регистрируемся с учетной
записью админа созданной в п. 19, и добавляем домен на вкладке Домены – Создать. Наш
домен catuts.com.
21. Создаем каталог для хранения виртуальных почтовых ящиков и пользователя который
сможет с ним работать. От имени этого пользователя Dovecot будет управлять письмами
клиентов.
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual maildir handler" vmail
mkdir /var/vmail
chmod 770 /var/vmail
chown vmail:mail /var/vmail
22. Конфигурируем Dovecot. Создаем файл /etc/dovecot/conf.d/auth-sql.conf.ext и вносим в
него следующие строки:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
23. Правим файл /etc/dovecot/dovecot-sql.conf.ext (опции password_query и user_query
пишутся в одну строку):
driver = mysql
default_pass_scheme = MD5-CRYPT
# Параметры аутентификации
# ---------------------------------
# Используем Dovecot для аутентификации
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes
# Параметры TLS
# ---------------------------------
unknown_local_recipient_reject_code = 450
# время содержания письма в очереди, меньше лучше для основного сервера(3 дня), больше для резервного(2
недели)
maximal_queue_lifetime = 3d
# Задержки, при разрыве соединения перед повторным
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# тайм аут ожидания перед тем как сервер пошлет оставшиеся данные
smtp_helo_timeout = 60s
# максимальное количество адресов назначения в письме - борьба со спамом
smtpd_recipient_limit = 10
# кол-во ошибок перед отключением
smtpd_soft_error_limit = 3
# количество ошибок перед блокировкой
smtpd_hard_error_limit = 12
# Секция управления кому и откуда можно слать письма - открытый релей это рай спамера
# Требования HELO
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname,
reject_invalid_hostname, permit
# Требование деталей от отправителя при отправке писем
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject
reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Указываем сервера которым запрещена пересылка через наш сервер
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl,
reject_rbl_client dnsbl.njabl.org
# Ограничиваем как можно отправлять письма
# "check_policy_service inet:127.0.0.1:10023" включает фильтрацию писем через Postgrey.
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated,
reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service
inet:127.0.0.1:10023, permit
smtpd_data_restrictions = reject_unauth_pipelining
# Общие параметры
# ----------------------------------
myhostname = mail.cactus.com
myorigin = /etc/hostname
mydestination = mail.cactus.com, localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mynetworks_style = host
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
content_filter = amavis:[127.0.0.1]:10024
# Управление заголовками
# --------------------------------------