Межсетевое экранирование

Пример совместного использования NAT и Stateful


Существуют некоторые дополнительные конфигурационные утверждения, которые дают возможность активизировать функцию NAT в IPFW. В ядро должно быть добавлено утверждение option divert.

В дополнение к обычным опциям IPFW в /etc/rc.conf необходимо добавить следующее:

natd_enable="YES" # Enable NATD function natd_interface="rl0" # interface name of public Internet NIC natd_flags="-dynamic -m" # -m = preserve port numbers if possible

Использование правил поддержки состояния вместе с правилом divert natd для трансляции сетевых адресов существенно усложняет логику правил. Взаимное расположение правил проверки состояния и divert natd становится очень критичным. Уже не используется простая логика последовательного прохождения правил. Определено новое действие, называемое skipto. При использовании skipto необходимо знать номер каждого правила, чтобы точно указать номер того правила, на которое следует перейти.

Рассмотрим пример использования NAT и поддержки состояния, чтобы понять последовательность прохождения пакета через наборы правил.

Анализ пакета на соответствие правилам начинается с первого правила в файле правил и продолжается по одному правилу вниз по файлу до тех пор, пока не будет достигнут конец или не будет найдено соответствие пакета критериям выбора. После этого пакет покидает пакетный фильтр. Важно помнить о расположении правил с номерами 100, 101, 450, 500 и 510. Они управляют преобразованием исходящих и входящих пакетов, а именно эти записи в динамической таблице поддержки состояния всегда регистрируют частные IP-адреса локальной сети. Далее, важно помнить, что во всех разрешающих и запрещающих правилах указывается направление прохождения пакета (входящий или исходящий) и интерфейс. Также следует помнить, что все запросы начала исходящей сессии всегда переходят на правило 500 для выполнения трансляции сетевого адреса.

Пусть локальный пользователь использует браузер для получения web-страницы. Web-сервер для взаимодействия использует порт 80 (см.
пример набора правил №1). Когда пакет поступает в пакетный фильтр, он не соответствует правилу 100, потому что снабжен заголовком out, а не in. Он передается правилу 101. Этому правилу пакет также не соответствует, потому что это первый пакет и он еще не передается в динамическую таблицу поддержки состояния. Наконец, пакет поступает в правило 125, которому он соответствует. Пакет выходит через сетевую карточку, которая подключена к Интернету. Пакет все еще имеет IP-адрес локальной сети в качестве IP-адреса источника. При обнаружении соответствия данному правилу выполняются два действия. Опция keep-state передает информацию в таблицу динамических правил поддержки состояния. После этого выполняется действие skipto rule 500. Правило 500 применяет NAT для IP-адреса пакета и отправляет его в Интернет. Данный пакет поступает к получателю и возвращается обратно для завершения установления ТСР-соединения. При этом пакет попадает в первое правило из набора правил. В этот момент он соответствует правилу 100, и его IP-адрес получателя преобразуется обратно в IP-адрес локальной сети. Затем он будет передан правилу проверки состояния. При этом он будет найден в таблице как соответствующий открытой сессии и передан в локальную сеть. Пакет передается на рабочую станцию в локальной сети, которая его посылала. Новый пакет посылается для запроса данных от удаленного сервера. В тот момент, когда он получен, он проверяется правилом проверки состояния, и если запись для данного исходящего пакета существует, указанное действие skipto 500 выполняется. Пакет переходит на правило 500, выполняется NAT, и пакет покидает пакетный фильтр.
Для входящего потока все пакеты рассматриваются как часть открытия существующей сессии, автоматически обрабатываются правилом проверки состояния и применяют правила NAT. В результате этого все плохие пакеты отбрасываются и пропускаются только пакеты для разрешенных сервисов.
Рассмотрим другой пример. Пусть существует сервер Apache, выполняющийся на том же хосте, что и пакетный фильтр, и мы хотим, чтобы имелся доступ из Интернета к web-сайту.

Содержание раздела