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-сервер для них всех