- PF rdr правило и bridge c AV, nix, 20:09 , 09-Фев-12 (1)
>[оверквотинг удален] > Исходные данные: > Inet -> 95.173.x.x GW(Nat) 10.1.1.1-> $Ext_if (bridge with pf) $int_if ->10.1.1.2 client > На клиенте прописан default gateway 10.1.1.1 > Собственно само соединение через мост работает нормально, pf фильтрует трафик, все Ок. > Для организации антивирусной проверки на bridge пытаюсь прикрутить Squid+AV (DrWeb)+rdr > правила вида > rdr on $int_if inet proto tcp from any to any port 80 > -> 127.0.0.1 port 3128 > pass in quick on $int_if route-to lo0 inet proto tcp from any > to 127.0.0.1 port 3128 keep state А зачем последнее правило? В прозрачном перенаправлении трафика на сквид хватает первого. rdr pass on $int_if inet proto tcp from any to any port 80 -> 127.0.0.1 port 3128 > Squid соответственно слушает 127.0.0.1:3128 intercept. > (К слову если сделать на бридже адрес и явно прописать его на > клиенте все опять же работает, AV фильтрует) > Правило даже вроде как работает, т.к. pfctl -ss дает кучу записей типа > all tcp 127.0.0.1:3128 <- 82.204.218.126:80 <- 10.1.1.2:35550 > CLOSED:SYN_SENT > Не пойму в чем проблема. Читал, что где то еще нат нужен, > но в данной конфигурации непонятно где. К тому же tcpdump на > lo0 вообще пустой. По статусу соединения проблема где-то в роутинге, но > вот где?
А tcpdump что говорит на интерфейсах tcpdump -nqtttti _IF_NAME_
- PF rdr правило и bridge c AV, LHN, 20:51 , 09-Фев-12 (2)
- PF rdr правило и bridge c AV, nix, 01:00 , 10-Фев-12 (3)
>> А зачем последнее правило? В прозрачном перенаправлении трафика на >> сквид хватает первого. >> rdr pass on $int_if inet proto tcp from any to any port >> 80 >> -> 127.0.0.1 port 3128 > Т.к. в Pf при rdr трафик проходит через фильтры, поэтому если его > явно не разрешить то он будет дропнут на последнем правиле deny. Так вы посмотрите внимательнее. Там опция pass зачем по-вашему? >[оверквотинг удален] >> tcpdump -nqtttti _IF_NAME_ > А он весь http трафик прекрасно видит, и на int_if и на > bridge0. Более того в логах pf отрабатывает именно второе правило pass > in log quick... > Вот только на lo0 ничего нет, вообще... > Кстати тоже странность вроде бы, одинаковые пакеты и на int_if и bridge_if. > Т.е. по логике уходя с клиента они попадают на int_if, но > потом должно сработать правило редиректа, и оно как бы даже срабатывает, > но этот же пакет появляется и логируется на bridge0 по второму > разу. - PF rdr правило и bridge c AV, nix, 01:06 , 10-Фев-12 (4)
>[оверквотинг удален] >> tcpdump -nqtttti _IF_NAME_ > А он весь http трафик прекрасно видит, и на int_if и на > bridge0. Более того в логах pf отрабатывает именно второе правило pass > in log quick... > Вот только на lo0 ничего нет, вообще... > Кстати тоже странность вроде бы, одинаковые пакеты и на int_if и bridge_if. > Т.е. по логике уходя с клиента они попадают на int_if, но > потом должно сработать правило редиректа, и оно как бы даже срабатывает, > но этот же пакет появляется и логируется на bridge0 по второму > разу.В догонку. Сразу забыл дописать. Если у вас мост, то нет необходимости фильтровать на всех интерфейсах. Во фре можно фильтровать на самом бридже (в опенке по-моему на бридже фильтровать нельзя). Регулируется такое поведение с помощью sysctl Вот с одного сервака. Там в мост объединены несколько внутр. сетевых интерфейса. net.link.bridge.log_stp: 0 net.link.bridge.pfil_local_phys: 0 net.link.bridge.pfil_member: 0 net.link.bridge.pfil_bridge: 1 net.link.bridge.pfil_onlyip: 1 Посмотрите, может поможет.
- PF rdr правило и bridge c AV, LHN, 06:29 , 10-Фев-12 (5)
- PF rdr правило и bridge c AV, nix, 10:43 , 10-Фев-12 (6)
>[оверквотинг удален] >> Вот с одного сервака. Там в мост объединены несколько внутр. сетевых интерфейса. >> net.link.bridge.log_stp: 0 >> net.link.bridge.pfil_local_phys: 0 >> net.link.bridge.pfil_member: 0 >> net.link.bridge.pfil_bridge: 1 >> net.link.bridge.pfil_onlyip: 1 >> Посмотрите, может поможет. > Спасибо, такие параметры есть, фильтрую и на бридже и на интерфейсах, в > принципе пробовал и чисто на бридж правило редиректа повесить, точно так > же эффекта нет.Значит, что-то не так делаете. Попробуйте что-то вроде этого: Включите фильтрацию только на бридже. Squid "слушает" на интерфейсе моста. set skip on {lo $int_if $ext_if} set state-policy if-bound rdr on bridge0 inet proto tcp from $client to !(self) port {80 443} -> 127.0.0.1 port 3128 block in all block out all pass in quick on bridge0 inet proto tcp from $client to bridge0 pass out quick on bridge0 from bridge0 to any Форвардинг включать не надо.
- PF rdr правило и bridge c AV, LHN, 11:00 , 10-Фев-12 (7)
- PF rdr правило и bridge c AV, nix, 11:18 , 10-Фев-12 (8)
>[оверквотинг удален] >> set skip on {lo $int_if $ext_if} >> set state-policy if-bound >> rdr on bridge0 inet proto tcp from $client to !(self) port {80 >> 443} -> 127.0.0.1 port 3128 >> block in all >> block out all >> pass in quick on bridge0 inet proto tcp from $client to bridge0 >> pass out quick on bridge0 from bridge0 to any > И данные правила так же не применимы no IP address found for > bridge0 ))). Наверное надо немного доки почитать. Макрос вы не определили. Удачи.
|