Разделы:

Главная

О проекте

Загрузки

Документация:

Linux

BSD

Другие Unix

Программинг

HTML, XML...

Сервера

"Окна Закрой!"

MANы

 


NetBSD: опыт эксплуатации

  1. Введение
  2. Установка
  3. Начальная настройка
  4. Пакетный фильтр ipf
  5. Установка программного обеспечения
  6. Оптимизация
    • Компиляция ядра и обновление системы
    • Работа с PnP-устройствами
    • Управление системой с помощью sysctl

1. Введение

На написание данной статьи меня вдохновил весьма скудный объем русскоязычной документации по ОС NetBSD, касающейся непосредственно настройки, оптимизации и эксплуатации системы. Практически все данные в этой статье советы можно найти в официальной документации на сайте проекта http://www.netbsd.org, но они разрознены и на языке, не являющемся для большинства жителей России родным. Цель данной статьи – повысить интерес со стороны конечных пользователей к данной операционной системе и предоставить информацию к размышлению для системных администраторов.

Можно долго рассуждать о достоинствах и недостатках различных UNIX-подобных (к которым принадлежит и NetBSD) операционных системах, но по большей части это споры сродни религиозным и смысл приобретают только при реализации каких-то конкретных задач.

Основным недостатком (как может показаться на первый взгляд) данной ОС является трудность русификации, но при использовании в качестве сервера, сомневаюсь, что данный факт доставит большие неудобства. Основное достоинство – стабильность, защищенность и возможность работать практически на всем, у чего есть ЦП и некоторое количество памяти.

В настоящее время NetBSD установлена у меня дома в качестве шлюза в Internet, используется соответственно 2 сетевых интерфейса и в качестве резервного канала – GPRS (Конфигурация машины: Am5x86 W/T 150 (486-class), 32MB RAM, USR Robotics 33.6 Int ISA (не использую), 3COM 3C509B, NE2000, 2MB Cirrus Logic Video, 3GB HDD, 2x Sony CD-ROM).

2. Установка

Для установки системы необходимо выполнить следующий нехитрый набор действий:

  1. С ftp://ftp.netbsd.org взять ISO-образ последнего релиза (на время написания данной статьи - 1.6.1) для своей платформы (в моем случае – i386).
  2. Записать образ на компакт диск используя Nero Burning Rom или любую другую аналогичную программу.
  3. При необходимости подготовить две загрузочные дискеты, используя утилиту rawrite, rawrite32 для Win/DOS, dd для UNIX-like или любую аналогичную. При наличии CD-ROM, поддерживающего загрузку с компакт диска данный этап можно пропустить.
Выставляем в BIOS загрузку с CD-ROM/FDD соответственно и перезагружаем компьютер. Как и в остальных BSD – системах, видим таймер, ход которого можно прервать или ждем окончания отсчета. В зависимости от мощности машины, на экране будет проходить листинг диагностики системы и обнаружение установленного оборудования. После некоторого времени, необходимого для завершения процесса начальной загрузки и создания файловой системы в памяти мы попадаем в голубенькое окно программы sysinst. На протяжении всего процесса инсталляции мы будем работать именно с ней. Я сомневаюсь, что процесс установки вызовет какие-либо сложности даже у начинающего пользователя, за исключением, разве что, процесса разбиения диска, так как если выбрать ручное разбиение придется напрячься и высчитывать смещение разделов друг относительно друга. Я для этих целей использовал обычный калькулятор. При использовании автоматического разбиения, под swap (файл подкачки) отводится удвоенный размер RAM, что при большом ее объеме будет лишь напрасной тратой дискового пространства. Довольно интересным может оказаться пункт "Utility menu", из которого можно запустить командный интерпретатор sh, выставить временную зону, настроить сеть и функции регистрации событий. При настройке сети есть возможность сохранить установленные параметры сетевых интерфейсов для дальнейшего использования. Также в процессе установки, система поинтересуется, что мы хотим использовать в качестве системной консоли. Выбрать можно один из двух вариантов:
  • Normal bootblock - системной консолью служит монитор, подключенный к машине.
  • Serial bootblock - присоединяем системную консоль к первому последовательному порту.
Выбирайте что Вашей душе угодно. Заключительным этапом установки будет выбор устанавливаемых пакетов, если у читателя был какой либо опыт работы с UNIX-like системами, сложностей тоже не возникнет, в моем случае я не устанавливал компоненты X11, остальные пункты отметил “Yes” (за исключением того, что из всего набора ядер ограничился GENERIC). Далее придется указать, откуда будет проводится установка: CD-ROM, FTP, NFS и т.д. После установки пакетов придется ответить на пару вопросов касательно временной зоны, метода шифрования и пароля пользователя root. Вот в принципе и все...

3. Начальная настройка

После первой перезагрузки после установки системы мы попадаем в командный интерпретатор sh, функциональность которого мне лично кажется бедной и аскетичной. Это не проблема, так как в NetBSD присутствует система портов, что позволяет быстро устанавливать, удалять и администрировать программное обеспечение. С этим разберемся позже, в первую очередь настроим доступ к сети. Все главные сетевые настройки хранятся в файле /etc/rc.conf . На него и обратим свой пристальный взор:
#       $NetBSD: rc.conf,v 1.96 2000/10/14 17:01:29 wiz Exp $
#
# see rc.conf(5) for more information.
#
# Use program=YES to enable program, NO to disable it. program_flags are
# passed to the program on the command line.
#

# Load the defaults in from /etc/defaults/rc.conf (if it's readable).
# These can be overridden below.
#
if [ -r /etc/defaults/rc.conf ]; then
        . /etc/defaults/rc.conf
fi

# If this is not set to YES, the system will drop into single-user mode.
#
rc_configured=YES

# Add local overrides below
#
wscons=YES
#----------------------------home---------------
ifconfig_ep0="inet 192.168.1.4 netmask 255.255.255.0"
ifconfig_ne0="inet 192.168.0.1 netmask 255.255.255.0"
defaultroute="192.168.0.2"
hostname="netbsd"
domainname="dreamcatcher.ru"
clear_tmp=YES
sshd=YES
syslogd=YES
syslogd_flags="-ss"
dmesg=YES
ipfilter=YES
ipnat=YES
ipfs=YES
Как видно из вышеприведенного, имеется два сетевых интерфейса, указан шлюз по умолчанию, установлено имя машины и домен. Параметр
syslogd=YES
syslogd_flags="-ss"
Указывает на то, что ведется регистрация событий с помощью демона syslogd, но порт для принятия регистрационных событий извне не открывается. Также запущен сервер sshd, служащий для удаленного доступа к машине.

Параметр

dmesg=YES
Заставляет при каждой загрузке создавать файл (обычное месторасположение в /var/run/dmesg.boot) с списком устройств обнаруженных на машине.

Параметры

ipfilter=YES
ipnat=YES
ipfs=YES
Служат для задействования систем пакетной фильтрации, NAT и регистрации состояния счетчиков пакетов. Пока не настроите всю систему, не рекомендую задействовать эти параметры.

Все установленные параметры вступят в действие после перезагрузки.

В случае отсутствия сети – подготовим вариант с использованием GPRS:

В директории /etc/ppp разворачиваем примерно следующую структуру: /etc/ppp/

  • chatscripts
  • peers
В chatscripts помещаем файлы gprs-chat и gprs-disconnect-chat.
gprs-chat:

##################################################################### 
ABORT 'BUSY' 
ABORT 'NO ANSWER'
ABORT 'NO CARRIER' 
ABORT 'NO DIALTONE' 
ABORT '
RINGING\r
\r
RINGING\r' 
SAY "GPRS modem init: press -C to disconnect"
# Wake up the modem 
# 
TIMEOUT 5 
'' 'AT' 
OK-ATQ0V1&C1-OK 'ATE1' 
ABORT 'ERROR' 
TIMEOUT 12 
OK 'AT&F' 
OK 'AT+CMEE=2'
OK 'AT+CGDCONT=1,"IP","unlim19.msk","0.0.0.0",0,0' 
SAY "
+ defining PDP context" 
OK 'AT+CGQREQ=1,0,0,0,0,0' 
SAY "
+ defining QoS requirements" 
OK 'AT+CGQMIN=1,0,0,0,0,0' 
# Enable GPRS. 
# TIMEOUT 45 
OK 'AT+CGATT=1' 
SAY "
+ attaching to GPRS" 
OK 'ATD*99***1#' 
SAY "
+ requesting data connection" 
CONNECT '' 
SAY "
+ connected" 
#####################################################################
(Я использую безлимитный тариф от "Мегафон" и Siemens M50)

gprs-disconnect-chat:

##################################################################### 
ABORT BUSY 
ABORT ERROR 
ABORT 'NO DIALTONE' 
TIMEOUT 30 
# Get some attention 
'' '+++\c' 
SAY " + sending break" 
# Hang up data connection 
# 
'' 'ATH' 
SAY "
+ dropping data connection" 
# Disconnect from GPRS 
OK 'AT+CGATT=0' 
SAY "
+ disconnecting from GPRS" 
OK '\c' 
SAY "
+ disconnected." 
####################################################################
Далее в peers помещаем файл gprs:
##################################################################### 
name ppp 
/dev/cuaa1 
# Serial port line speed and options 
57600 
# Control character handling 
asyncmap 20A0000 
escape FF 
# Generic GPRS options 
file /etc/ppp/gprs-options 
# Chat scripts 
connect "/usr/bin/chat -f /etc/ppp/chatscripts/gprs-chat" 
disconnect "/usr/bin/chat -f /etc/ppp/chatscripts/gprs-disconnect-chat" 
#####################################################################
В директории /etc/ppp помещаем файл gprs-options:
#####################################################################
# Change this line to 'defaultroute' if you want to use the GPRS link 
# as your gateway. 
defaultroute 
#Comment this line out to let pppd background itself. 
nodetach 
# Turn this on to see all the PPP negotiations 
debug 
# Limit the MTU (workaround for an oddity in the VPN) 
mtu 1500 
# Use hardware flow conrtrol 
crtscts 
# Let the phone figure out all the IP addresses 
noipdefault 
ipcp-accept-local 
ipcp-accept-remote 
# No ppp compression 
novj 
novjccomp
# For sanity, keep a lock on the serial line 
lock 
#####################################################################
Так же в /etc/ppp должен быть помещен (или отредактирован) файл chap-secrets:
##################################################################### 
# Secrets for authentication using PAP 
# client server secret IP addresses 
gdata * gdata 
#####################################################################
Как только у нас появился доступ к сети, начинаем наводить красоту: С ftp://ftp.netbsd.org/pub/NetBSD/packages/1.6.1/i386/shells/ выкачиваем пакет bash-doc-2.05.2.tgz и используя команду:
pkg_add bash-doc-2.05.2.tgz 
Устанавливаем его. Также советую скачать links-2.1.0.14.tgz, так как, по моему мнению, с ним довольно удобно работать как по http, так и по ftp . Едем дальше: Так как работать под root нехорошо, создаем еще одного пользователя:
# mkdir /home/user
# useradd user
# chown user /home/user/
Обеспечим пользователю возможность использования команды su:
#vi /etc/group
и добавим его в группу wheel:
wheel:*:0:root,user
В качестве оболочки поставим ему свежеустановленный bash:
#vi pw
редактируем строку
user:*:1002:100::0:0::/home/user:/usr/pkg/bin/bash

Для удобства работы рекомендую создать в домашнем каталоге пользователя файл .bash_profile, для чего выполнить:

#cd /home/user
#vi .bash_profile
Мой файл .bash_profile Выглядит следующим образом:
PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/pkg/sbin:/usr/pkg/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin"
export PATH
PS1="\u@\h:"
export PS1
Файловая система FFS (Fast File System), хотя и называется "быстрой", на самом деле таковой не является, что прискорбно. Устранить данное недоразумение можно используя softupdates (она же используется в FreeBSD). Данная функция до сих пор считается экспериментальной, что не мешает ей с успехом работать. Для задействования softdeps на разделе /usr необходимо отредактировать файл /etc/fstab:
/dev/wd0a / ffs rw 1 1
/dev/wd0b none swap sw 0 0
/dev/wd0e /usr ffs rw 1 2
/kern /kern kernfs rw
Заменить на:
/dev/wd0a / ffs rw 1 1
/dev/wd0b none swap sw 0 0
/dev/wd0e /usr ffs rw,softdep 1 2
/kern /kern kernfs rw
Соответственно, за сим следует перезагрузка.

В принципе, программа-минимум на этом выполнена, хотя нет предела совершенству.

4. Пакетный фильтр ipf

Смысл фильтрации пакетов, думаю, рассказывать не требуется. Понятно, что это хорошо и имеет место быть. Если сейчас начать расписывать синтаксис и способ употребления ipfilter и ipnat, то выльется это на не один десяток страниц. Лучше я приведу несколько примеров и постараюсь их объяснить. Политика по умолчанию:
  • Разрешено все, что не запрещено
  • Запрещено все, что не разрешено
Разрешающая позиция легко осуществима. Если Вы не даете никаких правил ipfilter, все у вас так и будет. Правила, сгенерированные сценарием mkfilters основаны на немного расширенной разрешающей позиции. Разрешающая позиция крайне небезопасна.

Сгенерировать правила с использованием mkfilters очень просто:

# mkfilters > /etc/ipf.rc
Политика запрещения более безопасна, но также более трудно осуществима. Если Вы что-то забыли, то скорее всего ничего не будет работать и в достаточно большой сети вопли возмущенных пользователей не заставят себя долго ждать. Приведу пример правил:
Составим список сервисов, которые сразу разрешаем:
  • DNS: исходящий DNS на порту 53/udp первичного DNS-сервера от провайдера, исходящий DNS на порту 53/tcp вторичного DNS-сервера от провайдера
  • http: принимаем исходящие http-запросы на порт 80/tcp, для функционирования внутреннего web – сервера
  • smtp: исходящий smtp на порту 25/tcp для возможности отсылки писем sendmail или postfix2
  • pop3: исходящий pop3 на порту 110/tcp для возможности получения писем через fetchmail
  • ftp: исходящий ftp на портах 20/tcp/udp, входящий ftp-данных на портах 21/tcp/udp
Пишем правила:
#-------------------------------------------------------------------------- 
# ep0 - external interface 
# ne0 - internal interface 
#-------------------------------------------------------------------------- 
# First, nasty pakets which we don't want near us at all 
# pakets which are too short to be real except echo replies on lo0 
pass in log quick on lo0 proto icmp from 127.0.0.1/8 to 127.0.0.1/8 with short 
block in log quick all with short 
block in log quick all with opt lsrr 
block in log quick all with opt ssrr 
#-------------------------------------------------------------------------- 
# loopback packets left unmolested 
pass in log quick on lo0 all 
pass out log quick on lo0 all 
#-------------------------------------------------------------------------- 
# Group setup: 
# 100 incoming ep0 
# 150 outgoing ep0 
# 200 incoming ne0 
# 250 outgoing ne0 
#-------------------------------------------------------------------------- 
block in log body on ep0 all head 100 
block out log body on ep0 all head 150 
#-------------------------------------------------------------------------- 
block in log on ne0 all head 200 
block out log on ne0 all head 250 
#-------------------------------------------------------------------------- 
# incoming ep0 traffic - group 100 
# 1) prevent localhost spoofing 
block in log quick from 127.0.0.1/32 to 192.168.0.0/24 group 100 
block in log quick from 127.0.0.1/32 to 192.168.1.0/24 group 100 
block in log quick from any to 127.0.0.1/8 group 100 
#-------------------------------------------------------------------------- 
# 2) deny pakets which should not be seen on th internet (paranoid) 
block in log quick from 10.0.0.0/8 to any group 100 
block in log quick from any to 10.0.0.0/8 group 100 
block in log quick from 172.16.0.0/16 to any group 100 
block in log quick from any to 172.16.0.0/16 group 100 
block in log quick from 192.168.0.0/16 to any group 100 
block in log from any to 192.168.0.0/16 group 100 
# 3) implement policy 
# allow incoming ftp-data 
pass in log quick proto tcp/udp from any to 192.168.1.100/24 keep state group 100 
# if nothing applies, block and return icmp-replies (unreachable and rst) 
block return-icmp(net-unr) in proto udp from any to any group 100 
block return-rst in log proto tcp from any to any group 100 
#-------------------------------------------------------------------------- 
# outgoing ep0 traffic - group 150 
# Setup outgoing DNS 
pass out log quick proto tcp/udp from any to 212.40.0.10 port = 53 keep state group 150 
pass out log quick proto tcp/udp from any to 212.40.5.50 port = 53 keep state group 150 
# allow outgoing http-service 
pass out log quick proto tcp from any to any port = 80 flags S/SA keep state keep frags group 150 
# allow outgoing smtp traffic 
pass out log quick proto tcp from 192.168.1.100/24 to any port = 25 flags S/SA keep state group 150 
# allow outgoing pop3 traffic 
pass out log quick proto tcp from 192.168.1.100/24 to any port = 110 flags S/SA keep state group 150 
# allow outgoing ftp traffic 
pass out log quick proto tcp/udp from 192.168.1.100/24 to any port = ftp keep state group 150 
pass out log quick proto icmp from any to any keep state keep frags group 150 
#-------------------------------------------------------------------------- 
# incoming traffic on ne0 - group 200 
#-------------------------------------------------------------------------- 
# 1) prevent localhost spoofing 
block in log quick from 127.0.0.0/8 to any group 200 
block in log quick from 192.168.0.1/32 to any group 200 
block in log quick from 192.168.1.4/24 to any group 200 
pass in log quick from any to any group 200 
#-------------------------------------------------------------------------- 
# outgoing traffic on ne0 - group 250 
#-------------------------------------------------------------------------- 
block out log quick from 127.0.0.0/8 to any group 250 
block out quick from any to 127.0.0.0/8 group 250 
block out log quick from any to 192.168.0.1/32 group 250 
pass out log quick from any to nay group 250 
#--------------------------------------------------------------------------
Для резервного GPRS-соединения набор правил я приводить не буду, так как там все примитивно – набор правил создан с помощью mkfilters и используется крайне редко…

Почитать про это все дело можно здесь - http://www.obfuscation.org/ipf/ , http://dreamcatcher.ru/docs/ipf2.html , и здесь http://dreamcatcher.ru/docs/ipf.html .

5.Установка программного обеспечения

Есть два принципиально разных пути установки программного обеспечения – из исходных текстов и из системы портов.

Из исходных текстов собирать приложения несложно – достаточно скачать архив и глядя внимательным и зорким глазом в INSTALL и/или в README поставить его. Порядок примерно таков:

# tar xvzf arhive.tar.gz
#cd arhive/
#./configure - - help 
#./configure 
#make
#make install
Уже скомпилированные пакеты доступны для свободного скачивания в каталоге /pub/NetBSD/packages на официальном ftp – сервере проекта. Установить откомпилированный пакет с CD-ROM или HDD:
# pkg_add /path/to/package.tgz
Установить откомпилированный пакет, скачав его с ftp – сервера можно командой:
# pkg_add ftp://ftp.NetBSD.org/pub/NetBSD/packages/<OS Ver>/<arch>/All/package.tgz
Приложение будет по умолчанию установлено в /usr/pkg/bin.

Также возможен вариант со сборкой пакетов из исходных текстов. Получить дерево портов можно скачав файл pkgsrc.tar.gz ftp://ftp.NetBSD.org и распаковав его в /usr/pkgsrc. Также, можно сделать это через SUP или CVS. Если Вы используете SUP (Software Update Protocol), то исследуйте примеры, лежащие /usr/share/examples/supfiles. При использовании CVS, все работает также просто:
Для командного интерпретатора csh это выглядит так:

% setenv CVSROOT anoncvs@anoncvs.NetBSD.org:/cvsroot
% setenv CVS_RSH ssh
% cd /usr
% cvs checkout -P pkgsrc
После выполнения этих нехитрых действий в каталоге /usr/pkgsrc будет лежать дерево портов, разбитое по соответствующим категориям.

Для обновления дерева портов используйте:

% setenv CVSROOT anoncvs@anoncvs.NetBSD.org:/cvsroot
% setenv CVS_RSH ssh
% cd /usr/pkgsrc
% cvs -q update -dP
После этого, установка приложений сводится к следующим действиям: Скачиваем и компилируем:
% cd editors/vim
% make
Устанавливаем:
% make install
===> Installing for top-3.5beta5
===> Becoming root@mofo to install top-3.5beta5.
/usr/bin/su Password: <password>
[...installation continues...]
Вот и вся недолга… Полно этот вопрос освещен в документации - http://www.netbsd.org/Documentation/pkgsrc/using.html .

6. Оптимизация

Компиляция ядра и обновление системы

Когда Вы установили систему, вполне естественным будет поддерживать ее в адекватном состоянии – то есть обновлять бинарные файлы и проводить перекомпиляцию ядра, чтобы установить последние исправления в системе безопасности. Это делается достаточно просто. Для получения исходных текстов необходимо выполнить следующую команду:
$ cd /usr
$ env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot co -r netbsd-1-6 -P src
Для обновления существующего дерева исходных текстов выполните:
$ cd /usr/src
$ env CVS_RSH=ssh cvs update -dP
Для обновления выборочного приложения выполните:
$ cd src                                                        
$ env CVS_RSH=ssh cvs update -d -P -r netbsd-1-6 gnu/dist/sendmail/sendmail
$ cd gnu/usr.sbin/sendmail
$ make USETOOLS=no cleandir dependall
$ su
# make USETOOLS=no install
Для обновления системы используйте:
$ cd /usr/src
$ ./build.sh -h
$ su
# ./build.sh -d <other options>
Перекомпиляция ядра – один из основных способов оптимизации системы, так как ядро GENERIC, устанавливаемое по умолчанию, довольно большое и включает очень большое количество драйверов устройств. Редактирование файла конфигурации ядра под конкретную архитектуру – довольно объемная тема и я отошлю читателя к официальной документации проекта: http://www.netbsd.org/Documentation/tune/ (русский перевод доступен на http://dreamcatcher.ru/docs/netbsd_tun.html). Рекомендую использовать утилиту adjustkernel, входящую в состав портов, она сама создаст файл конфигурации ядра на основании анализа имеющегося оборудования. Сама перекомпиляция осуществляется следующим образом:
$ cd /usr/src/sys/arch/<ARCH>/conf
$ config <KERNEL>
$ cd /usr/src/sys/arch/<ARCH>/compile/<KERNEL>
$ make depend all
$ su
# mv /netbsd /netbsd.old
# mv /usr/src/sys/arch/<ARCH>/compile/<KERNEL>/netbsd /

Работа с PnP-устройствами

При всем разнообразии поддерживаемого оборудования, нередки бывают ситуации, когда имеющееся у Вас оборудование PnP определяется, но не работает. Так было с моим модемом - USR Robotics 33.6 Int ISA (очевидно, какая-то эксклюзивная модификация). Если при загрузке системы напротив PnP – устройства появляются слова "not configured" – Вы наш клиент. Лечится это следующим образом: Посмотрите ID устройства (В нашем случае USR3002) и добавьте соответствующую запись в /sys/dev/isapnp/isapnpdevs:
devlogic com USR3002 USR 33.6k Faxmodem Int.
После этого требуется провести перекомпиляцию ядра без редактирования файла конфигурации и установить его. После перезагрузки устройство должно определиться.

Управление системой с помощью sysctl

Системная утилита sysctl является мощнейшим средством настройки и управления системой. Данная утилита используется для просмотра и установки системных параметров. Так как параметров очень много, рассмотреть здесь их все не представляется возможным. Но приведем несколько примеров:

Просмотр переменной PATH:

# sysctl user.cs_path
user.cs_path = /usr/bin:/bin:/usr/sbin:/sbin:/usr/pkg/bin:/usr/pkg/sbin:/usr/local/bin:/usr/local/sbin
Выставить максимальное число процессов:
#sysctl -w kern.maxproc=1000
Перенаправить дамп ядра в /var/tmp/<username>
#sysctl -w proc.$$.corename=/var/tmp/%u/%n.core
Просмотреть доступные параметры можно здесь - http://netbsd.gw.com/cgi-bin/man-cgi?sysctl++NetBSD-1.6 .

Сгибнев Михаил. 3.03.2003. Статья взята с сайта DreamCatcher.ru.



Партнёры и спонсоры проекта:

Все материалы сайта распространяются по лицензии GNU/GPL
© ProUNIX 2003-2009, UnixLib 2005-2009, SoftLib 2006-2009.