Установка Интернет-сервера на Alt Linux
Общая информация
Эта пошаговая инструкция написана для установки Интернет-сервера на базе 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 |
/ | остаток |
Последовательно выполняем шаги:
- Для каждого диска создаём одинаковое количество разделов, одинакового размера. В нашем случае sda1=sdb1=2Gb и sda2=sdb2=73Gb. Тип файловой системы для каждого раздела Linux RAID
- Добавляем созданные разделы к RAID
- Создать RAID. MD - устройство уровня RAID1. Выделяем объекты sda1, sdb1. Выбираем файловую систему swap. Создаётся устройство md0
- Создать 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
Если пинги не проходят, то, скорее всего, проблема с сетевой картой.
- Доустанавливаем столь необходимый 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". На данном этапе посетим только следующие страницы:
- "Web-интерфейс - Сервер" редактируем параметры сертификата и пересоздаём его, нажав соответсвующую кнопку. Нажимаем кнопку "Перезапустить HTTP-сервер"
- "Статистика - Сетевой трафик" . Запускаем службу и включаем в автозапуск.
- "Дата и Время" - "Дата и Время". Проверем, что правильно установлены дата и время.
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
- 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 в конфигурациях виртуальных хостов (если создавались).
См. также
- Форум
- Официальная вики, существует также устаревшая вики
- FTP с дистрибутивами и репозиторий Sisyphus