URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 95582
[ Назад ]

Исходное сообщение
"freebsd ipfw natd squid intercept"

Отправлено sbrfrf , 23-Апр-14 19:31 
Всем здравствуйте.
Тема избитая все логично и понятно но не получается прикрутить прозрачный прокси.
Интернет раздает через прокси или натом.  Попробовал прикрутить прозрачный прокси,
браузер думает и говорит страница недоступна.
freebsd 9.2 squid  3.3.11
#!/bin/sh
cmd="ipfw -q add"
skip="skipto 500"
pif="em0"
ks="keep-state"
good_tcpo="80"
goodip="10.0.0.0/24{1-250}"
ipfw -q -f flush
ipfw -f pipe flush

################################################################################
$cmd 100 allow  all from $goodip to any  via xl0
$cmd 110 allow  all from any to any via lo0
#################################################################################
#
#Transparent Squid
#$cmd  150 fwd 127.0.0.1,3129 tcp from $goodip to any 80  out via $pif
#
#NAT IN
$cmd 200 divert natd ip from any to any in via $pif
$cmd 210 check-state
#################################################################################
#out
#################################################################################
#dns  for LAN
$cmd 300 $skip  udp from any to any 53  out via $pif $ks
$cmd 310 $skip  tcp from any to any 53  out via $pif setup $ks
#DNS for Server
$cmd 300 allow  udp from any to any 53  out via $pif $ks
$cmd 310 allow  tcp from any to any 53  out via $pif setup $ks
#internet for LAN
$cmd 320 $skip  tcp from $goodip to any $good_tcpo out via $pif setup $ks
#Internet for SERVER
$cmd 340 allow  all from me to any out via $pif setup $ks
###############################################################################
#in
################################################################################
#ssh in
$cmd 410 allow  tcp from any to me 22 in via $pif setup limit src-addr 2

$cmd 499 deny log all from any to any


#NAT OUT
$cmd 500 divert natd  ip from any to any out via $pif
$cmd 510 allow  ip from any to any

$cmd 999 deny log all from any to any

rc.conf
hostname="gate.domain.local"
ifconfig_em0=" inet xx netmask 255.255.255.0"
ifconfig_xl0=" inet 10.0.0.1 netmask 255.255.255.0"
ifconfig_rl0=" inet xx netmask 255.255.255.0"
defaultrouter="xx"
sshd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"

#
gateway_enable="YES"
natd_enable="YES"
natd_interface="em0"
natd_flags="-dynamic -m"
named_enable="YES"
firewall_enable="YES"
firewall_script="/etc/firewall.conf"
firewall_logging="YES"
dummynet_enable="YES"
#
squid_enable="YES"
#VI
clear_tmp_enable="YES"
#
rinetd_enable="YES"


squid.conf

acl localnet src 10.0.0.0/24        # RFC1918 possible internal network
acl localnet src 127.0.0.1/32


acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
#
acl deny_domains dstdomain "/usr/local/etc/squid/deny_domains"
http_access deny deny_domains
#

# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports


# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 10.0.0.1:3128
http_port 127.0.0.1:3129 intercept
#connect_timeout 20 second
#forwarded_for off
#cache deny all
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/squid/cache/squid 100000 64 512
maximum_object_size 100240 KB
# Leave coredumps in the first cache dir
coredump_dir /var/squid/cache/squid
access_log /var/log/squid/access.log

лог кэш сквида, в аксцесе логи ничего про подключения с браузера нет

2014/04/23 20:57:53 kid1| Initializing IP Cache...
2014/04/23 20:57:53 kid1| DNS Socket created at 0.0.0.0, FD 7
2014/04/23 20:57:53 kid1| Adding nameserver xxxx from /etc/resolv.conf
2014/04/23 20:57:53 kid1| Adding nameserver xxxx from /etc/resolv.conf
2014/04/23 20:57:53 kid1| Logfile: opening log /var/log/squid/access.log
2014/04/23 20:57:53 kid1| WARNING: log parameters now start with a module name. Use 'stdio:/var/log/squid/access.log'
2014/04/23 20:57:53 kid1| WARNING: no_suid: setuid(0): (1) Operation not permitted
2014/04/23 20:57:53 kid1| Unlinkd pipe opened on FD 12
2014/04/23 20:57:53 kid1| Store logging disabled
2014/04/23 20:57:53 kid1| Swap maxSize 102400000 + 262144 KB, estimated 7897088 objects
2014/04/23 20:57:53 kid1| Target number of buckets: 394854
2014/04/23 20:57:53 kid1| Using 524288 Store buckets
2014/04/23 20:57:53 kid1| Max Mem  size: 262144 KB
2014/04/23 20:57:53 kid1| Max Swap size: 102400000 KB
2014/04/23 20:57:53 kid1| Rebuilding storage in /var/squid/cache/squid (clean log)
2014/04/23 20:57:53 kid1| Using Least Load store dir selection
2014/04/23 20:57:53 kid1| Set Current Directory to /var/squid/cache/squid
2014/04/23 20:57:53 kid1| Loaded Icons.
2014/04/23 20:57:53 kid1| HTCP Disabled.
2014/04/23 20:57:53 kid1| Squid plugin modules loaded: 0
2014/04/23 20:57:53 kid1| Accepting HTTP Socket connections at local=10.0.0.1:3128 remote=[::] FD 15 flags=9
2014/04/23 20:57:53 kid1| Accepting NAT intercepted HTTP Socket connections at local=127.0.0.1:3129 remote=[::] FD 17 flags=41
2014/04/23 20:57:53 kid1| Done reading /var/squid/cache/squid swaplog (1282 entries)
2014/04/23 20:57:53 kid1| Finished rebuilding storage from disk.
2014/04/23 20:57:53 kid1|      1282 Entries scanned
2014/04/23 20:57:53 kid1|         0 Invalid entries.
2014/04/23 20:57:53 kid1|         0 With invalid flags.
2014/04/23 20:57:53 kid1|      1282 Objects loaded.
2014/04/23 20:57:53 kid1|         0 Objects expired.
2014/04/23 20:57:53 kid1|         0 Objects cancelled.
2014/04/23 20:57:53 kid1|         0 Duplicate URLs purged.
2014/04/23 20:57:53 kid1|         0 Swapfile clashes avoided.
2014/04/23 20:57:53 kid1|   Took 0.02 seconds (69776.30 objects/sec).
2014/04/23 20:57:53 kid1| Beginning Validation Procedure
2014/04/23 20:57:53 kid1|   Completed Validation Procedure
2014/04/23 20:57:53 kid1|   Validated 1282 Entries
2014/04/23 20:57:53 kid1|   store_swap_size = 19304.00 KB
2014/04/23 20:57:54 kid1| storeLateRelease: released 0 objects


Содержание

Сообщения в этом обсуждении
"freebsd ipfw natd squid intercept"
Отправлено arachnid , 23-Апр-14 19:58 
пакеты на лкальный интерфейc форвардятся?
сквид собран с поддержкой прозрачности с ipfw?

"freebsd ipfw natd squid intercept"
Отправлено sbrfrf , 24-Апр-14 00:56 
> пакеты на лкальный интерфейc форвардятся?
> сквид собран с поддержкой прозрачности с ipfw?

собран с поддержкой, в логах порт для транспарент создает.
на локальный инт правило есть но оно или не работает или еще что.


"freebsd ipfw natd squid intercept"
Отправлено arachnid , 24-Апр-14 10:08 
то есть при tcpdump -i lo0 port 3129 пакеты не регистрируются?
тогда сюда вывод ipfw show

>> пакеты на лкальный интерфейc форвардятся?
>> сквид собран с поддержкой прозрачности с ipfw?
> собран с поддержкой, в логах порт для транспарент создает.
> на локальный инт правило есть но оно или не работает или еще
> что.


"freebsd ipfw natd squid intercept"
Отправлено asavah , 23-Апр-14 20:22 
Это всё из рабочих конфигов

# Squid normally listens to port 3128
http_port 3128
http_port 3129 transparent
icp_port 3130

особое внимание на _transparent_

нах 127.0.0.1 и пр?? хай везде слушает, на ване прибить файером, чтоб не лазили чужие.

$ipfw add 44444 fwd 127.0.0.1,3129 all from $lannet1 to not $tbl_noproxy dst-port 80,8000,8080 in recv $IF_LAN1


>$cmd 200 divert natd ip from any to any in via $pif

доколе мля???? контекст свитчи бородатейшего юзерспейсного демона любите ??
осильте ipfw kernel nat (включить опцию при сборке ведра)

кривой пример:
NAT_ISP1="nat 1"
$ipfw $NAT_ISP1 config ip $IP_ISP1 unreg_only same_ports
$ipfw add 55555 $NAT_ISP1 all from $lannet1 to not $tbl_localnets out
$ipfw add 55556 fwd $GW_ISP1 all from $IP_ISP1 to not $tbl_localnets out
$ipfw add 55557 $NAT_ISP1 all from any to $IP_ISP1 in recv $IF_ISP1


"freebsd ipfw natd squid intercept"
Отправлено sbrfrf , 24-Апр-14 01:05 
> Это всё из рабочих конфигов
> # Squid normally listens to port 3128
> http_port 3128
> http_port 3129 transparent
> icp_port 3130
> особое внимание на _transparent_

после 3.1 написано intercept использовать
какая у вас версия?

> нах 127.0.0.1 и пр?? хай везде слушает, на ване прибить файером, чтоб
> не лазили чужие.

в инструкциях написано было.так то пусть слушает, но явно указывать еще никто не запрещал.
> $ipfw add 44444 fwd 127.0.0.1,3129 all from $lannet1 to not $tbl_noproxy dst-port
> 80,8000,8080 in recv $IF_LAN1
>>$cmd 200 divert natd ip from any to any in via $pif
> доколе мля???? контекст свитчи бородатейшего юзерспейсного демона любите ??
> осильте ipfw kernel nat (включить опцию при сборке ведра)

в доках на сайте с ним хорошая инструкция идет, с очень понятной логикой
> кривой пример:
> NAT_ISP1="nat 1"
> $ipfw $NAT_ISP1 config ip $IP_ISP1 unreg_only same_ports
> $ipfw add 55555 $NAT_ISP1 all from $lannet1 to not $tbl_localnets out
> $ipfw add 55556 fwd $GW_ISP1 all from $IP_ISP1 to not $tbl_localnets out
> $ipfw add 55557 $NAT_ISP1 all from any to $IP_ISP1 in recv $IF_ISP1

если ядерным натом пользоваться так же через skeepto перекидывать натируемые порты?
есть какаято разница в производительности между natd и kernel Nat?


"freebsd ipfw natd squid intercept"
Отправлено asavah , 24-Апр-14 02:08 

> после 3.1 написано intercept использовать

возможно, всего не упомнишь
squid -v
Squid Cache: Version 3.2.9

> в инструкциях написано было.так то пусть слушает, но явно указывать еще никто не запрещал.

это действительно пофиг )

> если ядерным натом пользоваться так же через skeepto перекидывать натируемые порты?

не совсем понял вопрос

$ipfw $NAT_ISP1 config ip $IP_ISP1 unreg_only same_ports \
redirect_port tcp 192.168.66.6:80 1111 \
redirect_port tcp 192.168.77.7:80 2222
итд


у вас ядро случаем не generic???
c generic ведром fwd не работает!

у меня на 8й боевой фряхе  собрано с ( на 9ке не помню были ли отличия, нет под рукой)
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10000
options IPFIREWALL_NAT
options IPFIREWALL_FORWARD
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
options IPSTEALTH
options TCPDEBUG
options LIBALIAS
options DUMMYNET


если ведро не generic и _вкомпилен_ options IPFIREWALL_FORWARD , то попробуйте так
$cmd 95 fwd 127.0.0.1,3129 tcp from $goodip to any dst-port 80 in recv xl0 # Перед allow (это важно)
$cmd 100 allow  all from $goodip to any via xl0


делайте ipfw show и смотрите счётчики, если на нужном правиле нулевые - значит не матчит ) , ковыряйте порядок прохождения правил (с) ваш К.О.



"freebsd ipfw natd squid intercept"
Отправлено sbrfrf , 24-Апр-14 04:35 
>> после 3.1 написано intercept использовать
> возможно, всего не упомнишь
> squid -v
> Squid Cache: Version 3.2.9
>> в инструкциях написано было.так то пусть слушает, но явно указывать еще никто не запрещал.
> это действительно пофиг )
>> если ядерным натом пользоваться так же через skeepto перекидывать натируемые порты?

это я имел ввиду, пришел пакет на сервер с локалки например на 21 порт, попал под правило разрешающее отправить этот пакет во внешку, но сначала надо пропустить через нет и команда skeepto переводит его на правило Nat out.

> не совсем понял вопрос
> $ipfw $NAT_ISP1 config ip $IP_ISP1 unreg_only same_ports \
>  redirect_port tcp 192.168.66.6:80 1111 \
>  redirect_port tcp 192.168.77.7:80 2222
>  итд
> у вас ядро случаем не generic???
> c generic ведром fwd не работает!

с ядром все хорошо собрано с поддержкой фаераола диверта как в инструкции
на сайте freebsd.org форвардинг работает, фаервол работает как в правилах написано.
>[оверквотинг удален]
> options IPFIREWALL_DEFAULT_TO_ACCEPT
> options IPDIVERT
> options IPSTEALTH
> options TCPDEBUG
> options LIBALIAS
> options DUMMYNET
> если ведро не generic и _вкомпилен_ options IPFIREWALL_FORWARD , то попробуйте так
> $cmd 95 fwd 127.0.0.1,3129 tcp from $goodip to any dst-port 80 in
> recv xl0 # Перед allow (это важно)
> $cmd 100 allow  all from $goodip to any via xl0

а почему важно перед allow пакет же дальше пойдет по правилам, главное до исходящего ната это сделать, а иначе форвардинг не получится а получится просто нат.
а нат нужно делать на 80 порт?
тут же прокси сама идет в интернет берет и отдает локалке что попросили. Я правильно мыслю? Трансляция адресов не нужна?

> делайте ipfw show и смотрите счётчики, если на нужном правиле нулевые -
> значит не матчит ) , ковыряйте порядок прохождения правил (с) ваш
> К.О.


"freebsd ipfw natd squid intercept"
Отправлено sbrfrf , 24-Апр-14 12:45 
>[оверквотинг удален]
>> $cmd 100 allow  all from $goodip to any via xl0
> а почему важно перед allow пакет же дальше пойдет по правилам, главное
> до исходящего ната это сделать, а иначе форвардинг не получится а
> получится просто нат.
> а нат нужно делать на 80 порт?
> тут же прокси сама идет в интернет берет и отдает локалке что
> попросили. Я правильно мыслю? Трансляция адресов не нужна?
>> делайте ipfw show и смотрите счётчики, если на нужном правиле нулевые -
>> значит не матчит ) , ковыряйте порядок прохождения правил (с) ваш
>> К.О.

Прописал в сквид
http_port 3128
http_port 3129 intercept
С такими параметрами через проксти пишет нет доступа
Вернул свои параметры
http_port xxxxx:3128
http_port xxxxxx:3128
http_port 127.0.0.1:3129 intercept

В ipfw изменил строчку, поставил до allow как вы говорили. rl1 это внутрення сетевая, пришлось сменить ошибки старя выдавала TX
00095    0       0 fwd 127.0.0.1,3129 tcp from xxxxx to any dst-port 80 in recv rl1
00100 4537 1076167 allow ip from xxxxxx to any via rl1

Тоесть почему то правило не обрабатывается
Но почему?
Немного поигрался с параметрами
$cmd 95 fwd 127.0.0.1,3129 tcp from $goodip202 to any 80
убрал dst-port 80 in recv rl1
и О чудо счетчик завертелся
00095   87  14951

Я так понимаю от версии к версии фаервол по разному обрбатывает то что раньше обрабатывалась этими командами. Уже не раз сталкиваюсь что написано в каких то хау ту на деле просто берет и не работает.
Но теперь соответсвенно на веб сервер локальной сети никто не попадет )
И заветные строки в логах появились.
# tail -f /var/log/squid/cache.log
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Authorization: Basic YWRtaW46YGtqZ2ZuZjcxNTE=
Via: 1.1 gate.domain.local (squid/3.3.11)
X-Forwarded-For: 10.180.202.47
Cache-Control: max-age=0
Connection: keep-alive

Вернул правила в таком виде
$cmd 95 fwd 127.0.0.1,3129 tcp from $goodip202 to any 80 out via $pif
00095  611   95687
Счетчик крутится ну и локальный веб сервер работает.
Вот такой результат.Дальше будем режики прикручивать антивирус.

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