Установка Интернет-сервера на Alt Linux

From SysadminWiki.ru
Jump to: navigation, search

Общая информация

Эта пошаговая инструкция написана для установки Интернет-сервера на базе Alt Linux 4.0 Server (altlinux.ru). По ней можно также настраивать и Desktop версию, просто графический интерфейс не рассматривается.

Имеем:

  • сеть с тремя подсетями:10.0.0.0/24, 10.0.10.0/24, 10.0.20.0/24.
  • выход во внешний мир (есть спул адресов 192.168.100.16/28, т.е. у нас 14 внешних адресов).
  • компьютер с двумя сетевыми картами.

Хотим: получить полностью функциональный Интернет-сервер со следующими возможностями (см содержание):

Установка ОС, настройка маршрутов

- Загрузившись с CD/DVD выбираем язык меню - F2 и по желанию исследуем его пункты. Начав установку, иногда можно получить сообщение, что невозможно найти диск с дистрибутивом. Жмём Retry - находит.- Следуем шагам мастера установки:1) Выбираем язык установки и принимаем лицензионное соглашение.2) Указываем как будем менять раскладку клавиатуры.а3) Разбиение жесткого диска. На ваш выбор, в зависимости от планируемых задач. Мы сделаем простую разбивку. Для этого выберем профиль подготовки диска "вручную". Жёсткий диск у меня 75 Гб и RAM 1 Гб, под раздел подкачки принято выделять объём в полтора раза превышающий объём оперативной памяти, я сделал в 2 раза больше:


Раздел Объём
swap 2000 Mb
/ остаток


Можно для надёжности создать RAID массив. Мы рассмотрим простой случай - софтверный RAID1 (зеркало). Софтверный потому что далеко не всегда удаётся найти драйвера для raid-контролллера, а если и находится, то ещё реже удаётся найти второй такой контроллер в случае выхода первого из строя, а это значит, что всю информацию мы теряем. Cофтверный RAID, где роль контроллера выполняет сама ОС, таких недостатков лишён. Для RAID1 понадобится два жёстких диска, крайне желательно одной модели. Система даст им обозначения sda и sdb (или hda, hdb если интерфейс IDE).

Последовательно выполняем шаги:

  1. Для каждого диска создаём одинаковое количество разделов, одинакового размера. В нашем случае sda1=sdb1=2Gb и sda2=sdb2=73Gb. Тип файловой системы для каждого раздела Linux RAID
  2. Добавляем созданные разделы к RAID
    1. Создать RAID. MD - устройство уровня RAID1. Выделяем объекты sda1, sdb1. Выбираем файловую систему swap. Создаётся устройство md0
    2. Создать RAID. MD - устройство уровня RAID1. Выделяем объекты sda2, sdb2. Выбираем файловую систему ext2/3. Точка монтирования "/". Опции = default. Создаётся устройство md1

4) Для дистрибутива Alt Linux 4.х Desktop выбираем тип установки: сервер.

5) Устанавливаем загрузик в md1.

6) Задаём пароль для Администратора системы (пользователь root).

7) Заводим системного пользователя, например, pavel.

8) Выбор групп пакетов: SMTP server, Proxy, NTP, POP3/IMAP, FTP.

9) Настраиваем сетевые карты. Интерфейс eth0 для локальной сети настроим позже, сейчас настраиваем доступ в Интернет через eth1 на закладке "IP интерфейсы":

  • СтавиМ крестик на "Интерфейс включен"
  • IP-адрес 192.168.100.18
  • Маска сети 255.255.255.240
  • Шлюз: 192.168.100.17

На закладке "Общие сетевые настройки":

  • Имя машины: teo.mynetwork.ru
  • Сервер DNS: 217.116.158.3

10) Выбираем часовой пояс.

- После перезагрузки заходим пользователем root. Проверяем работоспособность сетевых настроек. Для этого пингуем адреса Интернета и проверяем внешний DNS сервер пингуя какой-нибудь узел по имени (само сабой мы должны быть 100% уверены, что все эти ресурсы сейчас доступны):

# ping 213.180.204.8
PING 213.180.204.8 (213.180.204.8) 56(84) bytes of data.64 bytes from 213.180.204.8: icmp_seq=1 ttl=57 time=63.6 ms

# ping ya.ru </nowiki>'''
PING ya.ru (213.180.204.8) 56(84) bytes of data.64 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=57 time=78.4 ms

Если пинги не проходят, то, скорее всего, проблема с сетевой картой.

Например, 3Com 3C905-TX не единожды себя компрометировала тем, что вроде бы работает и даже пингует сама себя, но в сеть через неё выходить не удавалось.

- Доустанавливаем столь необходимый Midnight Commander:

# apt-get install mc 

- Обновляем установленную ОС через Интернет (не обязательно, но желательно). Перед обновлением раскомментируем источники обновления на Master и Sisyphus (в последнем могут быть нестабильные пакеты, т.ч. сомневающиеся могут оставить этот источник закоментированным, но там находится более свежее ПО), перечисляемые в /etc/apt/sources.list.d/server.alt.list.

Если сервер сейчас не имеет прямого подключения к Интернет, то можно обновиться и через прокси-сервер. Для этого определим переменные окружения:
# export http_proxy="http://host:port"
# export ftp_proxy="http://host:port"

Если прокси требует пароля, то:

# export http_proxy="http://username:password@host:port"
и после этого

начинаем полное обновление системы:

# apt-get update
# apt-get dist-upgrade 

- Добавляем маршруты между нашими подсетями, где 10.0.0.1 маршрутизатор между локальными подсетями:

# route add -net 10.0.10.0 netmask 255.255.255.0 gw 10.0.0.1
# route add -net 10.0.20.0/24 gw 10.0.0.1

Оба синтаксиса команд эквивалентны. Добавим эти строки в конец файла /etc/rc.d/rc, чтобы команды выполнялись при загрузке ОС.- Обновлять и доустанавливать пакеты можно и без доступа в интернет. Как это настроить можно узнать, прочитав Решение проблем в Linux

- Настраиваем eth0. В /etc/net/ifaces/eth0/options:

DISABLED=no
BOOTPROTO=static

В /etc/net/ifaces/eth0/ipv4address

10.0.0.2/24

Применяем настройки и проверяем, пингуя локальную станцию:

# /etc/init.d/network reload
# ping 10.0.0.35
PING 10.0.0.35 (10.0.0.35) 56(84) bytes of data.64 bytes from 10.0.0.35: icmp_seq=1 ttl=128 time=0.171 ms

- Теперь можно заходить на сервер с рабочего места администратора по протоколу ssh, если из Windows, то можно использовать PuTTY (см статью Терминальное подключение к серверу Linux с помощью ключей ssh без паролей). Подключаемся пользователем pavel и меняем пользователя на root:

$ su -

В Alt Linux 4 настройка некоторых параметров системы и служб значительно упростилась благодаря использованию альтераторов (alterator), позволяющим делать это через web-интерфейс. Посмотрим, что уже установлено:

# rpm -qa | grep alterator

Посмотрим, что вообще есть:

# apt-cache search alterator

Можно удалить некоторые ненужные альтераторы:

# apt-get remove имя_пакета

Доустановим:

# apt-get install alterator-apache2 alterator-aptgroups alterator-firewall alterator-logs alterator-postfix-restrictions alterator-samba alterator-sysconfig alterator-ulogd alterator-xinetd alterator-timezone alterator-datetime

Теперь можно зайти на страницу администрирования по адресу https://10.0.0.2:8080, указав имя ползователя "root". На данном этапе посетим только следующие страницы:

  1. "Web-интерфейс - Сервер" редактируем параметры сертификата и пересоздаём его, нажав соответсвующую кнопку. Нажимаем кнопку "Перезапустить HTTP-сервер"
  2. "Статистика - Сетевой трафик" . Запускаем службу и включаем в автозапуск.
  3. "Дата и Время" - "Дата и Время". Проверем, что правильно установлены дата и время.
!!! Втечение настройки не забываем создавать резервные копии всех оригинальных конфигурационных файлов (напр *.old) !!! !!! Все пакеты, которые собираем из исходников (в этой статье не будем), собираем в домашнем каталоге, у меня /home/pavel/app/ !!!

Firewall (брендмауэр). iptables

- Делаем из компьютера маршрутизатор. Раньше для этого нужно было изменить 0 на 1 в /proc/sys/net/ipv4/ip_forward. Теперь, когда для управления сетевыми настройками используется проект etcnet, нужно указать в /etc/net/sysctl.conf:

net.ipv4.ip_forward = 1 

- На этом можно закончить шаг 2 и приступить к шагу 3, а можно дать доступ к Интернету для наших пользователей в локальной сети. Для этого добавим правило прямого доступа (без прокси сервера) к Интернет для адреса 10.0.0.244

# iptables -t nat -A POSTROUTING -s 10.0.0.244 -o eth1 -j SNAT --to 192.168.100.18

или для всей подсети

# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE

Параметр MASQUERADE равен SNAT --to 192.168.100.18, но не привязывается к IP адресу, что удобней, однако у меня были случаи когда с ним правило не работало, а с IP адресом работало. В причинах я не разбирался, но имейте в виду при отладке.

- Проверяем добавленную запись

# iptables -t nat -L

- Если ошиблись, то удаляем, изменяем и прописываем заново

# iptables -t nat -D POSTROUTING 1

где 1 это номер правила по порядку, или удаляем все правила из таблицы POSTROUTING

# iptables -t nat -F POSTROUTING

- В целях отладки можно добавить правило выпускающее команды ping и traceroute от клиентов во внешний мир

# iptables -t nat -A POSTROUTING -o eth1 -p icmp -j MASQUERADE

- Запомнить конфигурацию файрвола можно командой iptables-save, восстановить iptables-restore, хранится она в /etc/sysconfig/iptables.

- После установки прокси-сервера нужно не забыть добавленные правила убрать, иначе останется возможность попадать в Интернет в обход прокси.

DNS. Bind

Основная статья Bind

На этом шаге мы будем поднимать свой DNS сервер, если этого не требуется и достаточно внешнего, то этот шаг можно пропустить. Однако, если у нас не будет своего DNS, то нужно будет просить кого-нибудь (напр. провайдера) разместить у себя нашу зону teo.mynetwork.ru и у провайдера ip адреса прописать обратную зону.

- Устанавливаем пакет bind

  1. apt-get install bind

- Добавляем DNS серверы на административной странице (в веб интерфейсе) "Сеть" - "Общие настройки сети" или в файле /etc/resolv.conf:

FTP-сервер. vsftpd

Основная статья: vsftpd

  • В Alt Linux vsftpd можно настроить через альтератор в web-интерфейсе. Зайдя на страницу "Серверы - Сетевой суперсервер", убираем ограничение "только с адресов" (оставляем поле пустым). На странице "Серверы - FTP-серве" ставим нужные галочки в "Общих настройках" (у меня все кроме анонимного пользователя), нажимаем "Принять". Добавлем локального пользователя и даём ему право на запись.

Прокси. Squid

Основная статья: Squid

  • Автоматизировать загрузку squid при старте компьютера можно через альтератор в web-интерфейсе.
  • На административной веб-странице "Серверы - Прокси-сервер" добавляем squid в автозапуск.
  • Можно установить альтератор для lightsquid:
#apt-get install alterator-lightsquid 

но там статистика будет не столь подробная, как если его устанавливать отдельно.

Web-сервера. Apache

- На ряду с административным защищённым веб-сервером у нас будет работать и обычный. Для этого на административной странице переходим: "Серверы - Web-сервер - запустить... службу". Не забудем поставить галочку на "Запуск при старте системы".

- Файл настройки находится в /etc/httpd2/conf/httpd.conf, но собственно ничего в нём редактировать не придётся.

См. также статью Apache.


СУБД. MySQL

- Устанавливаем приложение

# apt-get install MySQL-server 

- Запускаем сервер:

# /etc/init.d/mysqld start 

- Можно посмотреть как он запустился в /var/log/mysql/info:

...
080519 18:58:23 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.51a'  socket: '/mysql.sock'  port: 0  ALT Linux MySQL RPM

- Подсоединяемся к служебной базе MySQL c одноимённым названием:

# mysql -u root mysql 

- Меняем пароль рута на new_pass (или другой) и выходим. Служебная команда PASSWORD зашифровывает пароль.

mysql> UPDATE user SET Password=PASSWORD('new_pass') WHERE user='root';
mysql> quit

- Перезагружаем сервер

# /usr/bin/mysqladmin reload 

- Подсоединяемся к серверу ещё раз, только теперь с паролем

# mysql -u root -p mysql 

- Из таблицы user удаляем запись пользователя '%' и (какая есть), т.к. эта запись предоставляет доступ любому пользователю.

mysql> SELECT host,user FROM user;
mysql> DELETE FROM user WHERE user=;
mysql> quit

- Т.к. мы изменили пароль пользователя root, то теперь не сможет работать logrotate. Для исправления добавляем в конец файла /var/lib/mysql/my.cnf соответсвующие параметры. Здесь же закоментируем строку skip-networking :

[mysqld]
chroot=/var/lib/mysql
datadir=/db
bdb-logdir=/log
log=/log/queries
pid-file=/mysqld.pid
skip-locking
#skip-networking
socket=/mysql.sock
tmpdir=/tmp
user=mysql 

[mysqladmin]
password = new_pass
user = root

- Проверим, осуществляется ли автоматический запуск mysqld:

# cd /etc/init.d 
# chkconfig --list mysqld 
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off

видим, что нет. Добавляем и проверяем:

# chkconfig mysqld on 
# chkconfig --list mysqld 
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off

Не хочет добавляться. Меняем настройку в /etc/init.d/mysqld для автозапуска на следующую:
# chkconfig: 2345 80 20

ещё раз добавляем и проверяем:

# chkconfig mysqld on 
# chkconfig --list mysqld 

mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

- Перезагружаем MySQL:

# /etc/init.d/mysqld restart 

- Смотрим журнал /var/log/mysql/info. Заметим, что теперь прослушивается порт 3306:

...
080703 15:32:45 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.51a'  socket: '/mysql.sock'  port: 3306  ALT Linux MySQL RPM

- Если работу с MySQL планируется вести постоянно, то полезно будет установить phpMyAdmin (http://php-myadmin.ru)

Несколько полезных команд

SHOW TABLES; показать таблицы в БД
SHOW COLUMNS FROM db; показать поля таблицы db
USE mysql; перейти в БД mysql
SELECT host,user FROM user; показать поля host, user таблицы user
DROP TABLE transport; удалить таблицу transport
DELETE FROM user WHERE user='acct' AND host='%'; удалить конкретную запись
UPDATE db SET Delete_priv='Y' WHERE user='acct'; изменить значение поля в записи
FLUSH PRIVILEGES; применить внесённые изменения</nowiki>
mysql -u root -p12345 postfix < DB.sql пакетное выполнение SQL выражений для базы данных postfix
ALTER TABLE mailbox ADD (uid int(10) unsigned DEFAULT '107' NOT NULL); # добавляем в таблицу mailbox обязательное поле uid со значением по умолчанию = 107
ALTER TABLE mailbox DROP uid; удаляем поле uid из таблицы mailbox

Больше информации в спец статье по MySQL.


Почтовый сервер. Postfix

См. также как Postfix устанавливается под Debian. Большинство настроек схожи

Postfix отвечает за приём почтовых сообщений и раскладки их по каталогам на сервере. Отдавать письма будет Courier.

Установка Postfix c поддержкой TLS и MySQL

- Начиная с версии 2.2 поддержка TLS встроена в Postfix. Список поддерживаемых баз данных можно узнать выполнив:

# postconf -m 

- Доустанавливаем поддержку MySQL:

# apt-get install postfix-mysql 

К сожалению, в Alt Linux даже после установки этого пакета, информация, выдаваемая postconf не обновилась (в отличае от Debian).

- Заводим пользователя vmail:

# useradd -p adduser vmail 

- Проверяем какой номер пользователя (uid) и группы (gid)в ситсеме:

# id vmail 
uid=501(vmail) gid=504(vmail) groups=504(vmail)

- Вносим изменения в /etc/postfix/main.cf. Обратите внимание, что перед названием параметра не должно быть пробела или табуляции, иначе (как я выяснил на собственном опыте) параметр игнорируется:

myhostname = teo.mynetwork.ru
mydomain = teo.mynetwork.ru
mynetworks = 127.0.0.1/32 10.0.0.0/24 10.0.10.0/24 10.0.20.0/24 

- По умолчанию Postfix ограничивает размер почтового ящика 50 Мб и максимальный размер письма 10 Мб. Если нужно изменить эти параметры, то добавляем (исправляем если есть) строки:

mailbox_size_limit = 51200000
message_size_limit = 10240000

- Создаём виртуальный домен. Для этого добавляем следующие строки, учитывая что у нас пользователь vmail имеет uid=501 и gid=504 (если нет, то подставить свои):

virtual_alias_maps = mysql:/etc/postfix/virt_alias.cf
virtual_mailbox_base = /var/spool/vmail
#virtual_mailbox_domains = mysql:/etc/postfix/virt_domain.cf  #возможно понадобиться позже
virtual_mailbox_maps = mysql:/etc/postfix/virt_mailbox.cf
transport_maps = mysql:/etc/postfix/transport.cf
virtual_minimum_uid = 501
virtual_uid_maps = static:501
virtual_gid_maps = static:504

Также укажем:

alias_maps = hash:/etc/postfix/aliases
home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail

- Создадим указанный каталог для спула:

# mkdir /var/spool/vmail 
# chown vmail.vmail /var/spool/vmail 
# chmod 700 /var/spool/vmail 


- Создадим файлы доступа к MySQL. Пользователь postfixadmin будет создан позже, при установке Postfix Admin. Создаём файл /etc/postfix/virt_alias.cf:

user = postfix
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address

  - Создаём файл /etc/postfix/virt_domain.cf:

user = postfix
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = description
where_field = domain

- Создаём файл /etc/postfix/virt_mailbox.cf:

user = postfix
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

- Создаём файл /etc/postfix/transport.cf:

user = postfix
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = transport
select_field = destination
where_field = domain

указывая в hosts IP адрес, мы принуждаем Postfix соединяться с MySQL через порт, если же указать localhost, то он будет стараться соединиться через сокет, а так как оба чрутятся в разные каталоги, то найти сокет он не сможет и выдаст в /var/log/maillog ошибку:

Dec 18 04:02:13 teo postfix/trivial-rewrite[23148]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Dec 18 04:02:13 teo postfix/cleanup[22762]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

- Чтобы проверить, что мы задали верные параметры соединения с базой, выполним:

# mysql -h 127.0.0.1 -u postfix -ppostfixadmin postfix 

- В /etc/postfix/master.cf убираем комментарии со строк (второй строки может не быть):

smtp inet n - - - - smtpdsmtps inet n - - - - smtpd

- Посмотреть настройки Posfix, отличающиеся от настроек по умолчанию, можно командой:

# postconf -n 

Так мы можем убедиться, что все заданные параметры вступили в силу, если нет, то скорее всего при его определении мы не убрали перед ними пробелы.- Перезапускаем Postfix:

# /etc/init.d/postfix restart

Postfix Admin

Устанавливаем Postfix Admin для управления почтовыми ящиками через веб-интерфейс

Берём последнюю версию пакета с http://sourceforge.net/projects/postfixadmin (на данный момент это 2.2.0).

-Доустанавливаем пакет работы со строками для PHP и telnet для проверки:

# apt-get install php-mbstring 
# apt-get install telnet 

- Распаковываем и копируем всё содержимое каталога postfixadmin-2.2.0 в /var/www/apache2/html/postfixadmin:

- Создаём таблицы:

# mysql -u root -p
mysql> CREATE DATABASE postfix;
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfixadmin';
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';

- Активируем все изменения и покидаем командную оболочку MySQL:
mysql> flush privileges;
mysql> use postfix
mysql> CREATE TABLE IF NOT EXISTS transport (domain varchar(128) not null primary key, destination varchar(128) not null);
mysql> INSERT INTO transport (domain,destination) VALUES ('teo.mynetwork.ru','virtual');
mysql> SELECT * FROM transport;
mysql> quit

- Редактируем config.inc.php:

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

$CONF['admin_email'] = 'postmaster@teo.mynetwork.ru';

$CONF['default_aliases'] = array (
'postmaster' => 'pm@teo.mynetwork.ru',
'webmaster' => 'pm@teo.mynetwork.ru'
);

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';

// Specify your default values below. Quota in MB.
$CONF['aliases'] = '100';
$CONF['mailboxes'] = '100';
$CONF['maxquota'] = '10';

$CONF['show_footer_text'] = 'NO';

- Заходим на настроичную страничку: http://10.0.0.2/postfixadmin/setup.php и, если ошибок в настройках нет (иначе подскажет где они), создаём администраторский почтовый ящик, скажем postadmin@teo.mynetwork.ru

- Переименовываем настроичный скрипт setup.php в setup.php.disabled и заходим на http://10.0.0.2/postfixadmin/login.php. Регистрируемся, указывая в "Имя (название ящика)" только что созданный postadmin@teo.mynetwork.ru и получаем доступ к административной странице.

- Добавляем домен teo.mynetwork.ru и почтовые ящики test и test2.

- Можно сделать резервную копию всех таблиц в виде SQL выражений. Для этого на странице администратора нажать кнопку Backup.

- Теперь в консоли проверяем как работает доставка почты, т.е. smtp:

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 teo.mynetwork.ru ESMTP Postfix
helo teo.mynetwork.ru
250 teo.mynetwork.ru
mail from: test@teo.mynetwork.ru
250 2.1.0 Ok
rcpt to: test2@teo.mynetwork.ru
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
this is the test
.
250 2.0.0 Ok: queued as A7CAC36B52
quit
221 2.0.0 Bye
Connection closed by foreign host.

- Идём в наш почтовый каталог /var/spool/vmail/ там, если не был, появился каталог test2@teo.mynetwork.ru, а в нём (в каталоге new) сообщение.

Шифрование соединения и принимаемой почты.

- Для шифрования параметров аутонтификации (по умолчанию имя пользователя и пароль передаются открытым текстом) доустанавливаем поддержку TLS:

# apt-get install postfix-tls postfix-cyrus 

Если возникла ошибка:

You might want to run `apt-get --fix-broken install' to correct these:The following packages have unmet dependencies:  expect: Depends: /dev/ptsE: Unmet dependencies. Try 'apt-get --fix-broken install' with no packages (or specify a solution).

То, согласно подсказкам, выполняем:

# service udevd umount 
# apt-get install dev 
# service udevd start 
# service syslogd restart 
# apt-get --fix-broken install 
# apt-get install postfix-tls

- Конфигурируем Postfix. Добавляем настройки tls в /etc/postfix/main.cf:

# TLS
tls_random_source = dev:/dev/urandom
 
smtpd_use_tls = yes
smtpd_tls_loglevel = 1
smtpd_tls_auth_only = no
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_key_file  = /etc/httpd2/conf/ssl.key/server.key
smtpd_tls_cert_file = /etc/httpd2/conf/ssl.crt/server.crt
smtpd_tls_CAfile    = /etc/httpd2/conf/ssl.ca/ca.crt
 
smtp_use_tls = yes
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
smtp_tls_key_file  = /etc/httpd2/conf/ssl.key/server.key
smtp_tls_cert_file = /etc/httpd2/conf/ssl.crt/server.crt
smtp_tls_CAfile    = /etc/httpd2/conf/ssl.ca/ca.crt

# SASL2
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_sasl_authenticated  

Какими ключами будем подписывать сервер пока не важно. Их можно будет создать отдельно для Postfix, или взять от Courier, когда их там создадим, или оставить от Apache, как мы сейчас сделаем. Копируем /etc/httpd2/conf/ssl.crt/server.crt в /etc/httpd2/conf/ssl.ca/ca.crt (создав этот каталог), таким образом создав фиктивный главный (подписывающий) ключ.Проверяем:

# postfix reload 
# telnet localhost 25 
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 teo.mynetwork.ru ESMTP Postfix
ehlo teo.mynetwork.ru
250-teo.mynetwork.ru
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250 8BITMIME
starttls
220 Ready to start TLS
quit
.
Connection closed by foreign host.

- В случае сбоев смотреть лог-файл:

# less /var/log/maillog 

- Для выхода из less нажмите q.

ClamAV (проверка почты на вирусы)

Мы установим из пакета, но можно скачать исходники с http://www.clamav.net

- Устанавливаем антивирус ClamAV:

# apt-get install clamsmtp 
The following extra packages will be installed:  clamav clamav-freshclam libclamav libgmp

- Смотрим в файле /etc/clamsmtpd.conf какой порт clamsmtpd прослушивает (Listen) и на какой отдаёт обратотанную почту (OutAddress)

OutAddress: 10025
Listen: 127.0.0.1:10026

- Добавляем в /etc/postfix/main.cf:

# antispam
content_filter = scan:127.0.0.1:10026
receive_override_options = no_address_mappings

- Добавляем в /etc/postfix/master.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

        - Запускаем:

# /etc/init.d/clamd start 

На этом с Postfix всё. Можно ещё раз проверить с помощью telnet, что почта, проходя через антивирусную защиту, доходит в ящик пользователя.Дополнительную информаци по настройке postfix, защите от спама и полезные ссылки смотрите в дополнительной статье по Postfix.

Courier-IMAP с поддержкой MySQL.

Сourier-IMAP отвечает за отдачу почты пользователю. Исходники можно взять с ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/

Устанавливаем Courier.

- Ставим:

# apt-get install courier-imap courier-imap-utils courier-authlib-mysql 

После установки дополнительно требуемого пакета tcl видим сообщение:

** Cannot install dev package: mounted udev detected.
** This is no problem, but to avoid side-effects with
** stopping and starting it automatically, please do:
service udevd umount
apt-get install dev
service udevd start
** Note that some services like syslogd might need
** restart after this, too.
error: execution of %pre scriptlet from dev-3.3.1-alt18 failed, exit status 1
error:   install: %pre scriptlet failed (2), skipping dev-3.3.1-alt18

Выполняем предложенные команды:

# service udevd umount 
# apt-get install dev 
# service udevd start 
# /etc/init.d/syslogd restart 

- Смотрим куда установилась поддержка MySQL (зависит от версии пакета) :

# rpm -ql courier-authlib-mysql
/etc/courier-authlib/authdaemon-mysql.conf
/usr/lib/courier-authlib/libauthmysql.so
... 

- Настраиваем доступ к БД MySQL. Для этого добавляем поддержку установленного модуля в /etc/courier-authlib/authdaemon.conf:

authmodulelist="authmysql"daemons=5

в /etc/courier-authlib/authdaemon-mysql.conf:

MYSQL_SERVER 127.0.0.1   # или teo.mynetwork.ru, localhost может не работать
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfixadmin
#MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
DEFAULT_DOMAIN teo.mynetwork.ru
MYSQL_UID_FIELD '501'
MYSQL_GID_FIELD '504'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/var/spool/vmail'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir


- Редактируем файл /etc/courier-imap/imapd:

ADDRESS=0IMAPDSTART=YES

- Редактируем файл /etc/courier-imap/pop3d:

ADDRESS=0POP3DSTART=YES

- Запускаем:

# /etc/init.d/courier-pop3d start 
# /etc/init.d/courier-imapd start 
# /etc/init.d/courier-authdaemon start 

- Проверяем можем ли забрать почту, т.е. работоспособность pop3:

# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user test2@teo.mynetwork.ru
+OK Password required.
pass password
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 470
.
quit
+OK Bye-bye.
Connection closed by foreign host.

Как видим, одно письмо на 470 байт лежит. Можно его просмотреть командой retr 1 (конечно перед quit)

Устанавливаем Cyrus-SASL2 для шифрования отдаваемой почты.

- Устанавливаем:

# apt-get install libsasl2 cyrus-sasl2 libsasl2-plugin-sql 

- Расскажем SASL, где и как искать пароли, когда к нему обратится postfix. Аутонтификацию будем проводит методом saslauthd. Для этого создадим файл /usr/lib/sasl2/smtpd.conf следующиго содержания:

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

- Альтернативный метод - auxprop. Чтобы использовать его, нужно в /usr/lib/sasl2/smtpd.conf прописать:

auxprop_plugin: mysql
pwcheck_method: auxprop
mysql_user: postfixadmin
mysql_passwd: postfixadmin
mysql_hostnames: localhost
mysql_database: postfix
mysql_statement: select password from mailbox where username='%u@%r'
mysql_verbose: yes 

Создаём сертификат

- Если в /var/lib/ssl/certs/ лежат файлы pop3d.pem и imapd.pem, то это и есть сертификаты и они уже созданы, чтобы пересоздать их со своими данными удалим эти файлы и отредактируем /etc/courier-imap/pop3d.cnf, где ST короткое (2-3 буквы) название города:

[ req_dn ]
C=RU
ST=MC
L=My City
O=teo Mail Server
OU=Auto POP3 SSL key
CN=teo.mynetwork.ru
emailAddress=postmaster@teo.mynetwork.ru

и /etc/courier-imap/imapd.cnf:

[ req_dn ]
C=RU
ST=MC
L=My City
O=teo Mail Server
OU=Auto POP3 SSL key
CN=teo.mynetwork.ru
emailAddress=postmaster@teo.mynetwork.ru

- Генерируем сертификаты:

# rm -f /var/lib/ssl/certs/pop3d.pem 
# rm -f /var/lib/ssl/certs/imapd.pem 
# /usr/share/courier-imap/mkpop3dcert 
# /usr/share/courier-imap/mkimapdcert 

- На этом настройка почтового сервиса закончена.

Полезные ссылки


Введение сервера в "боевой" режим

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

- Изменить настройки сетевых интерфейсов на боевые (ip адрес, маска, шлюз, DNS).

- Прописать реальные имена в /etc/hosts.

- Squid. Внести изменения в конфигурационный файл /etc/squid/squid.conf, чтобы прокси сервер принимал запросы только из локальной сети и компьютера, где установлен:

http_port 10.0.0.2:3128
http_port 127.0.0.1:3128

- SAMS. Исправить IP адрес на административной странице "SAMS": "Администрирование SAMS"- Postfix. Исправить IP адреса в параметре mynetworks в файле /etc/postfix/main.cf

- Courier. Если менялось имя почтового домена, то исправить в /etc/courier-authlib/authdaemon-mysql.conf и пересоздать сертификаты.

- Apache. Исправить директивы NameVirtualHost и VirtualHost в конфигурациях виртуальных хостов (если создавались).


См. также