Сергей Яремчук
Исследуем сетевую безопасность посредством Linux Netwosix
Буквально через пять дней после объявления релиза 1.3 дистрибутива Linux Netwosix был анонсирован тестовый вариант следующей второй ветки. Что нового появилось и для каких целей предназначен Linux Netwosix?
Основателем и главным разработчиком дистрибутива является итальянец Vincenzo Ciaglia. На основной странице проекта [1] сказано, что Linux Netwosix является небольшим, мощным, легко настраиваемым, оптимизированным дистрибутивом, созданным для потребностей сетевого администратора. Предназначен для применения на серверах и работы, связанной с исследованием сетевой безопасности. Распространяется по лицензии GNU GPL.
Одним из требований при его создании было дать большую свободу в настройке администратору, так как только таким образом он может сконфигурировать мощный и стабильный в работе сервер. Учитывая большое количество специальных утилит, дистрибутив может также использоваться для специальных исследований, таких как тесты на проникновение.
Главный замысел создателя Linux Netwosix состоит в том, что система содержит минимально необходимое количество пакетов, так как часто бывает в других дистрибутивах, в которых для удовлетворения всех зависимостей на жесткий диск сваливается большое количество ненужных приложений и библиотек. Также нет и приложений с дублирующей функциональностью, т.е. различных вариантов почтовых, ftp и прочих серверов.
При таком подходе Linux Netwosix в некотором смысле напоминает Trustix Secure Linux. Этот базирующийся на RedHat дистрибутив отличается от своего прародителя тщательным подбором пакетов и отсутствием лишнего софта, за счет чего считается более безопасным. Но если Trustix является типичным представителем rpm-based дистрибутивов, то Netwosix принадлежит с source-based-дистрибутивам, в котором утилиты собираются из исходных текстов.
Базовый набор помещается на диск размером 242 Мб, и вся установка занимает не более 10 минут даже далеко не на самых мощных системах. Естественно, весь набор софта не мог поместиться в такой маленький объем, для его пополнения и обновления используется система портов Nepote (NEtwosix POrting Tool Environment), подобная xBSD-системам.
Во второй ветке дистрибутив получил новую систему установки, взятую с CRUX Linux (те, кто работал с CRUX, вообще найдут очень много общего), обновлены многие программы, дистрибутив стал более стабильным и безопасным.
В комплект 2.0-rc1 входит последнее стабильное ядро на момент релиза 2.6.14.5. Работает Linux Netwosix на компьютерах с x86-процессорами, поддержка других архитектур планируется в будущем.
В течение первого года с официального сайта проекта дистрибутив был скачан более 25 тысяч раз. Диск с ним был приложен к итальянскому журналу Linux Magazine. Его использует финское министерство образования, и некоторые университеты в Италии.
Установка Linux Netwosix
Скачиваем iso-образ с официального сайта проекта или любого из зеркал. После этого проверяем правильность полученного файла при помощи контрольной суммы.
# md5sum netwosix2.0-rc1.x86.iso
e88a3a4c2d1f388cb9352442c89038f7
ISO-образ является LiveCD, поэтому записываем на диск, вставляем в привод и перезагружаемся. После появления приглашения boot: необходимо нажать на Enter и затем зарегистрироваться как root с пустым паролем. Краткую инструкцию по установке и настройке Linux Netwosix (на английском) можно получить, зарегистрировавшись во второй консоли ( + ) и введя «netwosix_howto». Следующий этап – создание дисковых разделов. Для этих целей используются fdisk или cfdisk (GNU/parted нет). Разработчики рекомендуют создать четыре раздела:
n swap (2хОЗУ);
n root (350-500 Мб);
n /var (не менее 100 Мб);
n /usr (> 1 Гб).
Хотя в зависимости от назначения сервера можно в этот список добавить /home, /usr/local или /opt. Каждому разделу должен быть присвоен свой тип, т.е. swap 82, остальным 83. После создания разделов форматируем их под нужную файловую систему. В HOWTO приведены команды для создания ext2 (mke2fs /dev/hdaN), ext3 (mke2fs J) и ReiserFS (mkreiserfs), но в дистрибутиве имеются утилиты для создания JFS (mkfs.jfs) и XFS (mkfs.xfs). Поэтому можно выбрать любую из этих файловых систем. Создаем и активируем своп-раздел.
# mkswap /dev/hda1
# swapon /dev/hda1
Интересно, что в документации названия разделов приводятся поочередно то в традиционном обозначении вроде /dev/hda1, то в стиле devfs -/dev/discs/disc0/part1. В отличие от CRUX, в котором не поддерживается обратная совместимость, здесь будут работать оба варианта, но такое расхождение может запутать новичка (хотя вряд ли новичок будет его ставить). И монтируем все созданные разделы в /mnt/.
# mount /dev/hda2 /mnt # корневой
# mkdir /mnt/usr
# mkdir /mnt/var
# mount /dev/hda3 /mnt/usr
# mount /dev/hda3 /mnt/var
После этого приступаем к собственно установке, введя setup. В первом экране выбираем установку или обновление Linux Netwosix, затем необходимо ввести каталог, в который смонтированы разделы (/mnt). После этого предлагается установить базовый набор ( ), в который входит около 65 пакетов. Среди них auticonf 2.59, automake 1.9.5, bash 3.0, coreutils 5.2.1, devfsd 1.3.25, gcc 3.43, glibs 2.3.5, make 3.80, patch, lilo 22.7, ncurces, perl 5.8.6, vim, sendmail 8.13.4, wget, net-tools.
Рисунок 1. Выбор пакетов базовой установки
Выберите обязательно утилиты для работы с портами ports. Кроме базового набора, на жесткий диск копируются исходные тексты ядра 2.6.14.5. По окончании процесса выводится отчет об установленных пакетах. На этом установка считается законченной. Но в традициях всех дистрибутивов, собираемых из исходных текстов ядра, в такой системе нет. Поэтому следующим шагом идет компиляция ядра. Переходим в chroot-окружение.
# mount -t devfs devfs /mnt/dev
# mount -t proc proc /mnt/proc
# chroot /mnt /bin/bash
И собираем ядро:
# cd /usr/src/linux-2.6.14.5
# make menuconfig
# make all
# make modules_install
# cp arch/i386/boot/bzImage /vmlinuz
# cp System.map /
Чтобы не терять времени, пока компилируется ядро, переходим во вторую консоль и приступаем к настройке системы. Первым делом устанавливаем пароль суперпользователя командой passwd. Далее при помощи редактора vi редактируем файлы /etc/fstab, /etc/rc.conf, /etc/rc.d/net, /etc/hosts и /etc/resolv.conf. Хочется отметить, что разработчики не стали усложнять жизнь, а заготовили шаблоны. Например:
# /dev/#REISERFS_ROOT# / reiserfs defaults 0 0
Причем такие строки существуют для всех поддерживаемых ядром файловых систем. Остается только раскомментировать нужную строку и вместо #REISERFS_ROOT# вписать нужный раздел. Теперь /etc/rc.conf, в котором необходимо указать клавиатурную раскладку (можно посмотреть имеющиеся в /usr/share/kbd/keymaps/i386/qwerty), установить часовой пояс (/usr/share/zoneinfo/), шрифт (/usr/share/kbd/consolefonts/) и указать автоматически запускающиеся при старте системы сервисы.
У меня он получился такой:
FONT=Cyr_a8x16
KEYMAP=ru4
TIMEZONE=Europe/Kiev
HOSTNAME=host.com
SERVICES=(net crond)
Обратите внимание на строку SERVICES, в которой просто перечислены сервисы, которые необходимо автоматически запустить при старте системы, все имеющиеся на данный момент можно найти в /etc/rc.d/. После установки в этом каталоге будет четыре файла, crond, inetd, net, sendmail. Сетевые интерфейсы настраиваются в /etc/rc.d/net, который также снабжен шаблонами. Настроим один интерфейс жестко с IP-адресом 192.168.0.1, второму адрес назначает провайдер.
#!/bin/sh
#
# /etc/rc.d/net: start/stop network
# Linux Netwosix
# <http://www.netwosix.org>
if [ "$1" = "start" ]; then
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.0.1 netmask 255.255.255.0
/sbin/dhcpcd eth1
/sbin/route add default gw 192.168.1.100
elif [ "$1" = "stop" ]; then
/sbin/ifconfig eth1 down
/sbin/ifconfig eth0 down
/sbin/ifconfig lo down
killall -q /sbin/dhcpcd
else
echo "usage: $0 start|stop"
fi
# End of file
И последним этапом конфигурируем и устанавливаем загрузчик LILO. Файл /etc/lilo.conf также имеет шаблон, и нам остается только указать правильно корневой раздел.
#
# /etc/lilo.conf
# Linux Netwosix
# <http://www.netwosix.org>
#
lba32
install=text
boot=/dev/hdа
image=/vmlinuz
label=LinuxNetwosix
root=/dev/hdа2
read-only
append="quiet"
# End of file
Редактируем, записываем, нажав <Esc> и набрав «:wq». И устанавливаем:
#lilo -v
Все, система полностью готова к работе, самое время добавить необходимые сервисы, поэтому переходим к системе портов.
Система пакетов и портов Linux Netwosix
В документации проекта сказано все о системе портов nepote, но абсолютно ни слова не говорится о системе пакетов, хотя они в системе используются, и умолчать об этом прав не имеем. Очевидно, пакеты планируется использовать только при установке и обновлении системы, главную же роль при построении сервера будет играть все-таки nepote. Система пакетов не только полностью заимствована, но и даже совместима с Crux.
Устанавливаются пакаджи при помощи команды pkgadd с указанием полного имени пакета, при этом будет произведена проверка зависимостей и после чего предварительно скачанный с сайта пакет установится. Если пакет уже установлен, но требуется обновить его, то набрав:
# pkgadd -u package_name
избежим сообщения о том, что пакет уже установлен. Для того чтобы предотвратить модификацию некоторых важных для системы каталогов и файлов они указываются в /etc/pkgadd.conf. Например:
# UPGRADE ^.*$ YES
UPGRADE ^etc/.*$ NO
UPGRADE ^var/log/.*$ NO
UPGRADE ^etc/mail/cf/.*$ YES
Если снять комментарий с первой строки, будут модифицированы все файлы. Более поздняя запись имеет больший приоритет при запросе. Во второй и третьей строках запрещается модификация каталога и подкаталогов /etc и /var/log, но в последней строке разрешено изменение файлов в /etc/mail/cf/. Удалить пакет также просто:
# pkgrm bash
и его как не бывало, зависимости не проверяются, но, очевидно, считается, что человек, дающий такую команду, знает, что делает, и понимает последствия. С другой стороны, удалять в дистрибутиве практически нечего, все и так установлено по минимуму, поэтому особой необходимости в этом, очевидно, и нет. Узнать информацию об установленных пакаджах можно, набрав:
# pkginfo -i
или если нужен определенный, то:
# pkginfo -l bash
Используя pkgmk, можно собрать пакаджи самому.
Но основным средством, предназначенным для установки приложений, является nepote. На момент написания статьи в системе портов было около 190 приложений в 9 категориях. Понятие порта здесь немного отличается от таковых в FreeBSD. Под портом понимается скрипт, обеспечивающий загрузку и компиляцию конкретной программы, а также набор программ, упрощающих обновление дерева, поиск нужных портов. Перед началом работы рекомендуется обновить дерево портов. Пока это делается вручную, в будущем планируется операцию автоматизировать, хотя при желании простенький скрипт можно написать и самому.
# cd /
# wget –c ftp://rm.mirror.garr.it/mirrors/netwosix/nepote/ports.tgz
# tar xzf ports.tgz
# rm ports.tgz
Либо при помощи утилиты nepote:
# nepote
*******************> Linux Netwosix - NEPOTE <*******************
Select an option and press enter, please.
*****************************************************************
(1) to update your NETWOSIX portage tree (from the net)
(2) to update from the net your Linux Netwosix box
(0) to quit
*****************************************************************
Nepote is developed by Vincenzo Ciaglia
*****************************************************************
|
Нажав клавишу <1>, можно произвести обновление всего дерева портов как с официального сайта, так и указав любой другой сервер. Если выбрать <2>, то будет загружен и установлен файл обновлений системы updateLN.tgz. Конфигурационные файлы nepote находятся в /etc/nepote, заглянув внутрь, можно легко подстроить систему под себя. Для поиска порта используется команда nepote-find. После запуска будет предложено ввести название порта, если такой пакет будет обнаружен, то будет выведен полный путь к нему. Например, файл порта веб-сервера Apaсhe выглядит так.
# LINUX NETWOSIX - NEPOTE PACKAGE
# Description: Apache Server
# URL: http://www.apache.org
# Date created: Dec, 25 2005
# Maintainer: Apache.org
# Please, change only this 4 lines, to build your package from a portage tree
package_name=httpd
version=2.2.0
release=2
source=http://mirrors.publicshout.org/apache/httpd/httpd-2.2.0.tar.gz
# STOP!
# Downloading the package ...
wget $source
# building the packages using NETWOSIX portage tree
tar xzf $package_name-$version.tar.gz
cd $package_name-$version
./configure
make
make install
cd /usr/ports/net/apache
rm $package_name-$version.tar.gz
rm -r $package_name-$version
Как видите, ничего сложного здесь нет, это набор обычно задаваемых команд.
Для его установки необходимо зайти в каталог порта и ввести sh nepote.
# cd /usr/ports/net/apaсhe
# sh nepote
После чего файл будет скачан, распакован, скомпилирован и установлен. Если в процессе установки появятся проблемы, связанные с неудовлетворенными зависимостями, то в этом случае следует использовать команду «sh nepotedep».
Для установки флагов компилирования используется файл /etc/pkgmk.conf.
export CFLAGS="-O2 -march=i686 -pipe"
export CXXFLAGS="-O2 -march=i686 -pipe"
Хотя в дереве портов и программе установки 2.0 есть, на мой взгляд, несколько недоработок. Например, на CDдиске /netwosix/additional присутствует раздел, содержащий исходные тексты 116 приложений, в том числе и входящих в дерево портов. Но ни во время установки системы, ни при использовании nepote эти архивы никак не задействуются, лежа мертвым грузом. Хотя в принципе их можно использовать. Не скачивать же их повторно.
Например, смонтировать диск и скопировать архив веб-сервера Apaсhe httpd-2.2.0.tar.bz2 в каталог /usr/ports/net/apaсhe. Но так просто установить его не получится, т.к. скрипт nepote будет искать файл с расширением tar.gz. Поэтому просто переделываем под свои нужды скрипт, исправив следующие строки.
# wget $source
tar xjf $package_name-$version.tar.bz2
rm $package_name-$version.tar.bz2
Теперь Apache установится без проблем. Далее название подкаталога graphics, по моему мнению, несколько не соответствует ожидаемым приложениям, т.к. зайдя внутрь, готов увидеть что-то вроде GIMP. Сейчас внутри – 8 портов: axyftp, gftp, xchat, sylpheed, dxpc, pavuk, ethereal и crank.
Вывод
Есть два типа администраторов. Первый не будет (или не любит) заниматься «бесполезной» работой и использует то, что установлено вместе с дистрибутивом и доступно через обновления. Второй пересоберет критически важные для него пакеты со своими настройками и уберет, по его мнению, лишнее. Netwosix предназначен именно для вторых, которым этот дистрибутив будет несомненно интересен. При наличии подготовленных конфигурационных файлов ядра и серверов, систему под любые требования можно собрать в течение часа. И хотя предрелиз 2.0 явно сыроват, но это не мешает его использовать полноценно.
Ссылки:
- Сайт проекта Linux Netwosix – http://www.netwosix.org.
- Vincenzo Ciaglia, «Linux Netwosix One Year Later» – http://www.linuxsecurity.com/content/view/117808/49.