The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
pf +2 внешних ip адреса +инет минуя squid внутри сети, !*! Aghast, 16-Фев-07, 05:43  [смотреть все]
Не могу заставить всех юзеров с сети ходить в инет исключительно через squid. Сам прокси нормально работает, авторизация NTLM, через него можно прекрасно работать, но можно в браузере отключить прокси о все равно ходить в инет.

ext_if_a----|                             |------squid 2.5 FreeBSD
            |-----OpenBSD--int_if--switch-|
ext_if_b----|                             |------ LAN

Этот конфиг я упер отсюда http://www.openbsd.ru/files/etc/pf-dual.conf и чуток его поправил, наверное, если бы я написал его с нуля, то проблем бы было меньше.
$RuOBSD: pf-dual.conf,v 1.9 200604/22 17:25:57 andrey Exp $
#
# Пример настройки PF для маршрутизатора с двумя внешними каналами
# с трансляцией адресов и переадресацией некоторых сервисов во внутреннюю сеть.
#
# В данном примере также настраивается симметричная маршрутизация для
# правильного возврата пакетов в канал, с которого было инициировано
# соединение, независимо от настройки default route.
#
#  WAN_1  WAN_2             LAN
#    |      |      +------------+--------
#    |      |      |            |
# +-xl0----xl1----ep0-+  +--------------+
# |                   |  |192.168.6.0/24|
# +-------------------+  +--------------+

# Внешние и внутренний интерфейсы.
#
ext_if_a  = "xl0"
ext_if_b  = "xl1"
int_if    = "ep0"

# Шлюзы для каналов.
#
ext_gw_a  = "137.13.241.59"
ext_gw_b  = "10.116.47.2"

#Internal Servers
proxy     = "192.168.6.5"
vpn       = "192.168.6.6"
vpn_port  = "4711"
mail      = "192.168.6.8"
web       = "192.168.6.9"
jabber    = "192.168.6.7"

# TCP/UDP сервисы, обслуживаемые маршрутизатором.
#
tcp_svc   = "ftp ssh smtp domain www https imaps"
udp_svc   = "domain 4711"


# Таблицы черного и белого списков для spamd.
#
#table <spamd> persist
#table <spamd-white> persist

# Выполнить нормализацию всех пакетов.
#
scrub in

# Транслировать внутренние адреса в (основной) адрес внешнего интерфейса.
#
nat on $ext_if_a from !(self) -> ($ext_if_a:0)
nat on $ext_if_b from !(self) -> ($ext_if_b:0)

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"

# Пропустить FTP через transparent FTP proxy.
#
rdr on $int_if proto tcp to !(self) port ftp -> 127.0.0.1 port 8021

# Перенаправить адреса из черного списка в spamd.
#
#rdr on $ext_if_a proto tcp from <spamd> to port smtp tag EXT_IF_A \
# -> 127.0.0.1 port spamd
#rdr on $ext_if_b proto tcp from <spamd> to port smtp tag EXT_IF_B \
# -> 127.0.0.1 port spamd

# Перенаправить адреса, не входящие в белый список в spamd (используется
# в режиме greylist).
#
#rdr on $ext_if_a proto tcp from !<spamd-white> to port smtp tag EXT_IF_A \
# -> 127.0.0.1 port spamd
#rdr on $ext_if_b proto tcp from !<spamd-white> to port smtp tag EXT_IF_B \
# -> 127.0.0.1 port spamd


#Redirect to proxy
rdr on $int_if proto tcp from $int_if:network to $ext_if_a port 80 -> \
   $proxy port 3128
rdr on $int_if proto tcp from $int_if:network to $ext_if_b port 80 -> \
   $proxy port 3128
#Redirect to VPN
rdr pass log on $ext_if_a proto udp from ($ext_if_a:network) to port $vpn_port \
  -> $vpn
rdr pass log on $ext_if_b proto udp from ($ext_if_b:network) to port $vpn_port \
  -> $vpn
rdr on $ext_if_a proto udp to port $vpn_port tag EXT_IF_A -> $vpn
rdr on $ext_if_b proto udp to port $vpn_port tag EXT_IF_B -> $vpn

# Защита от IP spoofing.
#
pass quick on { lo $int_if }
antispoof quick for { lo $int_if }

# По умолчанию блокировать входящий трафик на внешних интерфейсах.
# Для TCP соединений возвращать RST.
#
block in on { $ext_if_a $ext_if_b }
block return-rst in on { $ext_if_a $ext_if_b } proto tcp

# Направить исходящие пакеты в канал, соответствующий адресу источника.
#
pass out route-to ($ext_if_a $ext_gw_a) from ($ext_if_a) to !(self:network) \
  keep state
pass out route-to ($ext_if_b $ext_gw_b) from ($ext_if_b) to !(self:network) \
  keep state

# Установить маршрут для ответа на входящие пакеты для переадресованных
# TCP сервисов.
#
pass in reply-to ($ext_if_a $ext_gw_a) proto tcp flags S/SA tagged EXT_IF_A \
  keep state
pass in reply-to ($ext_if_b $ext_gw_b) proto tcp flags S/SA tagged EXT_IF_B \
  keep state

anchor "ftp-proxy/*"
# Разрешить входящие ICMP ping пакеты, обслуживаемые UDP и TCP сервисы.
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) inet proto icmp \
  icmp-type echoreq code 0 keep state
pass in on $ext_if_a inet proto icmp from ($ext_if_a:network) \
  icmp-type echoreq code 0 keep state
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto udp \
  to port { $udp_svc } keep state
pass in on $ext_if_a proto udp from ($ext_if_a:network) to port { $udp_svc } \
  keep state
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp \
  to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to port { $tcp_svc } \
  flags S/SA keep state
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) inet proto icmp \
  icmp-type echoreq code 0 keep state
pass in on $ext_if_b inet proto icmp from ($ext_if_b:network) \
  icmp-type echoreq code 0 keep state
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto udp \
  to port { $udp_svc } keep state
pass in on $ext_if_b proto udp from ($ext_if_b:network) to port { $udp_svc } \
  keep state
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto tcp \
  to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_b proto tcp from ($ext_if_b:network) to port { $tcp_svc } \
  flags S/SA keep state

# Разрешить входящие TCP соединения для FTP proxy.
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp \
  to port > 49151 flags S/SA user proxy keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to port > 49151 \
  flags S/SA user proxy keep state
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto tcp \
  to port > 49151 flags S/SA user proxy keep state
pass in on $ext_if_b proto tcp from ($ext_if_b:network) to port > 49151 \
  flags S/SA user proxy keep state

Internet:
Destination        Gateway            Flags     Refs     Use    Mtu  Interface
default            137.13.241.57      UGS         0     1225      -   xl0
10.116.47.0/30     link#2             UC          1        0      -   xl1
10.116.47.2                           UHLc        0        0      -   lo0
127/8              127.0.0.1          UGRS        0        0  33224   lo0
127.0.0.1          127.0.0.1          UH          2       83  33224   lo0
192.168.6/24       link#3             UC         13        0      -   ep0
192.168.6.1                           UHLc        1      824      -   ep0
192.168.6.5                           UHLc        0     1291      -   ep0
192.168.6.7                           UHLc        0        5      -   ep0
192.168.6.10                          UHLc        3       40      -   ep0
192.168.6.80                          UHLc        0       91      -   ep0
192.168.6.123                         UHLc        0        2      -   ep0
192.168.6.129                         UHLc        0       10      -   ep0
192.168.6.139                         UHLc        0        4      -   ep0
192.168.6.142                         UHLc        0        4      -   ep0
192.168.6.153                         UHLc        0        7      -   ep0
192.168.6.161                         UHLc        0        4      -   ep0
192.168.6.166                         UHLc        0        4      -   ep0
192.168.6.168                         UHLc        0        4      -   ep0
137.13.241.59/30   link#1             UC          1        0      -   xl0
137.13.241.57                         UHLc        1        0      -   xl0
224/4              127.0.0.1          URS         0        0  33224   lo0


  • pf +2 внешних ip адреса +инет минуя squid внутри сети, !*! Aghast, 07:35 , 16-Фев-07 (1)
    Таки победил, немного коряво, но работает.
    Описываем таблицу
    table <ip> persist file "/etc/ip.lst"
    В этой табличке все ip из 192.168.6.0/24 кроме ip со squid.
    Правим редирект
    rdr on $int_if proto tcp from <ip> to any port 80 -> \
        $proxy port 3128
    В этом случае работает, так, как надо.

    1.Но почему не работает вот так?
    rdr on $int_if proto tcp from { $int_if:network !$proxy} to any port 80 -> \
        $proxy port 3128

    2. И как быть в случае 2 каналов, если такое тоже не работает?
    rdr on $int_if proto tcp from <ip> to $ext_if_a port 80 -> \
        $proxy port 3128
    rdr on $int_if proto tcp from <ip> to $ext_if_b port 80 -> \
        $proxy port 3128




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру