Как настроить клиент для прозрачного прокси 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 !.

user53864
источник
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 года.

TBI Infotech
источник
Я уже изменил его, 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

HBruijn
источник
Я изменил настройки на 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
sebix
источник
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-трафик обходится без прокси-сервера (необходимо в любом случае настраивать обычные клиенты), и если вы хотите поддерживать, но не хотите (или не можете) настраивать менее умные устройства или программы.

BlueStar88
источник
На 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)

mpman077
источник