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

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

IPNAT

Правила NAT загружаются с помощью команды ipnat. Обычно правила NAT хранятся в /etc/ipnat.rules.

При внесении изменений в правила NAT после того, как NAT запущен, следует отредактировать файл, содержащий правила NAT, затем выполнить команду NAT ipnat с флагами –CF для удаления существующих правил NAT и очистки всех записей в таблице трансляции.

Для перезагрузки правил NAT следует выполнить команду

# ipnat -CF -f /etc/ipnat.rules

Чтобы посмотреть статистику NAT, следует выполнить

# ipnat -s

Чтобы посмотреть список текущих отображений в таблице NAT, следует выполнить

# ipnat -l

Для включения режима, который показывает большое количество информации, относящейся к обработке правил и записям в таблице, следует выполнить:

# ipnat –v

Правила IPNAT

Правила NAT являются очень гибкими и могут использоваться для разных целей.

Синтаксис, представленный здесь, — упрощенный. Полный синтаксис следует искать в соответствующей man странице.

Синтаксис правила NAT выглядит аналогичным образом:

map IF LAN_IP_RANGE -> PUBLIC_ADDRESS

Правило начинается с ключевого слова map.

Следует заменить IF на внешний интерфейс.

LAN_IP_RANGE – это те IP-адреса, которыми пользуются внутренние клиенты.

PUBLIC_ADDRESS может быть либо внешним IP-адресом, либо специальным значением 0/32, которое означает использование IP-адреса, связанного с IF.

Как работает NAT

Пакет поступает в пакетный фильтр из локальной сети с адресом получателя, расположенным в Интернете. Он пропускается через правила фильтрации для исходящего трафика. Затем получает пакет NAT и просматривает свои правила сверху вниз; применяется первое правило, которому соответствует пакет. NAT проверяет каждое свое правило на соответствие имени интерфейса и IP-адресу источника в пакете. Когда имя интерфейса пакета соответствует правилу NAT, то IP-адрес источника (т.е. в данном случае IP-адрес локальной сети) в пакете проверяется, чтобы выяснить, не попал ли он в диапазон IP-адресов, указанный слева от символа стрелки в правиле NAT. Если это так, то его IP-адрес источника заменяется IP-адресом, указанным справа от стрелки в правиле NAT. При этом NAT создает запись в своей внутренней таблице. Поэтому, когда пакет возвращается из Интернет, он может быть отображен обратно в свой исходный IP-адрес в локальной сети и затем передан правилам фильтрации для дальнейшей обработки.

Запуск NAT

Чтобы указать необходимость NAT, следует добавить определенные утверждения в /etc/rc.conf.

Для запуска роутинга трафика между интерфейсами:

gateway_enable="YES"

Для автоматического запуска IPNAT:

ipnat_enable="YES"

Для указания файла, в котором определены правила:

ipnat_rules="/etc/ipnat.rules"

NAT для очень больших LAN

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

Указание порта

Обычное правило NAT выглядит таким образом:

map dc0 192.168.1.0/24 -> 0/32

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

map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000

Также существует возможность упростить использование этого отображения, указав ключевое слово auto. Это будет означать, что IPNAT сам определит, какие порты доступны для использования:

map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
Использование пула публичных адресов

В очень больших локальных сетях существует очень большое количество локальных адресов, которые отображаются в единственный публичный адрес. Мы имеем правило

map dc0 192.168.1.0/24 -> 204.134.75.1

Данное правило отображает все соединения в 204.134.75.1. Это может быть изменено указанием диапазона

map dc0 192.168.1.0/24 -> 204.134.75.1-10

Или можно указать подсеть, используя CIDR-нотацию:

map dc0 192.168.1.0/24 -> 204.134.75.0/24

Port Redirection

Очень распространенной практикой является иметь web-сервер, e-mail сервер, сервер баз данных и DNS-сервер, каждый из которых расположен на отдельной машине в локальной сети. В этом случае трафик от этих серверов также может использовать NAT, но должен существовать способ перенаправить входящий трафик к нужным компьютерам в локальной сети. IPNAT имеет такую возможность перенаправления и может решить данную проблему. Пусть имеется web-сервер в локальной сети с адресом 10.0.10.25 и существует единственный публичный IP-адрес, который равен 20.20.20.5. Следует использовать правило

rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80

или

rdr dc0 0/32 port 80 -> 10.0.10.25 port 80

или, для DNS-сервера, расположенного в локальной сети с адресом 10.0.10.33, которому необходимо получать публичные DNS-запросы,

rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp
Нияз Сабиров
Нияз Сабиров

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

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

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

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