Опубликован: 21.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 3:

Пример пакетных фильтров в ОС FreeBSD 6.0

FTP и NAT

FTP имеет следующую особенность: он может выполняться в активном и пассивном режиме. Различие состоит в том, как создается канал данных. Пассивный режим является более безопасным, так как канал данных создается тем, кто запрашивает ftp-сессию.

Правила IPNAT

IPNAT имеет специальную встроенную опцию FTP proxy, посредством которой можно указать правило отображения NAT. Оно может просматривать все исходящие пакеты для запрошенного начала сессии активного или пассивного FTP и динамически создавать временные правила фильтрации, которые будут содержать только номер порта, реально используемый каналом данных. Это устраняет риск безопасности, которому обычно подвергается пакетный фильтр, открывая большой диапазон портов с большими номерами.

Данное правило будет управлять всем трафиком для внутренней локальной сети:

map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp

Данное правило обрабатывает FTP-трафик от шлюза:

map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp

Данное правило обрабатывает весь не-FTP-трафик от внутренней локальной сети:

map dc0 10.0.10.0/29 -> 0/32

Правило отображения FTP расположено выше обычного правила отображения. Все пакеты проверяются на соответствие первому сверху правилу. Проверяется соответствие имени интерфейса, затем IP-адресу источника локальной сети и затем — является ли этот пакет FTP. Если все соответствия выполнены, то специальный FTP-прокси создает временные правила фильтрации, разрешающие проходить пакетам FTP-сессии в обоих направлениях, и, дополнительно, выполнять NAT для FTP-пакетов. Все пакеты из локальной сети, которые не являются FTP, не соответствуют первому правилу, попадают в третье правило и проверяются на соответствие интерфейса и IP-источника, после чего выполняется NAT.

Правила фильтрации IPNAT FTP

Необходимо только одно правило фильтрации для FTP, если используется NAT FTP-proxy.

Без FTP-прокси необходимы следующие три правила:

# Allow out LAN PC client FTP to public Internet
    # Active and passive modes
    pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state

    # Allow out passive mode data channel high order port numbers
    pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state
    # Active mode let data channel in from FTP server
    pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state

IPFW

IPFIREWALL ( IPFW ) является пакетным фильтром, изначально существовавшем во FreeBSD. Он использует наследуемые правила без поддержки состояния и наследуемую технологию представления правил для получения так называемой Simple Stateful логики.

Множество правил IPFW ( /etc/rc.firewall ) в стандартной инсталляции FreeBSD является скорее примером, и не предполагается, что оно будет непосредственно применяться без модификации. Пример не использует фильтрование с поддержкой состояния, поэтому он рассматривается как базовый в данном разделе.

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

IPFW состоит из семи компонент. Исходной компонентой является процессор правил фильтрования из ядра firewall’а и интегрированная с ним возможность подсчета пакетов, возможность создания логов, правило divert, которое запускает NAT и некоторые дополнительные возможности, возможности шейпинга трафика, возможность перенаправления fwd rule, возможность моста и возможность невидимого ip.

Указание необходимости использования IPFW

IPFW включен в базовую инсталляцию FreeBSD в качестве отдельного загружаемого модуля времени выполнения. Система динамически загружает модуль ядра, если в rc.conf используется утверждение firewall_enable="YES". Нет необходимости компилировать IPFW в ядро FreeBSD, если нет необходимости в функции NAT.

После перезапуска системы с firewall_enable="YES" в rc.conf, на экране высветится следующее сообщение как часть процесса запуска:

ipfw2 initialized, divert disabled, rule-based forwarding disabled, 
      default to deny, logging disabled

Загружаемый модуль не имеет встроенной возможности создания логов. Чтобы включить возможности их создания и установить для них ограничения, следует добавить утверждения в /etc/sysctl.conf:

net.inet.ip.fw.verbose=1
    net.inet.ip.fw.verbose_limit=5

Опции ядра

Не существует требования компилировать IPFW в ядро, если нет необходимости в функции NAT.

options IPFIREWALL

Данная опция дает возможность IPFW функционировать как часть ядра.

options IPFIREWALL_VERBOSE

Следующая опция дает возможность создавать логи пакетов, которые проходят через IPFW, и указывать ключевое слово log в наборе правил.

options IPFIREWALL_VERBOSE_LIMIT=5

Количество пакетов, для которых создаются логи с помощью syslogd в каждой записи, ограничено. Данная опция предотвращает возможность осуществления DoS-атак посредством переполнения syslog.

options IPFIREWALL_DEFAULT_TO_ACCEPT

Данная опция позволяет по умолчанию всем пакетам, которые не соответствуют ни одному правилу, проходить пакетный фильтр. Это хорошо только при первой установке пакетного фильтра.

options IPV6FIREWALL
 options IPV6FIREWALL_VERBOSE
 options IPV6FIREWALL_VERBOSE_LIMIT
 options IPV6FIREWALL_DEFAULT_TO_ACCEPT

Данные опции аналогичны опциям IPv4, но они предназначены для IPv6. Если IPv6 не используется, IPFW можно использовать без правил для IPv6.

options IPDIVERT

Это дает возможность использовать функциональность NAT.

Замечание. Если не включено IPFIREWALL_DEFAULT_TO_ACCEPT и не установлены правила, разрешающие входящие пакеты, все пакеты к компьютеру и от него будут блокированы.

Опции /etc/rc.conf

Если IPFW скомпилирован в ядро, то необходимо загрузить его с помощью следующего утверждения в /etc/rc.conf:

firewall_enable="YES"

Установка скриптов для активации правил:

firewall_script="/etc/ipfw.rules"

Необходимость создания логов:

firewall_logging="YES"

Замечание. Переменная firewall_logging устанавливает переменную sysctl net.inet.ip.fw.verbose в значение 1. Не существует в rc.conf переменной для установки ограничений логов, но ограничение может быть установлено посредством переменной sysctl вручную или из файла /etc/sysctl.conf.

net.inet.ip.fw.verbose_limit=5

Если компьютер функционирует в качестве шлюза и, в частности, предоставляет сервис NAT, следует использовать дополнительные опции в /etc/rc.conf.

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Игорь Касаткин
Игорь Касаткин
Россия, Москва
Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008