На написание данной статьи меня вдохновил весьма скудный объем русскоязычной документации по ОС 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. Установка
Для установки системы необходимо выполнить следующий нехитрый набор действий:
С ftp://ftp.netbsd.org взять ISO-образ последнего релиза (на время написания данной статьи - 1.6.1) для своей платформы (в моем случае – i386).
Записать образ на компакт диск используя Nero Burning Rom или любую другую аналогичную программу.
При необходимости подготовить две загрузочные дискеты, используя утилиту 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
#####################################################################
Устанавливаем его. Также советую скачать 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:
Файловая система FFS (Fast File System), хотя и называется "быстрой", на самом деле таковой не является, что прискорбно. Устранить данное недоразумение можно используя softupdates (она же используется в FreeBSD). Данная функция до сих пор считается экспериментальной, что не мешает ей с успехом работать. Для задействования softdeps на разделе /usr необходимо отредактировать файл /etc/fstab:
В принципе, программа-минимум на этом выполнена, хотя нет предела совершенству.
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 и используется крайне редко…
Есть два принципиально разных пути установки программного обеспечения – из исходных текстов и из системы портов.
Из исходных текстов собирать приложения несложно – достаточно скачать архив и глядя внимательным и зорким глазом в 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 – сервера можно командой:
Приложение будет по умолчанию установлено в /usr/pkg/bin.
Также возможен вариант со сборкой пакетов из исходных текстов. Получить дерево портов можно скачав файл pkgsrc.tar.gz ftp://ftp.NetBSD.org и распаковав его в /usr/pkgsrc. Также, можно сделать это через SUP или CVS. Если Вы используете SUP (Software Update Protocol), то исследуйте примеры, лежащие /usr/share/examples/supfiles. При использовании CVS, все работает также просто: Для командного интерпретатора csh это выглядит так:
Когда Вы установили систему, вполне естественным будет поддерживать ее в адекватном состоянии – то есть обновлять бинарные файлы и проводить перекомпиляцию ядра, чтобы установить последние исправления в системе безопасности. Это делается достаточно просто. Для получения исходных текстов необходимо выполнить следующую команду:
$ 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
Перекомпиляция ядра – один из основных способов оптимизации системы, так как ядро GENERIC, устанавливаемое по умолчанию, довольно большое и включает очень большое количество драйверов устройств. Редактирование файла конфигурации ядра под конкретную архитектуру – довольно объемная тема и я отошлю читателя к официальной документации проекта: http://www.netbsd.org/Documentation/tune/ (русский перевод доступен на http://dreamcatcher.ru/docs/netbsd_tun.html). Рекомендую использовать утилиту adjustkernel, входящую в состав портов, она сама создаст файл конфигурации ядра на основании анализа имеющегося оборудования. Сама перекомпиляция осуществляется следующим образом:
$ cd /usr/src/sys/arch//conf
$ config
$ cd /usr/src/sys/arch//compile/
$ make depend all
$ su
# mv /netbsd /netbsd.old
# mv /usr/src/sys/arch//compile//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 является мощнейшим средством настройки и управления системой. Данная утилита используется для просмотра и установки системных параметров. Так как параметров очень много, рассмотреть здесь их все не представляется возможным. Но приведем несколько примеров:
Поддерживаю РФ: Кириллические домены должны поддерживаться в российском ПО и сервисах
Поддержка российским ПО и отечественными сервисами кириллических доменов и адресов электронной почты станет ключевой задачей проекта Поддерживаю.РФ в 2021 году. По словам директора Координационного центра доменов .RU/.РФ Андрея Воробьева, национальный дом
В этой статье мы расскажем о пошаговой установке и конфигурировании Apache 2.0, чтобы снизить риск неавторизованного доступа или успешного взлома в случае применения новой уязвимости, обнаруженной в Apache Web сервере. В результате, можно будет пользовать
В этом цикле статей я хочу рассказать об операционной системе, родившейся прямо на наших глазах - летом 2004 года. Имя ей - DragonFlyBSD, и являет она собой представителя славного племени BSD-систем. В сущности, исходно это fork (порождение) FreeBSD 4-й в