Страница 1 из 1

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

Добавлено: 2017-03-03 8:34:28
wawan
Доброго всем времени суток.
Необходима Ваша помощь уважаемые форумчане. А вопрос заключается в следующем.
Понадобилось мне установить прозрачный прокси сервер. Я всё сделал поставил настроил и всё вроде бы хорошо за исключением одного "НО". Прокси работает только в том случае если прописать её в настройках, тогда всё хорошо но вот добится того что бы всё работало в прозрачном режиме не как не получается. Внизу приведены конфиги и версия системы.
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 работаю не так давно и возможно многово не знаю и не всё понимаю. Прошу подскакать верное решение как реализовать прозрачный прокси сервер.

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

Добавлено: 2017-03-03 9:52:17
snorlov
а сам сквид какой интерфейс слушает?

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

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

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

Добавлено: 2017-03-03 14:07:18
snorlov
Я к тому что, если он не слушает локалхост...

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

Добавлено: 2017-03-03 15:00:43
wawan
telnet на 127.0.0.1 и 192.168.1.1 порт 3128 проходит.

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

Добавлено: 2017-03-03 15:45:12
Neus
а не должно ли быть так:
http_port 3128
http_port 3129 transparent
ну и редирект на порт 3129?

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

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

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

Добавлено: 2017-03-06 7:45:34
Neus
wawan писал(а): Есть еще какие нибуть соображения.
заюзать ipfw

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

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

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

Добавлено: 2017-03-06 9:12:53
snorlov
Можно еще попробовать редирект не на локалхост

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

Добавлено: 2017-03-06 18:38:51
wawan
snorlov писал(а):Можно еще попробовать редирект не на локалхост
Я пробовал на 192.168.1.1 но толку ноль.

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

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

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

Добавлено: 2017-03-08 5:04:39
wawan
Пересобрал сквида без опции аутентификации но результата нет.
Есть у кого рабочий вариант squid +PF.

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

Добавлено: 2017-03-08 17:35:48
Neus
Где-то я видел тред про косяк с редиректом в pf + squid.
Не просто так наверное дефолтная сборка с ipfw.
Заюзай ipfw для редиректа, а pf для остального.

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

Добавлено: 2017-03-09 6:46:16
wawan
Neus писал(а):Заюзай ipfw для редиректа, а pf для остального.
А разве так можно. Я не разу не работал с ipfw. Не подскажите как можно реализовать данную конфигурацию.

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

Добавлено: 2017-03-23 10:11:36
fogary
Если еще актуально. Вот из рабочих конфигов.

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

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

Добавлено: 2017-03-23 14:45:57
wawan
Да актуально.
Попробовал как вы указали но не работает.
Подскажите в конфиг фаирвола надо вносить еще какие либо записи по мимо тех что вы указали.

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

Добавлено: 2017-03-25 8:57:20
fogary
wawan писал(а):Подскажите в конфиг фаирвола надо вносить еще какие либо записи по мимо тех что вы указали.
В смысле вообще, или для работы прозрачного прокси?

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

Добавлено: 2017-03-25 9:32:56
wawan
fogary писал(а):В смысле вообще, или для работы прозрачного прокси?
Для работы прозрачного прокси.
Есть у меня небольшой прогресс. Попробовал настроить как написано тут https://www.ew8bak.ru/2017/02/14/freebs ... ttp-https/
После чего с компьютеров клиентов стал проходить пинг и телнет до сайтов но интернета через браузер по прежнему нет.
Подскажите а сам dns сервер не нужно настраивать для работы с прокси в прозрачном режиме. У меня стоить унбаунд.

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

Добавлено: 2017-03-27 10:08:26
fogary
Без редиректа на 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/*"

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

Добавлено: 2017-03-28 7:10:40
wawan
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) что бы трафик пошел через проксю то на компьютерах перестаёт работать инет, и начинает работать только после того как прописать проксю в браузере.

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

Добавлено: 2017-03-28 8:39:26
Neus
wawan писал(а): set skip on $int_if  ## полностью пропускаем проверку на интерфейсе
проблема случаем не в этом?

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

Добавлено: 2017-03-28 13:03:27
fogary

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

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

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

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

antispoof log quick for { lo0, $int_if, $ext_if }
Фига себе у Вас правил трансляции.

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

Добавлено: 2017-03-29 12:28:23
wawan
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:

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

Добавлено: 2017-03-29 13:34:00
Neus
wawan писал(а): Я уже не знаю куда смотреть.
включить отладку и смотреть прохождение пакетов... наверное