Говоря об Apache, MySQL и PHP, большинство админов имеют в виду стек
LAMP, подразумевающий установку этого набора софта в один из
многочисленных дистрибутивов Linux. Между тем выбор FreeBSD в этом
случае может оказаться более подходящим.
В этой статье я расскажу о всех шагах, которые необходимо выполнить
для того, чтобы поднять FreeBSD вместе со стеком (L)AMP и несколькими
инструментами администрирования на абсолютно голом сервере и сделать
так, чтобы все это работало вместе без сбоев и непредвиденных ситуаций.
Шаг 1. Устанавливаем FreeBSD
Для начала нам понадобится сама операционная система. Идем на официальную страничку FreeBSD (www.freebsd.org),
жмем по ссылке «Get FreeBSD Now», далее выбираем версию ОС (на момент
написания статьи доступны были две версии: 8.2-RELEASE и 7.4-RELEASE),
архитектуру (amd64 или i386), нажимаем на ссылку [ISO] и видим список
доступных образов. Всего их пять: bootonly — загрузочный образ для
установки по сети, disk1 — ISO образ для записи на CD, dvd1 — образ для
записи на DVD, livefs — LiveCD без графического интерфейса, memstick для
записи на USB-брелок. В нашем случае подходящими будут только первый и
второй, а если в сети нет DHCP-сервера, то только второй (DVD-образ
качать смысла нет, потому как CD содержит все нам необходимое).
Итак, скачиваем ISO-образ, нарезаем его на болванку, вставляем в
привод сервера и сбрасываем/включаем его. Ждем пока ОС загрузится. После
окончания загрузки на экране должно появиться окно выбора страны и меню
инсталлятора sysinstall, состоящее из двенадцати пунктов. Нас
интересует только один из них: «Express», он позволяет установить
операционную систему максимально быстро, пропустив многие
предупреждающие сообщения, вопросы и настройки. Выбираем его, жмем
<Enter>.
Появится окно программы для разбивки диска. Здесь можно либо просто
нажать <A> для использования всего диска, либо <C>, чтобы
создать новый раздел в свободной области. Однако, имей в виду, что
FreeBSD использует двухуровневую схему разметки диска при которой один
стадартный DOS-раздел (в терминологии FreeBSD именуемый слайсом) может
содержать в себе несколько BSD-разделов, поэтому на этом шаге
понадобится создать только один раздел. По окончании нажимаем <Q>,
чтобы выйти из программы.
Следующее окно: вопрос об установке загрузчика, просто жмем
<Enter> чтобы установить загрузчик в MBR. Сразу после него
появится окно разметчика созданного ранее раздела на BSD-разделы. Здесь
можно поэкспериментировать, но я бы рекомендовал просто нажать <A>
чтобы программа сама разметила диск. Далее жмем <Q>, чтобы
подтвердить изменения.
Следующее окно: выбор источника установки. По дефолту в качестве
источника используется CD/DVD, поэтому просто жмем <Enter>.
Подтверждаем выбор нажатием <Enter> в следующем окне. Теперь
начнется процесс копирования файлов, по окончании которого на экран
будет выведено сообщение с вопросом о возвращении в главное меню
инсталлятора. Нажимаем <Enter>, далее <X>, «Yes» и
<Enter>. Операционная система должна перезагрузиться. Не забываем
вынуть установочный диск из привода, чтобы ОС загрузилась с жесткого
диска.
По окончании загрузки вводим имя пользователя root и получаем доступ к командному интерпретатору.
Шаг 2. Настройка
Мы только что установили FreeBSD, но она еще не готова к тому, чтобы
выполнять роль полноценного сервера: сеть не работает, root не имеет
пароля, в системе только один пользователь. Исправим это. Перво-наперво,
установим пользователю root пароль:
Дважды вводим пароль. Далее создадим непривилегированного
пользователя, учетную запись которого мы будем использовать для входа на
сервер через SSH. Для этого воспользуемся командой adduser:
На экране будут появляться вопросы, на большинство из которых можно
не давать ответов (жать <Enter>), важными являются только имя
пользователя, дефолтовый командный интерпретатор (лучше выбрать tcsh) и
пароль. В конце команда выведет на экран получившийся список настроек
пользователя, в ответ на который следует ввести слово «yes», и в ответ
на следующий вопрос ввести «no».
Чтобы пользователь смог получать права root, добавим его в группу wheel:
Исправим файл /etc/fstab так, чтобы никто не смог запускать файлы,
расположенные на разделах /tmp и /var. Для этого добавим флаги «noexec» в
поле Options каждого из этих разделов.
Установим более жесткие ограничения на доступ к системным файлам:
Теперь нам нужно настроить сетевое соединение. Во FreeBSD все
глобальные настройки хранятся в файле /etc/rc.conf, поэтому открываем
его с помощью редактора и добавляем следующие строки:
hostname="host.com" ifconfig_em0="inet 1.2.3.4 netmask 0xffffffff" defaultrouter="5.6.7.8"
Здесь em0 во второй строке — это имя настраиваемого сетевого
интерфейса. Список всех доступных сетевых интерфейсов можно получить с
помощью команды ifconfig. В качестве значения опции можно указать DHCP,
тогда для конфигурирования интерфейса будет использован dhclient. Также
сразу добавим несколько важных для нас опций:
icmp_drop_redirect="YES" icmp_log_redirect="YES" icmp_bmcastecho="NO" clear_tmp_enable="YES" update_motd="NO" tcp_drop_synfin="YES" sendmail_enable="NO" sendmail_submit_enable="NO" sshd_enable="YES"
Чтобы выйти из редактора, нажимаем <Esc> и два раза <A>. Добавим адрес DNS-сервера в /etc/resolv.conf:
nameserver 8.8.8.8
Чтобы сетевые настройки вступили в силу, выполняем следующую команду:
Проверяем доступность сети:
Добавим несколько полезных строк в файл /etc/sysctl.conf:
# ee /etc/sysctl.conf # Не отвечать на попытки подключения к закрытым портам # (спасет от некоторых видов DoS-атак и затруднит # сканирование портов) net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 # Разрешаем смотреть список всех процессов только root kern.ps_showallprocs=0
Защитим SSH-сервер от брутфорс-атак:
Теперь SSH-сервер будет отбрасывать 50% новых подключений в случае,
если будет произведено пять неправильных регистраций. Когда их станет
десять, сервер перестанет отвечать вовсе.
При использовании экспресс-установки, система портов (фреймворк для
установки стороннего ПО в ОС) не устанавливается во FreeBSD
автоматически, поэтому нам надо сделать это вручную (это хорошо, потому
что так мы получим самый свежий срез портов, не содержащий устаревшего
дырявого ПО):
Также можно обновить базовую систему, однако это делать не обязательно:
После того как порты будут обновлены, установим в систему инструмент
rkhunter, нужный для отлова руткитов, которые могут быть установлены в
систему в будущем:
Отредактируем конфигурационный файл /usr/local/etc/rkhunter.conf так,
чтобы опция MAIL-ON-WARNING содержала email, на который следует слать
сообщения об обнаруженных аномалиях.
Заставим инструмент проверить себя на обновления:
После этого создадим снимок системных файлов, который будет использоваться в качестве эталона во время поиска руткитов:
Далее добавим в файл /etc/periodic.conf две строки, благодаря которым
проверки обновлений и системы будут происходить каждый день:
Все, теперь все сообщения о подозрительной системной активности будут
помещаться в лог /var/log/rkhunter.log и отсылаться на указанный в
конфигурационном файле email.
Далее настроим cron на синхронизацию системных часов каждые два часа:
Наконец, установим и Webmin, web-ориентированный интерфейс для
удаленного управления сервером (те, кто предпочитает использовать для
администрирования SSH, могут пропустить этот шаг):
Далее необходимо запустить конфигуратор Webmin:
На вопросы можно отвечать нажатием <Enter>, однако когда дело
дойдет до ввода пароля (строка «Login password:»), следует ввести пароль
на доступ к Webmin (лучше, если он будет отличаться от остальных
паролей). Далее можно запустить Webmin:
И протестировать его работу, введя адрес «https://host.com:10000/» в адресную строку ближайшего браузера.
AMP
Теперь настало время установить стек AMP, то есть — веб-сервер
Apache, базу данных MySQL и интерпретатор PHP. Сначала займемся Apache.
Идем в порты и устанавливаем последнюю версию:
На экране должно появиться окно конфигуратора, с помощью которого ты
можешь выбрать установку опциональных компонентов сервера. Что-либо
менять здесь смысла нет, поэтому можешь смело жать <Enter>. После
окончания сборки и установки не забудь добавить сервер в автозапуск
(если поддержка SSL не требуется, вторую строку можно пропустить):
Также в конфигурационный файл следует добавить инструкцию для
загрузки модуля accf_http, который будет буферизировать HTTP-соединения,
что разгрузит сервер и поможет в борьбе с SYN-флудом:
Далее установим интерпретатор PHP пятой версии:
Убедись, что опция «Build Apache module» выбрана. Плюс несколько расширений к нему:
Важно, чтобы на шаге конфигурирования PHP ты не забывал отметить
пункт «MySQL database support», принуждающий систему портов к установке
модуля PHP для работы с MySQL. Без него ничего не заработает.
Теперь открываем конфигурационный файл Apache в текстовом редакторе
(во FreeBSD он запрятан далеко: /usr/local/etc/apache22/ httpd.conf) и
изменяем в нем следующее:
1. После строк LoadModule добавляем следующие две строки:
AddType application/x-httpd-php.php AddType application/x-httpd-php-source.phps
2. Находим опцию ServerAdmin и прописываем в качестве ее значения свой почтовый адрес:
ServerAdmin me@site.com
3. В опции DocumentRoot указываем каталог, в котором будут храниться все файлы нашего веб-сайта:
DocumentRoot "/home/www/data"
Не забываем создать этот каталог:
Я предпочитаю использовать в качестве корневого каталога / home/www
так как, во-первых, каталог /home обычно находится на самом большом
разделе (автоконфигуратор разделов, который мы использовали в ходе
установки, отводит под /home большую часть пространства), а во-вторых, с
ним проще работать, чем с какимнибудь /usr/local/www/apache22/data,
запрятанным во множество подкаталогов.
4. Находим следующую строку:
<Directory /usr/local/www/apache22/data>
И меняем ее так, чтобы в качестве каталога был указан DocumentRoot:
<Directory /home/www/data>
5. Меняем следующие строки:
<ifModule dir_module> DirectoryIndex index.html </ifModule>
На эти:
<ifModule dir_module> DirectoryIndex index.php index.html </ifModule>
6. Внутри директивы <ifModule alias_module> заменяем строку:
ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"
Вот этой:
ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"
7. Следующую строку:
<Directory "/usr/local/www/apache22/cgi-bin">
Заменяем этой:
<Directory "/home/www/cgi-bin">
Сохраняем файл и создаем файл настроек PHP:
Этого будет достаточно для нормальной работы Apache совместно с PHP.
Теперь можно приступить к установке MySQL. Идем в порты и делаем
следующее:
Создадим рудиментарный конфигурационный файл, которого хватит на первое время:
[client] port=29912 [mysqld] port=29912 bind-address=127.0.0.1
Добавим MySQL в автозагрузку и запустим сервер:
Установим пароль на доступ к базе данных:
Теперь MySQL должна нормально функционировать, но управлять базами
данных вручную не очень удобно, к тому же, для некоторых это будет
первый опыт установки MySQL, а с наскоку разобраться с ней не так-то
просто. Поэтому установим веб-интерфейс управления MySQL под названием
PHPMyAdmin:
Поправим конфигурационный файл PHPMyAdmin, указав пароль на доступ к web-интерфейсу:
$cfg['blowfi sh_secret'] = 'пароль';
Теперь вновь открываем конфигурационный файл Apache и делаем следующее:
1. В секцию <IfModule alias_module> добавляем следующую строку:
Alias /phpmyadmin /usr/local/www/phpMyAdmin
2. В конец секции <Directory> добавляем следующие строки:
<Directory "/usr/local/www/phpMyAdmin"> Order allow,deny Allow from all </Directory>
Здесь вместо «Allow from all» можно добавить что-то вроде «Allow from
123.456.789.0/12», чтобы разрешить доступ к PHPMyAdmin только из
определенной подсети.
Перезапускаем Apache:
Это все, теперь (L)AMP должен работать.
HTTPS
PHPMyAdmin для корректной работы требует поддержку HTTPS, и вполне
возможно, что в будущем тебе понадобится этот протокол для установления
безопасного зашифрованного соединения между клиентом и сайтом. Поэтому
сделаем так, чтобы Apache его понимал.
Для начала исправим конфигурационный файл OpenSSL (/etc/ssl/openssl.cnf), добавив в него следующие строки:
dir = /root/sslCA default_days = 3650
Теперь подготовим каталог и создадим сертификаты для собственного центра сертификации:
# cd /root # mkdir sslCA # chmod 700 sslCA # chmod 700 sslCA # mkdir private # cd sslCA # openssl req -new -x509 -days 3650 -extensions v3_ca \ -keyout private/cakey.pem -out cacert.pem \ -config /etc/ssl/openssl.cnf
Проверим, что сертификаты были созданы успешно:
Сгенерируем сертификаты для Apache и поместим их в каталог /etc/ssl:
# cd /root/sslCA # openssl req -new -nodes -out имя_хоста-req.pem \ -keyout private/имя_хоста-key.pem -config /etc/ssl/openssl.cnf # openssl ca -confi g /etc/ssl/openssl.cnf -out \ имя_хоста-cert.pem -infiles имя_хоста-req.pem # cp /root/sslCA/имя_хоста-cert.pem /etc/ssl/crt # cp /root/sslCA/private/имя_хоста-key.pem /etc/ssl/key
Снова открываем конфигурационный файл Apache, находим следующую строку и раскомментируем ее:
Вносим следующие изменения в файл /usr/local/etc/apache22/extra/http-ssl.conf:
# ee /usr/local/etc/apache22/extra/http-ssl.conf # Имя HTTPS-сервера ServerName ssl.host.com # Путь до файла, содержащего сертификат и ключ SSLCertificateFile /etc/ssl/crt/yourhostname-cert.pem
SSLCertificateKeyFile /etc/ssl/key/yourhostname-key.pem DocumentRoot "/home/www/data" ErrorLog "/var/log/httpd-error.log" TransferLog "/var/log/httpd-access.log"
Перезапускаем Apache:
Что дальше?
В этой статье я показал, как поднять полностью работоспособный стек
(L)AMP на базе FreeBSD (так что это скорее FAMP), и все, что тебе теперь
нужно сделать, это скачать свой любимый сайтовый движок и развернуть
его в каталог /home/www/data (не забыв положить скрипты в
/home/www/cgi-bin). Все остальное возьмет на себя (L)AMP.
|