Создание Web и почтового сервера во FreeBSD


Создание вебсервера для php5 + apache2 + freetds 7.0 и почтового сервера postfix/imap на одной машине

Заголовок: Возникла необходимость настроить в корпоративной сети отдельную станцию на FreeBSD, для работы веб-сайта и почтового сервера.
Таким образом, чтобы

а)сайт полноценно обрабатывал и отображал данные в кириллице, находящиеся на удалённом сервере mssql2005 в локальной сети
б) модуль php взаимодействовал с графическими библиотеками для чтения редакции больших изображений изображений
в) сервер мог предоставлять различные права для работы с ftp различным клиентам (системным пользователям).

Иными словами: Возникла необходимость на системе freebsd 6.3 доставить следующие дистрибутивы (я выбрал такую последовательность):

1.openssl
2.freetds
3.apache2
4.postgresql
5.php5
6.postfix
7.ssh2
8.proftpd

источники :
http://opennet.ru/base/net/postfix_mail_guide.txt.html
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/
http://www.freetds.org/userguide/config.htm
http://wiki.centos.org/HowTos/postfix_restrictions

Установка оперативной системы FeeBSD-6.3.

Основы установки системы подробно описаны в документации на сайте http://freebsd.org
Там же скачивается дистрибутив.

Я ограничился минимальными конфигурациями для инсталяции:
Во всплывающих окнах инсталяционной программы указал :
Country Selection - Russian Federation
System Console Keymap - Russian KOI8-R
Sysinstall main menu - express

Выбираю нужный диск и форматирую его полностью автоматически, не вдаваясь в сложности.

В окне ‘Choose distributions’ отмечаю опции :
Developer,Kern-developer, User

В окне choose installation media выбираю cd и нажимаю ок и ожидаю поздравлений по завершении инсталяции, после чего отказываюсь от всех
дополнительных настроечных визитов, выхожу из программы инсталляции, соглашаюсь с перезагрузкой и вынимаю диск.

Таким образом получаю систему с минимальными настройками

После перезагрузки ввожу логин: root и получаю полный доступ к дальнейшей работе с системой freebsd.

Следующим действием мне необходимо

а)задать пароль для администратора root
б)ввести нового супер-пользователя, для работы в системе с корневыми допусками
в)прописать основные настройки, необходимые для дальнейших инсталляций.

Пароль для администратора root ввожу следующей командой:
# passwd root
New password: ******
Retype new password: ******

Ввожу нового пользователя коммандой:
# adduser
Username: kmg
Full name: kmg
Uid:
Login group [kmg]:
Default group is kmg.Invite kmg into other groups[]: wheel

(группа wheel наделяет пользователя kmg правами суперпользователя, под которыми в дальнейшем будет проводиться инсталляции всех модулей)

После чего мне нужно только задать и поддтвердить пароль для нового пользователя (все остальные настройки оставляем заданными по умолчанию).

Теперь нам необходимо прописаться в локальной сети ,открыть доступ к интернету и назначить сервер имён.

Для этого
1) редактирую файл /etc/rc.conf с помощью утилиты ee
# ee /etc/rc.conf

и вписываю следующие строки
inetd_enable="YES"

выхожу из редакции и захожу в настроечный файл сервера inetd
# ee /etc/inetd.conf

мне необходимо запустить ftp службу для скачивания дополнительных дистрибутивов в процессе инсталляции (с указанных мной локальных машин или из интернета). Для этого я раскомментирую первую строку в данном настроечном файле ftp streem tcp nowait ..........

теперь при запуске системы у меня будет запущен сервер ftp
Выхожу из настройки inetd и проверяю свои сетевые интерфейсы коммандой:
# ifconfig

Узнаю, что кроме локального интерфейса lo0 у меня есть ещё сетевой адаптер realtec под именем rl0. Открываю редактором знакомый уже файл
# ee /etc/rc.conf

и прописываю локальный адрес для сетевой карты , адрес шлюза для выхода в интернет (или данные, указанные провайдером, если машина напрямую смотрит в интернет) и имя машины kmg.towar.ru (имеется доменное имя towar.ru). Для этого добавляю строки
ifconfig_rl0="inet 192.168.0.2 netmask 255.255.255.0"
hostname="kmg.towar.ru"

сразу оговорюсь, что у меня провайдер выделяет нам кусок подсети из нескольких внешних адресов, и настраивает обратную зону так, чтобы обратная зона для одного внешнего адреса точно соответствовала названию сайта http://www.towar.ru (необходимо ,например, если apache запускается с поддержкой ssl), а обратная зона другого врешнего адреса соответсвовала хосту почтового сервера mail.towar.ru, который находится на этой же машине ( это для того, чтоб очень строгие сервера могли не находили изьян при проверке соответствий данных протокола smtp). Таким образом мне нужно прописать на тот же сетевой интерфейс ещё 2 внешних ip и попросить провайдера прописать на эти ip имена хостов в обратной зоне
ifconfig_rl0_alias0="xxx.xxx.xxx.xxx netmask 255.255.255.248"
ifconfig_rl0_alias1="xxx.xxx.xxx.xxx netmask 255.255.255.248"

выхожу из редактора и редактирую файл для запроса к серверу имён
# ee /etc/resolv.conf

(скорее всего такого файла пока нет - редактор его создаст) у меня есть собственный dns server, у кого его нет - должен указать адреса, данные провайдером
domain towar.ru
nameserver 192.168.0.1

Перезагружаю машину и вхожу под пользователем kmg, после чего коммандой su и указанием пароля для root становлюсь суперпользователем и могу продолжать инсталляцию (не забывая, однако, пропинговать что нибудь вроде yandex.ru, чтобы убедиться в правильности сетевых настроек и доступов).

Убеждаюсь, что у нас существуют директории /usr/src/sys /usr/ports

если их не существует, то вставляю первый (у меня и единственный) инсталляционный диск freebsd и запускаю комманду
# sysinstall

в инсталляционном окне нажимаю
Configure

следом - distributions
потом отмечаю - ports
потом - на всякий случай - src - all

(существуют более обоснованные и последовательные методы работы с портами и исходными файлами , но для этого определяются задачи, отличные от тех, которые я указал в начале статьи)

Для дальнейшего удобства я решил поставить текстовый редактор deco, утилиту sudo (для работы с такими программами posgresql из оболочки nologin) и утилиту gmake.
Ставится она просто из потров


cd /usr/ports/misc/deco && make install clean
cd /usr/ports/security/sudo && make install clean
cd /usr/ports/devels/gmake && make install clean

Все конфигурационные опции - по умолчанию

Установка OPENSSL

Для того, чтоб не углубляться в конфигурации последующих дистрибутивов со своими дополнительными указаниями или исправлениями я решил в самом начале поставить openssl (после некоторых безуспешных попыток выполнить свои задачи в другом порядке инсталляций).
cd /usr/ports/security/openssl
make OPENSSL_OVERWRITE_BASE=yes install

Установка FREETDS
—————–

Необходим прежде всего для связки php5 и удалённого сервера mysql. Тут нужно внимательно изучить возможности конфигурации php5 и freetds для того, чтобы можно было отображать и правильно редактировать большие тексты в кириллице на сервере mssql2005 через веб - интерфейс.

Такие как например карточка ростовской фирмы music_star http://towar.ru/ff/sfi~34923_48_138/sk~no-no/s1~/sg~1 или объявление китайских поставщиков http://www.towar.ru/bull~1044 конфигурации php-5.2.5 требуют следующего:
./configure -with-apxs2=/usr/local/apache2/bin/apxs --with-mssql=/usr/local/freetds
--with-pgsql=/usr/local --with-gettext=/usr/local --with-iconv-dir=/usr/local
--with-libxml-dir=/usr/local --with-gd=/usr/local --with-zlib
--with-freetype-dir=/usr/local --enable-gd-native-ttf --with-jpeg-dir=/usr/local
--with-png-dir=/usr/local --with-ttf=/usr/local --enable-sockets

нахожу в интернете файл php-5.2.5.tar.gz распаковываю, захожу в директорию и читаю внимательно ./configure -help | grep (всё что касается mssql, текстов, конвертеров, чарсетов, odbs и всего сопутсовующего добра), так как мне необходимо сконфигурировать freetds протокола не ниже 7.0 http://www.freetds.org/userguide/choosingtdsprotocol.htm и задать в последующей конфигурации параметр
client charset = cp1251


Приступаю к установке freetds
1)нахожу и скачиваю freetds-0.64.tar.gz распаковываю

[cc lang="bash" tab_size="2" lines="-1"] tar zxvf freetds-0.64.tar.gz

захожу - cd freetds-0.64

2) читаю конфигурации ./configure –help, одновременно сверяясь с описанием http://www.freetds.org/userguide/config.htm

3)конфигурирую
./configure

предпочитаю держать все файлы в отдельной папке
--prefix=/usr/local/freetds

так же добавляю опции
--with-libiconv-prefix=/usr/local

(убеждаюсь, что библиотеки iconv мне необходимы как для php5, так и для freetds) поэтому иду в порт и ставлю заранее
cd /usr/ports/converters/iconv && make install clean
/* cd /usr/ports/converters/libiconv && make install clean */
--with-tdsver-7.0
--with-unixodbc=/usr/local

(заранее инсталлирую из портов cd /usr/ports/databases/unixODBC && make install)
--enable-msdblib
/* --enable-sybase-compat */

4)make
make install

5)Проверяю:
/usr/local/freetds/bin/tsql -S 192.168.0.5 -p 1433 -U *** -P ******

Пока работает - несколько команд t - sql - читаю каракули с небольшой тестовой таблицы, выхожу командой quit

6) изменяю конфигурации : захожу в редактор deco и нахожу файл /usr/local/freetds/etc/freetds.conf нахожу опцию [global] - меняю версию
tds version = 7.0
client charset = CP1251

повторяю проверку согласно пункту 5 - получаю знаки вопроса вместо кириллицы - не смущаюсь - выхожу и приступаю к следующей настройке

Установка APACHE2

сервер httpd я устанавливаю в отдельную директорию - /usr/local/apache2 (в случае неудачи или невнимательности - я просто удаляю данную директорию и инсталлирую заново)

1) нахожу скачиваю и распаковываю файл
tar zxvf httpd-0.61.tar.bz2

2) захожу в созданную директорию и конфигурирую

Опытным путём я заключил, что решения вышеуказанных задач подойдут следующие конфигурации.
./configure --prefix=/usr/local/apache2 --enable-cgi --enable-rewrite
--enable-so --enable-shared=max

3)make
make install

4)и соответственно запускаю
/usr/local/apache2/bin/apachectl start

5)захожу снаружи по ip http://192.168.0.2 и получаю дефолтовое приветствие сервера apache
Теперь нужно сделать стартовый файл для сервера apache для этого я захожу в директорию
cd /usr/local/etc/rc.d

создаю и редактирую файл
ee apache.sh

где пишу следующие строки
#!/bin/sh
case "$1" in
start)
/usr/local/apache2/bin/apachectl start
;;
stop)
/usr/local/apache2/bin/apachectl stop
;;
esac
exit 0

обращаем данный файл в исполняемую программу
chmod +x apache.sh

соответственно редактируем
ee /etc/rc.conf и добавляем туда строку
apache_enable="YES" - перезагружаем сервер и проверяем запущен ли apache
ps -ax|grep httpd

Установка POSTGRESQL

Установку и настройку базы данных postgresql я выполнил почти в соответсвии с рекоммендациями данной статьи http://opennet.ru/base/net/postfix_mail_guide.txt.html
cd /usr/ports/databases/postgresql80-server
make install

конфигурации по умолчанию
ee /etc/passwd

нахожу строку с пользователем pgsql и меняем оболочку /bin/sh на /usr/sbin/nologin следующей коммандой запускаю первичную инициализацию базы данных
sudo -u pgsql initdb -D /uasr/local/pgsql/data

создаю редактором стартовый файл
cd /usr/local/etc/rc.d
ee postgresql.sh

в него заношу следующие строки
#!/bin/sh
echo "POSTGRESQL" $1
/usr/local/bin/sudo -u pgsql /usr/local/bin/pg_ctl -D /usr/local/pgsql/data $1
exit

обращаем данный файл в исполняемую программу
chmod +x postgresql.sh

перезапускаю машину и проверяю как работают процессы apache и postgresql

если всё работает - можно приступать к следующей ступени

УстановкаPHP5

задача - удачно сконфигурировать php примерно так:
./configure
--with-apxs2=/usr/local/apache2/bin/apxs

сервер apache2 был сконфигурирован с параметром -enable-so
проверяю ldd /usr/local/apache2/bin/httpd
--with-mssql=/usr/local/freetds

установлен
--with-pgsql=/usr/local

установлен
--with-gettext=/usr/local

проверяю свои подозрения, что библиотека gettext уже имеется
cd /usr/local/lib
ls *text*

получаю список
--with-iconv-dir=/usr/local

установлен ранее
--with-libxml-dir=/usr/local


иду и устанавливаю cd /usr/ports/textproc && make install clean
[cc lang="bash" tab_size="2" lines="-1"]
---with-gd=/usr/local

устанавливаю cd /usr/ports/grephics/gd && make config &&
выбираю опции: X11, FONTCONFIG,ICONV, make install clean
--with-zlib
--with-ttf
--enable-gd-native-ttf

--with-jpeg-dir=/usr/local

устанавливаю cd /usr/ports/graphics/jpeg && make install clean
--with-png-dir=/usr/local

устанавливаю cd /usr/ports/graphics/png && make install clean
--enable-sockets

make && make install

О настройке самой связки postgresql+postfix+imap по моему удачно написано здесь: http://opennet.ru/base/net/postfix_mail_guide.txt.html

хотя каждую ступеть пришлось последовательно тестировать и изменять, подгонять под свои системные требования.

И ещё
О правилах ограничения smtp в настройках postfix для работы в глобальной сети ничего проще и доступнее пока не находил чем тут http://wiki.centos.org/HowTos/postfix_restrictions

PS. ssh2 и proftpd я поставил из портов в самую последнюю очередь - после того как машина была полностью подготовлена и прописана по сетевым интерфейсам

http://faqman.ru

Обновлено: 12.03.2015