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

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

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

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
wawan
рядовой
Сообщения: 27
Зарегистрирован: 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 работаю не так давно и возможно многово не знаю и не всё понимаю. Прошу подскакать верное решение как реализовать прозрачный прокси сервер.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

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

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

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

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

wawan
рядовой
Сообщения: 27
Зарегистрирован: 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
подполковник
Сообщения: 3927
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

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

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

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

wawan
рядовой
Сообщения: 27
Зарегистрирован: 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
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

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

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

а не должно ли быть так:
http_port 3128
http_port 3129 transparent
ну и редирект на порт 3129?
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

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

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

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

Neus писал(а):а не должно ли быть так:
http_port 3128
http_port 3129 transparent
ну и редирект на порт 3129?
Попробовал. Не работает. Всё осталось без изменения, то есть если прописать прокси вручную то работает а как прозрачная нет. Есть еще какие нибуть соображения.

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

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

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

wawan писал(а): Есть еще какие нибуть соображения.
заюзать ipfw
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

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

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

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

Neus писал(а):
wawan писал(а): Есть еще какие нибуть соображения.
заюзать ipfw
Спасибо, но хотелось бы всё реализовать при помощи PF :roll:

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

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

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

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

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

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

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

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

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

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

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

wawan писал(а):
snorlov писал(а):Можно еще попробовать редирект не на локалхост
Я пробовал на 192.168.1.1 но толку ноль.
Мне кажется ничего не получится, поскольку он у вас собран с одной из опций аутенфикации, попробуйте пересобрать без оной либо не использовать оную...

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

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

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

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

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

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

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

Где-то я видел тред про косяк с редиректом в pf + squid.
Не просто так наверное дефолтная сборка с ipfw.
Заюзай ipfw для редиректа, а pf для остального.
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

wawan
рядовой
Сообщения: 27
Зарегистрирован: 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
рядовой
Сообщения: 27
Зарегистрирован: 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
рядовой
Сообщения: 27
Зарегистрирован: 2015-12-25 6:28:08

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

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

fogary писал(а):В смысле вообще, или для работы прозрачного прокси?
Для работы прозрачного прокси.
Есть у меня небольшой прогресс. Попробовал настроить как написано тут https://www.ew8bak.ru/2017/02/14/freebs ... ttp-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
рядовой
Сообщения: 27
Зарегистрирован: 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
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

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

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

wawan писал(а): set skip on $int_if  ## полностью пропускаем проверку на интерфейсе
проблема случаем не в этом?
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

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
рядовой
Сообщения: 27
Зарегистрирован: 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
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

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

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

wawan писал(а): Я уже не знаю куда смотреть.
включить отладку и смотреть прохождение пакетов... наверное
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!