Web Proxy на MikroTik — кеширование и фильтрация
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 Proxy | DNS Blocking | Firewall 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
Описание параметров:
| Параметр | Значение | Описание |
|---|---|---|
port | 8080 | Порт прослушивания прокси |
cache-on-disk | yes | Хранить кеш на диске (не только в RAM) |
cache-size | 512MiB | Объём дискового кеша |
max-cache-size | 4096KiB | Максимальный размер кешируемого объекта (общий) |
max-cache-object-size | 2048KiB | Максимальный размер одного объекта в кеше |
max-client-connections | 600 | Максимум одновременных клиентских подключений |
max-server-connections | 600 | Максимум одновременных подключений к серверам |
max-fresh-time | 3d | Максимальное время «свежести» кешированного объекта |
Важно для устройств с малым объёмом 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 замедляет интернет
Проблема: после включения прокси скорость интернета снизилась, страницы грузятся медленно.
Причины и решения:
- Недостаточно RAM — прокси потребляет память для кеша и соединений.
[admin@MikroTik] ># Проверяем свободную память /system/resource print # Если free-memory < 32MB — уменьшаем кеш /ip/proxy set cache-size=128MiB max-client-connections=200
- Слишком большой max-cache-object-size — роутер пытается кешировать крупные файлы.
[admin@MikroTik] >/ip/proxy set max-cache-object-size=1024KiB
- Перегрузка 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) Исключить тяжёлый трафик из прокси (видео, обновления)
- 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
# Включаем 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