Вопрос или проблема
Я прочитал много учебников и официальной документации, но предложенный метод не работает для меня.
Я настроил прокси-сервер squid (Squid Cache: Версия 4.10, ubuntu 18.04.4 LTS) в своей организации, и он хорошо работает для моего случая использования. Я столкнулся с двумя проблемами, но сосредоточусь на одной за раз.
Пользователи могут выходить в Интернет через прокси, но из журналов я вижу, что внутренние IP-адреса локальной сети доступны через веб-прокси. Я хочу ограничить пользователей в использовании Интернета, а не внутренних IP-адресов локальной сети. В веб-прокси я установил правило, но ни одно из них не работает.
acl restricted_destination_subnetworks dst 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
acl restricted_destination_IP dst 10.50.21.135
http_access deny restricted_destination_IP http_access deny restricted_destination_subnetworks
Тестирование – С сервера, 10.50.40.18, я запускаю команду ниже, я получаю 200 OK, и я вижу в журнале веб-прокси 200/TCP_MISS.
curl -s -o /dev/null -I -w “%{http_code} \n” -k http://10.50.21.135:8585 200
В идеале, мой запрос curl должен быть заблокирован, но в этом сценарии этого не происходит.
Может кто-то исправить меня, если я сделал что-то неправильно?
Полная конфигурация
acl allowed_subnetworks src "/etc/squid/allowed_subnetworks_list.txt"
acl restricted_destination_subnetworks dst 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
acl restricted_destination_IP dst 10.50.21.135
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice all
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "это" сеть (LAN)
acl localnet src 10.0.0.0/8 # RFC 1918 локальная частная сеть (LAN)
acl localnet src 100.64.0.0/10 # RFC 6598 общая адресная область (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (напрямую подключенные) устройства
acl localnet src 172.16.0.0/12 # RFC 1918 локальная частная сеть (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 локальная частная сеть (LAN)
acl localnet src fc00::/7 # RFC 4193 локальная частная сеть
acl localnet src fe80::/10 # RFC 4291 link-local (напрямую подключенные) устройства
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 # не зарегистрированные порты
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 # многоязычный http
acl CONNECT method CONNECT
http_access allow allowed_subnetworks
http_access deny restricted_destination_IP
http_access deny restricted_destination_subnetworks
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128 ssl-bump
cache_dir ufs /var/spool/squid 3000 16 256
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Спасибо
Порядок ваших строк http_access неправильный. SecurityPitfalls
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
#
# ВСТАВЬТЕ СВОЕ СОБСТВЕННОЕ ПРАВИЛО ЗДЕСЬ, ЧТОБЫ ДОПУСТИТЬ ДОСТУП ОТ ВАШИХ КЛИЕНТОВ
#
http_access allow allowed_subnetworks
http_access deny restricted_destination_IP
http_access deny restricted_destination_subnetworks
#
# ВСТАВЬТЕ СВОЕ СОБСТВЕННОЕ ПРАВИЛО ПЕРЕД ЭТИМИ, ЧТОБЫ ДОПУСТИТЬ ДОСТУП ОТ ВАШИХ КЛИЕНТОВ
#
http_access allow localhost
http_access deny all
Чтобы заблокировать назначение, вам нужно изменить src на dst
acl localnet3 dst 192.168.5.1
а затем
http_access allow localnet0 !localnet3
Ответ или решение
Чтобы заблокировать доступ к определённым подсетям или IP-адресам в Squid, необходимо правильно настроить ACL (Access Control Lists) и порядок правил http_access
. Ваш текущий подход имеет несколько аспектов, которые необходимо исправить.
1. Порядок правил http_access
Порядок определяет как Squid обрабатывает запросы. Squid читает правила сверху вниз, и когда запрос попадает под одно из правил, он больше не будет проверяться на последующие правила. В вашем случае порядок правил должен быть следующим:
http_access allow allowed_subnetworks
http_access deny restricted_destination_IP
http_access deny restricted_destination_subnetworks
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
2. Правильное использование ACL
Убедитесь, что вы правильно используете ACL для блокировки доступа к внутренним IP-адресам. В вашем случае, вы уже создали ACL для restricted_destination_subnetworks
и restricted_destination_IP
. Это правильно, но порядок их применения имеет приоритет:
Пример настроек ACL:
acl allowed_subnetworks src "/etc/squid/allowed_subnetworks_list.txt"
acl restricted_destination_subnetworks dst 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
acl restricted_destination_IP dst 10.50.21.135
3. Проверка работы правил
Чтобы убедиться, что ваши настройки работают, используйте следующие команды для тестирования:
curl -s -o /dev/null -I -w "%{http_code}\n" -k http://10.50.21.135:8585
Если настройка ACL выполнена правильно, этот запрос должен возвращать ошибку 403 Forbidden. Если вы по-прежнему получаете 200 OK, это указывает на неправильный порядок правил.
4. Общие рекомендации
- Логи: Посмотрите логи Squid, чтобы понять, какие правила применяются к запросам. Это поможет в диагностике.
- Переписывание ACL: Если вы хотите более гибко управлять доступом, возможно, вам нужно создать дополнительные ACL для других сегментов сети, чтобы четко контролировать доступ.
- Избегайте пробелов и ошибок в синтаксисе: Убедитесь, что в ваших файлах конфигурации нет пробелов или синтаксических ошибок.
Заключение
Правильная настройка и порядок ACL являются ключевыми для управления доступом в Squid Proxy. Проверка логов поможет вам диагностировать возможные проблемы, а последовательность правил http_access
обеспечивает правильное применение механизма контроля доступа. Убедитесь, что вы используете актуальные версии документации и следите за обновлениями для решения возможных проблем.
Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.