Документ взят из кэша поисковой машины. Адрес оригинального документа : http://uneex.cs.msu.su/twiki/pub/Uneex/SeminarFeature/uneex.stol3.txt
Дата изменения: Mon Sep 26 14:01:49 2011
Дата индексирования: Tue Oct 2 04:13:57 2012
Кодировка: koi8-r
1 Вопрос: в каких случаях выгоднее использовать аппаратный маршрутизатор, а в каких -- программный?
1 Ответ: прикидывать по деньгам
* в самых простых случаях лучше купить железяку за 50уе (рек. [[http://www.dlink.com/][D-Link]])
* в "средних" случаях _дешевле_ использовать [[http://www.freebsd.org/][FreeBSD5]]
* в "тяжёлых случаях" (когда может не потянуть шина/процессор/память ядра лучше купить железяку за 50k+уе ([[http://www.cisco.com/][Cisco]], [[http://www.juniper.net/][Juniper]])
1 Ответ (динамическая маршрутизация):
* в сложных случаях -- только железо
* в простых случаях -- [[http://www.zebra.org/][zebra]]/[[http://www.quagga.net/][quagga]], [[http://bird.network.cz/][bird]], [[http://www.mrtd.net/][mrtd]]
1 Как бороться с DOS-атаками

/(А) DDOS-агенты
+-----------+ Канал Провайдера (КП) /(А)
| Провайдер |======================...Интернет...-(А)
+-----+-----* \(А)
| \(А)
(КК) | Канал Клиента \...
| \(А)
+----+----+
| Клиент |
+---------+

* *Чёрная дыра*: на время DOS анонсируем Клиента как Black Hole, всем хорошо, но клиент не работает :(
* *Фильтр на КП*: определение (А) _косвенными_ методами может не работать, так как количество (А) _прибывает быстрее_, чем их обнаруживают. Всё равно нужно использовать, если КП не может _свободно_ держать DDOS.
* *Фильтр на КК*: КК (обычно) уже, на нём фильтровать проще. DDOS объёмом ~1000 (А) в день (Access List 3000 строк) держит и продолжает работать обычный сервер -- BGP по россии (FreeBSD5 / PF / 2xP3 550 / 512 RAM). *Другой вариант*: между Клиентом и Провайдером стоит машина (FreeBSD5 / PF+SynProxy_DDOS / 3G RAM /P4 3.2GHz / 2x100Mb), которая держит атаку в 330МБит/сек, но заваливается на 550МБит/сек (скорее всего, из-за скорости индексирования таблиц ядра и поиска по ним).
1 Packet Filter ([[http://pf4freebsd.love2party.net/][PF]])
* Журнализация

|
+----+----+ +-------+
| Правила +---+ pflog |
+----+----+ +-------+
|

PfLog -- сетевой интерфейс, в котором есть только то, что надо журналировать. А скоро pflog-ов будет много.
* Построение межсетевых экранов в режиме 24/7 при высокой цене краткосрочного (более полминуты) простоя

|
V
+---------+----------+
| Общий IP |
V V
+----+----+ +----+----+
| | PfSync | |
| PF +<-------->+ PF |
| | VRRP | |
+----+----+ или CARP +----+----+
| |
V Общий IP V
+---------+----------+
|
V

Время автоматического переключения (downtime) -- 10 секунд
1 MAC ([[http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/mac.html][Mandatory Access Control])
* Есть реализации субъект-обектной модели в Linux -- [[http://lsm.immunix.org/][LSM]], [[http://www.rsbac.org/][RSBAC]]
* Ручная настройка -- дело не для слабонервных, потому что по умолчанию всё запрещено (спасибо [[http://www.trustedbsd.org/][TrustedBSD]], гда такое требование обязательно). Любую задачу можно решить, существует 6000 меток безопасности, каждую из которых можно отдельно обрабатывать. Настроцка --вручную.
* За каждый вид объекта и субъекта отвечает собственный модуль. А настраиваются эти модули _по-разному_!
1 Использование [[http://docs.freebsd.org/44doc/papers/jail/jail.html][Jail]]
* Аналог в Linux -- [[http://linux-vserver.org/Linux-VServer-Paper][VServer]]
* Jail -- это процесс, внутри него =top= не работает. ([[http://memberwebs.com/nielsen/freebsd/jails/][кой-какая дополниельна информация]] о Jail и процессах). Паразитная нагрузка (overhead) не превышает 15%.
* Проблема =lo0= (он один на все Jail-ы), значит, не всё можно в Jail засовывать. Проще всего именно на =lo0= вешать собственные Jail-ов. Что *нельзя* сажать в Jail:
* NFS (в Linux есть [[http://unfs3.sourceforge.net/][User Space NFS]])
* Маршрутизатор, МЭ, мониторинг
* Portupgrade работает в Jail плохо
* Использование [[http://www.freebsd.org/cgi/man.cgi?query=mount_unionfs&sektion=8&apropos=0&manpath=FreeBSD+5.3-RELEASE+and+Ports][UnionFS]] (аналоги в Linux: [[http://alumnus.caltech.edu/~muresan/projects/lufs_unionfs.html][посредством LUFS] и [[http://www.fsl.cs.sunysb.edu/project-unionfs.html][по-человечески в ядре]])
* =/usr/bin= и прочие неизменяемые каталоги монтируются вместо того, чтобы копировать или исползовать =find / | cpio -pdml=
* примонтировании можно указать, какой каталог -- "верхний", файлы которого "загораживают" файлы нижележащего каталога, и в который только и ведётся _запись_
* Следовательно, _размонтировав_ все unionfs-каталоги (в т. ч. =/etc=, =/home= и прочие), мы получаем _только изменённые файлы_! Вот это-то как раз и надо складывать backup...
* Надостаток: если обновлять пакеты на базовой системе, в Jail-ах их обновлять не стоит (иначе будет разноверсица файлов). Хуже того, уже изменённые конфигурационные файлы в Jail-ах останутся старыми. А если обновлять только в Jail-е, то дисковое пространство всё-таки нарастёт. Нет в мире совершенства!
* Для FTP-сервера можно использовать _двойное_ монтирование: сначала -- базовое наполнение, на неё -- FTP-сервис, на них -- пользовательское пространство (оно будет R/W)
* UnionFS можно вообще не использовать, если нужна не полноценная система, а подобие BusyBox (например, для Zope) или делать в [[http://usermodelinux.org/][User Mode Linux] вместо VServer-а.
* Если _каждый_ сервис оформлять в своём Jail-е, получается масштабируемое решение (IP-адреса Jail-ов повешены на =lo0=):

+----------------------------+
Host 1 | Host 2 |
/------------------|----\ /-------------------|---\
| | | | | |
| IP1 IP2 \P3| / | | IP4 IP5 IP3 V |
| +----+ +----+ +\---/ | | +----+ +----+ +----+ |
| | | | | | \ /| | | | | | | | | |
| | J1 | | J2 | | J/ | | | | J1 | | J2 | | J3 | |
| | | | | | / \| | | | | | | | | |
| +----+ +----+ +/---\ | | +----+ +----+ +----+ |
| / \ | | |
\-----------------------/ \-----------------------/

* Перенос сервиса J3 -- это всего лишь
* Удаление alias-a на одном lo0 и добавление на другом
* Dump+Restore изменённых файлов
* Останов Jail на одном сервере и зар/пуск на другом
* Перенос можно делать для перераспределения нагрузки, при отдаче одного сервера в ремонт (тогда переносятся все J) и т. п.
1 Пример: 10 Jail-ов на ноутбуке Research Engeneer-а:
1 [[http://www.postgresql.org/][PostgreSQL]]
2 IMAP ([[http://asg.web.cmu.edu/cyrus/imapd/][Cyrus] и [[gopher://erwin.complete.org/1/devel/offlineimap][OfflineIMAP]]
3 [[http://www.exim.org/][Exim]]
4 [[http://asg.web.cmu.edu/cyrus/ag.html][Murder]] (IMAP Aggregator)
5 [[http://httpd.apache.org/][Apache]]
6 Разовый для _различных_ задач
7 Для клиентов ко всем этим сервисам
8 ^Запасной^
9 ^Запасной^
0 DNS-сервер для них всех