Настройка прозрачного прокси сервера (squid)

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-03 8:34:28

Доброго всем времени суток.
Необходима Ваша помощь уважаемые форумчане. А вопрос заключается в следующем.
Понадобилось мне установить прозрачный прокси сервер. Я всё сделал поставил настроил и всё вроде бы хорошо за исключением одного "НО". Прокси работает только в том случае если прописать её в настройках, тогда всё хорошо но вот добится того что бы всё работало в прозрачном режиме не как не получается. Внизу приведены конфиги и версия системы.
1. uname -a
FreeBSD 10.3-RELEASE-p16
2. squid-3.5.24
123.png

    acl localnet src 192.168.1.0/24

    http_port 3128 transparent

    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 localnet
    http_access allow localhost

    http_access allow localhost manager

    http_access deny !Safe_ports

    http_access deny CONNECT !SSL_ports
    http_access deny manager

    http_access deny to_localhost

    http_access deny all

    visible_hostname gw.audit.local

    coredump_dir /var/squid/cache

    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

    dns_v4_first on

    shutdown_lifetime 1 seconds

    #cache deny all
    #cache_mem 256 MB
    #maximum_object_size_in_memory 512 KB

3. Фаирфол используется PF в нём присутствует строка
rdr on $int_if proto {tcp,udp} from $lannet to any port 80 -> 127.0.0.1 port 3128
$int_if - имя интерфейса который смотрит в локальную сеть
$lannet - 192.168.1.0/24

Данных манипуляций как написано в разных статьях должно хватить для того что бы задуманное мною работало, но по факу не работает.
В связи с этим вопрос. Что я делаю не так?
Прошу строго не судить так как с freeBSD работаю не так давно и возможно многово не знаю и не всё понимаю. Прошу подскакать верное решение как реализовать прозрачный прокси сервер.

snorlov
подполковник
Сообщения: 3550
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение snorlov » 2017-03-03 9:52:17

а сам сквид какой интерфейс слушает?

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-03 12:10:12

Не понял вопроса. Сквид слушает порт 3128 а как посмотреть интерфейс .
sockstat -4l
squid squid 3272 6 udp4 6 *:42612 *:*
squid squid 3272 8 udp4 *:40623 *:*
squid squid 3272 11 tcp4 6 *:3128

snorlov
подполковник
Сообщения: 3550
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение snorlov » 2017-03-03 14:07:18

Я к тому что, если он не слушает локалхост...

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-03 15:00:43

telnet на 127.0.0.1 и 192.168.1.1 порт 3128 проходит.

Neus
капитан
Сообщения: 1685
Зарегистрирован: 2008-09-08 21:59:56

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение Neus » 2017-03-03 15:45:12

а не должно ли быть так:
http_port 3128
http_port 3129 transparent
ну и редирект на порт 3129?
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-05 10:56:58

Neus писал(а):а не должно ли быть так:
http_port 3128
http_port 3129 transparent
ну и редирект на порт 3129?

Попробовал. Не работает. Всё осталось без изменения, то есть если прописать прокси вручную то работает а как прозрачная нет. Есть еще какие нибуть соображения.

Neus
капитан
Сообщения: 1685
Зарегистрирован: 2008-09-08 21:59:56

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение Neus » 2017-03-06 7:45:34

wawan писал(а):Источник цитаты Есть еще какие нибуть соображения.

заюзать ipfw
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-06 8:56:16

Neus писал(а):
wawan писал(а):Источник цитаты Есть еще какие нибуть соображения.

заюзать ipfw

Спасибо, но хотелось бы всё реализовать при помощи PF :roll:

snorlov
подполковник
Сообщения: 3550
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение snorlov » 2017-03-06 9:12:53

Можно еще попробовать редирект не на локалхост

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-06 18:38:51

snorlov писал(а):Можно еще попробовать редирект не на локалхост

Я пробовал на 192.168.1.1 но толку ноль.

snorlov
подполковник
Сообщения: 3550
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение snorlov » 2017-03-06 22:25:54

wawan писал(а):
snorlov писал(а):Можно еще попробовать редирект не на локалхост

Я пробовал на 192.168.1.1 но толку ноль.

Мне кажется ничего не получится, поскольку он у вас собран с одной из опций аутенфикации, попробуйте пересобрать без оной либо не использовать оную...

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-08 5:04:39

Пересобрал сквида без опции аутентификации но результата нет.
Есть у кого рабочий вариант squid +PF.

Neus
капитан
Сообщения: 1685
Зарегистрирован: 2008-09-08 21:59:56

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение Neus » 2017-03-08 17:35:48

Где-то я видел тред про косяк с редиректом в pf + squid.
Не просто так наверное дефолтная сборка с ipfw.
Заюзай ipfw для редиректа, а pf для остального.
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-09 6:46:16

Neus писал(а):Заюзай ipfw для редиректа, а pf для остального.

А разве так можно. Я не разу не работал с ipfw. Не подскажите как можно реализовать данную конфигурацию.

fogary
рядовой
Сообщения: 16
Зарегистрирован: 2011-07-22 0:18:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение fogary » 2017-03-23 10:11:36

Если еще актуально. Вот из рабочих конфигов.

squid.conf

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

http_port 192.168.0.1:3128
http_port 127.0.0.1:3129 intercept


pf.conf

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

rdr pass inet proto tcp from 192.168.0.0/24 to any port 80 -> 127.0.0.1 port 3129

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-23 14:45:57

Да актуально.
Попробовал как вы указали но не работает.
Подскажите в конфиг фаирвола надо вносить еще какие либо записи по мимо тех что вы указали.

fogary
рядовой
Сообщения: 16
Зарегистрирован: 2011-07-22 0:18:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение fogary » 2017-03-25 8:57:20

wawan писал(а):Подскажите в конфиг фаирвола надо вносить еще какие либо записи по мимо тех что вы указали.
В смысле вообще, или для работы прозрачного прокси?

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-25 9:32:56

fogary писал(а):В смысле вообще, или для работы прозрачного прокси?

Для работы прозрачного прокси.
Есть у меня небольшой прогресс. Попробовал настроить как написано тут https://www.ew8bak.ru/2017/02/14/freebsd-%D0%BF%D1%80%D0%BE%D0%B7%D1%80%D0%B0%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8-squid-http-https/
После чего с компьютеров клиентов стал проходить пинг и телнет до сайтов но интернета через браузер по прежнему нет.
Подскажите а сам dns сервер не нужно настраивать для работы с прокси в прозрачном режиме. У меня стоить унбаунд.

fogary
рядовой
Сообщения: 16
Зарегистрирован: 2011-07-22 0:18:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение fogary » 2017-03-27 10:08:26

Без редиректа на squid и без прописанного proxy в браузере, т. е. чисто через nat, клиенты в интернет ходить могут?
Полагаю, пинг, телнет и dns на прозрачный прокси влиять не должны.

Мой pf.conf

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

if_ext="em1"
if_int="em0"

ports_web="{ 80 443 }"

set block-policy drop
set loginterface $if_ext
set skip on lo

scrub in

nat on $if_ext from $if_int:network -> ($if_ext)
nat-anchor "ftp-proxy/*"

rdr on $if_int proto tcp to port ftp -> 127.0.0.1 port 8021
rdr-anchor "ftp-proxy/*"
rdr pass inet proto tcp from 192.168.0.0/24 to any port 80 -> 127.0.0.1 port 3129

block log all
block in quick from urpf-failed

pass in quick on $if_ext inet proto icmp to ($if_ext) icmp-type { unreach, redir, timex }

pass out on $if_ext modulate state

pass in on $if_int no state
pass in on $if_int proto tcp to port $ports_web no state
pass in on $if_int proto udp to port { domain sip } no state

pass out on $if_int no state
pass out on $if_int proto tcp from port $ports_web no state
pass out on $if_int proto udp from port domain no state

anchor "ftp-proxy/*"

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-28 7:10:40

fogary писал(а):Без редиректа на squid и без прописанного proxy в браузере, т. е. чисто через nat, клиенты в интернет ходить могут?

Да всё ходит и всё работает.
Мой конфиг фаирвола

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

########## interface info ##########
int_if="lan"
ext_if="tun0"

lannet="192.168.0.0/24"
int_ip="192.168.0.1"

########## open ports ##########
www="{ 80,443 }"
mail="{ 465,587,993,995,143,25,110 }"
rdp="{ 730,10913 }"
torrent="{ 51413,49152:65535,5650:5670 }"
ssh="{ 1981,1985,1986 }"
vpn="{ 1983, 1423 }"
ftp="{ 20,21,30000:65000 }"
voip="{ 4000:4010,4050:4090,5060:5065,5160:5165,8000:8002,9000:65534 }"
udp_services="{ 53,123 }"
stim="{ 27000:27050, 4380}"

icmp_types="{echoreq, unreach}"

########## CONTROL PF ##########
#set block-policy return  ## сбрасываем соединение вежливо
set timeout { frag 10, tcp.established 3600 } # Изменяем время для состояния установленного tcp соединения, которое по-умолчанию чересчур большое (24часа).
set block-policy drop  ## сбрасываем соединение грубо
set skip on lo0  ## полностью пропускаем проверку на петле
set skip on $int_if  ## полностью пропускаем проверку на интерфейсе
set loginterface $ext_if
set optimization normal

########## PF_tables ##########
table <white_list> persist { 1.2.3.4 }
table <full_dos> persist file "/etc/pftables/full_dos"
table <srv> persist file "/etc/pftables/srv"

### bloc tables ###
table <ca.zone> persist file "/etc/pftables/ca.zone"
table <cn.zone> persist file "/etc/pftables/cn.zone"
table <de.zone> persist file "/etc/pftables/de.zone"
table <fr.zone> persist file "/etc/pftables/fr.zone"
table <ua.zone> persist file "/etc/pftables/ua.zone"
table <ip.bloc> persist file "/etc/pftables/ip.bloc"

##########
scrub in all  ## нормализуем все входящие пакеты на всех интерфейсах
scrub on $ext_if all reassemble tcp

########## NAT ##########
#nat on $ext_if inet from $lannet to any -> ($ext_if)
nat on $ext_if inet from $int_ip to any -> ($ext_if)

nat on $ext_if inet from <full_dos> to any -> ($ext_if)
nat on $ext_if inet proto tcp from $lannet to any port $ftp -> ($ext_if)
nat on $ext_if inet proto tcp from $lannet to any port $www -> ($ext_if)
nat on $ext_if inet proto tcp from $lannet to any port $mail -> ($ext_if)
nat on $ext_if inet proto tcp from $lannet to any port $rdp -> ($ext_if)
nat on $ext_if inet proto udp from $lannet to any port $udp_services -> ($ext_if)
nat log on $ext_if inet proto icmp from $lannet to any -> ($ext_if)

########## redirect ##########
rdr pass inet proto tcp from $lannet to any port 80 -> 127.0.0.1 port 3128

########## filters ##########
antispoof log quick for { lo0, $int_if, $ext_if }

########## Правела блокировки ##########
block in log all
block out all
block in quick on $ext_if from <ip.bloc> to ($ext_if)
block in quick on $ext_if from <ca.zone> to ($ext_if)
block in quick on $ext_if from <cn.zone> to ($ext_if)
block in quick on $ext_if from <de.zone> to ($ext_if)
block in quick on $ext_if from <fr.zone> to ($ext_if)
block in quick on $ext_if from <ua.zone> to ($ext_if)
block in quick on $ext_if from <us.zone> to ($ext_if)
block drop in log quick on $ext_if from <ddos> to any
block drop in log quick on $ext_if from <ssh> to any

pass out quick on $ext_if from ($ext_if) to any

pass quick on lo0 all ## разрешаем петлю
pass quick on $ext_if from <white_list> to ($ext_if) keep state

########## Разрешаем открытые порты на внешнем интерфейсе ##########
pass in on $ext_if proto tcp from any to ($ext_if) port $www synproxy state  ## чистим траф www от SYN flood
pass in on $ext_if proto tcp to ($ext_if) port $www flags /SA keep state \(max-src-conn 60, max-src-conn-rate 10/2, overload <ddos> flush) ## www режим тех кто превысил лимиты и ложим в таблицу
pass in on $ext_if proto tcp to ($ext_if) port $ssh flags S/SA keep state \(max-src-conn 5, max-src-conn-rate 10/5, overload <ssh> flush global)
pass in on $ext_if proto tcp to ($ext_if) port $rdp flags S/SA keep state \(max-src-conn 1, max-src-conn-rate 5/20, overload <ddos> flush global)
pass in on $ext_if proto tcp to ($ext_if) port $ftp flags S/SA keep state \(max-src-conn 1, max-src-conn-rate 5/20, overload <ddos> flush global)
pass in on $ext_if proto udp to ($ext_if) port $vpn keep state \(max-src-conn 1, max-src-conn-rate 5/20, overload <ddos> flush global)
pass in on $ext_if proto tcp to ($ext_if) port $mail flags S/SA keep state \(max-src-conn 50, max-src-conn-rate 8/60, overload <ddos> flush global)
pass in on $ext_if proto tcp to ($ext_if) port $stim flags S/SA keep state \(max-src-conn 50, max-src-conn-rate 8/60, overload <ddos> flush global)
pass in on $ext_if proto tcp to ($ext_if) port $torrent keep state \(max-src-conn 50, max-src-conn-rate 10/60, overload <ddos> flush global)

########## Разрешаем исходящие порты ##########
pass in quick on $ext_if inet proto {tcp,udp} from any to $lannet port $torrent
pass in quick on $ext_if inet proto tcp from any to any port $ftp # ftp

pass log inet proto icmp all icmp-type $icmp_types

Вот так вот всё работает. Если закоментировать строку nat on $ext_if inet proto tcp from $lannet to any port $www -> ($ext_if) что бы трафик пошел через проксю то на компьютерах перестаёт работать инет, и начинает работать только после того как прописать проксю в браузере.

Neus
капитан
Сообщения: 1685
Зарегистрирован: 2008-09-08 21:59:56

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение Neus » 2017-03-28 8:39:26

wawan писал(а):Источник цитаты set skip on $int_if  ## полностью пропускаем проверку на интерфейсе

проблема случаем не в этом?
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

fogary
рядовой
Сообщения: 16
Зарегистрирован: 2011-07-22 0:18:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение fogary » 2017-03-28 13:03:27

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

set skip on lo0  ## полностью пропускаем проверку на петле
 ...
pass quick on lo0 all ## разрешаем петлю
Второе правило как бы лишнее, если не ошибаюсь.

Попробуйте убрать lo0 из правила, или на время отключить это правило:

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

antispoof log quick for { lo0, $int_if, $ext_if }

Фига себе у Вас правил трансляции.

wawan
рядовой
Сообщения: 22
Зарегистрирован: 2015-12-25 6:28:08

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение wawan » 2017-03-29 12:28:23

Neus писал(а):set skip on $int_if  ## полностью пропускаем проверку на интерфейсе
проблема случаем не в этом?

Пробовал комментировать данную строку толку нет.
fogary писал(а):

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

set skip on lo0  ## полностью пропускаем проверку на петле
 ...
pass quick on lo0 all ## разрешаем петлю
Второе правило как бы лишнее, если не ошибаюсь.

Попробуйте убрать lo0 из правила, или на время отключить это правило:

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

antispoof log quick for { lo0, $int_if, $ext_if }

Как бы да можно и не писать строку pass quick on lo0 all но я её оставляю если честно не знаю почему, просто так повелось.
Пробовал убирать lo0 и комментировать данное правило вообще но результата нет.
Я уже не знаю куда смотреть. :st:

Neus
капитан
Сообщения: 1685
Зарегистрирован: 2008-09-08 21:59:56

Настройка прозрачного прокси сервера (squid)

Непрочитанное сообщение Neus » 2017-03-29 13:34:00

wawan писал(а):Источник цитаты Я уже не знаю куда смотреть.

включить отладку и смотреть прохождение пакетов... наверное
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн


Вернуться в «Софт»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей