Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как заставить squid работать с localhost?  (Прочитано 3400 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Как заставить squid работать с localhost?
« : 03 Сентября 2011, 22:40:35 »
Всем привет.
С первого сентября интернет на мегафоне в ставрополе практически умер. Для хоть какого-то ускорения поставил на бук squid. прописал правило
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128
В сквиде такие настройки:
root@vaio:~# cat /etc/squid/squid.conf | grep transparent
# WARNING: authentication can't be used in a transparently intercepting
# transparently intercepting port 80, not a limitation in Squid.
#   # NOTE: proxy_auth can't be used in a transparent proxy as
#    transparent Support for transparent interception of
http_port 3128 transparent
# Pack 1 has an issue with transparent proxies, wherein it
# In many setups of transparently intercepting proxies Path-MTU
root@vaio:~# cat /etc/squid/squid.conf | grep localhost
acl localhost src 127.0.0.1/8
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# Only allow cachemgr access from localhost
http_access allow manager localhost
# Only allow purge requests from localhost
http_access allow purge localhost
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
http_access allow localhost
# acl localhost src 127.0.0.1
# follow_x_forwarded_for allow localhost
# snmp_access allow snmppublic localhost
Пытаюсь кудато идти, пишет - "доступ запрещён".
Хотя по идее squid по дефолту только с локалхоста и даёт ходить.
В чём может быть проблема?
Заранее всем спасибо за возможные ответы

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #1 : 03 Сентября 2011, 22:47:23 »

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128

Может так?
iptables -t nat -A PREROUTING ! -d 192.168.1.0/24 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128
+
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
« Последнее редактирование: 03 Сентября 2011, 22:51:46 от ivsatel »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #2 : 03 Сентября 2011, 23:07:06 »
PREROUTING не поможет. Пакеты от локальных приложений туда не попадают.
Тут обсуждалась проблема прозрачного локального прокси. Не помню чем закончилось, но вроде обычным методом не получится и применяли толи id пользователя из под которого работает squid, то ли ещё как - поищите.
А самый простой вариант - отказаться от прозрачности и настроить браузер на работу через прокси 127.0.0.1:3128

Кстати, не хорошо показали конфиг, там перед разрешающим acl-ом может all deny стоять...
покажите лучше так
sudo grep -v "^#" /etc/squid/squid.conf | sed -e '/^ *$/d'

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #3 : 03 Сентября 2011, 23:18:08 »
ни фига.
В цепочку PREROUTING попадают только маршрутизируемые(исходящие откуда-то из локалки например, с левых компов, да и то если присутствует DNAT или MASQUERADE и /proc/sys/net/ipv4/ip_forwarding=1) пакеты, localhost там мимо кассы. Он попадает только в цепочку OUTPUT.
Ну а 127.0.0.1/8 или 127.0.0.1/24 принципиальной разницы нету, ибо по какому-то там rfc весь 127-й диапазон отдан под localhost.
В принципе я может быть не правильно выразился. С перенаправлением на squid проблем нету. Когда браузер пишет "доступ запрещён", самая нижняя надпись вещает про вермию сквида. Но сам squid в нет идти отказывается. Хотя запросы именно с локалхоста. А локалхост единственный, кто по дефолту может пользовать squid.
Кстати забыл уточнить: Ubuntu 11.04 Desktop 32-bit

Пользователь решил продолжить мысль 03 Сентября 2011, 23:21:29:
PREROUTING не поможет. Пакеты от локальных приложений туда не попадают.
Тут обсуждалась проблема прозрачного локального прокси. Не помню чем закончилось, но вроде обычным методом не получится и применяли толи id пользователя из под которого работает squid, то ли ещё как - поищите.
А самый простой вариант - отказаться от прозрачности и настроить браузер на работу через прокси 127.0.0.1:3128

Кстати, не хорошо показали конфиг, там перед разрешающим acl-ом может all deny стоять...
покажите лучше так
sudo grep -v "^#" /etc/squid/squid.conf | sed -e '/^ *$/d'
root@vaio:~# grep -v "^#" /etc/squid/squid.conf | sed -e '/^ *$/d'
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/8
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
cache_mem 256 MB
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
via off
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
header_access X-Forwarded-For deny all
header_access Via deny all
hosts_file /etc/hosts
forwarded_for off
coredump_dir /var/spool/squid
« Последнее редактирование: 03 Сентября 2011, 23:21:29 от danilsl »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #4 : 03 Сентября 2011, 23:25:54 »
В цепочку PREROUTING попадают только маршрутизируемые(исходящие откуда-то из локалки например, с левых компов, да и то если присутствует DNAT или MASQUERADE и /proc/sys/net/ipv4/ip_forwarding=1) пакеты
Начали правильно, а потом бред понесли. Все входящие на хост через интерфейсы пакеты попадают в цепочку PREROUTING не зависимо будет DNAT, forward и т.п. или нет. Даже если потом пакеты дропаться будут в цепочке INPUT - они всё равно пройдут PREROUTING.

Но сам squid в нет идти отказывается. Хотя запросы именно с локалхоста. А локалхост единственный, кто по дефолту может пользовать squid.
А ещё он (squid) сформирует пакет обращённый к внешнему сайту на 80 порт и ... дойдя до цепочки OUTPUT завернёт этот пакет снова на себя.
« Последнее редактирование: 03 Сентября 2011, 23:29:36 от fisher74 »

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #5 : 03 Сентября 2011, 23:31:32 »
В цепочку PREROUTING попадают только маршрутизируемые(исходящие откуда-то из локалки например, с левых компов, да и то если присутствует DNAT или MASQUERADE и /proc/sys/net/ipv4/ip_forwarding=1) пакеты
Начали правильно, а потом бред понесли. Все входящие на хост через интерфейсы пакеты покападают в цепочку PREROUTING не зависимо будет DNAT, forward и т.п. или нет. Даже если потом пакеты дроавься будут в цепочке INPUT - они всё равно пройдёт PREROUTING

Но сам squid в нет идти отказывается. Хотя запросы именно с локалхоста. А локалхост единственный, кто по дефолту может пользовать squid.
А ещё он (squid) сформирует пакет обращённый к внешнему сайту на 80 порт и ... дойдя до цепочки OUTPUT завернёт этот пакет снова на себя.
По первой части честно скажу, до конца не разобрался (иначе врядли бы вопросы задавал), а по второй части намёк понят, щас попробую

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #6 : 03 Сентября 2011, 23:36:34 »
А что Вы попробуете? Нужно как-то убрать кольцевание, либо просто отказаться от прозрачности и всё.

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #7 : 04 Сентября 2011, 00:22:18 »
А что Вы попробуете? Нужно как-то убрать кольцевание, либо просто отказаться от прозрачности и всё.
А что Вы попробуете? Нужно как-то убрать кольцевание, либо просто отказаться от прозрачности и всё.
Команда преобразилась:
iptables -t nat -A OUTPUT -d ! 127.0.0.0/8 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128Заявление сквида тоже:
Unable to forward this request at this time.

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #8 : 04 Сентября 2011, 08:26:11 »
Да поймите Вы: обычным способом сей трюк не получится, так как все процессы которые обращаются в интернет - локальные, а значит подчиняются одним правилам, что от браузера, что от самого, собственно, прокси.
Либо забейте и настройте браузер, либо копайте правила по другим признакам (процесс определённого пользователя, например). Я бы не выносил себе мозг и тупо ткнул радиокнопку и ввёл адрес с портом в браузере.

Пользователь решил продолжить мысль 04 Сентября 2011, 08:32:19:
Как-то так должно заработать (порядок правил соблюдать обязательно)
sudo iptables -t nat -A OUTPUT -d ! 127.0.0.0/8 -m owner --uid-owner squid –j ACCEPT
sudo iptables -t nat -A OUTPUT -d ! 127.0.0.0/8 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128
« Последнее редактирование: 04 Сентября 2011, 08:35:09 от fisher74 »

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #9 : 04 Сентября 2011, 17:27:14 »
Получилось вот так:
cat /etc/iptables.restore
# Generated by iptables-save v1.4.10 on Sun Sep  4 17:24:51 2011
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [12:1043]
:POSTROUTING ACCEPT [71:4583]
-A OUTPUT ! -d 127.0.0.0/8 -m owner --uid-owner proxy -j ACCEPT
-A OUTPUT ! -d 127.0.0.0/8 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128
COMMIT
# Completed on Sun Sep  4 17:24:51 2011
Если ! стоит после -d, почемуто матерится
А squid по дефолту запускается от юзера proxy
Спасибо

Пользователь решил продолжить мысль 04 Сентября 2011, 18:03:23:
Какая-то фигня получилась. Работает до перезагрузки. А после загрузки нужно перезапускать squid, после этого работает. Если сквид не перезагрузить браузер просто висит на загрузке, не получая ни байта.
Что это может быть?
И кстати squid идёт наружу только если есть правило http_access allow localnet. Почему на localhost не работает?
« Последнее редактирование: 04 Сентября 2011, 18:03:23 от danilsl »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #10 : 04 Сентября 2011, 23:20:34 »
Если ! стоит после -d, почемуто матерится
Это нормально. Так как положение воскл.знака в значении условия считается устаревшим.
Сам никак себя не приучу выностить перез условием...

А squid по дефолту запускается от юзера proxy
Главное мысль поймана..  ;)

Если сквид не перезагрузить браузер просто висит на загрузке, не получая ни байта.
ставьте логирующие правила, шаркайте интерфейс и курите полученные логи...
Смотрите чем отличается запуск squid при старте системы и после рестарта. Например с помощью ps ax...
Кстати, только рестарт помогает, или релоад тоже?

Оффлайн andru_mam

  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #11 : 05 Сентября 2011, 00:02:18 »
А не проще включить кеширование в браузере?

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #12 : 05 Сентября 2011, 07:15:11 »
Я уже предлагал. Видимо не спортивно. Но получение опыта конфигурирования связки - это же ведь тоже важный момент.

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #13 : 05 Сентября 2011, 14:47:41 »
Кстати, только рестарт помогает, или релоад тоже?
/etc/init.d/squid restart
по другому не пробовал.


Пользователь решил продолжить мысль 05 Сентября 2011, 14:51:36:
Видимо не спортивно.
Во-первых реально ни капельки не спортивно.
Во-вторых, чисто по моим личным ошущениям squid таки работает быстрее. Во всяком случае на работе. Даже если к примеру в выходной я в офисе один, только настроил шлюз, на 2-х мегабитном канале, просто SNAT работает ощютимо медленнее, чем если тоже самое пустить сквозь прозрачный сквид.
« Последнее редактирование: 05 Сентября 2011, 14:51:36 от danilsl »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Как заставить squid работать с localhost?
« Ответ #14 : 05 Сентября 2011, 20:50:47 »
Под спортивностью я имел ввиду настройку прозрачного локального прокси, взмен простой настройке браузера для работы через проки (не обращая внимания, что он локальный). или Вы до сих пор не поняли, что имелось ввиду под "отказаться от прозрачности"?

 

Страница сгенерирована за 0.055 секунд. Запросов: 25.