Помощь - Поиск - Пользователи - Календарь
Полная версия: Примеры построения роутеров и шлюзов на базе UNIX
Богданович.ru :: Форум > Программы :: Software > *NIX системы
mrak
Настройка роутера на базе FreeBSD

1. Конфигурирование ядра и опций запукаемых скриптов
2. Конфигурирование ipfw
3. Предотвращение подделки MAC-адреса
4. Настройка статистики

Итак, посмотрим на ipfw, который в FreeBSD служит верой и правдой уже много лет, тем более что в последней версии в составе c FreeBSD 4.0 исправленны ошибки и добавленна корректная возможность ограничивать полосу пропускания по интерфейсу (использование pipe с опцией bw).

Предположим что мы имеет роутер с тремя сетевыми платами одна из которых (назовем ее vx0, IP 200.200.200.1) смотрит в сторону Интернета, а вторая (назовем ее vx1, IP 200.200.200.2) смотрит в сторону локальной сети с реальными 18 IP адресами (subnet 200.200.200.0/28 netmask 255.255.255.240). К третьей сетевой карточке (vx2 IP 192.168.1.1 и сеть 192.168.1.0/28) подключена 10Mb сеть соседнего офиса.
Задачи перед нами поставленны следующие :

1. Закрыть доступ во внутренюю сеть извне по портам 135,137,139
2. Дать возможность пользователям локальной сети работать с почтой и работать с www- и ftp-серверами других компаний.
3. Закрыть на роутере возможность атаки типа SYN Flood, ICMP Flood.
4. Закрыть доступ к корпоративному www-, ftp-серверу (200.200.200.5) используемый для работы с отчетами выставленными на этот www-сервер только в пределах локальной сети и доступа из филиала который имеет IP 190.190.190.5
5. Открыть доступ для конфигурирования этого роутера с определеного хоста системного администратора.
6. Обеспечить подсчет трафика по IP адресам в локальной сети чтобы впоследствии доказать что Вася весь месяц только и занимался скачиванием c www.playboy.com картинок сомнительного содержания.
7. Ограничить трафик 64Kb на третьей сетевой карточке для дружественного клиента находящегося в том же здании и подключенному по 10Mb к нашему роутеру и закрыть доступ с их стороны в локальную сеть нашей компании.

Итак приступим.

1. Конфигурирование ядра и опций запукаемых скриптов

В ядро необходимо занести следующие опции :

options IPFIREWALL # включает в ядро код
# для фильтрации пакетов
options IPFIREWALL_VERBOSE # включает возможность вести логи по
# правилам фильтрации и проходящих
# пакетов
options IPFIREEWALL_VERBOSE_LIMIT=10
# ограничение списка числа пакетов
# записываемых в лог для того чтобы не
# зафлудили syslog
options TCP_DROP_SYNFIN # отбрасывает TCP пакеты с SYN и FIN

В итоге при перезагрузке системы мы получим Firewall, который по умолчанию закрывает прохождение любого IP трафика по всем интерфейсам. Далее мы определим правила которые откроют только те порты TCP или UDP которые нужны для работы пользователей. Если Вы придерживаетесь другого подхода - "сначала все откроем а потом будем закрывать" то вам необходимо указать следующую опцию в ядре:

options IPFIREWALL_DEFAULT_TO_ACCEPT

В /etc/defaults/rc.conf указываем следующее:

tcp_extensions="NO" # отключаем "опасные" из RFC1323 расширения TCP
tcp_drop_synfin="YES" # отбрасывем SYN + FIN
icmp_drop_redirect="YES" # игнорируем перенаправленные ICMP пакеты
icmp_log_redirect="YES" # включаем логинг ICMP REDIRECT
firewall_enable="YES" # включаем использование firewall
firewall_type="Company" # указываем что наши настройки firewalla
# находятся в rc.firewall в разделе "Company"
defaultrouter="199.199.199.1" # шлюз до нашего ISP

2. Конфигурирование ipfw

Теперь приступаем к написанию правил ipfw. Более побдробное описание синтактиса можно прочитать в handbook или man ipfw. Поскольку мы создаем свою конфигурацию ("Company") то делаем ее описание в rc.firewall :

[Cc][Oo][Mm][Pp][Aa][Nn][Yy]

# Описываем сеть и интерфейсы
fw="200.200.200.1"
local="200.200.200.2"
client="192.168.1.1"
net="200.200.200.0/28"
mask="255.255.255.255.240"

# Разрешаем трафик по local интерфейсу
${fwcmd} add pass all from any to any via lo0

# Разрешаем трафик только в пределах локальной сети
${fwcmd} add pass all from any to any via vx1

# Запрещаем прохождение фрагментированных пакетов
${fwcmd} add deny icmp from any to any frag

# Разрешаем прохождение ICMP пакетов
${fwcmd} add pass ICMP from any to any

# Разрешаем работу с SMTP протоколом
${fwcmd} add pass tcp from any to any 25 out
${fwcmd} add pass tcp from any 25 to any out

# Разрешаем работу с HTTPS протоколом
${fwcmd} add pass tcp from any to any 443 out
${fwcmd} add pass tcp from any 443 to any out

# Запрещаем работу снаружи с внутреним сервером компании
${fwcmd} add pass tcp from 199.199.199.10 to 200.200.200.5 80 via vx0
${fwcmd} add pass tcp from 200.200.200.5 80 to 199.199.199.10 via vx0

# Запрещаем работу снаружи с внутреним сервером компании
${fwcmd} add deny tcp from any to 200.200.200.5 80 in via vx0

# Разрешаем работу с HTTP протоколом
${fwcmd} add pass tcp from any to any 80 out via vx1
${fwcmd} add pass tcp from any 80 to any out via vx1

# Разрешаем работу по всем протоколам в пределах
# только локальной сети нашей компании
${fwcmd} add allow all from any to any via vx1

# Разрешаем работу с DNS серверами
${fwcmd} add pass udp from any to any 53
${fwcmd} add pass udp from any 53 to any

# Разрешаем работу с NEWS Серверами
${fwcmd} add pass udp from any to any 119 out via vx1
${fwcmd} add pass udp from any 119 to any out via vx1

# Разрешаем забор почты по POP3 протоколу
${fwcmd} add pass udp from any to any 110
${fwcmd} add pass udp from any 110 to any

# Разрешаем работу с FTP серверами
# Обратите внимание что 20 порт протокола TCP используется для
# передачи данных, помимо 21 порта.
${fwcmd} add pass tcp form any 21 to any
${fwcmd} add pass tcp from any to any 21
${fwcmd} add pass tcp from any 20 to any
${fwcmd} add pass tcp from any to any 20

# Разрешаем доступ по ssh с домашней машины
# администратора имеющей IP 200.200.200.15
${fwcmd} add pass tcp from 200.200.200.15 22 to {isp}
${fwcmd} add pass tcp from {isp} to 200.200.200.15 22

# Ограничиваем трафик с сетевой карточки vx2 в локальную сеть
# нашей компании
${fwcmd} add deny all from 192.168.1.0/24 to ${net}:${mask} via vx1
${fwcmd} add deny all from ${net}:${mask} to 192.168.1.0/24 via vx1

# Разрешаем работу по базовым портам TCP на интерфейсе vx2
${fwcmd} add pass tcp from 192.168.1.0/24 to any 25 via vx2
${fwcmd} add pass tcp from any 25 to 192.168.1.0/24 via vx2
${fwcmd} add pass tcp from 192.168.1.0/24 to any 110 via vx2
${fwcmd} add pass tcp from any 110 to 192.168.1.0/24 via vx2
${fwcmd} add pass udp from 192.168.1.0/24 to any 53 via vx2
${fwcmd} add pass udp from any 53 to 192.168.1.0/24 via vx2
${fwcmd} add pass tcp from 192.168.1.0/24 to any 80 via vx2
${fwcmd} add pass tcp from any 80 to 192.168.1.0/24 via vx2

# Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb.
# для входящего трафика
${fwcmd} add pipe 1 ip from any to any in via vx0
${fwcmd} add pipe 1 config bw 64Kbit/s

# Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb.
# для исходящего трафика
${fwcmd} add pipe 2 ip from any to any out via vx0
${fwcmd} add pipe 2 config bw 64Kbit/s

Для проверки работы правил вы можете воспользоваться популярным сканером TCP/IP nmap (входит в состав FreeBSD) дав например команду :

nmap 200.200.200.1 или nmap 200.200.200.2

находясь за пределами диапазона адресов вашей сети, или попросив об этом вашего ISP.

3. Предотвращение подделки MAC-адреса

Нам необходимо обезопасить наш роутер от возможности принятия пакетов с IP-адресами которые могут попасть в локальную сеть извне под видом легальных пакетов TCP/IP входящие в диапазон сети 200.200.200.0/28. Даже если это произойдет то на этот случай у нас есть жестко привязанная таблица IP-адресов к MAC-адресам сетевых карт и роутера нашего ISP. Иногда это бывает необходимо как мера от нечистоплотных сотрудников которые меняют IP адресс своего хоста на адрес другого ПК, владелец которого например находится в отпуске и шишки соотв. посыплятся на него ;) Для начала вам нужно построить таблицу MAC-адресов , где формат ее будет примерно таким:

petya 00:20:af:4a:3e:e3
vasya 00:20:fg:3a:3e:21
sasha 00:20:fg:3a:3e:21
marina 00:20:fg:3a:3e:21

и сохранить ее в файле например /etc/ethers.

Для того чтобы узнать Ethernet адрес хоста достаточно на нем набрать arp -a.

При запуске на роутере arp -f /etc/ethers вся информация о соответствии IP-адреса и MAC-адреса сетевой карточки при работе протокола ARP будет браться из файла /etc/ether и замораживаться. Это процесс можно автоматизировать запустив на роутере arpwatch (он есть в портах FreeBSD) и сделав на каждом хосте файл /etc/hosts с описанием пары name_hosts IP_adress и /etc/ethers с вышеприведенным форматом. Когда появляется факт подмены IP-адресса то arpwatch посылает письмо с описанием проишедшего и таблица arp замораживается.

4. Настройка статистики

Для создания стратистики мы будем использовать ipfm входящий в состав пакетов FreeBSD. При инсталяции в /usr/local/etc/rc.d создается файл ipfm.sh а в /usr/local/etc файл ipfm.conf. Его то как раз нам и нужно отредактировать. Итак приступим :

##### FIRST LOGGING CONFIGURATION #####
# Описывем внутреннюю сеть с которой снимаем статистику
LOG 200.200.200.0/255.255.255.240 NOT WITH 200.200.0.0/255.255.0.0
# Присваиваем название файлу для сбора статистики
FILENAME /var/log/ipfm/local_net-%d.%m-%H.%M.%S
# Устанавливаем период записи в лог в нашем случае лог будет обновляться
# еженедально
TIME 7 day
SORT IN
RESOLVE

##### SECOND LOGGING CONFIGURATION #####
NEWLOG
# Описывем внутреннюю сеть нашего клиента 192.168.1.0/24
subnet 192.168.1.0/255.255.255.0 NOT WITH 192.168.0.0/255.255.0.0
# Задаем период записи в лог в данном случае 1 день
FILENAME /var/log/ipfm/ipfm-%d.%m-%H.%M.%S
# Log on a period of one week
TIME 1 day
SORT IN
RESOLVE

# Если же требуется более детальная информация по протоколам
# и количеству передаваемых пакетов то можно воспользоваться опцией count в ipfw:

# Подсчитываем входящий и исходящий трафик по HTTP протоколу
ipfw add count tcp from any to any 80 in via vx0
ipfw add count tcp from any to any 80 out via vx0

# Подсчитываем входящий и исходящий трафик по HTTP протоколу для клиентов
ipfw add count tcp from any to any 80 in via vx2
ipfw add count tcp from any to any 80 out via vx2
ipfw add count tcp from any to any 21 in via vx2
ipfw add count tcp from any to any 21 out via vx2

# Еcли же вас интересует статистика с конкретного IP адреса то вы просто указываете так:

ipfw add count tcp from any to 200.200.200.3 in via vx1

# где 200.200.200.3 это IP адрес пользователя например Васи который ежемесячно
# скачивает с www.playboy.com графические файлы. Вы можете также закрыть доступ
# к этому сайту например таким способом:

ipfw add log deny all from any to http://www.playboy.com/



Графическая статистика строится с применением пакета MRTG (Multi Router Transfeer Grapheer) при использовании агента snmp, запущенного на роутере. Также необходимо установить на роутере средства обнаружения атак, но это уже тема для другой статьи.
mrak
MiniBSD - урезанный вариант FreeBSD

Часто бывает нужно установить маршрутизатор, сервер доступа, принтсервер, или что-то в этом роде, на старой и слабой машине с маленьким диском. Или бывает так, что хочется избавиться от жёсткого диска вовсе, как от потенциально слабого звена, и использовать вместо него что-нибудь более надёжное. Мануэль Каспер (Manuel Kasper) написал подробное пошаговое руководство, как установить FreeBSD на Flash с интерфейсом IDE. Разумеется, это же руководство можно использовать и при установке системы на маленький жёсткий диск. В зависимости от набора компонентов, инсталляция занимает около 22 мегабайт, а если не устанавливать Perl - около 12 мегабайт.

Оглавление

1. Установка FreeBSD
1. Chroot jail
2. Создание дерева каталогов
3. Бинарники - статика или динамика?
4. Копирование бинарников
5. Пересборка ядра системы
6. Копирование библиотек
7. Каталог /etc
8. Каталог /dev
9. Паковка
10. Генерация образа для флэшки
11. Копирование данных на флэшку
12. Загрузка системы

* Приложение A. Установка портов.
* Приложение B. Установка Perl.
* Приложение C. Сохранение данных между перезагрузками.

1. Установка FreeBSD

Прежде всего, вам понадобится уже установленная FreeBSD. Достаточно минимальной инсталляции, но в неё обязательно должны быть включены исходные тексты ядра. Это руководство основано на FreeBSD 4.8, но оно, по идее, должно быть применимо и к более ранним версиям. К FreeBSD 5.0 она также может быть применима, но есть и некоторые отличия, отмеченные особо. Что же касается FreeBSD 5.1, то в ней используются rc-скрипты нового поколения, disklabel заменён на bsdlabel, и её синтаксис слегка изменён. Словом, если вы хотите использовать FreeBSD 5.1, с некоторыми вещами вам придётся разбираться самостоятельно.

1.1 chroot jail

В процессе подготовки бинарников для MiniBSD, некоторые бинарники вашей базовой системы могут быть перезаписаны, так как для простоты мы не будем устанавливать их прямо в рабочий каталог MiniBSD, а вместо этого скопируем их в базовую систему и перенесём в MiniBSD позднее. Если вы не хотите менять бинарники базовой системы, у вас есть выбор: использовать второй жёсткий диск, или использовать jail. Первый вариант проще, но если у вас нету под рукой ещё одного жёсткого диска, вам придётся использовать "песочницу", chroot jail.

Создать "песочницу" достаточно просто - вам нужно всего лишь создать каталог на разделе, имеющем достаточно свободного места (скажем, 800 мегабайт или около того), например, /usr/jail. После этого вставьте ваш инсталляционный диск с FreeBSD, запустите /stand/sysinstall, начните Custom Installation, и укажите в опциях "Install Root" на ваш свежесозданный каталог /usr/jail. После окончания инсталляции, скажите

chroot /usr/jail

и вы увидите, что корнем вашей файловой системы стал /usr/jail. Вы получили полностью изолированную от базовой системы инсталляцию, и можете делать с ней всё, что угодно, не опасаясь повредить базовую систему. Не забывайте, что когда вы покидаете рабочий шелл, вы выходите из "песочницы".

Дополнено by Murray Taylor: Для того, чтобы нечаянно не заблудиться, рекомендуется изменить приглашение шелла так, чтобы оно явно показывало, находитесь ли вы в "песочнице", или в базовой системе. Для этого измените значение строки "set prompt" в /usr/jail/root/.cshrc так:

set prompt = "MiniBSD %~ %# "

Кроме этого, вы также можете скопировать /etc/localtime в /usr/jail/etc/localtime для того, чтобы сохранить временные метки ваших файлов.

Все дальнейшие манипуляции описываются безотносительно, работаете ли вы в базовой системе, или в "песочнице".

2. Создание дерева каталогов.

Мы собираемся поместить всю инсталляцию MiniBSD в один каталог, так, чтобы в дальнейшем можно было просто скопировать содержимое каталога на флэшку. Условимся, что это каталог /usr/minibsd, единственное требование - около 100 мегабайт свободного места на разделе, в котором создаётся каталог. После этого необходимо создать в этом каталоге стандартные подкаталоги (/bin, /sbin и т.п.). Можно использовать утилиту mtree, или сделать это вручную, как вам удобнее. Структура подкаталогов должна быть такой:

.
|-- bin
|-- boot
| `-- defaults
|-- dev
|-- etc
| |-- defaults
| |-- mtree
| |-- namedb
| |-- ppp
| |-- ssh
| `-- ssl
|-- mnt
|-- modules
|-- proc
|-- root
|-- sbin
|-- tmp -> /var/tmp
|-- usr
| |-- bin
| |-- lib
| `-- aout
| |-- libexec
| |-- local
| |-- sbin
| `-- share
| `-- misc
`-- var

Права доступа должны быть 0755 (root.wheel) для всех каталогов, кроме /proc (у него должны быть 0555). Можно также поставить 0700 на /root , но это дело вкуса.
Не забудьте поставить симлинк /tmp на /var/tmp - это важно, так как корневая файловая система будет монтироваться в режиме read-only, а /var будет размещён в памяти (memory file system).

3. Бинарники - статика или динамика?

В обычной инсталляции FreeBSD бинарники в /bin и /sbin слинкованы статически. Это сделано специально, ввиду их особой важности для системы, чтобы они не зависели от системных библиотек. Если слинковать их динамически, можно сэкономить 6-7 мегабайт пространства на флэшке. Поскольку мы собираемся держать всю инсталляцию на одном разделе, то все эти бинарники будут нормально работать даже в однопользовательском режиме. Единственным недостатком является то, что если библиотеки каким-то образом окажутся повреждены, восстановить работоспособность системы будет непросто. Решайте сами, что важнее - надёжность, или свободное место на флэшке. Если вы решили пересобрать бинарники и слинковать их динамически, добавьте в /etc/make.conf строку:

NOSHARED=no

Затем перейдите в каталог /usr/src/bin и наберите make clean && make && make install. Повторите это же в /usr/src/sbin. И не забудьте - для этого у вас в "песочнице" или на дополнительном диске должны быть установлены исходные тексты системы.

ПРЕДУПРЕЖДЕНИЕ: Если вы решили не использовать ни "песочницу", ни отдельный диск, а вместо этого работаете с базовой системой, убедитесь, что ваш /usr находится на корневом, а не на отдельном разделе. Если /usr находится на отдельном разделе, не пытайтесь пересобрать бинарники динамически, в противном случае, после перезагрузки вы получите полностью неработоспособную систему. Это произойдёт потому, что вы перезапишете /bin и /sbin вашей базовой системы динамически слинкованными бинарниками, и в результате, в начале загрузки не сможет запуститься динамически слинкованный /sbin/init (так как нужные ему библиотеки находятся на другом разделе, который в момент загрузки ещё не смонтирован). В принципе, можно перед пересборкой сохранить где-нибудь копию /sbin/init, и после пересборки скопировать старый бинарник обратно. Но лучше, всё-таки, не экспериментировать.

Если вы хотите сэкономить ещё ~400 килобайт, вы можете точно так же пересобрать /usr/src/usr.bin, так как некоторые тамошние бинарники (например, gzip, tar и bzip2) также по умолчанию слинкованы статически.

4. Копирование бинарников.

Теперь самое интересное. Нужно скопировать содержимое /bin, /sbin, /usr/bin, /usr/sbin, /usr/libexec в соответствующие каталоги в /usr/minibsd. Для избавления от ручной работы, автором был написан скрипт на Перле, который копирует файлы в соответствии со списком. Кроме этого, он отслеживает хардлинки (например, /bin/ln и /bin/link - один и тот же файл, но если вы будете копировать их с помощью команды cp, они будут скопированы как два отдельных файла, что конечно приведёт к ненужному расходованию пространства на флэшке).

Скрипт для копирования находится здесь, а список файлов для копирования - здесь. Если у вас FreeBSD 5.0, используйте этот список файлов.

Перед исполнением скрипта убедитесь, что ваши каталоги /usr/minibsd/bin, /usr/minibsd/usr/bin и т.п. пусты, иначе скрипт не сможет создать линки. Скрипт запускается так:

perl mkmini.pl minibsd.files / /usr/minibsd

Список файлов представляет собой некий компромисс между объёмом занимаемого пространства и функциональностью. В частности, выброшены Perl и Sendmail. Если вам это действительно нужно, или если объём для вас не столь важен, вы можете отредактировать список файлов самостоятельно.

Если хотите, можно сэкономить ещё примерно 200 килобайт, скопировав урезанный термкап от PicoBSD взамен стандартного
/usr/minibsd/usr/share/misc/termcap. Вы можете найти его здесь: /usr/src/release/picobsd/mfs_tree/etc/termcap. В стандартном термкапе описано великое множество терминалов, большинство из которых вы едва ли когда-нибудь будете использовать. Также, взамен файла /usr/minibsd/etc/services можно взять его сокращённый вариант: /usr/src/release/picobsd/mfs_tree/etc/services, и сэкономить ещё примерно 70 килобайт.(подсказано by Stuart Henderson)

5. Пересборка ядра системы.

С целью экономии пространства на флэшке и добавления отсутствующих опций (IPSec, поддержка оборудования и т.п.), следует пересобрать ядро системы. Пересборка делается как обычно: перейдите в /sys/i386/conf, создайте копию файла GENERIC (например, MYKERNEL) и отредактируйте её, включив нужные вам опции и удалив ненужные. В частности, имеет смысл поставить опцию NO_SWAPPING, поскольку у нас не будет раздела для своппинга. Обязательно нужно поставить опцию MFS (Memory File System). Затем:

config MYKERNEL

cd /sys/compile/MYKERNEL
(для FreeBSD 5.0 перейдите в /sys/i386/compile/MYKERNEL)

make depend && make

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

gzip -9 kernel

Для FreeBSD 4.x:
cp kernel.gz /usr/minibsd
Для FreeBSD 5.0:
mkdir -p /usr/minibsd/boot/kernel
cp kernel.gz /usr/minibsd/boot/kernel

Загрузчик сам найдёт запакованный образ ядра, и автоматически распакует его прежде, чем загружать в память. В принципе, можно использовать kgzip вместо gzip, что даст дополнительные ~300 килобайт экономии, но при этом из ядра будут выброшены символы, в результате чего перестанут нормально работать такие утилиты как top и ps.

Если вым нужны ядерные модули, например модули netgraph, вы можете просто скопировать их в /usr/minibsd/modules (для FreeBSD 5.0 - /usr/minibsd/boot/modules) из /sys/compile/MYKERNEL/modules/usr/src/sys/modules. Не забывайте о зависимостях между модулями - к примеру, для поддержки PPPoE вам понадобится не один, а четыре модуля: netgraph.ko, ng_ether.ko, ng_pppoe.ko и ng_socket.ko.

6. Копирование библиотек.

Библиотеки из /usr/lib ещё не скопированы, так как их не было в списке minibsd.files. Их не было в списке потому, что набор библиотек, подлежащий копированию, зависит от бинарников, которые вы установили. Для определения зависимостей вы можете использовать скрипт на Перле, который обходит ваше дерево каталогов и при помощи системной утилиты ldd генерирует список файлов с соответствующими библиотеками.

Скрипт находится здесь. Запускать его следует так:

perl mklibs.pl /usr/minibsd > minibsd.libs

Рекомендуется просмотреть получившийся список, и если он выглядит правдоподобно, используйте его для копирования библиотек посредством скрипта mkmini.pl:

perl mkmini.pl minibsd.libs / /usr/minibsd

Cкрипт скопирует все нужные библиотеки, но не скопирует модули PAM. Их вам придётся скопировать вручную:

cp -p /usr/lib/pam* /usr/minibsd/usr/lib

Если вам не нужны все PAM-модули, и у вас FreeBSD 4.x, скопируйте по крайней мере эти модули: pam_deny, pam_permit, pam_unix, pam_login_access и pam_nologin. Для FreeBSD 5.x может потребоваться больше модулей, поэтому на всякий случай лучше скопируйте их все.
И в завершение, чтобы избежать предупреждающих сообщений, создайте каталог /usr/minibsd/usr/lib/aout

7. Каталог /etc

Разумеется, вам нужно скопировать также конфигурационные файлы для вашей MiniBSD. Самое простое - скопировать /etc из вашей базовой системы и удалить всё ненужное. В качестве примера см. дерево файлов и подкаталогов ниже (файлы, которые вам, вероятно, придётся редактировать, помечены красным цветом):

/usr/minibsd/etc
|-- auth.conf
|-- crontab
|-- defaults
| |-- make.conf
| `-- rc.conf
|-- dhclient.conf
|-- disktab
|-- fbtab
|-- fstab
|-- ftpusers
|-- gettytab
|-- group
|-- host.conf
|-- hosts
|-- hosts.allow
|-- hosts.equiv
|-- hosts.lpd
|-- inetd.conf
|-- localtime
|-- login.access
|-- login.conf
|-- master.passwd
|-- motd
|-- mtree
| |-- BSD.include.dist
| |-- BSD.local.dist
| |-- BSD.root.dist
| |-- BSD.sendmail.dist
| |-- BSD.usr.dist
| |-- BSD.var.dist
| |-- BSD.x11-4.dist
| `-- BSD.x11.dist
|-- namedb
| |-- PROTO.localhost.rev
| |-- make-localhost
| |-- named.conf
| `-- named.root
|-- networks
|-- newsyslog.conf
|-- objformat
|-- pam.conf
|-- passwd
|-- ppp
| `-- ppp.conf
|-- profile
|-- protocols
|-- pwd.db
|-- rc
|-- rc.conf
|-- rc.diskless1
|-- rc.diskless2
|-- rc.firewall
|-- rc.i386
|-- rc.local
|-- rc.network
|-- rc.serial
|-- rc.shutdown
|-- rc.sysctl
|-- resolv.conf
|-- security
|-- services
|-- shells
|-- skeykeys
|-- spwd.db
|-- ssh
| |-- primes
| |-- ssh_config
| |-- ssh_host_dsa_key
| |-- ssh_host_dsa_key.pub
| |-- ssh_host_key
| |-- ssh_host_key.pub
| `-- sshd_config
|-- ssl
| `-- openssl.cnf
|-- sysctl.conf
|-- syslog.conf
|-- termcap -> /usr/share/misc/termcap
|-- ttys
`-- wall_cmos_clock

Здесь нету /etc/periodic, поэтому нужно отредактировать также /etc/crontab и удалить из него вызов скриптов из /etc/periodic. После этого отредактируйте /etc/fstab, и удалите из него точки монтирования, которых у вас не будет. В результате должно получиться нечто вроде:

/dev/ad0a / ufs ro 1 1
proc /proc procfs rw 0 0

Обратите внимание, что корневая файловая система монтируется в режиме read-only (ro)! Это необходимо, поскольку флэшки имеют ограниченное количество циклов записи на них.

Далее отредактируйте /etc/rc.conf. Например, мой rc.conf выглядит так:

hostname="fb.neon1.net"
ifconfig_sis0="192.168.0.200 netmask 255.255.255.0"
kern_securelevel_enable="NO"
nfs_reserved_port_only="YES"
sendmail_enable="NONE"
sshd_enable="YES"
usbd_enable="NO"
inetd_enable="NO"
portmap_enable="NO"
diskless_mount="/etc/rc.diskless2"
update_motd="NO"
varsize=8192

"diskless_mount" указывает загрузочному скрипту /etc/rc, что нужно запустить скрипт rc.diskless2, который служит, в частности, для монтирования Memory File System (MFS) для /var и /dev. Переменная varsize указывает, что объём этой системы - 4 мегабайта (8192 блока), вы можете изменить это значение в ту или другую сторону.

Для FreeBSD 5.0 надо также добавить rc_ng="NO", чтобы система использовала старый формат конфигурационных скриптов rc взамен новомодного /etc/rc.d. Особо надо отметить, что для FreeBSD 5.1 это не работает. Вам в этом случае нужно добавить в MiniBSD файл /sbin/rcorder и отредактировать /etc/rc.d/diskless, удалив оттуда проверки смонтированных по NFS разделов.

Не забудьте отредактировать /etc/newsyslog.conf, настроив его на более частую ротацию логов и отказ от их архивирования. Возможно, вам вообще не понадобится ведение большинства логов, так как их содержимое всё равно будет теряться после каждой перезагрузки.

В случае, если вы планируете получать IP-адрес от сервера DHCP (посредством dhcpclient), не забывайте, что dhcpclient пытается записать информацию о DNS, полученную от сервера, в файл /etc/resolv.conf. Разумеется, ему это не удастся, так как корневая файловая система монтируется в режиме read-only. Решением может быть использование симлинка с /etc/resolv.conf на /tmp/resolv.conf.

Не забудьте, что если вы делали какие-либо модификации файла master.passwd, вам нужно перегенерировать базу данных:

pwd_mkdb -p -d /usr/minibsd/etc /usr/minibsd/etc/master.passwd

Если вы собираетесь использовать MiniBSD на компьютере с малым объёмом оперативной памяти (напр. 8 мегабайт), есть смысл уменьшить объём MFS, отводимой для /dev. Для этого отредактируйте файл /etc/rc.diskless2. Найдите в нём строчку

mount_md 4096 /dev 3 512

и замените её на

mount_md 1024 /dev 3 512

Это даёт системе указание резервировать 512 килобайт под /dev. Данное значение возможно уменьшить ещё (посмотрите, что показывает df и исходите из этого)

Для того, чтобы убрать дефолтовую 10-секундную задержку при загрузке, отредактируйте /usr/minibsd/boot/loader.rc и добавьте туда строчку

autoboot 0

На всякий случай рекомендуется настроить консоль RS-232 (если конечно на компьютере есть последовательный порт). Для этого отредактируйте /usr/minibsd/etc/ttys изменив строчку

ttyd0 "/usr/libexec/getty std.9600" dialup off secure

на

ttyd0 "/usr/libexec/getty std.9600" vt100 on secure

Измените скорость соединения с 9600 на другое значение, если необходимо.

8. Каталог /dev

Если у вас FreeBSD 5.0, эту часть можете не читать (благодаря devfs).

Для загрузки и работы FreeBSD нужны специальные файлы в каталоге /dev. Файловая система, на которой находится этот каталог, должна быть смонтирована в режиме read-write, иначе кое-что перестанет работать (например, getty). Поэтому rc.diskless2 монтирует для нее файловую систему в памяти (MFS). Ядро ожидает, что /dev находится на корневой партиции, поэтому внутри нашей minibsd мы должны построить полный набор файлов в /dev. Для этого:

cp /dev/MAKEDEV /usr/minibsd/dev
cd /usr/minibsd/dev
sh MAKEDEV all

Обязательно убедитесь в том, что у вас в /dev есть файл для устройства, с которого будет производиться загрузка MiniBSD. Используйте для этого команду sh MAKEDEV [name]. Чтобы сэкономить немного места в оперативной памяти, вы можете удалить файлы устройств, которых не будет в вашей системе (например, SCSI-устройства, и т.п.), после чего можете подкорректировать rc.diskless2, как было показано выше.

rc.diskless2 в процессе работы ищет файл /conf/dev.cpio.gz со всеми файлами устройств, и если не находит, то просматривает в поиске файлов устройств в корневом разделе (/dev) и генерирует cpio-файл в /tmp. Это может занять много времени, поэтому мы создадим такой файл заранее и положим его в нужное место:

cd /usr/minibsd
mkdir conf
find -x dev | cpio --create -H newc | gzip > conf/dev.cpio.gz

Готово. Теперь у нас есть две копии наших файлов устройств - одна в /dev, и вторая в dev.cpio.gz. В процессе загрузки системы, ядро найдет файлы устройств в /dev, затем rc.diskless2 смонтирует MFS и распакует туда файлы устройств из dev.cpio.gz, таким образом получая /dev доступное и для записи и для чтения.

9. Паковка.

Поскольку, как уже было сказано, cp не умеет корректно обходиться с хардлинками, мы запакуем нашу инсталляцию MiniBSD в .tar:

cd /usr/minibsd
tar cfvz /usr/minibsd-46-1.tgz *

(название файла, разумеется, может быть любым). Теперь в /usr/minibsd-46-1.tgz у нас лежит вся наша инсталляция, готовая к размещению на загрузочном устройстве (флэшке, например).

10. Генерация образа для флэшки

В принципе, можно было бы просто представить себе флэшку в виде обычного IDE-диска, разметить ее с помощью disklabel, отформатировать с помощью newfs, и развернуть на неё наш .tar-архив. Но мне представляется более быстрым и удобным создать образ диска и перелить его на флэшку при помощи dd. Кроме того, это продлит срок жизни флэшки, так как каждый сектор при этом записывается только один раз.

Для получения виртуального диска который мы могли бы разметить, будем использовать vnconfig (в ядре вашей базовой системы должно присутствовать псевдоустройство vn). Необходимо знать объём вашей флэшки в 512-байтовых секторах, для чего вам нужно подключить флэшку и использовать команду:

disklabel -rwn ad[n] auto | grep sectors/unit

[n] необходимо, разумеется, заменить на номер файла устройства, соответствующего флэшке.

Подсказка: если disklabel сообщает нечто вроде "No space left on device", попробуйте очистить флэшку:
dd if=/dev/zero of=/dev/rad[n] bs=1k count=20
Это сотрёт любую информацию, находящуюся на флэшке

Теперь создадим образ диска такого же объёма, заполнив его нулями:

dd if=/dev/zero of=/usr/minibsd-disk.bin bs=512 count=[количество секторов на флэшке]

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

FreeBSD 4.7:
vnconfig -s labels -c vn0 /usr/minibsd-disk.bin
FreeBSD 5.0:
mdconfig -a -t vnode -u 0 -f /usr/minibsd-disk.bin
(в последующем, если у вас FreeBSD 5.0, используйте имя устройства md0 вместо vn0)

и далее:

disklabel -Brw vn0 auto
disklabel -e vn0

В результате выполнения последней команды, вы попадаете в редактор, установленный по умолчанию. Найдите в редактируемом файле строчку, начинающуюся с "c:" и сдублируйте её, изменив "c" на "a", и поставив в поле "fstype" значение 4.2BSD. Это будет ваш корневой раздел, занимающий полный слайс. Если вам нужен ещё один раздел (ну например, для конфигурационных файлов), уменьшите размер раздела "a" на значение размера второго раздела, и введите вторую строчку, начинающуюся с "e" и нужным значением в поле размера. После окончания редактирования, не забудьте сохранить изменения.

Теперь отформатируем и подмонтируем наш новый раздел:

newfs -b 8192 -f 1024 -U /dev/vn0a
mount /dev/vn0a /mnt

(Если у вас есть второй раздел, не забудьте отформатировать и его). Теперь наш виртуальный диск смонтирован на /mnt, и мы можем перенести на него содержимое нашего инсталляционного каталога:

cd /mnt
tar xfvzP /usr/minibsd-46-1.tgz

...и размонтируем виртуальный диск:

cd /
umount /mnt

FreeBSD 4.7:
vnconfig -u vn0
FreeBSD 5.0:
mdconfig -d -u 0

11. Копирование данных на флэшку.

Поскольку наша флэшка для системы представляется как IDE-диск, ей соответствует в системе файл устройства /dev/ad[n]. Если его нет, нужно создать его, перейдя в каталог /dev и набрав команду sh MAKEDEV ad[n].

Теперь мы можем перенести нашу MiniBSD на флэшку:

dd if=/usr/minibsd-disk.bin of=/dev/rad[n] bs=8k

Обратите особое внимание на то, что вы правильно указали значение [n], иначе вы можете стереть информацию с вашего жёсткого диска!

Если хотите увидеть, как движется копирование, нажмите Ctrl-T.

12. Загрузка системы.

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

Если в процессе загрузки вы видите предупреждающие сообщения вроде :

Warning: Block size restricts cylinders per group to xx.

можете спокойно игнорировать их.

В процессе окончательной настройки вам придётся временно перемонтировать файловую систему в режиме read-write. Вы можете сделать это командой:

mount -uw -o noatime /

После окончания работы, не забудьте заново смонтировать систему read-only

mount -ur /

Опция "noatime" означает, что система не должна обновлять значение атрибута "Last access time" при обращении к файлам. Это не полезно для флэшки, а сам данный атрибут используется крайне редко.

ПРЕДУПРЕЖДЕНИЕ: Существует мнение, будто бы перемонтирование системы с read-write на read-only опасно, и с течением времени может привести к разрушению данных на диске. Я не знаю, правда это или нет, но не исключаю, что это может быть правдой. Поэтому рекомендуется после того, как вы перемонтировали файловую систему в режим read-write, и закончили вносить свои изменения, произвести перезагрузку системы.

Рекомендуется также произвести перегенерацию ключей SSH, иначе на вашей MiniBSD останется тот же набор ключей, что и на базовой системе. А это нехорошо.

ssh-keygen -t rsa1 -N "" -f /etc/ssh/ssh_host_key
ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key

Приложение A. Установка портов.

Вполне возможно, что вы захотите поставить в вашу MiniBSD что-нибудь из портов. Это очень просто сделать в базовой системе, указав префикс PREFIX=/usr/minibsd/usr/local в процессе инсталляции. Если же вы хотите проделать это с особой тщательностью, установите порт в базовую систему, а затем определите, какие именно бинарники/библиотеки/стартовые скрипты и т.п. нужны вам для данного порта, и перенесите их в соответствующее место в /usr/minibsd.
Дополнение by Tom Thompson: вы можете использовать pkg_info -qxl [package name] для определения, какие именно файлы установлены для соответствующего порта.

Приложение B. Установка Perl.

Перл займёт дополнительно около 10 мегабайт на вашей флэшке. Для установки Перла, добавьте строчку

usr/bin/perl:usr/bin/perl5:usr/bin/perl5.00503

в ваш список файлов minibsd.files. Скопируйте также /usr/libdata/perl (каталог /usr/libdata/perl/pod можно не копировать). И наконец. убедитесь, что права и разрешения на скопированные файлы не изменились (а ещё проще копировать их с помощью tar -P, при этом права и разрешения сохраняются неизменными).

Приложение C. Сохранение данных между перезагрузками.

Вам может это понадобиться, например, если на вашей MiniBSD работает сервер DHCP (dhcpd), и вам необходимо сохранить данные о выданных IP-адресах между перезагрузками. Для этого можно, например, выделить небольшой раздел на флэшке, и сохранять на нём содержимое /var/db перед шатдауном. Добавьте эти строчки в ваш скрипт rc.shutdown (там, где написано "Insert other shutdown procedures here"):

# Save databases
echo -n 'Saving databases in /var:'
mount -u -o rw /conf
rm -Rf /conf/varsave/db
cp -Rp /var/db /conf/varsave
mount -u -o ro /conf
echo '.'

В этом примере предполагается, что ваш дополнительный раздел смонтирован на /conf, и на нём есть каталог /conf/varsave.Для восстановления базы данных после перезагрузки, добавьте в скрипт rc.local следующее:

# Load saved databases
cp -Rp /conf/varsave/db /var

Не забудьте, что rc.shutdown вызывается только если для выключения машины использовался shutdown(8), а не reboot(8). Используйте shutdown -h now.
mrak
Инсталяция FreeBSD 4.8 Release (5.1 Release)

Итак - С чего начать установку?

1.
Качаем дистрибутив

В первую очередь необходимо определится с какого источника будем брать дистрибутив.
Идем самым ресурсоемким путем - качаем образ с интернета :) (для жителей крайнего севера)

ftp://ftp1.ru.freebsd.org
ftp://ftp2.ru.freebsd.org
ftp://ftp3.ru.freebsd.org
ftp://ftp4.ru.freebsd.org

Качаем 4.8 Release (почему именно он - будет много вопросов напишу, а пока поверим что это оптимальный вариант на начало лета 2003 года)
/pub/FreeBSD/ISO-IMAGES-i386/4.8/4.8-RELEASE-i386-disc1.iso
Забираю только первый диск (с моим ограничением по трафику нехватало еще второй забрать для того чтобы меня с работы выгнали :D ) Первого диска достаточно для того чтобы поставить полноценную систему. На втором диске содержатся дополнительные порты, которые в дальнейшем можно будет скачать непосредственно из дерева портов (порт - это программа, типа MS Office или CorelDRW в случае MS Windows). С помощью программы Alcohol 120% записываем диск. Беглый осмотр диска показывает, что от версии к версии колличество портов помещающихся на первом диске сокращается и как правило там нет ничего что бы могло пригодится.

2.
Преследуемые цели:

Необходимые на сервере службы:
1. NAT
2. Firewall (на безе встроенного ipfw)
3. Почта для домена (sendmail)
4. Сервер HTTP (apache)
5. FTP доступ (ftpd)
6. Доступ к разделу Share для Windows клиентов а так же печать одного из сетевых принтеров (samba)
7. DNS primary для домена.

Исходные данные (реальные адреса изменены из соображения конфеденциальности):
1. IP Адрес сервера во внутренюю сеть 192.168.10.1
2. IP Адрес интерфейса в интернет (выдается провайдером) 195.195.95.5
3. IP Адрес шлюза (выдается провайдером) 195.195.95.100
4. IP Адрес DNS1, DNS2 (выдается провайдером) 195.195.95.50, 195.190.90.9
5. Доменное имя сервера myd.ru

3.
Подготавливаем компьютер.

Чем проще будет конфигурация - тем лучше.
Мне нравится черно-белая консоль, а по этому ни каких X-Win, никакой графики, а значит видеокарта любая самая простая S3 Trio 8Mb. Процессор в зависимости от поставленных задач и работающих процессов. Мне достался Intel P2 266 (тоже неплохо), для минимальных целей хватило бы 486 машинки. Памяти (оперативной) чем больше тем лучше поставил 256 думаю хватит пока :) , Жесткий диск 20Gb будет использоватся на 50%. Мышь не нужна (мне :) )

Итак. Приступаем к установке.

1. Устанавливаем загрузочный диск FreeBSD 4.8 Release Загружаемся до менюшки из трех пунктов. Если железо выбрано самое элементарное, то используем 1 Skip kernel configuration and continue with installation пункт меню все драйверы подцепятся автоматически. (Особенно важен драйвер сетевой карты, чтобы на этапе установки прописать настройки сети, можно конечно потом, но для начала так удобнее у меня Realtek 10/100).
2. По окончанию всех инициализаций перед вами появится цветное меню из которого мы выбираем 2 пункт Standard для инсталяции в полном режиме со всеми предупреждениями и вопросами.
3. Если диск чистый на предложение создать слайс нажимаем "A" = Use Enter Disk затем "Q" = Finish. Этим самым указав инсталяции использовать весь диск для FreeBSD
4. Далее предлагается создать БУт менеджер или отказатся от него - мы отказываемся - у нас один диск весь под ФРЮ 2 пункт меню Standard
5. Следующий этап самый ответственный - создание разделов на диске - просто создавайте в зависимости от найденых рекомендаций. Если у кого то возникнет возражение по поводу оптимальности моего способа создания разделов пусть пишет свою статью :D Ну а для сомневающихся всегда есть кнопка "A" - Автоматически создать разделы :D.
Немного помучаясь вы должны получить такую табличку (128Mb надо писать при вводе - "128Mb"):

part Mount Size Newfs
ad1s1a / 128Mb UFS Y
ad1s1b swap 1000Mb SWAP
ad1s1e /var 3000Mb UFS+S Y
ad1s1f /tmp 1000Mb UFS+S Y
ad1s1g /usr 7000Mb UFS+S Y
ad1s1h /arhive 6964Mb UFS+S Y

Последний раздел будем использовать для Samba чтобы второй сервер мог писать туда свои архивы :) и скрипты могли передавать информацию для бухгалтерии.
"Q" - Finish
6. Пункт Choose Distributions предлагает выбрать а что же мы будем копировать на винт в ходе установки - копируем всё кроме Х-ов - 4 - Developer - для продолжения - 1 - Exit
7. Указываем источник для инсталяции CD/DVD ...после непродолжительного копирования на хард..... Кстати все что начинается с этого поста можно пропустить и настроить вручную через конфиги, но уж раз пошли этим путем - доустановим...
8. Ethernet or PPP Выбираем свою(и) сетевую(ые) карту(ы) - в нашем случае это rl0 и rl1 (модем настроим потом)

Для rl0 (внешний интерфейс)
host - bsd (потом автоматом допишется доменный суффикс)
domain - myd.ru
IPv4 Gateway - 195.195.95.100
Name Server - 195.195.95.50
IPv4 adress - 195.195.95.5
NetMask - 255.255.255.0 (выдается провайдером вместе с IP)

Для rl1 (в локальную сеть)
Первые четыре пункта должны быть уже заполнены как в предидущем случае
IPv4 adress - 192.168.10.1
NetMask - 255.255.255.0
9. поднимать карту при запуске - ДА
10. Использовать данную машину как Gateway - ДА
11. Хотите подредактировать (и использовать) inetd.conf - YES
Находим строчку начинающуюся с #ftp stream tcp превращаем в #ftp stream tcp
Выходим из редактора vi с сохранением :wq
12. Хотите анонимный доступ по FTP? - Нет
13. Сконфигурировать машину как NFS server? - NO
14. Сконфигурировать машину как NFS client? - NO
15. Повысить уровень встроенной защиты? - НЕТ
16. Установки системной консоли - НЕТ
17. Установки тайм зоны - ДА
Предлагается на выбор изменить время таймера в ЦМОС или делать поправки соответственно установленной зоны - мне нравится второе (NO) 8 - Europa, 33 - Russian Federation, 2 - +00
18. Conformation -> MSD -> YES
19. Потдержка совместимости с линкс приложениями - абсолютно всеравно - я таких приложений не использую - NO
20. Система имеет мышь не USB ? - NO
21. Установка портов - на данном этапе не требуется - сразу жмем кнопку Install на вопрос - "так ничего же не выбрано???" - отвечаем ОК
22. Отказываемся от USB (если конечно не планируем использовать)
23. Отказываемся от редактирования групп и пользователей (потом...)
Как оказалось впоследствии лучше на этом этапе создать хотя бы одного пользователя, у меня почему то в пост инсталяции не создала ярлык в корне /home ссылающийся на /usr/home, а залепила в корневой раздел папку home что неправельно.... как создавать пользователей и группы - смотрите ниже.
24. Пароль рута вводим сейчас - не помешает сразу ввести сложный, потому как после перезагрузки машина станет сразу видна в интернете. (в FreeBSD 5 версии с консоли можно зайти с пустым паролем даже если пароль введен)
25. менять еще что нибудь дополнительно - хватит уже - остальное потом.

PS: Если по дороге вы где то ошиблись - не надо судорожно нажимать reset - все настройки есть в Configure через комманду /stand/sysinstall :)

26. Exit install


Reboot (не забудте достать CD)

Первые шаги в системе после перезагрузки

Отступление для Продвинутых пользователей, изрядно подзабывших процесс установки :)
Для тех кто столкнулся с системой впервые просьба пропустить этот абзац (для начала надо шишек набить).
Общие рекомендации после установки. 1) Ставим cvsup-without-gui (где лежит - ниже), обновляем с его помощью исходные тексты, обновляем дерево портов, а затем уже устанавливаем необходимые программы.

После перезагрузки первое что делаем - пингуем все извесные адреса
# ping 195.195.95.100
закончить пинг Ctrl-C
Для того, чтобы обеспечить функционирование системы на начальном уровне создадим пользователя, который заменит нам рута (root). Поскольку запись root используется в системе повсемесно - удалить ее нельзя, но оставлять этого пользователя с shell достаточно опасно.
# ee /etc/master.passwd
root:$1$7lfghjklkjhgfdserFCBwJ5.ZwAYg/:0:0::0:0:Charlie &:/root:/bin/sh
меняем на:
root:*:0:0::0:0:Charlie &:/nonexistent:/sbin/nologin
(в FreeBSD 5 версии при компоновке pwd_mkdb ругнулся на отсутствие такого shell-а. Вообщем то это не принципиально, если вместо пароля стоит * - пришлось вернуть)
Добавляем своего пользователя - например lamer
lamer:*:0:0::0:0:Charlie &:/root:/bin/sh
(поставим bash - будет у него нормальный шелл :). А пока так)
# pwd_mkdb /etc/master.passwd
# passwd lamer
Заносим пароль для нового рута
# pwd_mkdb /etc/master.passwd
В дальнейшем для административных целей используем именно его.
Теперь если вы сделали все правельно - можно подключится через учетную запись - lamer по FTP к нашему серверу.
Как подключатся к FTP знают нынче даже дети, так что на этом моменте заострять внимание не будем :).
(если что то не пойдет - прочитайте про файлы hosts ниже по тексту)

Установка портов

Далее я перечислю каталоги портов, после входа в которые нужно запустить две команды
# make all
# make install
LWP для PERL /usr/ports/www/p5-libwww
SUDO /usr/ports/security/sudo
cvsupit /usr/ports/net/cvsup-without-gui (очень долго, но нужно для обновления системы. 30 минут качались исходники + час - компиляция)
deco /usr/ports/misc/deco
wget /usr/ports/ftp/wget
bash /usr/ports/shells/bash2

Для полноценной работы сервера предлагается ряд вспомогательных этапов

1. Заполним файлы hosts на всех компьютерах локальной сети информацией о соответствии статических адресов ИП их именам в домене:
127.0.0.1 localhost
192.168.10.1 bsd.myd.ru bsd
192.168.10.1 bsd.myd.ru.
192.168.10.2 petya
192.168.10.3 kolya

Во FreeBSD файл должен находится в /etc
Windows98 - c:\windows
Win2K - c:\windows\system32\drivers\etc
(был один прикольный трабл - создал файл хост на Виндовой машине и записал его по ФТП на сервер БСД - через какое то время почта с моего домена перестала проходить через провайдера hot.ee - как оказалось в конце каждого имени в файле хостс стоял управляющий символ перевода строки ^M а эстонцы рассматривали мои письма как спам и отбрасывали без предупреждения - будте внимательны!!!)
2. Теперь возможно подключение к серверу из локальной сети - ftp, telnet...
Рекомендую выполнить несложную настройку удаленных сервисов по SSH, описанную в этой статье.
Если же вы хотите использовать стандартные сервисы:
ee /etc/inetd.conf
Разкоментировать строчки ftp, telnet (tcp6 не трогать)

Пересобираем ядро.

Первый раз этот этап напоминает головоломку - даже при внимательном изучении обильной инфы на эту тему голова идет кругом. Многие вещи не понятны до конца даже гуру, но при определенных мучениях понимаешь, что много не мало и на каждую машину (железо) находится свой компромис.
Приведу ссылку на эту тему и не буду долго останавливатся на вопросе выбора нужных строк конфигурации ядра. http://www.opennet.ru/docs/BSD/pascal/index.html

Собственно - /usr/src/sys/i386/conf/myd1

machine i386
cpu I586_CPU
cpu I686_CPU
ident myd1
maxusers 512
options MATH_EMULATE
options INET
options FFS
options FFS_ROOT
options SOFTUPDATES
options MFS
options MD_ROOT
options NFS
options NFS_ROOT
options MSDOSFS
options CD9660
options CD9660_ROOT
options PROCFS
options COMPAT_43
options SCSI_DELAY=15000
options UCONSOLE
options USERCONFIG
options VISUAL_USERCONFIG
options KTRACE
options SYSVSHM
options SYSVMSG
options SYSVSEM
options P1003_1B
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM
options KBD_INSTALL_CDEV
options IPFILTER
options IPFILTER_LOG
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPDIVERT
options TCP_DROP_SYNFIN
device isa
device eisa
device pci
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk
device atapicd
device atapifd
device atapist
options ATA_STATIC_ID
device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?
device ncv
device nsp
device stg
device scbus
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12
device vga0 at isa?
pseudo-device splash
device sc0 at isa? flags 0x100
device npx0 at nexus? port IO_NPX irq 13
device apm0 at nexus? disable flags 0x20
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
device ppc0 at isa? irq 7
device ppbus
device lpt
device plip
device ppi
device miibus
device rl
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10
pseudo-device loop
pseudo-device ether
pseudo-device sl 1
pseudo-device ppp 1
pseudo-device tun
pseudo-device pty
pseudo-device md
pseudo-device gif
pseudo-device faith 1
pseudo-device bpf
device uhci
device ohci
device usb

Теперь пересборка.
# cd /usr/src/sys/i386/conf
# config myd1
# cd /usr/src/sys/compile/myd1
# make depend
# make all (Эта процедура занимает много времени .....)
# make install

Она переименует старое ядро в kernel.old и поместит в корневую директорию ваш новый kernel. После этого можно (и нужно) перегрузить компьютер. Если загрузка нового ядра не получилась (такое тоже возможно), вы можете загрузится со старым ядром. Для этого, в начале загрузки на подсказку Boot: надо быстро сказать kernel.old

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

# ipfw add pass all from any to any

NAT + Firewall

На начальном этапе приводится описание "оживления" работы сервера а не рабочие настройки. В этом режиме файрвол не фильтрует пакеы!!! Для детальной настройки просьба ознакомится с документом IPFW + ipnat.

rc.conf

defaultrouter="195.195.95.100"
gateway_enable="YES"
hostname="bsd.myd.ru"
ifconfig_rl0="inet 195.195.95.5 netmask 255.255.255.0"
ifconfig_rl1="inet 192.168.10.1 netmask 255.255.255.0"
inetd_enable="YES"
kern_securelevel_enable="NO"
nfs_reserved_port_only="YES"
sshd_enable="YES"
ipnat_enable="YES"
ipnat_program="/sbin/ipnat -CF -f"
ipnat_rules="/etc/ipnat.rules"
ipnat_flags=""
firewall_enable="YES"
firewall_script="/etc/rc.firewall"

rc.firewall

#
# IPFW RULES
# /etc/ipfw.rules
#
fwcmd="/sbin/ipfw"
${fwcmd} -q -f flush
${fwcmd} -q add pass all from any to any

ipnat.rules

map rl0 192.168.10.0/24 -> 195.195.95.5/24

На этом начальная настройка сервера закончена. Для детальной настройки служб переходите к следующим разделам :)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2010 Invision Power Services, Inc.