САМЫЙ СЕРЬЕЗНЫЙ ГЕЙТ DemiurG (arkhangel@mail.ru) Спецвыпуск Xakep, номер #033, стр. 033-054-3 options IPDIVERT (NAT не знает что такое ipfw, поэтому нам надо будет перенаправить на него весь трафик, это делается с помощью инструкции divert, подробности ниже); options DUMMYNET (в общем DUMMYNET служит для ограничения полосы пропускания трафика (допустим, тебе надо, чтобы Маша не могла закачать в день больше 10 метров порнухи с www.porno.com, ты пишешь соответствующее правило), но очень часто бывает, что тебе потом придется использовать некоторые функции IPFW, которые используют DUMMYNET, так что не забудь его включить). Эти четыре правила по сути обязательны. Но любой продвинутый (да и не продвинутый тоже) админ может накидать тебе целую корзинку дополнительных правил, с помощью которых ты сможешь подбить secure-истость своей сети. options IPFIREWALL_VERBOSE_LIMIT=10 (возможность лимита на количество записываемых в лог пакетов, чтобы логи не переполнились); options TCP_DROP_SYNFIN (не принимает пакеты с байтами SYN и FIN, как ты знаешь, существует целый тип атак на основе SYN+FIN пакетов). Существует еще масса дополнительных фишек (можно частично запретить протокол ICMP, тем самым снизив возможность флуда, но эти вещи выходят за пределы данной статьи). Если хочешь побольше узнать о ядре freebsd, читай файл LINT (в той же директории, что и GENERIC) + man ipfw + man dummynet и, разумеется, FreeBSD Handbook (http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html). Компилим ядро: config xakep, потом переходим в директорию /usr/src/sys/compile/xakep, потом make, make install. Если все проходит гладко, новое ядро создастся в корне под именем kernel, при этом старое ядро получит имя kernel.old (но кроме них еще будет default ядрышко - kernel.GENERIC). Ну что, reboot? Если новое ядро прогрузилось - то все ок, если же полезли ошибки - загрузи ядро "по умолчанию". Это делается, когда в самом начале при загрузке freebsd появляется надпись "Booting [kernel] in 9 seconds..." - нажимай Esc и в появившейся строке пиши "unload" (тем самым ты выгрузишь модули от нового ядра) и "boot /kernel.GENERIC". Я ЛЮБЛЮ САМ ПРОЦЕСС Конфигурируем NAT. В файл /etc/rc.conf пишем строки: gateway_enable="YES" (благодаря этой строке мы получаем возможность делать forward пакетов, то есть машина выступает как роутер); defaultrouter="212.212.212.211" (тут должен быть ip-адрес роутера твоего провайдера, то есть узел, который выше тебя, спроси у прова, он скажет); natd_enable="yes" (включаем демон natd); natd_interface="xl1" (тут прописан внешний интерфейс, на котором и будет тусоваться NAT); tcp_drop_synfin="NO" (хоть мы и включили блокировку пакетов с байтами sys+fin, пользоваться пока ею не будем, вот когда разберешься - поменяешь NO на YES). C rc.conf мы закончили (читай man rc.conf). Теперь давай разберемся, как задавать и работать с правилами ipfw. Разумеется, они все (или почти все) уже описаны в man ipfw, но я дам тебе установку. С помощью команды ipfw -a list (более короткий вариант ipfw l) мы получим список правил. Каждое правило (оно же rule) представляет собой какую-либо инструкцию для ipfw. Для начала давай разберемся, что мы можем делать с пакетами, которые принимаем. Всего для ipfw существует несколько правил: |