Вопрос или проблема
У меня есть машина с двумя сетевыми интерфейсами. По умолчанию маршрут 192.168.141.1 может подключиться к Интернету.
ip r
default via 192.168.141.1 dev ens161 proto static metric 100
10.0.0.0/8 via 10.114.141.1 dev ens193 proto static metric 101
Я хочу ограничить порт, на котором слушает Squid, сетевой картой 10.114.141.1, которая не имеет доступа к Интернету, поэтому :
http_port 10.114.141.11:443
Однако, когда я это делаю, я больше не могу подключиться к Интернету с машины, curl/telnet не работают. Кажется, что пакеты больше не покидают машину. Мне это странно, потому что привязка касается входящих соединений, а не исходящих. Когда я меняю настройку на http_port 443
, все снова работает, но тогда 443 становится доступным извне. Также я заметил, что когда я полностью отключаю прокси squid (systemctl stop 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 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
# Рекомендуемая минимальная конфигурация разрешений доступа:
#
# Запретить запросы к определенным небезопасным портам
http_access deny !Safe_ports
# Запретить CONNECT к другим, кроме защищенных SSL портов
http_access deny CONNECT !SSL_ports
# Разрешить доступ к cachemgr только с localhost
http_access allow localhost manager
http_access deny manager
# Мы настоятельно рекомендуем следующее раскомментировать, чтобы защитить невинные
# веб-приложения, работающие на прокси-сервере, которые думают, что единственный
# кто может получить доступ к сервисам на "localhost" — это локальный пользователь
#http_access deny to_localhost
#
# ВСТАВЬТЕ ВАШИ СОБСТВЕННЫЕ ПРАВИЛА ЗДЕСЬ, ЧТОБЫ РАЗРЕШИТЬ ДОСТУП ОТ ВАШИХ КЛИЕНТОВ
#
# Пример правила, разрешающего доступ с ваших локальных сетей.
# Настройте localnet в разделе ACL, чтобы перечислить ваши (внутренние) IP-адреса,
# с которых должно быть разрешено просмотр
http_access allow localnet
http_access allow localhost
# И, наконец, запретите весь остальной доступ к этому прокси
http_access deny all
# Squid обычно слушает на порту 3128
http_port 10.114.141.11:443
#http_port 192.168.141.11:3128
#http_port [::1]:443
#http_port 443
# Раскомментируйте и отрегулируйте следующее, чтобы добавить директорию кэша на диске.
#cache_dir ufs /var/spool/squid 100 16 256
# Оставьте coredumps в первой директории кэша
coredump_dir /var/spool/squid
#
# Добавьте любые свои строки refresh_pattern выше этих.
#
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
Ответ или решение
Анализ проблемы с конфигурацией Squid на машине с двумя сетевыми интерфейсами
Ваша проблема заключается в том, что вы хотите настроить прокси-сервер Squid для прослушивания на IP-адресе, который не подключен к интернету, тем самым ограничивая доступ к Squid. Однако при этом вы сталкиваетесь с потерей соединения с интернетом, когда Squid работает с конфигурацией, указывающей его IP-адрес, присвоенный локальному интерфейсу.
1. Уточнение конфигурации сети
У вас есть две сетевые карты:
ens161
с адресом, который может подключаться к Интернету (192.168.141.1).ens193
, который не имеет выхода в интернет и предназначен для внутренней сети с адресами, например, 10.114.141.11.
2. Проблема прослушивания на порту
Ваша настройка http_port 10.114.141.11:443
делает так, что Squid слушает только на интерфейсе ens193. Это означает, что все входящие соединения на этот IP-адрес (10.114.141.11) к Squid будут обрабатываться успешно. При этом, Squid сам по себе не должен влиять на исходящий трафик, который идет через интерфейс ens161. Однако, вы заметили, что ваше подключение к интернету теряется, когда Squid пытается прослушивать этот адрес.
3. Возможные причины проблемы
-
Неправильная маршрутизация: Когда Squid запускается с конфигурацией, слушающей IP-адрес 10.114.141.11, это может как-то блокировать пакеты, выходящие из машины, так как система может нелогично распределять маршруты. Рекомендуется использовать утилиты для диагностики, такие как
tcpdump
, чтобы отследить, где теряются пакеты. -
Параметры конфигурации: Проверьте, нет ли в конфигурации дополнительных параметров, которые могут ограничивать доступ к интернету. Например, убедитесь, что не установлены неправильные ACL (Access Control Lists) или другие параметры, влияющие на трафик.
-
Системные ограничения: На некоторых системах возможна блокировка исходящего трафика, если установлены жесткие правила iptables (или аналогичных систем) для управления трафиком. Просмотрите правила брандмауэра и убедитесь, что они не мешают исходящим соединениям.
4. Решения
-
Конфигурация Squid:
- Постарайтесь настроить
http_port
на простой интерфейс без указания IP-адреса:http_port 443
- После этого настройте IP-адресацию путем использования правил IPTables или других средств управления доступом, чтобы restrict доступ извне.
- Постарайтесь настроить
-
Проверка маршрутов: Убедитесь, что маршрут по умолчанию правильно установлен для исходящего трафика:
ip route
-
Логи и диагностика: Используйте логи Squid для проверки запросов, которые приходят на него:
tail -f /var/log/squid/access.log
-
Тестирование конфигурации: После каждой модификации конфигурации проводите тесты с
curl
илиtelnet
, чтобы проверить, возможен ли исходящий трафик.
Заключение
Проблема, с которой вы столкнулись, могла возникнуть из-за ошибок в маршрутизации, конфигурации сети или системных настроек. Применение рекомендаций выше должно помочь решить проблему с доступом к интернету при работе с Squid на машинах с несколькими интерфейсами. Всегда после внесения изменений проверяйте сеть с помощью тестов для подтверждения корректной работы системы.
Если у вас возникнут дополнительные вопросы или потребуется более углубленная помощь, не стесняйтесь обратиться к специализированному техническому сообществу или профессионалам в области сетевых технологий.