Web Proxy (Squid) в VyOS

Webproxy в VyOS представляет собой прокси-сервер на базе Squid, который обеспечивает кэширование веб-контента, фильтрацию URL, контроль доступа и оптимизацию трафика для корпоративных сетей.

Основные возможности

  • Кэширование HTTP/HTTPS: Ускорение доступа к веб-ресурсам и снижение внешнего трафика
  • Фильтрация контента: Блокировка доступа к нежелательным сайтам по категориям и URL
  • Аутентификация пользователей: LDAP, RADIUS, локальная аутентификация
  • Контроль доступа: ACL на основе IP-адресов, доменов, времени доступа
  • Прозрачный прокси: Перехват HTTP-трафика без настройки клиентов
  • SSL Bump: Инспекция HTTPS-трафика (требует установки CA на клиентах)
  • Bandwidth management: Ограничение скорости для пользователей и групп
  • Логирование и отчетность: Подробные логи доступа для аудита

Базовая конфигурация

Простой прокси с кэшированием

# Включить webproxy
set service webproxy listen-address 192.168.1.1 port 3128

# Кэширование
set service webproxy cache-size 100
set service webproxy default-port 3128

# Разрешить доступ из локальной сети
set service webproxy listen-address 192.168.1.1

# Применить конфигурацию
commit
save

Проверка:

# Статус Squid
show service webproxy

# Логи доступа
show log webproxy access

# Статистика кэша
show service webproxy cache-stats

Настройка клиентов (вручную):

  • Прокси: 192.168.1.1
  • Порт: 3128
  • Протокол: HTTP

Прозрачный прокси

Автоматический перехват HTTP-трафика без настройки браузеров:

# Включить прозрачный режим
set service webproxy listen-address 192.168.1.1 port 3128
set service webproxy listen-address 192.168.1.1 transparent

# NAT redirect для HTTP (порт 80)
set nat destination rule 10 destination port 80
set nat destination rule 10 inbound-interface eth1
set nat destination rule 10 protocol tcp
set nat destination rule 10 translation address 192.168.1.1
set nat destination rule 10 translation port 3128

commit
save

Важно: Прозрачный прокси работает только для HTTP (порт 80). Для HTTPS (443) требуется SSL Bump с установкой CA-сертификата на клиентах.

Базовая фильтрация по доменам

# Создать список блокируемых доменов
set service webproxy url-filtering squidguard block-category ads
set service webproxy url-filtering squidguard block-category malware
set service webproxy url-filtering squidguard block-category gambling

# Локальный blacklist
set service webproxy url-filtering squidguard local-block example.com
set service webproxy url-filtering squidguard local-block badsite.net

# Применить фильтрацию
commit
save

Расширенная конфигурация

Аутентификация пользователей (LDAP)

# LDAP аутентификация
set service webproxy authentication method ldap
set service webproxy authentication ldap server dc.example.com
set service webproxy authentication ldap base-dn 'dc=example,dc=com'
set service webproxy authentication ldap bind-dn 'cn=proxy-reader,ou=Service Accounts,dc=example,dc=com'
set service webproxy authentication ldap password 'SecurePassword'
set service webproxy authentication ldap filter '(memberOf=cn=Internet Users,ou=Groups,dc=example,dc=com)'
set service webproxy authentication ldap username-attribute sAMAccountName
set service webproxy authentication ldap port 389

# Требовать аутентификацию
set service webproxy authentication children 5
set service webproxy authentication realm "Corporate Proxy"

# Кэширование учетных данных
set service webproxy authentication cache-time 60

commit
save

ACL - контроль доступа

# Разрешить доступ для сети администраторов без ограничений
set service webproxy access-control allow-admin source 192.168.10.0/24

# Разрешить пользователям доступ только к рабочим сайтам
set service webproxy access-control allow-users source 192.168.1.0/24
set service webproxy access-control allow-users destination !social-media
set service webproxy access-control allow-users destination !streaming

# Блокировать доступ к социальным сетям в рабочее время
set service webproxy access-control block-social source 192.168.1.0/24
set service webproxy access-control block-social destination social-media
set service webproxy access-control block-social time M-F 09:00-18:00

# Запретить все остальное
set service webproxy access-control deny-all

commit
save

SSL Bump - инспекция HTTPS

Предупреждение: SSL Bump требует установки CA-сертификата прокси на всех клиентских устройствах и может нарушать политику конфиденциальности.

# Сгенерировать CA для SSL Bump
generate pki ca install webproxy-ca cn "Corporate Proxy CA"

# Включить SSL Bump
set service webproxy listen-address 192.168.1.1 port 3129
set service webproxy ssl-bump enable
set service webproxy ssl-bump certificate webproxy-ca

# Исключения (банки, медицинские сайты)
set service webproxy ssl-bump exclude-domain online.sberbank.ru
set service webproxy ssl-bump exclude-domain www.gosuslugi.ru
set service webproxy ssl-bump exclude-domain *.bank.ru

# NAT redirect для HTTPS
set nat destination rule 20 destination port 443
set nat destination rule 20 inbound-interface eth1
set nat destination rule 20 protocol tcp
set nat destination rule 20 translation address 192.168.1.1
set nat destination rule 20 translation port 3129

commit
save

Экспорт CA-сертификата:

# Экспортировать CA для установки на клиенты
show pki ca webproxy-ca pem

Установите этот сертификат в доверенные корневые CA на всех клиентских устройствах.

Кэширование и производительность

# Увеличить размер кэша
set service webproxy cache-size 2000
set service webproxy maximum-object-size 4096

# Настройки памяти
set service webproxy mem-cache-size 256

# Максимальное количество клиентов
set service webproxy maximum-client-connections 100

# Время хранения объектов в кэше
set service webproxy refresh-patterns pattern \.jpg$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.png$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.pdf$ min 1440 percent 80 max 43200

commit
save

SquidGuard - категоризация контента

# Обновить базы категорий SquidGuard
run update webproxy blacklists

# Блокировать категории
set service webproxy url-filtering squidguard block-category adult
set service webproxy url-filtering squidguard block-category gambling
set service webproxy url-filtering squidguard block-category weapons
set service webproxy url-filtering squidguard block-category warez
set service webproxy url-filtering squidguard block-category drugs
set service webproxy url-filtering squidguard block-category malware

# Разрешить социальные сети только для определенных групп
set service webproxy url-filtering squidguard rule allow-social source-group managers
set service webproxy url-filtering squidguard rule allow-social allow social-media

# Логирование блокировок
set service webproxy url-filtering squidguard log all

# Страница блокировки
set service webproxy url-filtering squidguard redirect-url http://proxy.example.com/blocked.html

commit
save

Примеры конфигурации

1. Корпоративный прокси с аутентификацией

Задача: Настроить прокси для офиса на 200 пользователей с LDAP-аутентификацией, кэшированием и базовой фильтрацией.

# Базовая конфигурация прокси
set service webproxy listen-address 192.168.1.1 port 3128
set service webproxy cache-size 1000
set service webproxy mem-cache-size 128
set service webproxy maximum-client-connections 200

# LDAP аутентификация
set service webproxy authentication method ldap
set service webproxy authentication ldap server dc1.corp.local
set service webproxy authentication ldap base-dn 'dc=corp,dc=local'
set service webproxy authentication ldap bind-dn 'cn=squid-ldap,ou=ServiceAccounts,dc=corp,dc=local'
set service webproxy authentication ldap password 'LdapPassword123'
set service webproxy authentication ldap filter '(memberOf=cn=ProxyUsers,ou=Groups,dc=corp,dc=local)'
set service webproxy authentication ldap username-attribute sAMAccountName
set service webproxy authentication children 10
set service webproxy authentication realm "Corporate Internet Access"

# Фильтрация контента
run update webproxy blacklists
set service webproxy url-filtering squidguard block-category adult
set service webproxy url-filtering squidguard block-category gambling
set service webproxy url-filtering squidguard block-category malware
set service webproxy url-filtering squidguard block-category weapons
set service webproxy url-filtering squidguard log all

# Локальные исключения
set service webproxy url-filtering squidguard local-block-domain badsite.com
set service webproxy url-filtering squidguard local-ok-domain corpapp.local

# ACL - администраторы без ограничений
set service webproxy access-control admins source 192.168.10.0/24

# Обычные пользователи с фильтрацией
set service webproxy access-control users source 192.168.1.0/24

# Производительность и кэширование
set service webproxy refresh-patterns pattern \.jpg$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.png$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.gif$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.css$ min 1440 percent 80 max 10080
set service webproxy refresh-patterns pattern \.js$ min 1440 percent 80 max 10080

commit
save

Настройка клиентов через GPO:

  1. Computer Configuration > Preferences > Control Panel Settings > Internet Settings
  2. Proxy Settings: 192.168.1.1:3128
  3. Bypass proxy for local addresses: Enable

Мониторинг:

# Активные подключения
show service webproxy connections

# Статистика кэша
show service webproxy cache-stats

# Последние заблокированные запросы
show log webproxy blocked tail 20

2. Прозрачный прокси для школы

Задача: Настроить прозрачный прокси с жесткой фильтрацией для учебного заведения.

# Прозрачный прокси
set service webproxy listen-address 192.168.100.1 port 3128
set service webproxy listen-address 192.168.100.1 transparent
set service webproxy cache-size 500

# NAT redirect
set nat destination rule 10 description 'Transparent proxy HTTP'
set nat destination rule 10 destination port 80
set nat destination rule 10 inbound-interface eth1
set nat destination rule 10 protocol tcp
set nat destination rule 10 translation address 192.168.100.1
set nat destination rule 10 translation port 3128

# Жесткая фильтрация для учащихся
run update webproxy blacklists
set service webproxy url-filtering squidguard block-category adult
set service webproxy url-filtering squidguard block-category gambling
set service webproxy url-filtering squidguard block-category games
set service webproxy url-filtering squidguard block-category social-media
set service webproxy url-filtering squidguard block-category streaming
set service webproxy url-filtering squidguard block-category weapons
set service webproxy url-filtering squidguard block-category drugs
set service webproxy url-filtering squidguard block-category violence
set service webproxy url-filtering squidguard block-category warez

# Whitelist образовательных ресурсов
set service webproxy url-filtering squidguard local-ok-domain edu.ru
set service webproxy url-filtering squidguard local-ok-domain uchi.ru
set service webproxy url-filtering squidguard local-ok-domain lecta.rosuchebnik.ru
set service webproxy url-filtering squidguard local-ok-domain resh.edu.ru

# Учителя имеют больше свободы
set service webproxy access-control teachers source 192.168.100.0/28
set service webproxy access-control teachers allow-category social-media
set service webproxy access-control teachers allow-category streaming

# Учащиеся - строгие ограничения
set service webproxy access-control students source 192.168.100.16/28
set service webproxy access-control students source 192.168.100.32/27

# Логирование всех запросов
set service webproxy url-filtering squidguard log all
set service webproxy access-log enable

# Страница блокировки
set service webproxy url-filtering squidguard redirect-url http://192.168.100.1/blocked.html

commit
save

Создание страницы блокировки:

# Создать простую HTML-страницу
sudo tee /var/www/html/blocked.html > /dev/null <<'EOF'
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Доступ заблокирован</title>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
        .container { max-width: 600px; margin: 0 auto; }
        h1 { color: #d32f2f; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Доступ к ресурсу заблокирован</h1>
        <p>Запрошенный сайт заблокирован администрацией школы.</p>
        <p>Если вы считаете это ошибкой, обратитесь к системному администратору.</p>
    </div>
</body>
</html>
EOF

# Настроить веб-сервер для страницы блокировки
set service https listen-address 192.168.100.1
commit
save

3. Прокси с SSL Bump для корпоративной сети

Задача: Инспекция HTTPS-трафика для защиты от утечки данных и malware.

# Сгенерировать CA для SSL Bump
generate pki ca install ssl-intercept-ca cn "Corp SSL Proxy CA" org "Example Corp" country RU

# Экспортировать CA-сертификат
show pki ca ssl-intercept-ca pem

# Сохранить сертификат в файл для распространения через GPO
# (скопировать вывод в corp-proxy-ca.crt)

# HTTP прокси (обычный)
set service webproxy listen-address 192.168.1.1 port 3128

# HTTPS прокси с SSL Bump
set service webproxy listen-address 192.168.1.1 port 3129
set service webproxy ssl-bump enable
set service webproxy ssl-bump certificate ssl-intercept-ca

# Исключения из SSL Bump (банки, госуслуги, медицина)
set service webproxy ssl-bump exclude-domain online.sberbank.ru
set service webproxy ssl-bump exclude-domain www.vtb.ru
set service webproxy ssl-bump exclude-domain *.alfabank.ru
set service webproxy ssl-bump exclude-domain www.gosuslugi.ru
set service webproxy ssl-bump exclude-domain *.rosminzdrav.ru

# Прозрачный перехват
set nat destination rule 10 description 'Transparent HTTP proxy'
set nat destination rule 10 destination port 80
set nat destination rule 10 inbound-interface eth1
set nat destination rule 10 protocol tcp
set nat destination rule 10 translation address 192.168.1.1
set nat destination rule 10 translation port 3128

set nat destination rule 20 description 'Transparent HTTPS proxy (SSL Bump)'
set nat destination rule 20 destination port 443
set nat destination rule 20 inbound-interface eth1
set nat destination rule 20 protocol tcp
set nat destination rule 20 translation address 192.168.1.1
set nat destination rule 20 translation port 3129

# Аутентификация
set service webproxy authentication method ldap
set service webproxy authentication ldap server dc.corp.local
set service webproxy authentication ldap base-dn 'dc=corp,dc=local'
set service webproxy authentication ldap bind-dn 'cn=proxy-reader,cn=Users,dc=corp,dc=local'
set service webproxy authentication ldap password 'SecurePassword'
set service webproxy authentication ldap filter '(memberOf=cn=Internet Access,cn=Users,dc=corp,dc=local)'
set service webproxy authentication ldap username-attribute sAMAccountName

# Фильтрация
run update webproxy blacklists
set service webproxy url-filtering squidguard block-category malware
set service webproxy url-filtering squidguard block-category phishing
set service webproxy url-filtering squidguard block-category adult
set service webproxy url-filtering squidguard log all

# DLP - блокировать загрузку на файлообменники
set service webproxy url-filtering squidguard block-category file-sharing
set service webproxy url-filtering squidguard local-block-domain drive.google.com/upload
set service webproxy url-filtering squidguard local-block-domain www.dropbox.com/upload

# Производительность
set service webproxy cache-size 2000
set service webproxy mem-cache-size 256
set service webproxy maximum-client-connections 200

commit
save

Развертывание CA-сертификата через GPO:

  1. Group Policy Management > Create new GPO > Edit
  2. Computer Configuration > Policies > Windows Settings > Security Settings > Public Key Policies > Trusted Root Certification Authorities
  3. Import > выбрать corp-proxy-ca.crt
  4. Link GPO к OU с компьютерами

Проверка на клиенте:

# PowerShell: проверить установленный CA
Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like "*Corp SSL Proxy CA*"}

4. Ограничение пропускной способности по группам

Задача: Разные лимиты скорости для отделов компании.

# Базовый прокси
set service webproxy listen-address 192.168.1.1 port 3128
set service webproxy cache-size 1000

# Создать delay pools для ограничения скорости
# Pool 1: Отдел продаж (высокая скорость) - 192.168.1.0/26
set service webproxy delay-pools pool 1 class 2
set service webproxy delay-pools pool 1 aggregate 10000/10000
set service webproxy delay-pools pool 1 individual 2000/2000
set service webproxy delay-pools pool 1 network 192.168.1.0/26

# Pool 2: Общий отдел (средняя скорость) - 192.168.1.64/26
set service webproxy delay-pools pool 2 class 2
set service webproxy delay-pools pool 2 aggregate 5000/5000
set service webproxy delay-pools pool 2 individual 1000/1000
set service webproxy delay-pools pool 2 network 192.168.1.64/26

# Pool 3: Производственный цех (низкая скорость) - 192.168.1.128/26
set service webproxy delay-pools pool 3 class 2
set service webproxy delay-pools pool 3 aggregate 2000/2000
set service webproxy delay-pools pool 3 individual 500/500
set service webproxy delay-pools pool 3 network 192.168.1.128/26

# Исключить видеоконференции из ограничений
set service webproxy delay-pools exclude-domain zoom.us
set service webproxy delay-pools exclude-domain teams.microsoft.com
set service webproxy delay-pools exclude-domain meet.google.com

commit
save

Проверка скорости:

# Посмотреть текущее использование delay pools
show service webproxy delay-pools

# Логи с информацией о скорости
show log webproxy access tail 50 | grep "HIER_DIRECT"

5. Интеграция с WPAD (Web Proxy Auto-Discovery)

Задача: Автоматическая настройка прокси для клиентов через DHCP и DNS.

# 1. Настроить DHCP с опцией WPAD
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option wpad-url 'http://wpad.corp.local/wpad.dat'

# 2. Настроить DNS для wpad.corp.local
set system static-host-mapping host-name wpad.corp.local inet 192.168.1.1

# 3. Создать wpad.dat файл (PAC - Proxy Auto-Config)
cat > /var/www/html/wpad.dat <<'EOF'
function FindProxyForURL(url, host) {
    // Локальные адреса - без прокси
    if (isPlainHostName(host) ||
        shExpMatch(host, "*.corp.local") ||
        isInNet(host, "192.168.0.0", "255.255.0.0") ||
        isInNet(host, "10.0.0.0", "255.0.0.0"))
        return "DIRECT";

    // Все остальное через прокси с резервным
    return "PROXY 192.168.1.1:3128; PROXY 192.168.1.2:3128; DIRECT";
}
EOF

# 4. Настроить веб-сервер для раздачи wpad.dat
set service https listen-address 192.168.1.1
set service https allow-client address 192.168.1.0/24

commit
save

Проверка WPAD на клиенте:

# Linux
curl http://wpad.corp.local/wpad.dat

# Windows PowerShell
Invoke-WebRequest -Uri http://wpad.corp.local/wpad.dat

6. Высокая доступность прокси (два сервера)

Задача: Два VyOS-прокси с синхронизацией конфигурации и VRRP.

Router 1 (Master):

# VRRP для высокой доступности
set high-availability vrrp group PROXY vrid 10
set high-availability vrrp group PROXY interface eth1
set high-availability vrrp group PROXY virtual-address 192.168.1.100/24
set high-availability vrrp group PROXY priority 200

# Webproxy на виртуальном IP
set service webproxy listen-address 192.168.1.100 port 3128
set service webproxy cache-size 1000
set service webproxy mem-cache-size 128

# LDAP аутентификация
set service webproxy authentication method ldap
set service webproxy authentication ldap server dc.corp.local
set service webproxy authentication ldap base-dn 'dc=corp,dc=local'
set service webproxy authentication ldap bind-dn 'cn=proxy-reader,cn=Users,dc=corp,dc=local'
set service webproxy authentication ldap password 'SecurePassword'
set service webproxy authentication ldap username-attribute sAMAccountName

# Фильтрация
run update webproxy blacklists
set service webproxy url-filtering squidguard block-category adult
set service webproxy url-filtering squidguard block-category malware
set service webproxy url-filtering squidguard log all

commit
save

Router 2 (Backup):

# VRRP backup
set high-availability vrrp group PROXY vrid 10
set high-availability vrrp group PROXY interface eth1
set high-availability vrrp group PROXY virtual-address 192.168.1.100/24
set high-availability vrrp group PROXY priority 100

# Идентичная конфигурация webproxy (скопировать с Router 1)
set service webproxy listen-address 192.168.1.100 port 3128
set service webproxy cache-size 1000
set service webproxy mem-cache-size 128

# ... остальная конфигурация идентична Router 1 ...

commit
save

Синхронизация конфигурации:

# На Router 1 - экспортировать конфигурацию webproxy
show configuration commands | grep webproxy

# Скопировать и применить на Router 2

Настройка клиентов:

  • Прокси: 192.168.1.100:3128 (виртуальный IP VRRP)
  • При отказе Master, Backup автоматически станет активным

Проверка отказоустойчивости:

# На Router 1 - посмотреть статус VRRP
show vrrp

# Симуляция отказа Master
set high-availability vrrp group PROXY disable

# На Router 2 должен переключиться статус на MASTER

Мониторинг и диагностика

Операционные команды

# Статус Squid
show service webproxy

# Активные подключения
show service webproxy connections

# Статистика кэша
show service webproxy cache-stats
# Вывод:
# Hit ratio: 35.2%
# Cached objects: 12453
# Cache size: 856 MB / 1000 MB

# Логи доступа (последние записи)
show log webproxy access tail 50

# Логи ошибок
show log webproxy error

# Заблокированные запросы (SquidGuard)
show log webproxy blocked tail 20

# Топ запрашиваемых доменов
show service webproxy top-domains

# Топ пользователей по трафику
show service webproxy top-users

# Использование delay pools
show service webproxy delay-pools

Статистика LDAP-аутентификации

# Проверить подключение к LDAP
test service webproxy authentication ldap

# Логи аутентификации
show log webproxy authentication

# Количество аутентифицированных пользователей
show service webproxy users

Анализ кэша

# Детальная статистика кэша
show service webproxy cache-info

# Объекты в кэше по типу
show service webproxy cache-objects

# Очистить кэш
clear service webproxy cache

Мониторинг производительности

# Загрузка процессов Squid
show system processes | grep squid

# Использование памяти
show system memory

# Сетевые подключения к прокси
show system connections port 3128

# Пропускная способность
show interfaces eth1 statistics

Устранение неполадок

1. Прокси не отвечает на запросы

Симптомы: Клиенты получают ошибку “Unable to connect to proxy server”.

Проверка:

# Проверить, запущен ли Squid
show service webproxy
# Должен быть статус: running

# Проверить порт
show system connections port 3128 | grep LISTEN

# Проверить firewall
show firewall name WAN_LOCAL

# Логи ошибок
show log webproxy error tail 20

Решение:

# Перезапустить webproxy
restart service webproxy

# Проверить, есть ли ошибки конфигурации
show configuration service webproxy

# Проверить доступность с клиента
# (на клиенте)
telnet 192.168.1.1 3128
curl -x http://192.168.1.1:3128 http://example.com

2. LDAP аутентификация не работает

Симптомы: Пользователи не могут авторизоваться, постоянный запрос пароля.

Проверка:

# Проверить подключение к LDAP
test service webproxy authentication ldap

# Логи аутентификации
show log webproxy authentication tail 50

# Проверить настройки LDAP
show configuration service webproxy authentication ldap

# Проверить доступность DC
ping dc.corp.local

Решение:

# Проверить bind-dn и пароль
set service webproxy authentication ldap bind-dn 'cn=correct-user,ou=ServiceAccounts,dc=corp,dc=local'
set service webproxy authentication ldap password 'CorrectPassword'

# Проверить фильтр LDAP (может быть слишком жесткий)
set service webproxy authentication ldap filter '(objectClass=user)'

# Проверить базовый DN
set service webproxy authentication ldap base-dn 'dc=corp,dc=local'

# Увеличить количество процессов аутентификации
set service webproxy authentication children 10

# Перезапустить сервис
restart service webproxy

commit
save

Тестирование LDAP вручную:

# На VyOS установить ldap-utils
sudo apt-get update
sudo apt-get install ldap-utils

# Проверить LDAP-запрос
ldapsearch -x -H ldap://dc.corp.local -D "cn=proxy-reader,ou=ServiceAccounts,dc=corp,dc=local" -W -b "dc=corp,dc=local" "(sAMAccountName=testuser)"

3. SSL Bump вызывает ошибки сертификатов

Симптомы: Браузеры показывают предупреждения о недоверенном сертификате.

Проверка:

# Проверить, включен ли SSL Bump
show configuration service webproxy ssl-bump

# Посмотреть CA-сертификат
show pki ca webproxy-ca pem

# Проверить исключения
show configuration service webproxy ssl-bump exclude-domain

Решение:

# 1. Экспортировать CA-сертификат
show pki ca webproxy-ca pem > /tmp/proxy-ca.crt

# 2. Скопировать сертификат на клиенты и установить в доверенные CA

# Windows (PowerShell с правами администратора):
certutil -addstore -enterprise -f "Root" proxy-ca.crt

# Linux:
sudo cp proxy-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# macOS:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain proxy-ca.crt

# 3. Добавить сайты в исключения, если SSL Bump мешает
set service webproxy ssl-bump exclude-domain problematic-site.com

commit
save

4. Низкая производительность прокси

Симптомы: Медленная загрузка страниц через прокси.

Проверка:

# CPU и память
show system resources

# Статистика кэша (hit ratio должен быть >30%)
show service webproxy cache-stats

# Количество активных подключений
show service webproxy connections | wc -l

# Задержки DNS
show service webproxy dns-stats

Решение:

# 1. Увеличить размер кэша
set service webproxy cache-size 2000
set service webproxy mem-cache-size 256

# 2. Увеличить лимиты подключений
set service webproxy maximum-client-connections 500

# 3. Оптимизировать refresh patterns для частых объектов
set service webproxy refresh-patterns pattern \.jpg$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.png$ min 1440 percent 50 max 10080
set service webproxy refresh-patterns pattern \.css$ min 1440 percent 80 max 43200
set service webproxy refresh-patterns pattern \.js$ min 1440 percent 80 max 43200

# 4. Добавить DNS-кэширование
set service dns forwarding cache-size 10000

# 5. Увеличить количество процессов аутентификации
set service webproxy authentication children 20

# 6. Настроить логирование только критичных событий
set service webproxy access-log disable

commit
save

# Перезапустить для применения изменений памяти
restart service webproxy

5. Прозрачный прокси не перехватывает трафик

Симптомы: Клиенты обходят прокси, веб-сайты открываются без фильтрации.

Проверка:

# Проверить NAT redirect
show nat destination

# Проверить прозрачный режим
show configuration service webproxy | grep transparent

# Проверить firewall (не блокирует ли порт 80/443)
show firewall

Решение:

# 1. Убедиться, что transparent включен
set service webproxy listen-address 192.168.1.1 transparent

# 2. Проверить NAT redirect для HTTP
set nat destination rule 10 destination port 80
set nat destination rule 10 inbound-interface eth1
set nat destination rule 10 protocol tcp
set nat destination rule 10 translation address 192.168.1.1
set nat destination rule 10 translation port 3128

# 3. Для HTTPS (если используется SSL Bump)
set nat destination rule 20 destination port 443
set nat destination rule 20 inbound-interface eth1
set nat destination rule 20 protocol tcp
set nat destination rule 20 translation address 192.168.1.1
set nat destination rule 20 translation port 3129

# 4. Убедиться, что NAT применяется до firewall
set firewall group network-group LAN_NETWORKS network 192.168.1.0/24

commit
save

Проверка на клиенте:

# Проверить, что запросы идут через прокси
# Linux
curl -v http://example.com
# Должен быть заголовок Via: squid

# Windows
nslookup example.com
# IP должен резолвиться через DNS форвардинг VyOS

6. SquidGuard блокирует нужные сайты

Симптомы: Корректные рабочие сайты блокируются фильтром контента.

Проверка:

# Посмотреть заблокированные запросы
show log webproxy blocked tail 50

# Проверить конфигурацию SquidGuard
show configuration service webproxy url-filtering squidguard

Решение:

# 1. Добавить домен в whitelist
set service webproxy url-filtering squidguard local-ok-domain worksite.com
set service webproxy url-filtering squidguard local-ok-url 'worksite.com/app'

# 2. Создать правило для определенной группы пользователей
set service webproxy url-filtering squidguard rule allow-managers source-group 192.168.1.0/28
set service webproxy url-filtering squidguard rule allow-managers allow social-media

# 3. Временно отключить категорию для тестирования
delete service webproxy url-filtering squidguard block-category problematic-category

# 4. Обновить базы категорий (может помочь при ложных срабатываниях)
run update webproxy blacklists

commit
save

# Перезапустить для применения изменений SquidGuard
restart service webproxy

Интеграция с другими системами

Zabbix - мониторинг прокси

# На VyOS включить SNMP для Zabbix
set service snmp community public authorization ro
set service snmp listen-address 192.168.1.1

commit
save

Zabbix шаблон:

  • Squid Proxy Template (встроенный в Zabbix)
  • Метрики: активные подключения, hit ratio кэша, количество объектов

Пользовательский скрипт мониторинга:

#!/bin/bash
# /config/scripts/squid-stats.sh
# Получить статистику Squid для Zabbix

case "$1" in
    connections)
        squidclient -p 3128 mgr:info | grep "Number of clients accessing cache" | awk '{print $NF}'
        ;;
    hit_ratio)
        squidclient -p 3128 mgr:info | grep "Request Hit Ratios" -A 2 | tail -1 | awk '{print $2}' | tr -d '%'
        ;;
    cache_size)
        squidclient -p 3128 mgr:storedir | grep "Current Size" | awk '{print $3}'
        ;;
esac

Grafana - визуализация статистики

Prometheus exporter для Squid:

# На VyOS установить squid_exporter
sudo curl -L https://github.com/boynux/squid-exporter/releases/download/v1.10.4/squid-exporter-linux-amd64 -o /usr/local/bin/squid_exporter
sudo chmod +x /usr/local/bin/squid_exporter

# Создать systemd service
sudo tee /etc/systemd/system/squid-exporter.service > /dev/null <<EOF
[Unit]
Description=Squid Exporter for Prometheus
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/squid_exporter -squid-hostname localhost -squid-port 3128
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable squid-exporter
sudo systemctl start squid-exporter

Prometheus scrape config:

scrape_configs:
  - job_name: 'squid'
    static_configs:
      - targets: ['192.168.1.1:9301']

Grafana Dashboard ID: 12240 (Squid Proxy Metrics)

SIEM интеграция (Splunk/ELK)

Отправка логов в Splunk:

# Настроить rsyslog для пересылки логов Squid
sudo tee -a /etc/rsyslog.d/50-squid.conf > /dev/null <<EOF
module(load="imfile")

input(type="imfile"
      File="/var/log/squid/access.log"
      Tag="squid-access"
      Severity="info"
      Facility="local6")

if $syslogtag == 'squid-access' then {
    action(type="omfwd"
           Target="splunk.corp.local"
           Port="514"
           Protocol="tcp")
}
EOF

sudo systemctl restart rsyslog

ELK Stack - Logstash filter для Squid:

filter {
  if [type] == "squid" {
    grok {
      match => { "message" => "%{NUMBER:timestamp}%{SPACE}%{NUMBER:duration} %{IP:client_ip} %{WORD:squid_result}/%{NUMBER:http_code} %{NUMBER:bytes} %{WORD:http_method} %{NOTSPACE:url} %{NOTSPACE:user} %{WORD:hierarchy_code}/%{IP:server_ip} %{NOTSPACE:content_type}" }
    }
    date {
      match => [ "timestamp", "UNIX" ]
    }
    geoip {
      source => "server_ip"
    }
  }
}

Лучшие практики

  1. Безопасность CA при SSL Bump

    • Защитить приватный ключ CA паролем
    • Хранить CA на отдельном offline носителе
    • Ограничить использование SSL Bump только критичными случаями (DLP, malware inspection)
    • Информировать пользователей о политике мониторинга
  2. Производительность кэша

    • Размер кэша: 100-200 МБ на пользователя
    • Память кэша: 10-20% от размера дискового кэша
    • Использовать SSD для кэша при >100 пользователях
    • Hit ratio >30% - хороший показатель
  3. LDAP аутентификация

    • Использовать выделенную service account с минимальными правами
    • Не использовать personal account администратора
    • Кэшировать учетные данные (60-120 секунд)
    • Настроить failover на второй DC
  4. Фильтрация контента

    • Регулярно обновлять базы категорий SquidGuard (weekly)
    • Использовать whitelist для критичных бизнес-приложений
    • Создать процедуру запроса на разблокировку сайта
    • Логировать все блокировки для аудита
  5. Прозрачный прокси

    • Информировать пользователей о наличии прокси
    • Предоставить альтернативу (VPN) для исключенных устройств
    • Не использовать для критичных приложений без тестирования
    • Мониторить производительность DNS при прозрачном режиме
  6. High Availability

    • Использовать VRRP для автоматического failover
    • Синхронизировать конфигурацию между узлами (automation)
    • Не синхронизировать кэш (каждый узел независим)
    • Использовать PAC-файл с несколькими прокси
  7. Логирование и аудит

    • Хранить логи минимум 90 дней (в зависимости от требований)
    • Использовать centralized logging (syslog, ELK)
    • Регулярно анализировать топ доменов и пользователей
    • Настроить алерты на аномальную активность
  8. Bandwidth Management

    • Приоритизировать бизнес-приложения (CRM, email)
    • Ограничивать стриминг и социальные сети в рабочее время
    • Исключать видеоконференции (Zoom, Teams) из ограничений
    • Мониторить эффективность delay pools
  9. Обновления и обслуживание

    • Регулярно обновлять VyOS и Squid (security patches)
    • Тестировать обновления на резервном узле перед production
    • Делать backup конфигурации перед изменениями
    • Планировать maintenance windows для обновлений
  10. Мониторинг и алертинг

    • Мониторить: CPU, память, hit ratio, количество подключений
    • Настроить алерты на недоступность прокси
    • Мониторить LDAP аутентификацию (количество отказов)
    • Использовать Grafana для визуализации трендов

Заключение

Webproxy в VyOS на базе Squid предоставляет мощные возможности для управления веб-трафиком, обеспечения безопасности и оптимизации производительности корпоративных сетей. Правильная конфигурация прокси с кэшированием, аутентификацией, фильтрацией контента и высокой доступностью значительно улучшает безопасность, производительность и контроль за использованием интернета в организации.