mikrotik-wiki.ru
Главная
Загрузка...

Web Proxy на MikroTik — кеширование и фильтрация

RouterOS 7.xIP14 мин230 мар. 2026 г.
TelegramVK

Web Proxy — встроенный HTTP-прокси в MikroTik RouterOS, позволяющий кешировать веб-контент, фильтровать URL-адреса и контролировать доступ к сайтам. Прокси работает на уровне HTTP (L7) и может анализировать URL, заголовки и методы запросов. В RouterOS Web Proxy доступен без дополнительных лицензий и пакетов, настраивается через CLI, WinBox и WebFig. Несмотря на ограничения (не фильтрует HTTPS-контент), Web Proxy остаётся полезным инструментом для фильтрации HTTP-трафика, кеширования обновлений и контроля доступа в сетях с legacy-приложениями. В этом руководстве настроим Web Proxy, разберём Transparent Proxy через NAT redirect, access-list для фильтрации и кеширование, а также рассмотрим ограничения и альтернативы.

Описание

Что такое Web Proxy

Web Proxy (HTTP Proxy) — промежуточный сервер, который принимает HTTP-запросы от клиентов, пересылает их целевому серверу и возвращает ответ клиенту. При этом прокси может:

ФункцияОписание
КешированиеСохранение часто запрашиваемых объектов (файлы, изображения) — повторные запросы обслуживаются из кеша
Фильтрация URLБлокировка доступа к сайтам по URL, домену, пути или ключевым словам
Access ControlРазрешение/запрет доступа по src-address, dst-host, время
ЛогированиеЗапись всех HTTP-запросов (кто куда ходил)
АнонимизацияСкрытие реального IP клиента от целевого сервера

Типы прокси в MikroTik

ТипОписаниеНастройка на клиенте
Regular ProxyКлиент явно указывает прокси в настройках браузераТребуется (IP:port прокси)
Transparent ProxyТрафик перенаправляется на прокси через NAT-правилоНе требуется (прозрачно для клиента)

Transparent Proxy удобнее — клиентам не нужно ничего настраивать. Но у него есть ограничения: не работает с HTTPS (без MITM) и не поддерживает аутентификацию.

HTTP vs HTTPS — ключевое ограничение

Это самый важный момент. Web Proxy на MikroTik работает только с HTTP-трафиком.

ПротоколProxy фильтрацияProxy кешированиеЧто видит прокси
HTTP (порт 80)Полная (URL, path, headers)ДаВесь запрос и ответ
HTTPS (порт 443)Только метод CONNECT (видно имя домена)НетТолько домен (SNI), содержимое зашифровано

Для HTTPS прокси видит только CONNECT-запрос с доменным именем. Заблокировать конкретную страницу или путь на HTTPS-сайте через Web Proxy невозможно. Для фильтрации HTTPS используйте DNS-блокировку или TLS-инспекцию (MikroTik её не поддерживает).

Когда Web Proxy полезен

СценарийПочему полезен
Legacy HTTP-сервисыВнутренние сайты без HTTPS (интранет, старые ERP)
Кеширование обновленийWindows Update, антивирусные базы (частично HTTP)
Контроль доступаБлокировка категорий сайтов (в комбинации с DNS)
Сети с ограниченным каналомКеширование снижает внешний трафик
Учебные заведенияЛогирование и фильтрация
Гостевые сетиОграничение доступа к определённым ресурсам

Web Proxy vs DNS Blocking vs Firewall L7

КритерийWeb ProxyDNS BlockingFirewall L7
HTTP фильтрацияПолная (URL, path)Только доменRegex по payload
HTTPS фильтрацияТолько домен (CONNECT)Только доменОграниченная (SNI)
КешированиеДаНетНет
Нагрузка на CPUВысокаяНизкаяОчень высокая
НастройкаСредняяПростаяСложная
ПроизводительностьСнижается при большом трафикеНе влияетСильно снижается
РекомендацияHTTP + кешHTTPS-блокировкаНе рекомендуется

Настройка

Шаг 1: Включение Web Proxy

[admin@MikroTik] >
# Включаем Web Proxy
/ip/proxy set enabled=yes port=8080 \
    cache-administrator="admin@example.com"

# Основные параметры
/ip/proxy set \
    enabled=yes \
    port=8080 \
    cache-on-disk=yes \
    cache-size=512MiB \
    max-cache-size=4096KiB \
    max-cache-object-size=2048KiB \
    max-client-connections=600 \
    max-server-connections=600 \
    max-fresh-time=3d

# Проверяем настройки
/ip/proxy print

Описание параметров:

ПараметрЗначениеОписание
port8080Порт прослушивания прокси
cache-on-diskyesХранить кеш на диске (не только в RAM)
cache-size512MiBОбъём дискового кеша
max-cache-size4096KiBМаксимальный размер кешируемого объекта (общий)
max-cache-object-size2048KiBМаксимальный размер одного объекта в кеше
max-client-connections600Максимум одновременных клиентских подключений
max-server-connections600Максимум одновременных подключений к серверам
max-fresh-time3dМаксимальное время «свежести» кешированного объекта

Важно для устройств с малым объёмом storage: на hAP lite, hEX lite и подобных устройствах с 16 MB flash включение cache-on-disk нецелесообразно. Используйте RAM-кеш или отключите кеширование.

[admin@MikroTik] >
# Для устройств с малым storage — только RAM-кеш
/ip/proxy set cache-on-disk=no cache-size=unlimited

Шаг 2: Regular Proxy (явный)

При явном (regular) прокси клиент знает о прокси и настроен на него. В браузере указывается IP:port прокси.

[admin@MikroTik] >
# Прокси уже включён на порту 8080
# Клиент настраивает в браузере: Proxy = 192.168.88.1:8080

# Разрешаем подключения к прокси из LAN
/ip/firewall/filter add chain=input \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=8080 \
    action=accept \
    comment="Allow proxy access from LAN"

Настройка на клиенте (браузер): Settings → Network → Proxy → Manual → HTTP Proxy: 192.168.88.1, Port: 8080.

Для автоматической настройки можно использовать WPAD (Web Proxy Auto-Discovery), но MikroTik не поддерживает WPAD-сервер. Нужен отдельный веб-сервер с файлом wpad.dat.

Шаг 3: Transparent Proxy (прозрачный)

Transparent Proxy не требует настройки на клиенте. HTTP-трафик (порт 80) перенаправляется на прокси через NAT-правило.

[admin@MikroTik] >
# NAT-правило для перенаправления HTTP на прокси
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    action=redirect to-ports=8080 \
    comment="Transparent Proxy: redirect HTTP to proxy"

Это правило говорит: весь TCP-трафик на порт 80 из LAN перенаправляется на локальный порт 8080 (Web Proxy).

Важно: transparent proxy не работает с HTTPS (порт 443). Не перенаправляйте порт 443 на прокси — это сломает все HTTPS-соединения.

[admin@MikroTik] >
# НЕПРАВИЛЬНО — НИКОГДА не делайте так!
# /ip/firewall/nat add chain=dstnat src-address=192.168.88.0/24 \
#     protocol=tcp dst-port=443 action=redirect to-ports=8080

Шаг 4: Фильтрация URL через Access List

Access List — основной инструмент фильтрации в Web Proxy. Позволяет блокировать или разрешать доступ по различным критериям.

[admin@MikroTik] >
# Блокировка сайтов по домену
/ip/proxy/access add dst-host="*.facebook.com" action=deny \
    comment="Block Facebook"
/ip/proxy/access add dst-host="*.instagram.com" action=deny \
    comment="Block Instagram"
/ip/proxy/access add dst-host="*.tiktok.com" action=deny \
    comment="Block TikTok"

# Блокировка по ключевому слову в URL
/ip/proxy/access add dst-host="*porn*" action=deny \
    comment="Block adult content (keyword)"
/ip/proxy/access add dst-host="*gambling*" action=deny \
    comment="Block gambling (keyword)"
/ip/proxy/access add dst-host="*casino*" action=deny \
    comment="Block casino (keyword)"

# Блокировка по пути (path)
/ip/proxy/access add path="*torrent*" action=deny \
    comment="Block torrent-related URLs"
/ip/proxy/access add path="*.exe" action=deny \
    comment="Block .exe downloads"
/ip/proxy/access add path="*.msi" action=deny \
    comment="Block .msi downloads"

Шаг 5: Access Control по IP-адресам

[admin@MikroTik] >
# Разрешаем прокси только для LAN
/ip/proxy/access add src-address=192.168.88.0/24 action=allow \
    comment="Allow LAN access"

# Запрещаем всё остальное (в конце списка!)
/ip/proxy/access add action=deny \
    comment="Deny all other"

# Разные правила для разных подсетей
# Гости — только базовый HTTP
/ip/proxy/access add src-address=192.168.99.0/24 \
    dst-host="*youtube*" action=deny \
    comment="Block YouTube for guests"

# Руководство — без ограничений
/ip/proxy/access add src-address=192.168.88.10-192.168.88.20 \
    action=allow \
    comment="Allow all for management"

Шаг 6: Блокировка по расписанию

Web Proxy Access List не поддерживает расписание напрямую, но можно комбинировать с firewall scheduler.

[admin@MikroTik] >
# Создаём правило NAT для transparent proxy с расписанием
# Рабочее время: прокси активен
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    action=redirect to-ports=8080 \
    comment="Transparent Proxy: work hours only"

# Скрипт для включения/отключения
/system/scheduler add name=proxy-enable \
    start-time=09:00:00 interval=1d \
    on-event="/ip/firewall/nat enable [find where comment~\"Transparent Proxy\"]" \
    comment="Enable proxy at 9:00"

/system/scheduler add name=proxy-disable \
    start-time=18:00:00 interval=1d \
    on-event="/ip/firewall/nat disable [find where comment~\"Transparent Proxy\"]" \
    comment="Disable proxy at 18:00"

Шаг 7: Кеширование — оптимизация

[admin@MikroTik] >
# Настройка кеширования для максимальной эффективности
/ip/proxy set \
    cache-on-disk=yes \
    cache-size=1024MiB \
    max-cache-size=unlimited \
    max-cache-object-size=10240KiB \
    max-fresh-time=7d \
    always-from-cache=no

# always-from-cache=yes — всегда отдавать из кеша, даже если объект устарел
# Полезно для оффлайн-режима, но может показывать устаревший контент

Что кешируется эффективно:

Тип контентаКешируетсяЭкономия
Статические файлы (.js, .css, .jpg)ДаВысокая
Обновления ПО (HTTP)ДаОчень высокая
Динамические страницыЗависит от Cache-Control headersНизкая
HTTPS-контентНетНет
Streaming (видео)Частично (зависит от размера)Средняя

Шаг 8: Перенаправление заблокированных запросов

При блокировке можно перенаправить клиента на страницу с объяснением причины блокировки.

[admin@MikroTik] >
# Перенаправление на страницу блокировки
/ip/proxy/access add dst-host="*.facebook.com" \
    action=deny \
    redirect-to="http://192.168.88.1/blocked.html" \
    comment="Block Facebook with redirect"

# Для работы redirect нужен веб-сервер с файлом blocked.html
# MikroTik WebFig работает на порту 80 — можно использовать его

Примечание: redirect работает только для HTTP. Для HTTPS-сайтов клиент получит ошибку соединения, а не страницу блокировки.

Шаг 9: Исключения из прокси

Некоторый трафик не должен проходить через прокси (банковские сайты, VPN-порталы).

[admin@MikroTik] >
# Исключаем банковские сайты из transparent proxy
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    dst-address-list=proxy-exceptions \
    action=accept \
    comment="Proxy exception: bypass proxy" \
    place-before=[find where comment="Transparent Proxy: redirect HTTP to proxy"]

# Добавляем IP банковских сайтов в список исключений
/ip/firewall/address-list add list=proxy-exceptions address=185.50.0.0/16 \
    comment="Bank website"

# Или исключаем конкретные IP клиентов (серверы, VoIP)
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.100 \
    protocol=tcp dst-port=80 \
    action=accept \
    comment="Proxy exception: server bypass" \
    place-before=[find where comment="Transparent Proxy: redirect HTTP to proxy"]

Проверка

Проверка статуса Web Proxy

[admin@MikroTik] >
# Основные настройки
/ip/proxy print

# Ожидаемый вывод:
# enabled: yes
# port: 8080
# cache-on-disk: yes
# cache-size: 1024MiB
# max-cache-object-size: 2048KiB

Проверка Access List

[admin@MikroTik] >
# Список правил фильтрации
/ip/proxy/access print

# Проверяем порядок (обрабатывается сверху вниз)
/ip/proxy/access print detail

Проверка кеша

[admin@MikroTik] >
# Статистика кеша
/ip/proxy/monitor

# Ожидаемый вывод:
# status: running
# uptime: 2d3h15m
# requests: 45230
# hits: 12540 (27.7%)
# cache-used: 256MiB

# Очистка кеша
/ip/proxy/cache-contents remove [find]

Проверка NAT-правила (transparent proxy)

[admin@MikroTik] >
# Проверяем NAT-правило и счётчики
/ip/firewall/nat print stats where comment~"Transparent Proxy"

# Если счётчик растёт — трафик перенаправляется на прокси

Тестирование фильтрации

[admin@MikroTik] >
# С клиентского ПК:
# curl -v http://facebook.com
# Должен получить отказ (deny) или redirect

# Проверяем на роутере:
/ip/proxy/access print stats
# Счётчик заблокированных запросов растёт

Проверка через connection tracking

[admin@MikroTik] >
# Смотрим активные прокси-соединения
/ip/firewall/connection print where dst-port=8080

# Проверяем через torch
/tool/torch interface=bridge-lan protocol=tcp port=8080 duration=10

Просмотр логов прокси

[admin@MikroTik] >
# Включаем логирование прокси
/system/logging add topics=proxy action=memory

# Проверяем логи
/log print where topics~"proxy"

Типичные ошибки

Ошибка 1: Transparent Proxy ломает HTTPS

Проблема: администратор перенаправил порт 443 на прокси. Все HTTPS-сайты перестают открываться — браузер показывает ERR_SSL_PROTOCOL_ERROR.

Причина: Web Proxy MikroTik не может расшифровать HTTPS-трафик. При перенаправлении порта 443 на прокси, прокси получает TLS ClientHello и не может его обработать.

Решение: удалите NAT-правило для порта 443.

[admin@MikroTik] >
# Проверяем наличие ошибочного правила
/ip/firewall/nat print where dst-port=443 and action=redirect

# Удаляем
/ip/firewall/nat remove [find where dst-port=443 and action=redirect and comment~"proxy"]

# Transparent proxy должен работать ТОЛЬКО с портом 80
/ip/firewall/nat print where comment~"Transparent Proxy"

Ошибка 2: Web Proxy замедляет интернет

Проблема: после включения прокси скорость интернета снизилась, страницы грузятся медленно.

Причины и решения:

  1. Недостаточно RAM — прокси потребляет память для кеша и соединений.
[admin@MikroTik] >
# Проверяем свободную память
/system/resource print
# Если free-memory < 32MB — уменьшаем кеш

/ip/proxy set cache-size=128MiB max-client-connections=200
  1. Слишком большой max-cache-object-size — роутер пытается кешировать крупные файлы.
[admin@MikroTik] >
/ip/proxy set max-cache-object-size=1024KiB
  1. Перегрузка CPU — прокси работает в userspace и нагружает CPU.
[admin@MikroTik] >
# Проверяем CPU
/system/resource print
# Если cpu-load > 80% — прокси перегружает устройство

# Решения:
# a) Уменьшить max-client-connections
/ip/proxy set max-client-connections=100

# b) Отключить кеш (оставить только фильтрацию)
/ip/proxy set cache-on-disk=no cache-size=none

# c) Исключить тяжёлый трафик из прокси (видео, обновления)
  1. DNS-резолвинг через прокси — прокси делает DNS-запросы для каждого HTTP-запроса.
[admin@MikroTik] >
# Убедитесь, что DNS на роутере работает быстро
/ip/dns set servers=8.8.8.8,1.1.1.1 cache-size=4096KiB

Ошибка 3: Фильтрация не работает для HTTPS-сайтов

Проблема: правило dst-host="*.youtube.com" action=deny не блокирует YouTube, потому что сайт работает по HTTPS.

Решение: для блокировки HTTPS-сайтов используйте DNS или firewall вместо прокси.

[admin@MikroTik] >
# Способ 1: DNS blocking (рекомендуется)
/ip/dns/static add name=youtube.com address=0.0.0.0 comment="Block YouTube"
/ip/dns/static add name=www.youtube.com address=0.0.0.0 comment="Block YouTube"
/ip/dns/static add name=m.youtube.com address=0.0.0.0 comment="Block YouTube"

# Способ 2: Firewall по TLS SNI (RouterOS 7.x)
/ip/firewall/filter add chain=forward \
    protocol=tcp dst-port=443 \
    tls-host="*youtube.com" \
    action=drop \
    comment="Block YouTube HTTPS via TLS SNI"

# Способ 3: Firewall по address-list
/ip/firewall/address-list add list=blocked-sites address=youtube.com \
    comment="YouTube IPs (auto-resolved)"
/ip/firewall/filter add chain=forward \
    dst-address-list=blocked-sites \
    action=drop \
    comment="Block sites by IP"

Ошибка 4: Прокси доступен из интернета

Проблема: прокси слушает на всех интерфейсах (0.0.0.0:8080). Злоумышленники могут использовать его как open proxy для анонимного доступа.

Решение: ограничьте доступ к прокси.

[admin@MikroTik] >
# Блокируем доступ к прокси из WAN
/ip/firewall/filter add chain=input \
    in-interface=ether1-wan \
    protocol=tcp dst-port=8080 \
    action=drop \
    comment="Block proxy access from WAN"

# Или разрешаем прокси только из LAN (whitelist-подход)
/ip/firewall/filter add chain=input \
    src-address=!192.168.88.0/24 \
    protocol=tcp dst-port=8080 \
    action=drop \
    comment="Proxy: allow only from LAN"

Проверьте, что ваш прокси не является open proxy.

[admin@MikroTik] >
# Проверяем, отвечает ли прокси на WAN
# С внешнего хоста: curl -x http://203.0.113.1:8080 http://example.com
# Должен получить connection refused или timeout

Ошибка 5: Cache переполняет диск

Проблема: на устройствах с ограниченным storage (16–128 MB flash) кеш прокси заполняет весь диск, вызывая проблемы с логами и конфигурацией.

Решение:

[admin@MikroTik] >
# Проверяем использование диска
/system/resource print
# Смотрим: total-hdd-space, free-hdd-space

# Ограничиваем кеш
/ip/proxy set cache-size=64MiB

# Или отключаем дисковый кеш
/ip/proxy set cache-on-disk=no

# Очистка кеша
/ip/proxy/cache-contents remove [find]

Рекомендация: на устройствах с flash < 256 MB не используйте cache-on-disk. Частые записи также сокращают срок жизни NAND flash.

Ошибка 6: Access List — неправильный порядок правил

Проблема: правило deny стоит после правила allow all. Все запросы проходят, блокировка не работает.

Решение: Access List обрабатывается сверху вниз, первое совпадение — финальное.

[admin@MikroTik] >
# Проверяем порядок
/ip/proxy/access print

# Правильный порядок:
# 1. deny — конкретные блокировки (facebook, porn, etc.)
# 2. allow — разрешённые подсети
# 3. deny — всё остальное (default deny)

# Перемещаем правила
/ip/proxy/access move [find where action=deny and comment~"Block Facebook"] destination=0

Ошибка 7: Transparent Proxy не работает для определённых сайтов

Проблема: некоторые HTTP-сайты не открываются через transparent proxy (ошибка 502 Bad Gateway или timeout).

Причина: сайт использует нестандартные HTTP-заголовки, chunked transfer или WebSocket, которые прокси не может обработать.

Решение: добавьте проблемный сайт в исключения.

[admin@MikroTik] >
# Резолвим IP проблемного сайта
:resolve problematic-site.com

# Добавляем в исключения
/ip/firewall/address-list add list=proxy-exceptions \
    address=93.184.216.34 comment="problematic-site.com"

# Или исключаем по dst-address в NAT
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    dst-address-list=proxy-exceptions \
    action=accept \
    comment="Proxy bypass for problematic sites" \
    place-before=[find where comment="Transparent Proxy: redirect HTTP to proxy"]

Альтернативы Web Proxy

Для современных сетей, где 90%+ трафика — HTTPS, встроенный Web Proxy MikroTik имеет ограниченную пользу. Рассмотрим альтернативы.

РешениеЧто делаетHTTPSРазмещение
DNS Blocking (MikroTik)Блокировка по домену через static DNSДаНа роутере
Pi-hole (контейнер)DNS sinkhole + статистикаДаКонтейнер на MikroTik или отдельный сервер
AdGuard Home (контейнер)DNS фильтрация + DoH/DoTДаКонтейнер на MikroTik или отдельный сервер
Squid ProxyПолнофункциональный HTTP/HTTPS проксиДа (с SSL bump)Отдельный сервер
Firewall TLS SNIБлокировка HTTPS по домену из TLS SNIДаНа роутере
[admin@MikroTik] >
# DNS Blocking — простая альтернатива прокси для HTTPS
/ip/dns/static add name=facebook.com address=0.0.0.0 comment="Block Facebook"
/ip/dns/static add name=www.facebook.com address=0.0.0.0 comment="Block Facebook"

# TLS SNI filtering — блокировка HTTPS по домену (RouterOS 7.x)
/ip/firewall/filter add chain=forward \
    protocol=tcp dst-port=443 \
    tls-host="*facebook.com" \
    action=drop \
    comment="Block Facebook HTTPS"

Итоговая конфигурация

[admin@MikroTik] >
# === Web Proxy — полная настройка ===

# Включаем прокси
/ip/proxy set enabled=yes port=8080 \
    cache-on-disk=yes cache-size=512MiB \
    max-cache-object-size=2048KiB \
    max-client-connections=600 max-server-connections=600 \
    max-fresh-time=3d

# Transparent Proxy (HTTP only!)
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    action=redirect to-ports=8080 \
    comment="Transparent Proxy: redirect HTTP"

# Access List — фильтрация
/ip/proxy/access add dst-host="*.facebook.com" action=deny comment="Block Facebook"
/ip/proxy/access add dst-host="*.instagram.com" action=deny comment="Block Instagram"
/ip/proxy/access add dst-host="*porn*" action=deny comment="Block adult (keyword)"
/ip/proxy/access add dst-host="*gambling*" action=deny comment="Block gambling"
/ip/proxy/access add path="*.exe" action=deny comment="Block .exe downloads"
/ip/proxy/access add src-address=192.168.88.0/24 action=allow comment="Allow LAN"
/ip/proxy/access add action=deny comment="Deny all other"

# Блокировка прокси из WAN
/ip/firewall/filter add chain=input \
    in-interface=ether1-wan protocol=tcp dst-port=8080 \
    action=drop comment="Block proxy from WAN"

# DNS blocking для HTTPS-сайтов (дополнительно)
/ip/dns/static add name=facebook.com address=0.0.0.0 comment="Block Facebook DNS"
/ip/dns/static add name=www.facebook.com address=0.0.0.0 comment="Block Facebook DNS"
/ip/dns/static add name=instagram.com address=0.0.0.0 comment="Block Instagram DNS"
/ip/dns/static add name=www.instagram.com address=0.0.0.0 comment="Block Instagram DNS"

# Логирование
/system/logging add topics=proxy action=memory
[admin@MikroTik] >
# Включаем Web Proxy
/ip/proxy set enabled=yes port=8080 \
    cache-administrator="admin@example.com"

# Основные параметры
/ip/proxy set \
    enabled=yes \
    port=8080 \
    cache-on-disk=yes \
    cache-size=512MiB \
    max-cache-size=4096KiB \
    max-cache-object-size=2048KiB \
    max-client-connections=600 \
    max-server-connections=600 \
    max-fresh-time=3d

# Проверяем настройки
/ip/proxy print
# Для устройств с малым storage — только RAM-кеш
/ip/proxy set cache-on-disk=no cache-size=unlimited
# Прокси уже включён на порту 8080
# Клиент настраивает в браузере: Proxy = 192.168.88.1:8080

# Разрешаем подключения к прокси из LAN
/ip/firewall/filter add chain=input \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=8080 \
    action=accept \
    comment="Allow proxy access from LAN"
# NAT-правило для перенаправления HTTP на прокси
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    action=redirect to-ports=8080 \
    comment="Transparent Proxy: redirect HTTP to proxy"
# НЕПРАВИЛЬНО — НИКОГДА не делайте так!
# /ip/firewall/nat add chain=dstnat src-address=192.168.88.0/24 \
#     protocol=tcp dst-port=443 action=redirect to-ports=8080
# Блокировка сайтов по домену
/ip/proxy/access add dst-host="*.facebook.com" action=deny \
    comment="Block Facebook"
/ip/proxy/access add dst-host="*.instagram.com" action=deny \
    comment="Block Instagram"
/ip/proxy/access add dst-host="*.tiktok.com" action=deny \
    comment="Block TikTok"

# Блокировка по ключевому слову в URL
/ip/proxy/access add dst-host="*porn*" action=deny \
    comment="Block adult content (keyword)"
/ip/proxy/access add dst-host="*gambling*" action=deny \
    comment="Block gambling (keyword)"
/ip/proxy/access add dst-host="*casino*" action=deny \
    comment="Block casino (keyword)"

# Блокировка по пути (path)
/ip/proxy/access add path="*torrent*" action=deny \
    comment="Block torrent-related URLs"
/ip/proxy/access add path="*.exe" action=deny \
    comment="Block .exe downloads"
/ip/proxy/access add path="*.msi" action=deny \
    comment="Block .msi downloads"
# Разрешаем прокси только для LAN
/ip/proxy/access add src-address=192.168.88.0/24 action=allow \
    comment="Allow LAN access"

# Запрещаем всё остальное (в конце списка!)
/ip/proxy/access add action=deny \
    comment="Deny all other"

# Разные правила для разных подсетей
# Гости — только базовый HTTP
/ip/proxy/access add src-address=192.168.99.0/24 \
    dst-host="*youtube*" action=deny \
    comment="Block YouTube for guests"

# Руководство — без ограничений
/ip/proxy/access add src-address=192.168.88.10-192.168.88.20 \
    action=allow \
    comment="Allow all for management"
# Создаём правило NAT для transparent proxy с расписанием
# Рабочее время: прокси активен
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    action=redirect to-ports=8080 \
    comment="Transparent Proxy: work hours only"

# Скрипт для включения/отключения
/system/scheduler add name=proxy-enable \
    start-time=09:00:00 interval=1d \
    on-event="/ip/firewall/nat enable [find where comment~\"Transparent Proxy\"]" \
    comment="Enable proxy at 9:00"

/system/scheduler add name=proxy-disable \
    start-time=18:00:00 interval=1d \
    on-event="/ip/firewall/nat disable [find where comment~\"Transparent Proxy\"]" \
    comment="Disable proxy at 18:00"
# Настройка кеширования для максимальной эффективности
/ip/proxy set \
    cache-on-disk=yes \
    cache-size=1024MiB \
    max-cache-size=unlimited \
    max-cache-object-size=10240KiB \
    max-fresh-time=7d \
    always-from-cache=no

# always-from-cache=yes — всегда отдавать из кеша, даже если объект устарел
# Полезно для оффлайн-режима, но может показывать устаревший контент
# Перенаправление на страницу блокировки
/ip/proxy/access add dst-host="*.facebook.com" \
    action=deny \
    redirect-to="http://192.168.88.1/blocked.html" \
    comment="Block Facebook with redirect"

# Для работы redirect нужен веб-сервер с файлом blocked.html
# MikroTik WebFig работает на порту 80 — можно использовать его
# Исключаем банковские сайты из transparent proxy
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    dst-address-list=proxy-exceptions \
    action=accept \
    comment="Proxy exception: bypass proxy" \
    place-before=[find where comment="Transparent Proxy: redirect HTTP to proxy"]

# Добавляем IP банковских сайтов в список исключений
/ip/firewall/address-list add list=proxy-exceptions address=185.50.0.0/16 \
    comment="Bank website"

# Или исключаем конкретные IP клиентов (серверы, VoIP)
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.100 \
    protocol=tcp dst-port=80 \
    action=accept \
    comment="Proxy exception: server bypass" \
    place-before=[find where comment="Transparent Proxy: redirect HTTP to proxy"]
# Основные настройки
/ip/proxy print

# Ожидаемый вывод:
# enabled: yes
# port: 8080
# cache-on-disk: yes
# cache-size: 1024MiB
# max-cache-object-size: 2048KiB
# Список правил фильтрации
/ip/proxy/access print

# Проверяем порядок (обрабатывается сверху вниз)
/ip/proxy/access print detail
# Статистика кеша
/ip/proxy/monitor

# Ожидаемый вывод:
# status: running
# uptime: 2d3h15m
# requests: 45230
# hits: 12540 (27.7%)
# cache-used: 256MiB

# Очистка кеша
/ip/proxy/cache-contents remove [find]
# Проверяем NAT-правило и счётчики
/ip/firewall/nat print stats where comment~"Transparent Proxy"

# Если счётчик растёт — трафик перенаправляется на прокси
# С клиентского ПК:
# curl -v http://facebook.com
# Должен получить отказ (deny) или redirect

# Проверяем на роутере:
/ip/proxy/access print stats
# Счётчик заблокированных запросов растёт
# Смотрим активные прокси-соединения
/ip/firewall/connection print where dst-port=8080

# Проверяем через torch
/tool/torch interface=bridge-lan protocol=tcp port=8080 duration=10
# Включаем логирование прокси
/system/logging add topics=proxy action=memory

# Проверяем логи
/log print where topics~"proxy"
# Проверяем наличие ошибочного правила
/ip/firewall/nat print where dst-port=443 and action=redirect

# Удаляем
/ip/firewall/nat remove [find where dst-port=443 and action=redirect and comment~"proxy"]

# Transparent proxy должен работать ТОЛЬКО с портом 80
/ip/firewall/nat print where comment~"Transparent Proxy"
# Проверяем свободную память
/system/resource print
# Если free-memory < 32MB — уменьшаем кеш

/ip/proxy set cache-size=128MiB max-client-connections=200
/ip/proxy set max-cache-object-size=1024KiB
# Проверяем CPU
/system/resource print
# Если cpu-load > 80% — прокси перегружает устройство

# Решения:
# a) Уменьшить max-client-connections
/ip/proxy set max-client-connections=100

# b) Отключить кеш (оставить только фильтрацию)
/ip/proxy set cache-on-disk=no cache-size=none

# c) Исключить тяжёлый трафик из прокси (видео, обновления)
# Убедитесь, что DNS на роутере работает быстро
/ip/dns set servers=8.8.8.8,1.1.1.1 cache-size=4096KiB
# Способ 1: DNS blocking (рекомендуется)
/ip/dns/static add name=youtube.com address=0.0.0.0 comment="Block YouTube"
/ip/dns/static add name=www.youtube.com address=0.0.0.0 comment="Block YouTube"
/ip/dns/static add name=m.youtube.com address=0.0.0.0 comment="Block YouTube"

# Способ 2: Firewall по TLS SNI (RouterOS 7.x)
/ip/firewall/filter add chain=forward \
    protocol=tcp dst-port=443 \
    tls-host="*youtube.com" \
    action=drop \
    comment="Block YouTube HTTPS via TLS SNI"

# Способ 3: Firewall по address-list
/ip/firewall/address-list add list=blocked-sites address=youtube.com \
    comment="YouTube IPs (auto-resolved)"
/ip/firewall/filter add chain=forward \
    dst-address-list=blocked-sites \
    action=drop \
    comment="Block sites by IP"
# Блокируем доступ к прокси из WAN
/ip/firewall/filter add chain=input \
    in-interface=ether1-wan \
    protocol=tcp dst-port=8080 \
    action=drop \
    comment="Block proxy access from WAN"

# Или разрешаем прокси только из LAN (whitelist-подход)
/ip/firewall/filter add chain=input \
    src-address=!192.168.88.0/24 \
    protocol=tcp dst-port=8080 \
    action=drop \
    comment="Proxy: allow only from LAN"
# Проверяем, отвечает ли прокси на WAN
# С внешнего хоста: curl -x http://203.0.113.1:8080 http://example.com
# Должен получить connection refused или timeout
# Проверяем использование диска
/system/resource print
# Смотрим: total-hdd-space, free-hdd-space

# Ограничиваем кеш
/ip/proxy set cache-size=64MiB

# Или отключаем дисковый кеш
/ip/proxy set cache-on-disk=no

# Очистка кеша
/ip/proxy/cache-contents remove [find]
# Проверяем порядок
/ip/proxy/access print

# Правильный порядок:
# 1. deny — конкретные блокировки (facebook, porn, etc.)
# 2. allow — разрешённые подсети
# 3. deny — всё остальное (default deny)

# Перемещаем правила
/ip/proxy/access move [find where action=deny and comment~"Block Facebook"] destination=0
# Резолвим IP проблемного сайта
:resolve problematic-site.com

# Добавляем в исключения
/ip/firewall/address-list add list=proxy-exceptions \
    address=93.184.216.34 comment="problematic-site.com"

# Или исключаем по dst-address в NAT
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    dst-address-list=proxy-exceptions \
    action=accept \
    comment="Proxy bypass for problematic sites" \
    place-before=[find where comment="Transparent Proxy: redirect HTTP to proxy"]
# DNS Blocking — простая альтернатива прокси для HTTPS
/ip/dns/static add name=facebook.com address=0.0.0.0 comment="Block Facebook"
/ip/dns/static add name=www.facebook.com address=0.0.0.0 comment="Block Facebook"

# TLS SNI filtering — блокировка HTTPS по домену (RouterOS 7.x)
/ip/firewall/filter add chain=forward \
    protocol=tcp dst-port=443 \
    tls-host="*facebook.com" \
    action=drop \
    comment="Block Facebook HTTPS"
# === Web Proxy — полная настройка ===

# Включаем прокси
/ip/proxy set enabled=yes port=8080 \
    cache-on-disk=yes cache-size=512MiB \
    max-cache-object-size=2048KiB \
    max-client-connections=600 max-server-connections=600 \
    max-fresh-time=3d

# Transparent Proxy (HTTP only!)
/ip/firewall/nat add chain=dstnat \
    src-address=192.168.88.0/24 \
    protocol=tcp dst-port=80 \
    action=redirect to-ports=8080 \
    comment="Transparent Proxy: redirect HTTP"

# Access List — фильтрация
/ip/proxy/access add dst-host="*.facebook.com" action=deny comment="Block Facebook"
/ip/proxy/access add dst-host="*.instagram.com" action=deny comment="Block Instagram"
/ip/proxy/access add dst-host="*porn*" action=deny comment="Block adult (keyword)"
/ip/proxy/access add dst-host="*gambling*" action=deny comment="Block gambling"
/ip/proxy/access add path="*.exe" action=deny comment="Block .exe downloads"
/ip/proxy/access add src-address=192.168.88.0/24 action=allow comment="Allow LAN"
/ip/proxy/access add action=deny comment="Deny all other"

# Блокировка прокси из WAN
/ip/firewall/filter add chain=input \
    in-interface=ether1-wan protocol=tcp dst-port=8080 \
    action=drop comment="Block proxy from WAN"

# DNS blocking для HTTPS-сайтов (дополнительно)
/ip/dns/static add name=facebook.com address=0.0.0.0 comment="Block Facebook DNS"
/ip/dns/static add name=www.facebook.com address=0.0.0.0 comment="Block Facebook DNS"
/ip/dns/static add name=instagram.com address=0.0.0.0 comment="Block Instagram DNS"
/ip/dns/static add name=www.instagram.com address=0.0.0.0 comment="Block Instagram DNS"

# Логирование
/system/logging add topics=proxy action=memory
IP / Web Proxy на MikroTik — кеширование и фильтрация