FreeBSD 9.x — SQUID 3.2.x (режим transparent proxy для IPFW)

Ну задолбала ента реклама в интернет — пространстве! Уже стала редкостью возможность читать информацию не окруженную огромным количеством всякой рекламы. Ну ладно бы она еще приличная была…., ну хорошо, согласен даже на не приличную…., ну хотя бы на рекламу, а не картинку идиотского содержания, ведущую на ресурс с еще более дебильным контентом… Я конечно понимаю, что многие живут за счет рекламы…., но пусть это будет приличная реклама. И вообще, порой реклама, обвешивающая страницу, загружается гораздо дольше чем сам полезный контент. Да и от всякой похабщины неплохо избавиться. Всего этого можно добиться используя proxy-сервер для доступа к интернету. Будем использовать одно из самых известных решений для unix систем — SQUID.  Причем использовать его будем в режиме transparent rpoxy (т.н. режим прозрачного проксирования). Плюсом выше указанного режима является то, что для работы с proxy-сервером никаких настроек  на клиентском оборудовании делать не нужно (что весьма удобно): все клиенты локальной сети получают доступ к интернету стандартным способом, даже не подозревая что работают через проки-сервер (именно по этой причине режим и называется «прозрачным»). Кроме того, не все (особенно мобильные) устройства и программы могут (имеют настройки) для работы через proxy-сервер, и это еще один «плюс» в пользу «прозрачного» режима проксирования. Есть, конечно, и минус — отсутствует возможность авторизации, но лично мне дома это не критично (учет ведется по ip-адресам), а там где это нужно (например, в крупных организациях) есть специально обученный человек и используется интеграция с AD (да и зоопарк своих мобильных устройств к рабочей сети подключать не позволяют).

Итак, начинаем бой с асоциальным контентом! Мы уже имеем полностью настроенный интернет-шлюз (а где же еще вы собираетесь использовать proxy-сервер SQUID?) с работающими DNS и DHCP службами. В качестве firewall-a используется IPFW, NAT так же реализован встроенными в ядро средствами. Перед непосредственной установкой SQUID необходимо сделать некоторые проверки. В частности, для организации работы  SQUID в режиме «прозрачного» проксирования совместно с firewall-ом IPFW ядро системы FreeBSD должно «уметь» перенаправлять пакеты. Именно ядро, поскольку firewall IPFW так же встроен в ядро, и пакеты будут перенаправляться ядром системы. Проверяем возможность перенаправления пакетов путем анализа лога загрузки:

root@testrouter:/usr/home/routeuser # grep forwarding /var/run/dmesg.boot

результат таков:

ipfw2 (+ipv6) initialized, divert loadable, nat loadable, rule-based forwarding disabled, default to deny, logging disabled

Явно видно, что перенаправление пакетов (rule-based forwarding) не активно (что не удивительно, так как по-умолчанию ядро скомпилировано без оной возможности). Надо это исправить, а именно, перекомпилировать ядро с опцией «IPFIREWALL_FORWARD«. Хотя в одной из предыдущих статей подробно описывался весь процесс пересборки ядра, опишем сей процесс и здесь (благо это не долго).  Для начала определим систему, на которой наш интернет-шлюз работает:

root@testrouter:/usr/home/routeuser # uname -mv

в результате получаем следующее информационное сообщение:

FreeBSD 9.1-RELEASE #0: Sun Mar 10 17:17:28 MSK 2013     root@testrouter.testnet:/usr/obj/usr/src/sys/ROUTER  i386

из которого узнаем, что платформа нашей системы i386, и используется ядро ROUTER. Для начала скопируем конфигурационный файл текущего ядра:

root@testrouter:/usr/home/routeuser # cd /sys/i386/conf/ && cp ROUTER SQUID

нетрудно догадаться, конфигурационный файл нового ядра называется у нас SQUID (но Вы можете назвать его по-своему). Еще напомню, что наша система работает на платформе i386, и, если ваша платформа отличается, необходимо скорректировать выше указанную команду с учетом используемой платформы. Далее в конфигурационный файл /sys/i386/conf/SQUID добавляем следующую строку:

options         IPFIREWALL_FORWARD

затем запускаем компиляцию нового ядра:

root@testrouter:/sys/i386/conf # cd /usr/src && make buildkernel KERNCONF=SQUID

скорость данного процесса очень зависит от производительности «железа», так что чайку с плюшками попить успеете…

После компиляции устанавливаем новое ядро:

root@testrouter:/usr/src # cd /usr/src && make installkernel KERNCONF=SQUID

хорошая новость в том, что установка ядра происходит гораздо быстрее компиляции, посему ручки к очередной чашечке чая не тянем, а перезагружаем наш сервер:

root@testrouter:/usr/src reboot

Смотрим информацию о нашей системе:

root@testrouter:/usr/home/routeuser # uname -mv 

и по результату:

FreeBSD 9.1-RELEASE #0: Sun Mar 10 17:17:28 MSK 2013     root@testrouter.testnet:/usr/obj/usr/src/sys/SQUID  i386

приходим к мысли, что новое ядро SQUID установлено. Теперь проверим возможность перенаправления пакетов ядром системы:

root@testrouter:/usr/home/routeuser # grep forwarding /var/run/dmesg.boot

результат таков:

ipfw2 (+ipv6) initialized, divert enabled, nat enabled, rule-based forwarding enabled, default to deny, logging disabled

чего мы собственно и добивались. На этом предварительная подготовка системы завершена, можно приступать к SQUID-у.

В портах у нас несколько версий SQUID, сейчас выясним каких. Сначала переходим в нужный каталог:

root@testrouter:/usr/home/routeuser # cd /usr/ports/www

 затем ищем все что относиться к SQUID-у:

root@testrouter:/usr/ports/www # echo *squid*

вот что нашлось:

lightsquid squid squid31 squid32 squid_radius_auth squidclamav squidguard squidpurge squidstats squidview

 Как видно, последняя версия, доступная в портах — 3.2, ее и будем ставить. Переходим в нужный каталог порта:

root@testrouter:/usr/ports/www # cd ./squid32

смотрим список необходимого:

root@testrouter:/usr/ports/www/squid32 # make all-depends-list

 и Perl лишь необходим…..:

/usr/ports/lang/perl5.14

 Конфигурируем установку:

root@testrouter:/usr/ports/www/squid32 # make config-recursive

параметры установки следующие:

1-600x300

2-600x3003-600x300

4-600x300

Самое главное — отметить опцию «SQUID_IPFW«, которая и компилирует SQUID для работы с IPFW в режиме «transparent proxy»!!! Так же я отметил опцию «SQUID_ICAP» — это может понадобиться для работы с антивирусными программами, а так же опцию «SQUID_DELAY_POOLS» — дабы иметь возможность гибко шейпить трафик. Желающие могут отметить опцию «SQUID_LARGEFILE» для возможности работы с кешем и файлом логов размером более 2Гб. Скачиваем все необходимое:

root@testrouter:/usr/ports/www/squid32 # make fetch-recursive

На всякий случай привожу лог загрузки:

===> Fetching all distfiles for squid-3.2.8 and dependencies
===> License GPLv2 accepted by the user
===> Found saved configuration for squid-3.2.8
=> squid-3.2.8.tar.bz2 doesn’t seem to exist in /usr/ports/distfiles/squid3.2.
=> Attempting to fetch ftp://ftp.squid-cache.org/pub/squid/squid-3.2.8.tar.bz2
squid-3.2.8.tar.bz2 100% of 2828 kB 182 kBps 00m00s
===> License ART10 GPLv1 accepted by the user
===> Found saved configuration for perl-5.14.2_2
=> perl-5.14.2.tar.bz2 doesn’t seem to exist in /usr/ports/distfiles/perl.
=> Attempting to fetch ftp://ftp.cpan.org/pub/CPAN/modules/by-module/../../src/perl-5.14.2.tar.bz2
perl-5.14.2.tar.bz2 100% of 12 MB 212 kBps 00m00s
=> BSDPAN-20111107.tar.bz2 doesn’t seem to exist in /usr/ports/distfiles/perl.
=> Attempting to fetch http://ftp.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/skv/BSDPAN-20111107.tar.bz2
BSDPAN-20111107.tar.bz2 100% of 8448 B 127 kBps

после чего запускаем установку:

root@testrouter:/usr/ports/www/squid32 # make install clean

которая займет определенное время (надо же ж целый Perl скомпилировать…, да и SQUID сам по себе не мал…). После установки обновим пути поиска:

root@testrouter:/usr/ports/www/squid32 # rehash

Теперь приступим к конфигурации SQUID-а. Открываем для редактирования файл /usr/local/etc/squid/squid.conf (я использую редактор nano, поскольку он корректно работает с кириллицей в кодировке UTF-8):

root@testrouter:/usr/ports/www/squid32 # cd /usr/local/etc/squid/ && nano squid.conf

и наполняем его следующим содержимым:

visible_hostname squid.testrouter.testnet # локальное имя нашего сервера

acl localnet src 172.16.0.0/12 # наша локальная сеть 

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

# Напрямую с сервера доступ имеет только менеджер кэша
http_access allow localhost manager
http_access deny manager 

# запрещаем доступ к несохраненным портам
http_access deny !Safe_ports 

# Запрещаем доступ к не SSL портам
http_access deny CONNECT !SSL_ports

# в целях безопасности запрещаем http доступ
# к внутренним ресурсам сервера
http_access deny to_localhost

# Разрешаем доступ с нашей локальной сети
http_access allow localnet

# Разрешаем доступ внутри сервера
http_access allow localhost

# запрещаем все остальное
http_access deny all 

# Наш прокси «слушает» порт 3128 внутреннего локального адреса
# опция intercept указывает что трафик перенаправлен брандмауэром —
# так называемый «прозрачный» (transparent) режим
http_port 127.0.0.1:3128 intercept

# Отключим кэширование
cache deny all

# Паттерны обновления данных
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

Проверяем конфигурационный файл squid.conf:

root@testrouter:/usr/local/etc/squid # squid -k parse /usr/local/etc/squid/squid.conf 

результат проверки таков:

2013/03/10 20:05:18| Startup: Initializing Authentication Schemes …
2013/03/10 20:05:18| Startup: Initialized Authentication Scheme ‘basic’
2013/03/10 20:05:18| Startup: Initialized Authentication Scheme ‘digest’
2013/03/10 20:05:18| Startup: Initialized Authentication Scheme ‘negotiate’
2013/03/10 20:05:18| Startup: Initialized Authentication Scheme ‘ntlm’
2013/03/10 20:05:18| Startup: Initialized Authentication.
2013/03/10 20:05:18| Processing Configuration File: /usr/local/etc/squid/squid.conf (depth 0)
2013/03/10 20:05:18| Processing: visible_hostname squid.testrouter.testnet
2013/03/10 20:05:18| Processing: acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
2013/03/10 20:05:18| Processing: acl SSL_ports port 443
2013/03/10 20:05:18| Processing: acl Safe_ports port 80 # http
2013/03/10 20:05:18| Processing: acl Safe_ports port 21 # ftp
2013/03/10 20:05:18| Processing: acl Safe_ports port 443 # https
2013/03/10 20:05:18| Processing: acl Safe_ports port 70 # gopher
2013/03/10 20:05:18| Processing: acl Safe_ports port 210 # wais
2013/03/10 20:05:18| Processing: acl Safe_ports port 1025-65535 # unregistered ports
2013/03/10 20:05:18| Processing: acl Safe_ports port 280 # http-mgmt
2013/03/10 20:05:18| Processing: acl Safe_ports port 488 # gss-http
2013/03/10 20:05:18| Processing: acl Safe_ports port 591 # filemaker
2013/03/10 20:05:18| Processing: acl Safe_ports port 777 # multiling http
2013/03/10 20:05:18| Processing: acl CONNECT method CONNECT
2013/03/10 20:05:18| Processing: http_access allow localhost manager
2013/03/10 20:05:18| Processing: http_access deny manager
2013/03/10 20:05:18| Processing: http_access deny !Safe_ports
2013/03/10 20:05:18| Processing: http_access deny CONNECT !SSL_ports
2013/03/10 20:05:18| Processing: http_access deny to_localhost
2013/03/10 20:05:18| Processing: http_access allow localnet
2013/03/10 20:05:18| Processing: http_access allow localhost
2013/03/10 20:05:18| Processing: http_access deny all
2013/03/10 20:05:18| Processing: http_port 127.0.0.1:3128 intercept
2013/03/10 20:05:18| Starting Authentication on port 127.0.0.1:3128
2013/03/10 20:05:18| Disabling Authentication on port 127.0.0.1:3128 (interception enabled)
2013/03/10 20:05:18| Disabling IPv6 on port 127.0.0.1:3128 (interception enabled)
2013/03/10 20:05:18| Processing: cache deny all
2013/03/10 20:05:18| Processing: refresh_pattern ^ftp: 1440 20% 10080
2013/03/10 20:05:18| Processing: refresh_pattern ^gopher: 1440 0% 1440
2013/03/10 20:05:18| Processing: refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
2013/03/10 20:05:18| Processing: refresh_pattern . 0 20% 4320

Как видим, ошибок и предупреждений нет. Для автоматического запуска Squid в файл /etc/rc.conf добавляем следующую строку:

squid_enable=»YES»

и можно пробовать запустить SQUID:

root@testrouter:/usr/local/etc/squid # squid start

даже если в консоли ошибок не вывелось, проверяем, запустился ли SQUID:

root@testrouter:/usr/local/etc/squid # ps -ax | grep squid

у меня результат таков:

61615 ?? Is 0:00,00 squid start
61617 ?? S 0:00,11 (squid-1) start (squid)
61618 ?? I 0:00,01 (logfile-daemon) /var/log/squid/access.log (log_file_daemon)
61632 0 S+ 0:00,00 grep squid

и сие означает, что SQUID работает (по крайней мере запустился без проблем).

Далее, проверим какой tcp-порт «слушает» SQUID:

root@testrouter:/usr/local/etc/squid # sockstat -4 -P tcp | grep squid

и видим следующее:

squid    squid      61617 11 tcp4   127.0.0.1:3128        *:*

т.е. SQUID «слушает» порт 3128 по адресу 127.0.0.1 — это именно то, что нам нужно! На данный момент мы точно знаем, что SQUID запустился и готов принимать запросы — осталось ему их «направить». А «направлять» мы будем с помощью правил Firewall-a (напоминаю, что SQUID устанавливался с поддержкой «прозрачного» режима для IPFW). Для начала посмотрим список действующих правил:

root@testrouter:/usr/local/etc/squid # ipfw show

лицезреть мы должны примерно следующее (SQUID устанавливался на уже работающий интернет-шлюз):

00100 328 38348 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00400 246 54793 allow ip from any to any via em1
01030 50649 20846028 nat 1 ip from any to any via em0
65535 5 612 deny ip from any to any

Данный набор правил формируется скриптом /etc/fw_script.01 уже настроенного интернет шлюза:

############### Скрипт fw_script.01 c командами ipfw #############
#создаем символьные подмена для более удобного написания правил
exface=»em0″ # внешний сетевой интерфейс сервера
inface=»em1″ # внутренний сетевой интерфейс сервера
in_ip=»172.16.0.100″ # ip-адрес внутреннего интерфейса сервера
# префикс команды, параметр -q означает «тихую» работу
pre_com=»ipfw -q»
# для начала удаляем все существующие правила!
$pre_com -f flush
# разрешение трафика на петлевом интерфейсе – необходимо для работы ОС
# Операционная система UNIX использует интерфейс lo0 и IP-адрес
# 127.0.0.1 для внутренних нужд. Таким образом, firewall должен
# обеспечивать беспрепятственный обмен данными на указанных интерфейсе и
# IP-адресе.
$pre_com add 100 allow ip from any to any via lo0
# запрет ip трафика от любого источника на всю сеть loopback интерфейса
$pre_com add 200 deny ip from any to 127.0.0.0/8
# запрет ip трафика со всей сети loopback интерфейса на любой источник
$pre_com add 300 deny ip from 127.0.0.0/8 to any
# разрешаем беспрепятственному прохождению трафика внутри нашей локальной сети!!!
$pre_com add 400 allow all from any to any via $inface
# включаем kernel NAT на интерфейсе em0 с параметрами
# сбрасывать таблицу соединений при смете ip-адреса сетевого интерфейса
# пытаться сохранить порты
# по-умолчанию запрещать входящие подключения
$pre_com nat 1 config log if $exface reset same_ports deny_in
# все что проходит через внешний интерфейс перенаправляем в NAT
$pre_com add 1030 nat 1 ip from any to any via $exface

Для работы SQUID в выше указанный набор нужно добавить два правила:

1. Правило, разрешающее исходящий трафик с loopback интерфейса сервера (именно на нем работает SQUID)

2. Правило, перенаправляющее трафик с нужных портов в SQUID.

Эти два новых правила для работы SQUID должны проверяться до NAT, а так же должны быть до правила №400 — иначе они никогда не будут проверяться.

Перед тем как добавить новые правила в скрипт конфигурации Firewall-a рекомендуется проверить их работу, что мы и сделаем.  Добавляем правило №1:

root@testrouter:/usr/local/etc/squid # ipfw add 350 allow tcp from me to any out via em0 keep-state uid squid

Добавленное выше правило разрешает tcp-пакетам, отправляемым демоном squid с любого интерфейса сервера уходить через интерфейс em0 (в нашем случае em0 является внешним интерфейсом.) Если правило успешно добавилось, в консоль будет выведено сообщение:

00350 allow tcp from me to any out via em0 uid squid keep-state

Заново смотрим список действующих правил Firewall-а:

root@testrouter:/usr/local/etc/squid # ipfw show

результат должен быть такой (новое 1-е правило выделено):

00100 64 6864 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00350 0 0 allow tcp from me to any out via em0 uid squid keep-state
00400 3 228 allow ip from any to any via em1
01030 152 19318 nat 1 ip from any to any via em0
65535 11 1341 deny ip from any to any

 Добавляем правило №2:

 root@testrouter:/usr/local/etc/squid # ipfw add 360 fwd 127.0.0.1,3128 tcp from 172.16.0.0/24 to any 80 out via em0

Добавленное правило перенаправляет все tcp-запросы, «уходящие» через интерфейс em0 с ip-адресов 172.16.0.0/24  на 80-й порт получателя. Если данное правило добавилось, в консоли появится следующее сообщение:

00360 fwd 127.0.0.1,3128 tcp from 172.16.0.0/24 to any dst-port 80 out via em0

Снова смотрим список действующих правил Firewall-а:

root@testrouter:/usr/local/etc/squid # ipfw show

результат должен быть такой (новое 2-е правило выделено):

00100 64 6864 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00350 0 0 allow tcp from me to any out via em0 uid squid keep-state
00360 0 0 fwd 127.0.0.1,3128 tcp from 172.16.0.0/24 to any dst-port 80 out via em0
00400 3 228 allow ip from any to any via em1
01030 152 19318 nat 1 ip from any to any via em0
65535 11 1341 deny ip from any to any

Настало время попробовать открыть какую нибудь WEB-страницу с ПК локальной сети. Показателями нормальной работы SQUID в режиме «прозрачного» проксирования являются: доступность WEB-страниц (это легко проверяется) и НЕНУЛЕВЫЕ значения срабатывания правил 350 и 360, что можно проверить командой:

root@testrouter:/usr/local/etc/squid # ipfw show

В моем случае результат таков:

00100 256 43452 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00350 700 297460 allow tcp from me to any out via em0 uid squid keep-state
00360 340 34022 fwd 127.0.0.1,3128 tcp from 172.16.0.0/24 to any dst-port 80 out via em0
00400 936 350101 allow ip from any to any via em1
01030 520 109626 nat 1 ip from any to any via em0
65535 11 1341 deny ip from any to any

Как видно, правила 350 и 360работают, на чем тест драйв считаем завершенным. Исходный скрипт /etc/fw_script.01 «кромсать» не будем, а сделаем на его основе новый:

root@testrouter:/usr/home/routeuser # cp /etc/fw_script.01 /etc/fw_script.proxy

Как не трудно догадаться, все изменения вносить будем уже в файл /etc/fw_script.proxy. Добавим в него два новых правила:

# разрешаем исходящий трафик через внешний интерфейс с процесса squid
$pre_com add 350 allow tcp from me to any out via $exface keep-state uid squid
# весь трафик tcp по нужным портам отправляем в SQUID
$pre_com add 360 fwd 127.0.0.1,3128 tcp from $loc_net to any 80 out via $exface

не забывая при этом описать переменную loc_net, определяющую диапазон адресов локальной сети.  Итоговое содержимое файла /etc/fw_script.proxy таково (изменения выделены):

############### Скрипт /etc/fw_script.proxy c командами ipfw #############
#создаем символьные подмена для более удобного написания правил
exface=»em0″ # внешний сетевой интерфейс сервера
inface=»em1″ # внутренний сетевой интерфейс сервера
in_ip=»172.16.0.100″ # ip-адрес внутреннего интерфейса сервера

loc_net=»172.16.0.0/24″ # локальная сеть
# префикс команды, параметр -q означает «тихую» работу
pre_com=»ipfw -q»
# для начала удаляем все существующие правила!
$pre_com -f flush
# разрешение трафика на петлевом интерфейсе – необходимо для работы ОС
# Операционная система UNIX использует интерфейс lo0 и IP-адрес
# 127.0.0.1 для внутренних нужд. Таким образом, firewall должен
# обеспечивать беспрепятственный обмен данными на указанных интерфейсе и
# IP-адресе.
$pre_com add 100 allow ip from any to any via lo0
# запрет ip трафика от любого источника на всю сеть loopback интерфейса
$pre_com add 200 deny ip from any to 127.0.0.0/8
# запрет ip трафика со всей сети loopback интерфейса на любой источник
$pre_com add 300 deny ip from 127.0.0.0/8 to any
# разрешаем исходящий трафик через внешний интерфейс с процесса squid
$pre_com add 350 allow tcp from me to any out via $exface keep-state uid squid
# весь трафик tcp по нужным портам отправляем в SQUID
$pre_com add 360 fwd 127.0.0.1,3128 tcp from $loc_net to any 80 out via $exface
# разрешаем беспрепятственному прохождению трафика внутри нашей локальной сети!!!
$pre_com add 400 allow all from any to any via $inface
# включаем kernel NAT на интерфейсе em0 с параметрами
# сбрасывать таблицу соединений при смете ip-адреса сетевого интерфейса
# пытаться сохранить порты
# по-умолчанию запрещать входящие подключения
$pre_com nat 1 config log if $exface reset same_ports deny_in
# все что проходит через внешний интерфейс перенаправляем в NAT
$pre_com add 1030 nat 1 ip from any to any via $exface

Теперь запустим скрипт /etc/fw_script.proxy:

root@testrouter:/usr/home/routeuser # sh /etc/fw_script.proxy

и взглянем на список действующих правил Firewall-a:

root@testrouter:/usr/home/routeuser # ipfw show

в моем случае результат таков:

00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00350 0 0 allow tcp from me to any out via em0 uid squid keep-state
00360 0 0 fwd 127.0.0.1,3128 tcp from 172.16.0.0/24 to any dst-port 80 out via em0
00400 0 0 allow ip from any to any via em1
01030 33 2500 nat 1 ip from any to any via em0
65535 4 701 deny ip from any to any

Можно констатировать, что новые правила добавились. Теперь пробуем открыть с ПК локальной сети WEB-страничку в интернете. Наша цель состоит в проверке работоспособности правил скрипта /etc/fw_script.proxy. Если WEB-страницы открываются, снова смотрим список действующих правил Firewall-а:

root@testrouter:/usr/home/routeuser # ipfw show

В моем случае результат таков:

00100 544 109274 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00350 3750 2223167 allow tcp from me to any out via em0 uid squid keep-state
00360 1475 172951 fwd 127.0.0.1,3128 tcp from 172.16.0.0/24 to any dst-port 80 out via em0
00400 4090 2366520 allow ip from any to any via em1
01030 876 281451 nat 1 ip from any to any via em0
65535 4 701 deny ip from any to any

Отчетливо видно, что правила 350 и 360 работают, и можно настроить выполнение скрипта /etc/fw_script.proxy при загрузке нашего сервера. Для этого в файле /etc/rc.conf строку:

firewall_script=»/etc/fw_script.01″

меняем на

firewall_script=»/etc/fw_script.proxy»

Можно перезагрузить сервер и проверить работоспособность сервера после перезагрузки.

Следующий шаг — настройка возможности просмотра статистики.
Оригинал: суперхрюн.рф/index.php/freebsd/18-freebsd-9-x-squid-3-2-x-rezhim-transparent-proxy-dlya-ipfw

Запись опубликована в рубрике *Proxy, *Unix,*Linux, FreeBSD. Добавьте в закладки постоянную ссылку.

2 комментария на «FreeBSD 9.x — SQUID 3.2.x (режим transparent proxy для IPFW)»

  1. Z говорит:

    unix.ck.ua/content/nastroika-korporativnogo-proxy-servera-squid-v27
    Настройка корпоративного Proxy-сервера Squid v2.7

  2. Уведомление: My Homepage

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91