Ключевые слова:firewall, faq, ipfw, freebsd, nat, (найти похожие документы)
Date: Tue, 12 Oct 2004 14:03:48 +0600
From: "Sergey A. Cherukhin" <rf@ce.cctpu.edu.ru.>
Newsgroups: ftn.ru.unix.bsd
Subject: [FreeBSD] FAQ по пакетным фильтрам и NAT
Последняя редакция разделов FAQ про пакетные фильтры и NAT.
> Q.: Во FreeBSD существует несколько пакетных фильтров - bpf, PF, ipf, IPFilter, IPFW,
> IPFW2. Чем они отличаются?
A.: Пакетный фильтр bpf не используется для построения МСЭ (межсетевых
экранов aka firewall). Этот фильтр используется программами анализа и учета
трафика, например, trafd. Правила фильтрации задаются программой на
псевдо-машинном языке.
Пакетные фильтры PF, IPFilter, IPFW и IPFW2 используются для построения МСЭ.
IPFilter (он же ipf) - небольшой по размеру пакетный фильтр, включенный в
ядро FreeBSD с версии 3.3.3. До этого был доступен в виде порта.
PF - пакетный фильтр, заимствованный из OpenBSD. В настоящее время доступен
в виде порта. С точки зрения пользователя очень похож на IPFilter, но имеет
дополнительную функциональность (нормализация пакетов, управление
приоритетеми пакетов, управление полосой пропускания, фильтрация по uid/gid,
аутентификация пользователя на маршрутизаторе и пассивное определение
удаленной ОС).
IPFW - пакетный фильтр по-умолчанию начиная с FreeBSD 2.0.
IPFW2 является более новой версией IPFW, имеющей больше возможностей по
сравнению с IPFW. Во FreeBSD 4.* и старше по-умолчанию используется IPFW, в
версиях 5.* и новее - IPFW2.
> Q.: Что лучше использовать, IPFW, IPFilter или PF?
А.: Hеобходимо использовать IPFW если:
- нужно разделять или ограничивать полосу пропускания;
- нужно использовать divert-сокеты (для natd или tcpmssd)
- нужны правила с указанием uid/gid пакетов.
- нужна оптимизация сложного дерева правил (сложнее, чем head/group
в ipf).
В противном случае - на Ваш выбор.
Пакетные фильтры можно использовать совместно в разных комбинациях.
Hапример, можно использовать для фильтрации пакетов IPFilter, а для
управления полосой пропускания - DUMMYNET из IPFW.
> Q.: В каком порядке пакеты проходят через фильтры при использовании
> нескольких фильтров?
A.: Если все фильтры вкомпилированы в ядро, то порядок следующий:
interface in->bpf->ipnat->ipfilter->ipfw->pkt
pkt->ipfilter->ipnat->ipfw->bpf->interface out
Если фильтры подгружаются модулями, то порядок прохождения зависит от
порядка загрузки.
> Q.: Что лучше использовать, natd или ipnat ?
A.: Политика трансляции для natd задается в IPFW, что дает большую гибкость
в настройках и позволяет, например, выполнять несимметричную фильтрацию,
когда исходящие пакеты уходят через один интерфейс, а входящие приходят
через другой.
Кроме того, natd поддерживает transparent proxy для протоколов FTP, IRC,
ICMP, PPTP, RTSP, PNA, NetBios over TCP/IP и Cisco Skinny Station protocol,
а ipnat - только FTP, H.323, ipsec, NetBios over TCP/IP, raudio и rcmd.
Однако natd работает в userland и на каждый пакет выполняется 2 переключения
контекста, что дает overhead, заметный на слабом железе (i486, i586).
В отличие от natd, ipnat потребляет значительно меньше процессорных
ресурсов, ipnat можно настроить на GENERIC-ядре, подгрузив модуль ipl, а для
natd придется перекомпилировать ядро с опцией IPDIVERT и ipnat работает с
любым пакетным фильтром, а для natd обязательно нужен ipfw.
Так что если у Вас слабое железо, Вы не хотите перекомпилировать ядро или не
хотите использовать ipfw и функциональность ipnat Вас устраивает -
используйте ipnat.
A.: Если все фильтры вкомпилированы в ядро, то >порядок следующий:
>interface in->bpf->ipnat->ipfilter->ipfw->pkt
>pkt->ipfilter->ipnat->ipfw->bpf->interface out
>Если фильтры подгружаются модулями, то порядок >прохождения зависит от
>порядка загрузки.