У меня прокси-сервер 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 в своих браузерах.