Биллинговая система NoDeny. Пример установки FreeBSD

Данная инструкция представляют собой «заметки на полях» и рекомендации в очень сжатом виде, которые вы вправе не принять, а настроить систему исходя из своих знаний и соображений. Этот документ не поможет вам установить FreeBSD, если ранее вы этого не делали - читайте соответствующие книги/статьи. Более того, необходимо учитывать, что информация актуальна на момент написания документации и в настройке системы со временем могут могут появиться отличия. Вообще, в последнее время FreeBSD стала значительно дружелюбней, так что автору иногда приходится выкидывать куски документации - все меньше и меньше тонкостей и проблем возникает при работе с FreeBSD.

1. Подбор объема HDD

Объем HDD подбирается исходя из выполняемых сервером задач. Наиболее требовательны к объемам дискового пространства сервера под базы данных, все остальные узлы NoDeny (ядро, шлюз, сервер администрирования) имеют минимальные требования т.к будут хранить фактически только операционную систему.

Расходы на базы данных определяются в основном параметрами сохранения трафика - чем больше детализации и чем дольше она хранится, тем, естественно, бОльшие затраты дисковой памяти. Под детализацией понимается полное сохранение всех обращений клиентов на каждый ip адрес в интернете. Эта информация вспомогательная т.к предназначена для разруливания спорных ситуаций, но очень «жадная» к ресурсам. Вы можете вообще отказаться от детализации, тогда вам надолго хватит скромного по современным меркам винчестера (10-20 Гб на сеть из нескольких тысяч человек).

Ориентировочно, детализация трафика для 1000 абонентов требует примерно 200-300 Мб дискового пространства в сутки. При подборе дискового массива учитывайте, что детализацию обычно не требуется хранить очень долго, например, 2-3 месяца вполне достаточно.

Если в вашей системе планируется разделение баз данных на основную и дополнительную - не забывайте, что статистика трафика, в том числе детализированная, сохраняется только в дополнительной базе данных. Поэтому для основной базы данных нет необходимости использовать HDD больших объемов. С запасом хватит даже 10Гб.

Для баз данных больших сетей рекомендовано использование аппаратных рейд-контроллеров.


2. При установке системы для сервера БД, учитывайте, что базы mysql будут находиться в разделе /var, поэтому бОльшую часть дискового пространства отведите ему. Не устанавливайте никакие пакеты (apache и т.д) - пакеты часто обновляются и вы установите устаревший вариант. Кроме того, рекомендуем устанавливать все из портов (/usr/ports) т.к. там хорошо работает система зависимостей, т.е. при установке требуемого пакета автоматически будут установлены все, от которых данный зависит. Более того, update производится также с зависимостями.

После установки системы (после первой перезагрузки) залогиньтесь под root-ом и настройте rc.conf (если забыли настроить сетевые параметры при установке):

Команда bash
ee /etc/rc.conf

(ee - удобный редактор, пришедший на замену трудновоспринимаемому Vi)

Редактирование rc.conf
ifconfig_fxp0="inet 10.0.0.2 netmask 255.255.225.0"
hostname="nodeny.com.gg"
defaultrouter="10.0.0.1"
sshd_enable="YES"
firewall_enable="YES"

fsck_y_enable="YES"
background_fsck="NO"

background_fsck="NO" отключает проверку дисков в бекграунде, для серверов лучше это сделать при старте, fsck_y_enable="YES" говорит "yes" на все вопросы при проверке.

Если вы настраиваете шлюз, то добавьте:

Редактирование rc.conf
gateway_enable="YES"

Команда bash
ee /etc/rc.firewall

Редактирование rc.firewall
#!/bin/sh -
f='/sbin/ipfw'
${f} add 100 allow ip from any to any


DNS-сервер:

Команда bash
ee /etc/resolv.conf

Редактирование resolv.conf
nameserver      10.0.0.1

Делаем reboot либо применяем сетевые параметры без перезагрузки: /etc/netstart. Пока будущий сервер загружается, переключаем монитор на рядом стоящий компьютер с настроенной графической оболочкой и ssh клиентом. Заходим по ssh на настраиваемый сервер.


Обновляем систему:

Команды bash
freebsd-update fetch
freebsd-update install

Обновляем дерево портов:

Команда bash
portsnap fetch


Компилируем ядро пока загружается дерево портов, запускаем еще один ssh и:

Команды bash
cd /usr/src/sys/i386/conf/
cp GENERIC NODENY
ee NODENY
Редактирование файла NODENY. В конце дописываем
options         IPFIREWALL
options         IPDIVERT
options         IPFIREWALL_FORWARD
options         DUMMYNET


В FreeBSD 7.x планировщик SCHED_ULE :

Редактирование файла NODENY
options         SCHED_ULE


Если есть желание облегчить ядро - убираем все упоминания о SCSI, IPV6, принтере, SLIP и т.д. Не перестарайтесь - в будущем это оборудование у вас может появится, в частности не комментируйте дорогие сетевые карты, возможно в скором времени они у вас появятся. Рекомендуем отключить все ISA-сетевые, их век безвозвратно ушел.

Трудно представить, что для биллинга у вас будут устаревшие типы процессоров, поэтому комментируем:

Редактирование файла NODENY
#cpu            I486_CPU
#cpu            I586_CPU


Команды bash
config NODENY
cd ../compile/NODENY
make depend
make
make install

Пока компилируется ядро, возвращаемся к первому окну с ssh-сессией и смотрим закончилась ли загрузка дерева портов, как только она завершится:

Команда bash
portsnap extract
Перезагружаемся с новым ядром. Коннектимся по ssh и ставим:

/usr/ports/shells/bash  
/usr/ports/misc/mc-light
/usr/ports/ports-mgmt/portupgrade
/usr/ports/net/trafshow
/usr/ports/net/mtr
стандартной последовательностью:

Команда bash
cd /usr/ports/shells/bash && make install clean

После установки bash, назначаем его дефолтным для своей учетной записи:

Команда bash
pw usermod efendy -s /usr/local/bin/bash

Не ставьте пакеты параллельно т.к. у них могут быть общие зависимости. Для экономии времени загрузки с интернета вы можете во время компиляции пакета для других выполнить make fetch - только загрузка исходников. Еще большая экономия времени будет при установке скомпиленных паккаджей, но они есть не на все пакеты. mtr лучше компилить так: make -DWITHOUT_X11 install clean - не будут устанавливаться модули для работы в «иксах». Либо:

Команда bash
ee /etc/make.conf

Редактирование make.conf
WITHOUT_X11=yes
WITHOUT_GUI=yes
WITHOUT_IPV6=yes


В будущем всегда следите за безопасностью вашего сервера: держите порты в актуальном состоянии (portsnap, portupgrade), закройте сервисы для доступа «из мира» (к примеру оставьтся «в мир» только 22й порт), не устанавливайте шлюз и файловый/видео/samba архив сети (тем более хостинг) на одном компьютере - это неудобно и небезопасно. Регулярно просматривайте логи.



Не забывайте, что система для повышения производительности должна «тюнинговаться». В разделе настройки фаервола указано какие параметры sysctl стоит подкрутить. По совету админов крупных сетей, попробуйте установить драйверы на сетевые карты em «от Yandex», на момент написания документации находились здесь.