Вопрос или проблема
Я хочу, чтобы Squid прослушивал порты 3128 и 3129. Я хочу аутентификацию на 3129 и без аутентификации на 3128. На данный момент у меня есть следующая конфигурация.
# auth_param не показан, но работает
http_port 3128
http_port 3129
acl input_3128 myportname 3128
acl input_3129 myportname 3129
acl authenticated proxy_auth REQUIRED
http_access allow authenticated input_3129
http_access deny input_3129
http_access allow input_3128
http_access deny all
К сожалению, это не работает вовсе. Squid всегда требует аутентификацию.
пример запроса:
curl -v --proxy http://myproxy.example.com:3128 http://debian.org/
Ответ Squid:
* обрабатывается: http://debian.org/
10.1.2.3:3128...
* Подключено к myproxy.example.com (10.1.2.3) порт 3128
> GET http://debian.org/ HTTP/1.1
> Host: debian.org
> User-Agent: curl/8.2.1
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 407 Требуется аутентификация прокси
< Server: squid/5.9
< Mime-Version: 1.0
< Date: Ср, 23 Окт 2024 10:15:01 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 3511
< X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
< Vary: Accept-Language
< Content-Language: en
< Proxy-Authenticate: Basic realm="Squid proxy-caching web server"
< X-Cache: MISS from myproxy
< X-Cache-Lookup: NONE from myproxy:3129
< Via: 1.1 myproxy (squid/5.9)
< Connection: keep-alive
<
Вопрос
Как заставить Squid требовать аутентификацию только на порту 3129?
Ответ или решение
Чтобы настроить аутентификацию только для одного порта, когда Squid прослушивает два порта, вам необходимо внести изменения в конфигурацию. В вашем текущем конфиге имеются ошибки, которые можно исправить для достижения желаемого поведения. Ниже приведен подробный подход с необходимыми шагами для правильной настройки.
1. Анализ текущей конфигурации
Ваш текущий конфиг выглядит следующим образом:
# auth_param not shown but working
http_port 3128
http_port 3129
acl input_3128 myportname 3128
acl input_3129 myportname 3129
acl authenticated proxy_auth REQUIRED
http_access allow authenticated input_3129
http_access deny input_3129
http_access allow input_3128
http_access deny all
2. Исправление конфигурации
Ваша ошибка заключается в неправильном порядке правил доступа и в том, что проверки применяются к обоим портам. Ниже приведён исправленный пример конфигурации:
# Настройка портов
http_port 3128
http_port 3129
# Определение ACL для каждого порта
acl input_3128 myportname 3128
acl input_3129 myportname 3129
# ACL для аутентификации
acl authenticated proxy_auth REQUIRED
# Настройка правил доступа
# Разрешить доступ для неаутентифицированных пользователей на порту 3128
http_access allow input_3128
# Аутентификация обязательна для порта 3129
http_access allow authenticated input_3129
# Заблокировать доступ для неавторизованных на порту 3129
http_access deny input_3129
# Запретить доступ всем остальным
http_access deny all
3. Объяснение настроек
-
http_access allow input_3128: Этот параметр разрешает доступ к порту 3128 для всех пользователей без аутентификации. Таким образом, когда клиент обращается к этому порту, он не обязан проходить аутентификацию.
-
http_access allow authenticated input_3129: Это правило позволяет доступ только тем пользователям, которые успешно прошли аутентификацию, когда они пытаются подключиться к порту 3129.
-
http_access deny input_3129: Если пользователь не прошел аутентификацию, доступ к порту 3129 будет заблокирован.
4. Перезапуск Squid
После внесения изменений в конфигурационный файл необходимо перезапустить службу Squid, чтобы изменения вступили в силу:
sudo systemctl restart squid
5. Проверка конфигурации
Не забудьте проверить правильность вашей конфигурации:
squid -k parse
Если ошибок нет, теперь вы сможете использовать curl
для тестирования вашего прокси-сервера.
6. Примеры запросов
Для проверки работы прокси-сервера можно использовать следующие команды:
Для порта 3128 (без аутентификации):
curl -v --proxy http://myproxy.example.com:3128 http://debian.org/
Для порта 3129 (с аутентификацией), вам потребуется указать имя пользователя и пароль:
curl -v --proxy http://myproxy.example.com:3129 --proxy-user username:password http://debian.org/
Заключение
Следуя данным инструкциям, вы сможете сконфигурировать ваш Squid-прокси так, чтобы аутентификация требовалась только для порта 3129. Это позволит облегчить доступ для пользователей, которым не требуется аутентификация на порту 3128, и обеспечить безопасность для клиентов, подключающихся через порт 3129.