LINUX.ORG.RU
ФорумAdmin

Проксирующий Nginx + SQUID + mikrotik

 , , ,


0

2

Доброго всем времечка! Встала задача настроить SQUID + ScreenSquid для детального отчёта по трафику. В центре сети mikrotik, за ним сервер бэкэнд Apache и фронтенд Nginx, на том который фронтенд был установлен соответственно SQUID (работает под Gentoo). Вот что я нашёл по этой теме: https://toster.ru/q/220330 http://adminnote2.blogspot.com/2014/05/mikrotik-squida.html Собственно основной вопрос в iptables - во всех инструкциях необходимо делать редирект с портов 80, 443 на SQUID. А у меня по этим портам Nginx делает proxy_pass на Apache. Как так закрутить iptables чтобы работало?

Если используешь REDIRECT - можно и закрутить. Если используешь socket matching(TPROXY) - не получится, я пробовал, там всё печально. Здесь REDIRECT и TPROXY - это методы реализации через iptables.

TPROXY в общем случае нужен только если у тебя клиенты с публичными IP

Pinkbyte ★★★★★
()
Ответ на: Уважаемый от hardbox00
-A PREROUTING -p tcp -m tcp --dport 80 -d ! ip_server -j REDIRECT --to-ports squid_port

Где ip_server - IP-адрес сервера с nginx, squid_port - порт где запущен squid.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

ну это в ссылках было

Ну ок. Это было в ссылках, которые я прикладывал. 1) А как после этого запросы proxy_pass с Nginx к Apache в обход этого правила направить, мне моего опыта и знаний с iptables не хватает - поэтому и спрашиваю... Да и в интернетах не нашёл ответа на свой вопрос. Смотрел в сторону ipset и/или DNSmasq. 2) Пока у меня даже просто по инструкции не получилось настроить - скорее всего не хватает маршрута до SQUID. Но с этим я думаю разберусь. А вот что делать с первым пока ума не приложу. Сможет кто-нибудь на первый вопрос ответить?! Вот ещё раз первый вопрос: ServerA (NGINX) перенаправляет запрос через директиву proxy_pass на ServerB (APACHE), если что это две разные железки. Также на ServerA стоит SQUID на который редиректится трафик с портов 80,443 на порты SQUID'a 3128,3129 (соответственно). Если происходит редирект с 80,443 на 3128,3129 - меняется сертификат на сертификат SQUID'a, а должны быть разные сертификаты сайтов. Как пустить трафик сайтов в обход редиректа. Или может как то иначе это решается, короче сертификаты должны быть сайтов, а не SQUID...

hardbox00
() автор топика
Ответ на: ну это в ссылках было от hardbox00

как после этого запросы proxy_pass с Nginx к Apache в обход этого правила направить
Как пустить трафик сайтов в обход редиректа

Пускай напрямую - это обеспечивает ключ -d. Ну и возможно необходимо правило в цепочке FORWARD, но без схемы сети с указанием IP-адресов и подсетей подсказать конкретное правило сложно.

Pinkbyte ★★★★★
()
23 марта 2019 г.
26 июня 2020 г.
Ответ на: UP,UP,UP от hardbox00

Решение Найдено

Вообщем долгими муками - решение было найдено - скоро здесь появится ссылка как )))

hardbox00
() автор топика
Ответ на: Остался Один Вопрос от hardbox00

Учитывая что у банков https и речь сейчас у нас тут о прозрачном проксировании, а также принимая во внимание то, что банк-клиенты могут параноидально реагировать на подмененный сертификат(а его в случае прозрачного HTTPS-прокси хочешь-не хочешь подменять придеться), то ответ - никак. Только пускать напрямую, в обход squid-а вообще

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: А как? от hardbox00

Разрешить в файрволе трафик напрямую(в цепочке FORWARD) на ip-адреса сайтов банков. IP-адреса выяснять через torch(tcpdump на mikrotik не завезли, так что работать придется с тем что есть)

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Да, не

Можно же сделать mark routing, mark connection. У меня почти получилось, но не получается с mark connection… Сертификат то сайта, то подменный

hardbox00
() автор топика
Ответ на: Да, не от hardbox00

Да и сайты через Layer7

hardbox00
() автор топика
Ответ на: Остался Один Вопрос от hardbox00

SslBump и SslPeekAndSplice

acl bank_ssl ssl::server_name "/etc/squid/lists/bank_ssl"
##Содержимое вроде такого:
##accounts.bank.com
##

acl bank_dst dstdom_regex "/etc/squid/lists/bank_dst"
##Содержимое вроде такого:
##.*\.bank(24|\-business)\.com
##

acl bank_dns dstdomain "/etc/squid/lists/bank_dns"
##Содержимое вроде такого:
##accounts.bank.com
##

acl bank any-of bank_ssl bank_dst bank_dns

acl step1 at_step SslBump1
acl step2 at_step SslBump2

ssl_bump peek      step1 all
ssl_bump splice bank
…

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

Понятно, я читал на хабре что это возможно

Теперь у меня везде TCP_TUNNEL и сертификат не подменяется нигде… И что делать вот с этим ssl_bump bump all

hardbox00
() автор топика
Ответ на: комментарий от hardbox00

я вижу последнии IP куда ходил, но должны то быть по сути адреса сайтов

Это как раз правильно)
Браузер передает имя хоста внутри установленного соединения (хидер «Host: linux.org.ru»), а соединяется по IP.

Первый acl в моем примере использует Server Name Indication (SNI), откуда тоже можно получить имя, но срабатывает это не всегда.

И что делать вот с этим ssl_bump bump all

Поставить последним в группе правил ssl_bump, если стоит задача сделать прозрачный прокси с расшифровкой https.
Вроде такого:

acl step1 at_step SslBump1
acl step2 at_step SslBump2

#bump_on - сборный acl того, что обязательно расшифровываем
ssl_bump bump      bump_on

#"подглядываем" в соединение, так можно получить SNI 
ssl_bump peek      step1 all

#"рубим" рекламу и т.д.
ssl_bump terminate step1 banners_dns Wifi-ip
ssl_bump terminate step1 banners_ssl Wifi-ip
ssl_bump terminate step1 malware_ssl
ssl_bump terminate step1 spyware_ssl

#банки - мимо 
ssl_bump splice bank

ssl_bump stare     step2 all !bank   #всех остальных смотрим внимательнее
ssl_bump bump all  !bank             #и таки расшифровываем

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

Без этого никак, мне нужны только исключения, чувствую себя тупым (((

#bump_on - сборный acl того, что обязательно расшифровываем ssl_bump bump bump_on

hardbox00
() автор топика
Ответ на: комментарий от Kuzz

За 500 руб. доделаешь, дам доступ

Пожалуйста

hardbox00
() автор топика
Ответ на: комментарий от Pinkbyte

Прокси у меня с самопальными. сертф. ну как положенно. Банки не жалуются. Хотя Да! Бухгалтерии сделал нат. Жаба давит. :))

Bootmen ☆☆☆
()

Без этого вполне можно обойтись.

мне нужны только исключения

Тогда как-то так:

#содержимое файлов "lists/bank_ssl" и т.д. собираем сами
#их не обязательно три должно быть))
acl bank_ssl ssl::server_name "/etc/squid/lists/bank_ssl"
acl bank_dst dstdom_regex "/etc/squid/lists/bank_dst"
acl bank_dns dstdomain "/etc/squid/lists/bank_dns"

#acl типа any-of и есть "сборный", собранный из других acl
#собрать можно и один (acl bank any-of bank_ssl)
acl bank any-of bank_ssl bank_dst bank_dns

acl step1 at_step SslBump1
acl step2 at_step SslBump2

#all - встроенный acl, обозначающий именно все
ssl_bump peek   step1 all
ssl_bump splice       bank
ssl_bump stare  step2 all !bank
ssl_bump bump         all !bank

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

web.whatsapp.com вроде заработал

Вот про это можно поподробнее

acl bank_ssl ssl::server_name «/etc/squid/lists/bank_ssl» ##Содержимое вроде такого: ##accounts.bank.com

acl bank_dst dstdom_regex «/etc/squid/lists/bank_dst» ##Содержимое вроде такого: ##.*.bank(24|-business).com

acl bank_dns dstdomain «/etc/squid/lists/bank_dns» ##Содержимое вроде такого: ##accounts.bank.com

и скажи куда денюжку перевести

hardbox00
() автор топика
Ответ на: web.whatsapp.com вроде заработал от hardbox00

Вот про это можно поподробнее

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

ssl::server_name - имена серверов (эти acl проверяют SNI), т.е. обычные записи вида

www.bank.com
ssl.bank.com
web.whatsapp.ru

dstdom_regex - регекспы имен серверов, так проще ловить все используемые домены, но можно захватить и что-то левое

[-0-9a-z]+\.bank\.com

dstdomain - то же, что и ssl::server_name, но проверяются не только SNI. Файл может быть тем же, что и в первом

acl bank_ssl ssl::server_name "/etc/squid/lists/bank_dns"
acl bank_dns dstdomain "/etc/squid/lists/bank_dns"

Есть еще acl dst acl dst bank_ip "/etc/squid/lists/bank_ip" Он, соответственно, для IP-адресов

Т.к. у нас задача не влезать в эти соединения, то посмотреть url (вроде https://my.site.com/bank/index.html) мы не можем. Соответственно, работают далеко не все acl

discord.com/*

Это не похоже на нормальный регексп. А если так: ([-0-9a-z]+\.)?discord(app)?\.com

Kuzz ★★★
()
Последнее исправление: Kuzz (всего исправлений: 1)
Ответ на: Да, не от hardbox00

Можно же сделать mark routing, mark connection

acl aclname clientside_mark mark[/mask] ...
# matches CONNMARK of an accepted connection

И да, на хабре писали, что в таком случае (соединения без расшифровки) в логах нормальные имена серверов, а не айпишники, если squid использует тот же dns, что и клиенты.

Kuzz ★★★
()
Ответ на: Discord то оказывается работает от hardbox00

Вообще, с веб-сокетами у кальмара траблы официально Можно еще один вид ошибок туннелировать

acl foreignProtocol squid_error  ERR_TOO_BIG
acl foreignProtocol squid_error  ERR_PROTOCOL_UNKNOWN 
acl unsup_http_ver   squid_error ERR_UNSUP_HTTPVERSION

on_unsupported_protocol tunnel foreignProtocol
on_unsupported_protocol tunnel unsup_http_ver

Ну и собирать адреса, которые дискорд использует

gateway.discord.gg
ssl.gstatic.com
discordapp.com

Вот встретилось. Внезапно, гуглостатика.

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

напишите пожалуйста правило, чтобы в обход прокси шли udp и всё остальное - у меня микротик но это неважно

hardbox00
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.