Назад | Перейти на главную страницу

Прокси-сервер Squid (не прозрачный), работающий на портах 3128 и 80

У меня прокси-сервер Squid (Debian) отлично работает с аутентификацией:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd

Я бы также хотел, чтобы этот клиент, который пытается получить веб-страницы, используя прокси-сервер в качестве шлюза (порт 80), перенаправлялся на порт 3128.

Я пробовал iptables:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

без везения, потому что в этом случае мои клиенты с портом 80 получают ошибку:

The following error was encountered:

Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:

Missing or unknown request method
Missing URL
Missing HTTP Identifier (HTTP/1.0)
Request is too large
Content-Length missing for POST or PUT requests
Illegal character in hostname; underscores are not allowed

поэтому я решил просто позволить squid прослушивать оба порта, изменяя squid.conf: 3128 и 80

http_port 80
http_port 3128

Что случается?

Клиент, регулярно подключающийся к 3128, должен вводить пароль, а клиент без настроенного прокси (и, следовательно, работающий на порту 80, потому что squid также является межсетевым экраном / маршрутизатором и шлюзом нашей небольшой сети) может просматривать Интернет без ввода пользователя / пароля.

Как я могу решить проблему?

Iptables или squid.conf мне все равно.

Поместите прозрачный прокси-сервер для прослушивания на порт 3129 и перенаправьте на него все запросы, поступающие на порт 80:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

Squid.conf:

http_port 3128
http_port 3129 transparent

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