IPSEC - PF проблема с фильтрацией трафика

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-06-29 16:18:24

Добрый день.

Есть 2 сети соединенные через - gif/ipsec/racoon.
На обоих сторонах установлена freebsd8.
В качестве фаервола на шлюзах используется PF.

Возникла необходимость фильтровать трафик между двумя соедененными сетями.
Т.е. к примеру из сети А в сеть В пускать определенные ПК и наоборот.

Как только в PF добавляю правило block all или block in gif0 all, то в тунеле кроме пингов ни чего не ходит.
Если не писать для gif запрещающие правила по умолчанию, то любой ПК из сети А видит сеть В и наоборот, что хотелось бы заблокировать.

Вот кусок PF:

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

pass out quick on $ext_inet proto udp from $ext_inet port isakmp to $gatewayA port isakmp
pass out quick on $ext_inet proto esp from $ext_inet to $gatewayA
pass out quick on $ext_inet proto ipencap from $ext_inet to $gatewayA
pass out quick on gif0 from $int_lan_B to $lan_A

pass  in quick on $ext_inet proto udp from $gatewayA port isakmp to $ext_inet port isakmp
pass  in quick on $ext_inet proto esp from $gatewayA to $ext_inet
pass  in quick on $ext_inet proto ipencap from $gatewayA to $ext_inet
pass  in quick on gif0 from $lan_A to $int_lan_B
Где $lan_A - сеть А, а $int_lan_B - перечень хостов сети В.

Помогите пожалуйста решить вопрос.
Спасибо.
Последний раз редактировалось f_andrey 2011-06-29 16:26:53, всего редактировалось 1 раз.
Причина: Автору, выбирайте пожалуйста раздел соответствуюший тематике вашего сообщения. приводите полную диагностику, больше логов больше вероятности ответа, а не флуда

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-12 12:40:47

Вообщем вопрос решен ...
Можно фильровать через PF шифрованый трафик IPSEC тунеля ...

Если кому интерестно пишите - расскажу ...
Лень расписывать если ни кому не нужно ...

nnmax
рядовой
Сообщения: 42
Зарегистрирован: 2010-03-28 21:48:28

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение nnmax » 2011-07-13 2:15:28

Можно же средствами setkey фильтровать ? или pf проще?

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-13 7:50:59

nnmax писал(а):Можно же средствами setkey фильтровать ? или pf проще?
Вот на счет setkey я как то не нашел инфы ... Если у вас есть сцылко поделитесь ..
Будет интерестно рассмотреть и этот вариант ....

Ну а если делать через PF или ipfw то наверное, как для меня, проще ... т.к. все правила в одном месте и не нужно по конфигам прыгать ...

nnmax
рядовой
Сообщения: 42
Зарегистрирован: 2010-03-28 21:48:28

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение nnmax » 2011-07-13 23:17:08

kharkov_max писал(а):
nnmax писал(а):Можно же средствами setkey фильтровать ? или pf проще?
Вот на счет setkey я как то не нашел инфы ... Если у вас есть сцылко поделитесь ..
Будет интерестно рассмотреть и этот вариант ....

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

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-14 9:12:49

В том то и дело, что фильтровать хотелось не по сетям а по IP ну и по портам - если нужно.
Думаю что в таком варианте фильтрация в фаерволе будет более удобна ...

Аватара пользователя
skeletor
майор
Сообщения: 2507
Зарегистрирован: 2007-11-16 18:22:04
Откуда: Kiev
Контактная информация:

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение skeletor » 2011-07-19 15:44:41

kharkov_max писал(а):Вообщем вопрос решен ...
Можно фильровать через PF шифрованый трафик IPSEC тунеля ...

Если кому интерестно пишите - расскажу ...
Лень расписывать если ни кому не нужно ...
Мне интересно.
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-19 15:53:37

skeletor писал(а):
kharkov_max писал(а):Вообщем вопрос решен ...
Можно фильровать через PF шифрованый трафик IPSEC тунеля ...

Если кому интерестно пишите - расскажу ...
Лень расписывать если ни кому не нужно ...
Мне интересно.
В данный момент такая фильтрация работает с ADSL укртелеком и еще одним провайдером, но вот с третьим провайдером как то не совсем работает.
Разбираюсь сейчас в чем проблема ...
Так что пока решение сыровато ...

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-19 17:13:00

Собственнло вот что получилось.

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

uname -a
FreeBSD gateway 8.2-RELEASE-p2 FreeBSD 8.2-RELEASE-p2 #0: Mon Jul 18 11:48:39 EEST 2011     root@gateway:/usr/obj/usr/src/sys/FREE82  amd64

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

pkg_info | grep ipsec
ipsec-tools-0.8.0_1 KAME racoon IKE daemon, ipsec-tools version
1. Пересобираем ядро c опциями

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

options         IPSEC
options         IPSEC_NAT_T #Для 8ки
options         IPSEC_DEBUG
options         IPSEC_FILTERTUNNEL

device          crypto
device          enc
Тут все стандартно в инете куча статей про настройку ipsec-tools, но для фильрации фишка в "device enc"
Это виртуальный интерфейс в который завернется весть IPSEC трафик.

2. В rc.conf добавляем

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

ifconfig enc0 up
Тем самым будем поднимать его при старте системы.

3. ipsec.conf - все стандартно как по статьям, сети соеденяем как tunnel
Я настраивал тунели через dif интерфейсы, но думаю что будет работать и без них.

4. Далее добиваемся работы IPSEC, в правилах фильтрации первым ставим pass quick all

5. Когда сети нормально соеденились, настраиваем правила фильтрации для тунелей:
pf.conf

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

enc_if="enc0"
A_host_to_B_lan="{ 192.168.1.5 192.168.1.6 }"
B_host_to_int_host="{ 192.168.2.4 192.168.2.5 }"
B_lan="192.168.2.0/24"
$A_ipsec_host="11.22.33.44."
$B_ipsec_host="44.22.33.11"

pass out quick on $ext_inet proto esp from $A_ipsec_host to $B_ipsec_host
pass out quick on $ext_inet proto ah from $A_ipsec_host to $B_ipsec_host
pass out quick on $ext_inet proto ipencap from $A_ipsec_host to $B_ipsec_host
pass out quick on $ext_inet proto udp from $A_ipsec_host port { isakmp 4500 } to $B_ipsec_host port { isakmp 4500 }

pass  in quick on $ext_inet proto esp from $B_ipsec_host to $A_ipsec_host
pass  in quick on $ext_inet proto ah from $B_ipsec_host to $A_ipsec_host
pass  in quick on $ext_inet proto ipencap from $B_ipsec_host to $A_ipsec_host
pass  in quick on $ext_inet proto udp from $B_ipsec_host port { isakmp 4500 } to $A_ipsec_host port { isakmp 4500 }

pass out quick on { $ext_inet gif0 $enc_if } from $A_host_to_B_lan to $B_lan
pass  in quick on { $ext_inet gif0 $enc_if } from $B_host_to_int_host to $A_host_to_B_lan

pass out quick on { $ext_inet gif0 $enc_if } proto tcp from 192.168.1.2 192.168.2.7 port 5223
pass  in quick on { $ext_inet gif0 $enc_if } proto tcp from 192.168.2.7 to 192.168.1.2 port 5223
Этими правилами мы позволяем построить тунель между сетями, а так же:
1. Хостам сети А 192.168.1.5 192.168.1.6 ходить на любые IP сети B
2. Хостам сети B 192.168.2.4 192.168.2.5 ходить только на хосты сети А 192.168.1.5 192.168.1.6
3. А хосту 192.168.2.7 цепляться на порт 5223 хоста сети В 192.168.1.2 и наоборот.

{ $ext_inet gif0 $enc_if } - Так прописал не зря.
Правила проверял на нескольких провайдерах, фильтрация работала на одном, но не работала на другом.
Что бне парится прописал именно так - работает на всех (которых я проверял).
Важно, не нужно указывать в правиле set skip lo0 , интерфейс enc0 а то фильрация работать не будет.

Вообщем проверяйте, критикуйте.
Правила не идеальны...

measles
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-07-21 18:51:19

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение measles » 2011-07-21 18:55:07

Все же не совсем понятно зачем указывать { $ext_inet gif0 $enc_if }. У меня фильтрация в pf всегда работала просто указывая в правиле gif интерфейс вне зависимости от того через какой провайдер построен туннель в данный момент...

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-22 10:52:35

measles писал(а):Все же не совсем понятно зачем указывать { $ext_inet gif0 $enc_if }. У меня фильтрация в pf всегда работала просто указывая в правиле gif интерфейс вне зависимости от того через какой провайдер построен туннель в данный момент...
kharkov_max писал(а): Правила не идеальны...
Нет времени пока с этим возится, у меня получилось по быстрому запустить именно так.
Не исключено что в этом есть какая-то фича.

Фильтрацию 100% нужно делать не на gif а на enc0 интерфейсе.
Pf не видит зашифрованые пакеты, и может это делать только на enc0 интерфейсе.

measles
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-07-21 18:51:19

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение measles » 2011-07-22 14:14:09

Так дело в том что на gif они еще не зашифрованы или уже расшифрованы если трафик входящий. Если посмотреть tcpdump то там бегает обычный трафик.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-22 14:20:47

Первым постом я кидал кусок pf.conf, где реализовано так как Вы говорите - не работает так.
Такими правилами как минимум у меня не получилось фильтровать по IP сети соедененные тунелем.

А через enc0 завелось.

Выложите пожалуйста свой pf.conf, ipsec.conf и racoon.conf

measles
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-07-21 18:51:19

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение measles » 2011-07-22 15:14:31

Кусок pf.conf

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

pass in on gif5 from $remote_lan to $lan_if:network keep state
pass in on gif5 from $remote_lan to $dmz_if:network keep state
pass in on gif5 from $remote_dmz to $lan_if:network port { 80, 8080 } keep state

pass out on gif5 keep state
ipsec.conf

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

spdadd 101.101.101.101 207.207.207.207 ipencap -P in ipsec esp/transport//require;
spdadd 207.207.207.207 101.101.101.101  ipencap -P out ipsec esp/transport//require;
racoon.conf

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

remote 101.101.101.101
{
        exchange_mode main;
        doi ipsec_doi;
        situation identity_only;

        nonce_size 16;
        lifetime time 24 hour;    # sec,min,hour

        proposal {
        encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key ;
        dh_group 2 ;
        }
}

remote anonymous
{
        exchange_mode main;
        doi ipsec_doi;
        situation identity_only;

        nonce_size 16;
        lifetime time 24 hour;    # sec,min,hour

        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key ;
                dh_group 2 ;
        }
}

sainfo anonymous
{
        pfs_group 2;
        lifetime time 24 hour;
        encryption_algorithm 3des ;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate ;
}

tcpdump -pni gif5

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

15:09:33.231201 IP 192.168.1.19.445 > 192.168.6.55.49213: . 71287:72679(1392) ack 234 win 65301 <nop,nop,timestamp 13157370 855890687>
15:09:33.231334 IP 192.168.1.19.445 > 192.168.6.55.49213: . 72679:74071(1392) ack 234 win 65301 <nop,nop,timestamp 13157370 855890687>
15:09:33.231492 IP 192.168.1.19.445 > 192.168.6.55.49213: . 74071:75463(1392) ack 234 win 65301 <nop,nop,timestamp 13157370 855890687>
15:09:33.231864 IP 192.168.1.19.445 > 192.168.6.55.49213: . 75463:76855(1392) ack 234 win 65301 <nop,nop,timestamp 13157370 855890687>
15:09:33.235691 IP 192.168.2.55.49213 > 192.168.9.19.445: . ack 69895 win 65535 <nop,nop,timestamp 855890688 13157370>
15:09:33.236577 IP 192.168.1.104.33800 > 192.168.6.112.3389: . ack 45 win 252
tcpdump -pni $ext_if host 101.101.101.101:

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

15:11:48.153264 IP 207.207.207.207 > 101.101.101.101: ESP(spi=0x029780f6,seq=0x767e), length 324
15:11:48.240182 IP 207.207.207.207 > 101.101.101.101: ESP(spi=0x029780f6,seq=0x767f), length 76
15:11:48.280760 IP 101.101.101.101 >  207.207.207.207: ESP(spi=0x029780f6,seq=0x7680), length 524
15:11:48.357067 IP 207.207.207.207 > 101.101.101.101: ESP(spi=0x029780f6,seq=0x7681), length 76
15:11:48.375095 IP 101.101.101.101 >  207.207.207.207: ESP(spi=0x029780f6,seq=0x7682), length 116
15:11:48.375299 IP 207.207.207.207 > 101.101.101.101: ESP(spi=0x03e1ffd2,seq=0x1b797), length 132

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-22 22:24:40

Сори, но не вижу у вас правила

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

pass in on gif5 from $remote_lan to 192.168.0.1:255.255.255.0 keep state

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

3. ipsec.conf - все стандартно как по статьям, сети соеденяем как tunnel
Tunel и transport - разные вещи ...

measles
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-07-21 18:51:19

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение measles » 2011-07-25 12:44:32

kharkov_max писал(а):Сори, но не вижу у вас правила

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

pass in on gif5 from $remote_lan to 192.168.0.1:255.255.255.0 keep state
так вот же оно:

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

pass in on gif5 from $remote_lan to $lan_if:network keep state
kharkov_max писал(а):

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

3. ipsec.conf - все стандартно как по статьям, сети соеденяем как tunnel
Tunel и transport - разные вещи ...
Это да, возможно в этом дело. Для tunnel я обычно не создаю gif интерфейс и фильтрую на самом wan.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: IPSEC - PF проблема с фильтрацией трафика

Непрочитанное сообщение kharkov_max » 2011-07-25 12:55:31

Да, с Вашим правилом не доглядел ...
Так как Вы порказали, я делал. См первый пост.
При tunnel - не работает.
Это да, возможно в этом дело. Для tunnel я обычно не создаю gif интерфейс и фильтрую на самом wan.
Скорее всего именно в этом дело.
Так что, если tunnel то только через enc0.