Как настроить клиент для прозрачного прокси squid?


9

Детали сервера

Squid Transparent Proxy Version: 3.3.8
OS: Ubuntu Server 14.04
Server IP: 192.168.1.3

Конфигурационный файл Squid

(исключая комментарии с использованием grep)

root@ubuntu:~# grep -v '^$\|^\s*\#' /etc/squid3/squid.conf
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
acl mylocalnetwork src 192.168.1.0/24
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access allow mylocalnetwork
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128 transparent
cache_mem 8 MB
maximum_object_size_in_memory 32 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /opt/squid/cache 10000 14 256
maximum_object_size 128000 KB
cache_swap_low 95
cache_swap_high 99
coredump_dir /var/spool/squid3
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 -i \.(gif|png|jp?g|ico|bmp|tiff?)$ 10080 95% 43200
refresh_pattern -i \.(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 10080 90% 43200
refresh_pattern -i \.(avi|iso|wav|mid|mp?|mpeg|mov|3gp|wm?|swf|flv|x-flv|axd)$ 43200 95% 432000
refresh_pattern -i \.(html|htm|css|js)$ 1440 75% 40320
refresh_pattern -i \.index.(html|htm)$ 0 75% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 1440 90% 10080
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
store_avg_object_size 13 KB
visible_hostname localhost

Бревна кальмаров

-------------------------------------------------------------
-----------------------------------------------------------
----------------------------------------------------------
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| Loaded Icons.
2014/07/03 22:11:57| HTCP Disabled.
2014/07/03 22:11:57| Pinger socket opened on FD 13
2014/07/03 22:11:57| Squid plugin modules loaded: 0
2014/07/03 22:11:57| Adaptation support is off.
2014/07/03 22:11:57| Accepting NAT intercepted HTTP Socket connections at local=0.0.0.0:3128 remote=[::] FD 11 flags=41
2014/07/03 22:11:57| Done reading /opt/squid/cache swaplog (2 entries)
2014/07/03 22:11:57| Finished rebuilding storage from disk.
2014/07/03 22:11:57|         2 Entries scanned
2014/07/03 22:11:57|         0 Invalid entries.
2014/07/03 22:11:57|         0 With invalid flags.
2014/07/03 22:11:57|         2 Objects loaded.
2014/07/03 22:11:57|         0 Objects expired.
2014/07/03 22:11:57|         0 Objects cancelled.
2014/07/03 22:11:57|         0 Duplicate URLs purged.
2014/07/03 22:11:57|         0 Swapfile clashes avoided.
2014/07/03 22:11:57|   Took 0.08 seconds ( 24.94 objects/sec).
2014/07/03 22:11:57| Beginning Validation Procedure
2014/07/03 22:11:57|   Completed Validation Procedure
2014/07/03 22:11:57|   Validated 2 Entries
2014/07/03 22:11:57|   store_swap_size = 12.00 KB
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| pinger: Initialising ICMP pinger ...
2014/07/03 22:11:57| pinger: ICMP socket opened.
2014/07/03 22:11:57| pinger: ICMPv6 socket opened
2014/07/03 22:11:57| Pinger exiting.
2014/07/03 22:11:58| storeLateRelease: released 0 objects

Правила Iptables

(используя пока единый интерфейс "eth0")

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Конфигурация клиента

Проблема в том, что я не смог получить доступ к Интернету на своих клиентских компьютерах с IP-адресом Squid в качестве шлюза и первичного DNS, как показано ниже.

На клиенте Ubuntu

auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.3

dns-nameservers 192.168.1.3

На клиенте Windows

введите описание изображения здесь

Когда я изменяю DNS на клиенте Ubuntu на dns-nameservers 192.168.1.1& Windows client на тот же ip маршрутизатора 192.168.1.1вместо squid ip (192.168.1.3), тогда я мог получить доступ к интернету на обоих. Возможно, это не тот способ, поскольку страница может отображаться непосредственно с маршрутизатора, а не с сервера squid, использующего кеш (конечно, я мог видеть журналы, генерируемые в /var/log/squid3/cache.log). Я также заметил, что мой маршрутизатор мигает для страниц, к которым уже обращались, это может означать, что он отправляет запрос через Интернет, а не извлекает из кеша squid.

Я все еще не скомпрометирован. Если бы я все еще мог получить доступ к посещенным страницам на моих клиентских компьютерах из кэша, когда Интернет был закрыт, я был бы удовлетворен.

Какова процедура настройки клиентов для Squid Transparent Proxy? Кто-нибудь, пожалуйста, сообщите мне?

Обновление 1

root@ubuntu:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:192.168.1.3:3128
    0     0 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 3128

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      eth0    192.168.1.0/24       0.0.0.0/0

Обновление 2

Он работает в предыдущей редакции Ubuntu 10.04(lucid)с версией squid Squid Cache: Version 2.7.STABLE7, и ниже приведен работающий файл конфигурации squid, и я мог получить доступ к интернету на клиентских машинах, когда для шлюза клиента и DNS задан ip lucid:

root@lucid:~# grep -v '^$\|^\s*\#' /etc/squid/squid.conf
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
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl mynet src 192.168.1.0/24    # 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 allow mynet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
cache_mem 8 MB
maximum_object_size_in_memory 32 KB
cache_dir ufs /var/spool/squid 2000 16 256
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|Package(.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
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
offline_mode on
coredump_dir /var/spool/squid

Я не уверен, почему он не работает Ubuntu 14.04с версией Squid Squid Cache: Version 3.3.8. Я определенно пропускаю некоторые настройки в новой версии squid или в новом destro !.


1
Я мог бы заявить об очевидном, но не является ли смысл прозрачной конфигурации прокси, что вы НЕ настраиваете клиентов?
— HBruijn

Нет, только что упомянул настройки сервера, если он мог бы лучше отладить проблему!
— user53864

Я не понимаю, как настроить клиенты Squid. Я не мог получить доступ в Интернет на клиенте, когда я использую ip (192.168.1.3) в качестве шлюза и основного сервера DNS. Я думаю, что это правильный способ настройки клиентов!
— user53864

Нет предупреждений или сообщений об ошибках squid3 -k parse, все чисто.
— user53864

что выдает эта команда: "iptables -t nat -L -n -v"?
— TBI Infotech

Ответы:


11

Я не уверен, но, пожалуйста, посмотрите этот контрольный список:

Отредактируйте файл squid.conf и измените следующую строку, чтобы включить режим прозрачного прокси:

http_port 3128

to

http_port 3128 intercept

перезапуск сервиса squid перезапуск сервиса squid

Добавьте запись в таблицу iptables NAT для перенаправления входящего трафика на внутреннем интерфейсе (на стороне локальной сети) на сервер Squid через порт 3128 (при условии, что eth0 является внутренним интерфейсом с IP-адресом 192.168.1.3

iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ -i eth0 -p tcp --dport 80 -j DNAT --to (продолжение) 192.168.1.3:3128

Теперь вы можете просмотреть свои iptables, таблицу фильтров по умолчанию и таблицу nat, используя следующие команды

iptables -L -t filter

iptables -L -t nat

Теперь вы можете добавить (добавить) в таблицу фильтров iptable с помощью следующих команд, чтобы принять ввод через порт 3128 для Squid

iptables -t filter -A INPUT -p tcp --dport 3128 -j ПРИНЯТЬ

Также попробуйте это

Вам нужен как один «перехват», так и один «прямой прокси» порт в конфигурации, даже если вы не используете прямой прокси:

http_port 3129

http_port 3128 перехват

Примечание . Параметр «прозрачный» больше не поддерживается параметром «перехват» с 2010 года.


Я уже изменил его, interceptкак предложено HBruijn. Правила Iptables nat уже существуют, и вход на прокси-сервер не заблокирован ни для одного порта / источника, все входящие пакеты на данный момент разрешены.
— user53864

Вы можете проверить порт 3129 вместо 3128 как http_port 3129 перехват?
— TBI Infotech

@ user53864 проверьте обновленный ответ
— TBI Infotech

Я пытался !, не повезло, результат тот же. Я попробовал с портом 3129 в squid и также заменил правила iptables новым портом. Я все еще не мог получить доступ к Интернету на моих клиентских машинах.
— user53864

После добавления обоих в squid.conf, что такое журнал отчетов squid. http_port 3129 http_port 3128 перехват
— TBI Infotech

1

В соответствии с Squid WiKi у вас неправильная настройка в опции http_port , в Squid 3.1+ и DNAT она должна быть interceptвместо transparent.

http_port 3128 intercept

Хотя вывод вашего журнала Squid, кажется, указывает на активность перехваченных сокетов.

Во-вторых, сервер Linux должен разрешать пересылку TCP-IP с sysctl net.ipv4.ip_forward=1


Я изменил настройки на intercept, результат тот же, что я не мог получить доступ к Интернету на клиентах с использованием в 192.168.1.3качестве шлюза и основного DNS. Да, переадресация TCP-IP включена в sysctl.conf.
— user53864

На самом деле, как правильно настроить клиент Squid? Должен ли DNS быть IP-адресом Squid (192.168.1.3) или общим IP-адресом маршрутизатора (192.168.1.1)?
— user53864

Обычная настройка заключается в том, что маршрутизатор / шлюз по умолчанию, который клиент получает по своему запросу DHCP, имеет правило перенаправления, которое перехватывает исходящий трафик на порт TCP 80 и перенаправляет эти пакеты на прозрачный прокси-сервер. Там они будут обработаны и результаты возвращены клиенту. Используемый DNS не имеет значения.
— HBruijn

Так что он должен просто работать с настройками шлюза на клиентах, я до сих пор не знаю, почему я не мог получить доступ в интернет на клиентах.
— user53864

Я обновил свой пост!
— user53864

1

Ошибка: No forward-proxy ports configure(в /var/log/squid3/cache.log)

Читать вики .

По моему опыту, для прозрачного прокси нужен порт NAT squid.conf(оба)

 http_port 3128
 http_port 8080 intercept

0

После простого добавления «intercept» в параметр http_port у меня по-прежнему возникают проблемы в сочетании с режимом перенаправления iptables, если клиенты настроены на использование прокси-сервера:

Msgstr "ОШИБКА: не настроены порты прямого прокси." и «ПРЕДУПРЕЖДЕНИЕ: обнаружен цикл пересылки для:»

После прохождения вышеупомянутых утверждений я использую это, поскольку лучший результат теперь:

а) использовать запись с двумя портами в squid.conf следующим образом:

http_port 8080
http_port 3128 intercept

Это представит порт 8080 в качестве обычного прямого порта для конфигурации на стороне клиента и даст второй порт для перенаправления перенаправленного трафика.

б) использовать правило iptables следующим образом:

iptables -A PREROUTING -t NAT -i $LAN_IF -p tcp --dport 80 -j REDIRECT --to-port 3128

Таким образом, у вас будет классический прокси-порт (8080) для настройки на ваших клиентах и ​​принудительный порт для незашифрованного трафика.

Почему вы должны хотеть сделать это? Что ж, если вам не нравится, когда HTTPS-трафик обходится без прокси-сервера (необходимо в любом случае настраивать обычные клиенты), и если вы хотите поддерживать, но не хотите (или не можете) настраивать менее умные устройства или программы.


На Raspbian (и, вероятно, на других) эта команда iptables выдает ошибку «iptables v1.4.21: не удается инициализировать таблицу iptables« NAT »: таблица не существует (вам нужно выполнить insmod?) Возможно, необходимо обновить iptables или ваше ядро ".. Изменение "-t NAT" на "-t nat" решает эту проблему.
— glennr

-1

В Ubuntu 14.04 Squid Transparent Proxy Version: 3.3.8 вы должны удалить прозрачный из конфигурации http_port 3128, я имею в виду просто оставить

http_port 3128

не

http_port 3128 прозрачный

по какой-то причине не работает сейчас.


-2

с :

http_port 3128
http_port 8080 intercept

оно работает

(Ошибка: не настроены порты прямого прокси в /var/log/squid3/cache.log)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.