Вопрос или проблема
У меня есть инфраструктура с DMZ, где находится прокси-сервер Squid. У меня есть внутренние машины, которые выходят через этот прокси. Конфигурация выглядит следующим образом.
# Пример правила, разрешающего доступ из ваших локальных сетей.
# Адаптируйте, чтобы перечислить ваши (внутренние) IP-адреса, откуда разрешено
# просматривать интернет
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 локальные (подключенные напрямую) машины
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 локальные (подключенные напрямую) машины
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
# Запретить запросы к определённым небезопасным портам
http_access deny !Safe_ports
# Запретить CONNECT к другим, кроме безопасных SSL портов
http_access deny CONNECT !SSL_ports
# Разрешить доступ к cachemgr только с localhost
http_access allow localhost manager
http_access deny manager
# ВСТАВЬТЕ СВОИ СОБСТВЕННЫЕ ПРАВИЛА ЗДЕСЬ, ЧТОБЫ РАЗРЕШИТЬ ДОСТУП ОТ ВАШИХ КЛИЕНТОВ
#
include /etc/squid/conf.d/*.conf
# Например, для разрешения доступа из ваших локальных сетей вы можете раскомментировать
# следующее правило (и/или добавить правила, которые соответствуют вашему определению "локального"):
# http_access allow localnet
http_access allow localhost
# ПРАВИЛО ИЛИ ACL ДЛЯ ЗАГРУЗОК
#http_access allow all
acl all_updates url_regex -i "/etc/squid/all_updates"
http_access allow all_updates
# И, наконец, запретить весь другой доступ к этому прокси
http_access deny all
# ВСТАВЬТЕ СВОИ СОБСТВЕННЫЕ ПРАВИЛА ЗДЕСЬ, ЧТОБЫ РАЗРЕШИТЬ ДОСТУП ОТ ВАШИХ КЛИЕНТОВ
#
include /etc/squid/conf.d/*.conf
# Например, для разрешения доступа из ваших локальных сетей вы можете раскомментировать
# следующее правило (и/или добавить правила, которые соответствуют вашему определению "локального"):
# http_access allow localnet
http_access allow localhost
# ПРАВИЛО ИЛИ ACL ДЛЯ ЗАГРУЗОК
#http_access allow all
acl all_updates url_regex -i "/etc/squid/all_updates"
http_access allow all_updates
# И, наконец, запретить весь другой доступ к этому прокси
http_access deny all
# Squid обычно слушает на порту 3128
http_port 3128
# Добавьте любые ваши собственные записи refresh_pattern выше этих.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
# пример шаблона для deb пакетов
#refresh_pattern (\.deb|\.udeb)$ 129600 100% 129600
refresh_pattern . 0 20% 4320
При попытке обновить машину я получаю следующие ошибки
не удалось получить http://archive.ubuntu.com/ubuntu/dist/jammy-security/inrelease 403 Запрещено IP...
Ответ или решение
Настройка Squid Proxy на Ubuntu 22.04 в DMZ для отключенной среды
Введение
Настройка Squid Proxy в защищённой DMZ (демилитаризованной зоне) предназначена для обеспечения безопасного доступа внутренних машин к интернет-ресурсам. В данной инструкции мы сосредоточимся на корректной конфигурации Squid Proxy в окружении, изолированном от внешних сетей, выявляя возможные проблемы и предлагая решения.
Основные моменты конфигурации
Из приведенной конфигурации видно, что основной упор сделан на настройки доступа для внутренних сетей. Однако ошибка 403 Forbidden
при попытке обновления системы указывает на недостаточное разрешение для доступа к обновлениям. Рассмотрим ключевые аспекты конфигурации и нужные изменения.
-
ACL и права доступа:
- Вы определяете список локальных сетей через
acl localnet
, что правильно, но нужно учитывать, что если внутренняя сеть не входит в указанные диапазоны, доступ будет заблокирован. - Если ваши внутренние IP-адреса находятся вне указанных диапазонов, добавьте новые правила, например:
acl localnet src 192.168.1.0/24 # Добавьте ваш внутренний диапазон
- Вы определяете список локальных сетей через
-
HTTP-доступ:
- Текущие правила включают доступ только для
localhost
и загрузки обновлений:http_access allow all_updates
Убедитесь, что
http_access allow localnet
либо подобные правила для вашей локальной сети активированы. Добавьте следующее:http_access allow localnet
- Убедитесь, что порядок строк имеет значение, подчиняйтесь принципу, что более специфичные правила должны находиться выше.
- Текущие правила включают доступ только для
-
Обновление параметров:
- Рассмотрим, что ваше окружение отключено, вам необходимо поддерживать актуальные пакетные обновления. Для этого:
- Заранее загрузите пакеты обновлений в локальное хранилище.
- Настройте регулярные обновления для Squid, чтобы кэшировать актуальные данные.
- Рассмотрим, что ваше окружение отключено, вам необходимо поддерживать актуальные пакетные обновления. Для этого:
-
Список обновлений:
- Файл
/etc/squid/all_updates
должен содержать все необходимые адреса, которые вы хотите разрешить. Убедитесь, что он правильно настроен и содержит такие адреса, как:http://archive.ubuntu.com/ubuntu/
Возможно, вам также придётся добавить адреса для других репозиториев Ubuntu.
- Файл
-
Проверка разрешений:
- Убедитесь, что ваш Squid действительно отвечает на стандартных портах (по умолчанию 3128). Проверьте файрволл на вашем сервере DMZ и убедитесь, что доступ к Squid открыт из локальной сети.
Проверка конфигурации
После внесения изменений перезапустите Squid для применения конфигурации:
sudo systemctl restart squid
Затем проверьте логи Squid на наличие ошибок:
tail -f /var/log/squid/access.log
tail -f /var/log/squid/cache.log
Логи помогут определить, получает ли ваш внутренний сервер правильные разрешения. Ошибки в логах часто указывают на неправильные правила ACL.
Заключение
Конфигурация Squid Proxy в DMZ для отключенной среды требует тщательной настройки ACL и правил доступа. Предварительная диагностика, включая проверку диапазонов IP и правильности указанных репозиториев, является критически важной. Применение данных рекомендаций позволит вам избежать ошибок типа 403 Forbidden
и обеспечить стабильный доступ к обновлениям для ваших внутренних систем.
Следуя вышеописанным шагам, вы сможете максимально эффективно настроить Squid Proxy в вашей изолированной среде, что обеспечит важный уровень безопасности и управляемости.