2. Подготовка системы


    Этот раздел посвящен подготовке системы к установке Fantomas.
Цинично? Вряд ли... Fantomas использует не один модуль Netfilter, при этом объединяя их функционал в себе. Поэтому и процесс подготовки к установке Fantomas заключается прежде всего в подготовке к использованию Netfilter.
В принципе, этот процесс мало чем отличается от создания обычной LAMP-платфомы, за исключением пакета ulog-1.24, а также момента конфигурирования и сборки ядра.

    Раздел создавался как пошаговое руководство для начинающих пользователей Linux, которым этот раздел настойчиво рекомендуется к обязательному и полному прочтению!     Для более опытных Коллег этот раздел может быть полезен как справочное руководство.

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

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


2.1     Ядро
2.2     Iptables
2.3     Ipset
2.4     MySQL
2.5     Ulogd
2.6     Apache
2.7     PHP





2.1 Ядро



Думаю не имеет смысла говорить о дистрибутивах, их особенностях и тонкостях установки - это, имхо, выходит за рамки данного мануала. Я полагаю что у Вас уже установлена система и произведена первичная настройка.


    Ядро берем отсюда, файл имеет имя вроде "linux-2.6.х.х.tar.gz". Определите какое ядро подлежит скачиванию, затем можно воспользоваться командой консоли:

wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.x.x.tar.gz


    Дальше так:

tar -zxvf linux-2.6.x.x.tar.gz
cd linux-2.6.x.x
make menuconfig

#*** Режим конфигурирования в виде меню выдает имена опций ядра в подробном виде, поэтому некоторым новичкам порой бывает сложно найти нужную опцию. Если для Вас более привычны краткие имена опций вида "CONFIG_KERNEL_OPTION", то лучше попробуйте по классике:

make config
    Если Вы еще не научились собирать ядро "с закрытыми глазами", то при конфигурировании меняйте только те опции, значение которых Вам известно, в крайнем случае конфигурирование можно отложить и прочитать доку, и потом оперировать уже знакомыми опциями. Это поможет избежать проблем.
    Включите следующие опции:
CONFIG_PACKET
CONFIG_NETFILTER
CONFIG_NETFILTER_ADVANCED
CONFIG_NF_CONNTRACK
CONFIG_NF_CONNTRACK_MARK
CONFIG_NF_CONNTRACK_SECMARK
CONFIG_NF_CONNTRACK_FTP
CONFIG_NF_CONNTRACK_H323
CONFIG_NF_CONNTRACK_IRC
CONFIG_NF_CONNTRACK_NETBIOS_NS
CONFIG_NF_CONNTRACK_PPTP
CONFIG_NF_CONNTRACK_SIP
CONFIG_NF_CONNTRACK_TFTP
CONFIG_NETFILTER_XTABLES
CONFIG_NETFILTER_XT_TARGET_MARK
CONFIG_NETFILTER_XT_TARGET_NFLOG
CONFIG_NETFILTER_XT_TARGET_NFQUEUE
CONFIG_NETFILTER_XT_MATCH_CONNMARK
CONFIG_NETFILTER_XT_MATCH_CONNTRACK
CONFIG_NETFILTER_XT_MATCH_IPRANGE
CONFIG_NETFILTER_XT_MATCH_MAC
CONFIG_NETFILTER_XT_MATCH_MARK
CONFIG_NETFILTER_XT_MATCH_MULTIPORT
CONFIG_NETFILTER_XT_MATCH_QUOTA
CONFIG_NETFILTER_XT_MATCH_SOCKET
CONFIG_NETFILTER_XT_MATCH_STATE
CONFIG_NETFILTER_XT_MATCH_STRING
CONFIG_NF_CONNTRACK_IPV4
CONFIG_NF_CONNTRACK_PROC_COMPAT
CONFIG_IP_NF_QUEUE
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_ADDRTYPE
CONFIG_IP_NF_TARGET_REJECT
CONFIG_IP_NF_TARGET_LOG
CONFIG_IP_NF_TARGET_ULOG
CONFIG_IP_NF_NAT
CONFIG_IP_NF_NAT_NEEDED
CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_IP_NF_TARGET_NETMAP
CONFIG_IP_NF_TARGET_REDIRECT
CONFIG_IP_NF_NAT_PROTO_GRE
CONFIG_IP_NF_NAT_PROTO_UDPLITE
CONFIG_IP_NF_NAT_FTP
CONFIG_IP_NF_NAT_IRC
CONFIG_IP_NF_NAT_TFTP
CONFIG_IP_NF_NAT_PPTP
CONFIG_IP_NF_NAT_H323
CONFIG_IP_NF_NAT_SIP
CONFIG_IP_NF_MANGLE

    Дальше:

make

#*** Если у Вас debian-based система, то выполните команду (в redhat-based системах это обычно автоматизировано):

make bzImage
make modules_install install

#*** Для debian-based систем далее еще один шаг:

mkinitramfs -o /boot/initrd-<kernelversion> <kernelversion>

#*** Пример: mkinitramfs -o /boot/initrd-2.6.33.2 2.6.33.2

    Если все прошло без ошибок, то дальше идем в /boot/grub (если у Вас grub :), сначала в надпапке убеждаемся что новый образ системы встал на место, потом находим grub.conf, открываем текстовым редактором и убеждаемся что строки для загрузки нового ядра присутствуют в конфиге.
Если в строке default указан номер записи старого ядра ( они нумеруются сверху вниз начиная с 0 ), можете поправить эту опцию для загрузки по умолчанию нового ядра. Ни в коем случае не ставьте в опцию timeout слишком маленькое значение (!), т.к. если Ваше новое ядро по какой то причине не загрузится, то Вы всегда при перезагрузке сможете выбрать старое ядро, под которым спокойно допилите глюки нового, избежав тем самым серьезного гемороя.

Наверх    Содержание





2.2 Iptables



    Берем свежую версию iptables отсюда. На момент написания этой доки самая свежая версия - 1.4.4:

wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.4.tar.bz2

    Дальше:

tar -jxvf iptables-1.4.4.tar.bz2
cd iptables-1.4.4
./configure --enable-libipq --with-kernel=/full_path/to/your/kernel/dir
make
make install

    Все, можете сделать "service iptables restart" или посмотреть что скажет "iptables --version".

Наверх    Содержание






2.3 Ipset



    Все тоже самое для ipset. Качаем свежую версию отсюда. На момент написания этой доки это - 2.5.0:

wget ftp://ftp.netfilter.org/pub/ipset/ipset-2.5.0.tar.bz2

    Дальше:

tar -jxvf ipset-2.5.0.tar.bz2
cd ipset-2.5.0
KERNEL_DIR=/full_path/to/your/kernel/dir make
KERNEL_DIR=/full_path/to/your/kernel/dir make install

    Далее, если версия iptables у нас старше чем 1.4.4, а версия ipset - 3.0, то делаем так:
cp kernel/include/linux/netfilter_ipv4/ip_set.h /full-path/to/src/iptables-1.4.4/include/linux/netfilter_ipv4
cd /full-path/to/src/iptables-1.4.4
make
make install

Наверх    Содержание






2.4 MySQL



    Качаем отсюда. На момент написания этой доки свежая версия - 5.1.36:

wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.36.tar.gz/from/ftp://mirror.anl.gov/pub/mysql/

    Распаковываем и ставим:

tar -zxvf mysql-5.1.36.tar.gz
cd mysql-5.1.36
groupadd mysql
useradd -g mysql mysql
./configure --prefix=/usr/local/mysql --with-charset=utf8
make
make install
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
service mysqld start
/usr/local/mysql/bin/mysqladmin -u root -h localhost password 'newpasswd'

#*** откройте файл /etc/my.cnf и добавьте туда строки:
[mysql_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysql/mysqld.pid
service mysqld restart
echo "/usr/local/mysql/lib/mysql" >>/etc/ld.so.conf
ldconfig

З.Ы.: можете попробовать отконфигурить с опцией --disable-shared, возможно это поможет избежать ошибки поиска динамических библиотек при сборке ulogd. Хотя, когда я собирал для себя, то не парился и сделал как описано ниже по сценарию. Работает.

    Все, если все прошло успешно, то с mysql мы закончили.

Наверх    Содержание






2.5 Ulogd


    Ulogd лучше всего брать с git разработчиков (в нем есть последние исправления, на ftp их нет):

git clone git://git.netfilter.org/ulogd.git

Далее:

cd ulogd
autoconf

Если нет git, можно взять ulogd-1.24.tar.bz2 с FTP Netfilter, а потом взять патч с моего сайта, там же где и сам Fantomas. Положить оба файла в один каталог, например в /usr/src, и обработать:

tar -jxvf ulogd-1.24.tar.bz2
patch -p1 <ulogd-1.24_072009_patch.diff
cd ulogd-1.24

Конфигурим и ставим:

ln -s -t include/ /usr/local/mysql/include/mysql    #*** пусть будут под носом, иначе он их может и вовсе не найти ...
./configure --with-mysql --prefix=/usr
make

#*** Если при сборке возникнет ошибка "ld: bad -rpath option", то в этом же каталоге открываем файл Rules.make, находим строчку "MYSQL_LDFLAGS=$(LDFLAGS) -rdynamic -L/usr..." и из этой строки убираем "-rdynamic", сохраняем файл и выходим из него. Снова делаем make, должно собраться нормально.

make install
cp ulogd.init /etc/init.d/ulogd
chmod 755 /etc/init.d/ulogd
chkconfig --add ulogd
chkconfig --levels 345 ulogd on

Поставили? Теперь поправим конфиг ulogd - для этого в каталоге /usr/etc (прим.: если при сборке префикс был указан /usr) находим файл ulogd.conf, открываем для редактирования, и после строчки # output plugins и после раскомментируем следующую строку:


plugin="/usr/lib/ulogd/ulogd_MYSQL.so"

#*** Строку plugin="/usr/lib/ulogd/ulogd_LOGEMU.so" лучше закомментировать, иначе демон ulogd будет писать лог сетевого трафика не только в MySQL, но и локально в лог-файл на диске. Т.к. нас будет интересовать база MySQL, то дублировать гигабайты информации в текстовый лог на диске смысла нет.

Остальные строчки в списке плагинов можно не трогать. Дальше ниже в конфиге находим секцию [MYSQL] и указываем для ulogd параметры соединения с mysql:
[MYSQL]
table="ulog"
pass="12345"
user="root"
db="ulogd"
host="localhost"

Но это еще не все.. Дальше идем в каталог с дистрибутивом ulogd, из которого мы только что ставили демон и делаем следующее:

cd doc
/usr/local/mysql/bin/mysql -u root -p

#*** Дальше в консоли mysql:

create database ulogd;
use ulogd;
source ./mysql.table
quit

#*** Вышли из mysql, запускаем демон:

service ulogd start

Если все прошло успешно, то с ulogd все. Просмотрите лог демона чтобы убедиться в корректности его работы.

Наверх    Содержание






2.6 Apache


    Как известно, существует несколько веток версий httpd. В общем-то не принципиально какую Вы будете использовать, ставятся они почти одинаково несложно, поэтому я опишу установку Apache 2.0, который я выбрал для себя.
    Качаем отсюда. На момент написания этой доки актуальная версия - 2.0.63:

wget http://www.sai.msu.su/apache/httpd/httpd-2.0.63.tar.gz

    Распаковываем и ставим:

tar -zxvf httpd-2.0.63.tar.gz
cd httpd-2.0.63
./configure --prefix=/www --enable-so
make
make install
cp build/rpm/httpd.init /etc/init.d/httpd
chkconfig --add httpd
chkconfig --levels 345 httpd on

#*** откройте файл /etc/init.d/httpd и поправьте пути к файлам в строках apachectl и httpd вместо /usr/sbin/* на /www/bin/*, а затем чуть ниже аналогично поправьте путь к конфигу httpd в строке CONFFILE.

    Дальше открываем файл /www/conf/httpd.conf и настраиваем ServerAdmin, ServerName, DocumentRoot.

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

   В файле httpd.conf найдите строчку <Directory "/www/htdocs">, и ниже, в строчке Options уберите поддержку Indexes.
   Если нет необходимости просматривать страницы Apache из интернет, то можете вообще в httpd.conf в строке Listen указать бинд на внутренний адрес строкой вида "Listen 192.168.0.1:80".
   Впрочем, если нужно чтоб Apache был виден из интернет, то ничего страшного, Fantomas об этом позаботится, в разделе 4 читайте внимательней про файл конфигурации и переменную allowed_ip :).
   Позаботьтесь о пути окружения для root, он задается в /root/.bash_profile в строке PATH, впишите туда все нужные каталоги bin, включая каталоги /../mysql/bin, если их там нет.
   Если на машине есть демоны ssh или telnet, то перевесьте их на другие порты, логически непонятные для непосвещенного. Это конечно не спасет от пристального взгляда вроде "nmap -sV", но хоть немного скроет Ваш порт от лишних глаз. И обязательно отключите доступ по сети к этим демонам для root, в ssh к примеру в конфиге укажите "PermitRootLogin no". Для доступа используйте любой другой логин, не имеющий админских прав, ну а после входа, соответственно, делаем su.
   И еще немаловажно: не вешайте на этот сервер ничего лишнего из того что может привлечь взгляд, тогда возможно Вам и не прийдется отбиваться от заинтересованных.

Наверх    Содержание






2.7 PHP


    Качаем отсюда. На момент написания актуальная версия - 5.2.13:

wget http://ru2.php.net/get/php-5.2.13.tar.gz/from/ru.php.net/mirror

    Распаковываем и ставим:

tar -zxvf php-5.2.13.tar.gz
cd php-5.2.13
cd ext

#*** Качаем отсюда модуль расширения PHP - ssh2, сохраняем прямо в текущем каталоге (ext). На момент написания документации свежая версия - 0.11.0:


wget http://pecl.php.net/get/ssh2-0.11.0.tgz
tar -zxvf ssh2-0.11.0.tgz
mv ssh2-0.11.0 ssh2
cd ..

#*** Вернулись в каталог с исходниками PHP, теперь удаляем старый скрипт configure и генерируем новый:


rm configure
./buildconf --force

#*** Дальше все как обычно - конфигурим, собираем и устанавливаем:


./configure --with-apxs2=/www/bin/apxs --with-mysql=/usr/local/mysql --with-ssh2
make
make install
cp php.ini-dist /usr/local/lib/php.ini

#*** откройте файл httpd.conf и убедитесь в наличии строк LoadModule php5_module modules/libphp5.so и AddType application/x-httpd-php .php .phtml, если их там нет - впишите рядом с похожими строками. В параметре DirectoryIndex к имеющейся строке добавьте index.php

service httpd restart

Наверх    Содержание






Назад