Страница 1 из 1

Помощь по ipfilter

Добавлено: 2008-08-30 21:38:54
dm07
Всем добрый вечер. Подскажите пожалуйста логику отработки правил IPFilter. Описание: ОС FreeBSD 7 Stable, шлюз (gateway_enable="YES"), 3 сетевых карты, одна для Интернета, две других - для локальных сетей. На шлюзе ipnat, две локальных сетки ходят в интернет. На шлюзе стоит прокси, все клиенты ходят по HTTP через прокси.
Прочитал много документации по ipf, но не уловил некоторых деталей.
1. Когда пакеты из внутренней сети для внешней сети получает один из внутренних сетевых интерфейсов, то согласно работе шлюза, он передает этот пакет на внешний сетевой интерфейс, где применяются правила НАТ и пакет выходит во внешнюю сеть. Вопрос: фактически, нет необходимости расписывать правила IN для внешнего интерфейса для пакетов из внутренней сети? Вот пример правил:

Код: Выделить всё

# 1
pass in quick on lo0 all
# 2
pass out quick on lo0 all

# 3
pass out quick on $if_int all       # разрешены любые исходящие пакеты из внутренней LAN, например, клиенты лок. сети могут обратиться к прокси серверу SQUID
# 4
pass in quick on $if_int all        # разрешены любые входящие пакеты на внутреннюю LAN

# Исходящая секция для самого шлюза (используется, когда применяются правила NAT для пакетов из внутренней сети)
# if_ext - внешний сетевой интерфейс
# ip_ext - внешний IP адрес
block out quick on $if_ext from $ip_ext to any head 20
pass out quick on $if_ext proto tcp/udp from $ip_ext to any port = 53 keep state group 20      # DNS
# 5
pass out quick on $if_ext proto tcp from $ip_ext to any port = 80 flags S keep state group 20             # HTTP
block out log quick on $if_ext all group 20

# Исходящая секция для потока от внутренней сети на внешнюю сетевую карту
# $local_net - внутренняя сеть A.B.C.D/24
block out quick on $if_ext from $local_net to any head 30
pass out quick on $if_ext proto tcp/udp from $local_net to any port = 53 keep state group 30
block out log quick on $if_ext all group 30

# Входящая секция для внешнего сетевого интерфейса #
block in quick on $if_ext from any to any head 50
block in log quick on $if_ext all group 50                        # все запретим, где нам нужно, доступ откроют keep state правила.
Т.е. у меня нигде нет явно прописанных правил, которые бы разрешали пакеты из внутренней сети на внешний сетевой интерфейс. Однако пакеты уходят без проблем.
Правильно я понимаю: внутренний сетевой интерфейс получил пакет HTTP для внешней сети, это дает правило 3 и 4. Поскольку прокси-сервер установлен на прослушку внутреннего сетевого интерфейса, то он получил запрос от внутренней сети без проблем. А дальше передал его внешнему сетевому интерфейсу, где NAT преобразовал внутренний IP адрес отправителя во внешний IP. Уйти пакету во внешнюю сеть позволяет правило 5.
В ядре: options IPFILTER_DEFAULT_BLOCK

Спасибо всем за ответ.

Re: Помощь по ipfilter

Добавлено: 2008-08-31 0:40:40
zingel

Код: Выделить всё

Однако пакеты уходят без проблем.
Как определяли?

Re: Помощь по ipfilter

Добавлено: 2008-08-31 0:43:21
dm07
zingel писал(а):

Код: Выделить всё

Однако пакеты уходят без проблем.
Как определяли?
Пользователи локальной сети ходят по HTTP и довольно успешно ).

Re: Помощь по ipfilter

Добавлено: 2008-08-31 0:50:59
zingel

Код: Выделить всё

tcpdump -exxvvtt dst net <внутренняя сетка локалки>
или

Код: Выделить всё

tcpdump -exxvvtt -i <интерфейс на котором висит прокся>

Re: Помощь по ipfilter

Добавлено: 2008-08-31 1:09:48
dm07
Просмотр дампа траффика думаю не поможет, нужно одновременно анализировать дамп на двух интерфейсах - внешнем и внутреннем и сопоставлять данные. Т.е. в данной ситуации я не могу по-другому считать, кроме как того, что в режиме шлюза пакет перекидывается с внутреннего интерфейса на внешний без соответствующих разрешающих правил со стороны IPF.
Еще вот один вопрос:
Дополнительно к правилам выше для сетевой карты, смотрящей во вторую LAN:

Код: Выделить всё

###############################################################
################## Входящая секция IF_INT2 ####################
###############################################################

block in log quick on $if_int2 from any to any head 60
pass in quick proto tcp from $local_net2 to any flags S/SAFR keep state keep frags group 60
pass in quick proto udp from $local_net2 to any keep state keep frags group 60
pass in quick proto icmp from $local_net2 to any keep state keep frags group 60
pass in quick proto gre from $local_net2 to any keep state keep frags group 60
pass in quick from $local_net2 to any group 60

###############################################################
################## Исходящая секция IF_INT2 ###################
###############################################################

block out log quick on $if_int2 from any to any head 61
pass out quick proto tcp from any to $local_net2 flags S/SAFR keep state keep frags group 61
pass out log quick proto tcp from any to $local_net2 group 61
pass out quick proto udp from any to $local_net2 keep state keep frags group 61
pass out quick proto icmp from any to $local_net2 keep state keep frags group 61
pass out quick proto gre from any to $local_net2 keep state keep frags group 61
Компьютеры из второй ЛАН отсылают данные с обычной скорость для канала (скажем, 300 Кбайт/с),а принимают со скоростью 100 бит/с. Чем может обусловлено такое поведение? Что в правилах выше некорректно?

Re: Помощь по ipfilter

Добавлено: 2008-08-31 12:51:36
zingel
можно iperf запустить на разных сторонах, тогда будет точно понятно где трабл