Перейти к содержанию

Глава 18. Условия SOCKS

Условия SOCKS используются для фильтрации SOCKS4/SOCKS5 соединений в слое <Proxy>. Они позволяют контролировать: версию протокола, метод соединения, адрес и порт назначения, статус аутентификации.

В BlueCoat определены три условия SOCKS: - socks= -- проверяет, является ли транзакция SOCKS-соединением (yes/no). - socks.method= -- метод SOCKS (connect, udp-associate). - socks.version= -- версия протокола (4 или 5).

Redcoat реализует socks.version и socks.method аналогично BlueCoat, а также добавляет три расширения: socks.destination.host, socks.destination.port и socks.authenticated.

BlueCoat-эквиваленты расширений. В BlueCoat отдельных условий для назначения/аутентификации SOCKS нет — назначение проверяется универсальными условиями url.host= / url.port= (в SOCKS-транзакции URL = адрес назначения), а факт аутентификации — универсальным authenticated= (требование аутентификации задаётся свойством socks.authenticate()). Расширения Redcoat дают SOCKS-специфичные имена для тех же данных: socks.destination.host использует то же поле, что url.host; socks.destination.port — поле порта назначения; socks.authenticated — отдельный флаг SOCKS-аутентификации.

Примечание: BlueCoat условие socks=yes|no в Redcoat не реализовано. Для проверки, является ли транзакция SOCKS-соединением, используйте socks.version=4 или socks.version=5.

18.1. socks.version — версия протокола SOCKS

Примечание. Условие принимается синтаксисом, но данные SOCKS-соединения клиента сейчас не передаются в политику — правило с этим условием не сработает.

Проверяет версию протокола SOCKS, используемого клиентом. SOCKS4 не поддерживает аутентификацию и UDP; SOCKS5 (RFC 1928) поддерживает оба. Имя как в BlueCoat.

Синтаксис:

socks.version=version_number

Где: version_number -- числовой номер версии протокола (4 или 5).

Тип значения: u8 (беззнаковое 8-битное целое).

Допустимые слои: <Proxy>

Примеры:

<Proxy>
    ; Запретить устаревший SOCKS4
    socks.version=4 deny

    ; Разрешить только SOCKS5
    socks.version=5 allow

См. также: socks.method (18.2), socks.authenticated (18.5).

18.2. socks.method — метод SOCKS

Примечание. Как и socks.version (18.1), данные SOCKS-соединения сейчас не передаются в политику — правило не сработает.

Проверяет метод (команду) SOCKS-запроса. Определяет, какой тип соединения запрашивает клиент.

Аналог BlueCoat: socks.method=. BlueCoat поддерживает значения connect и udp-associate. Redcoat дополнительно поддерживает bind.

Синтаксис:

socks.method=method_name

Где: method_name -- название метода SOCKS.

Допустимые значения: - connect -- установка TCP-соединения через прокси (CMD 0x01, самый распространённый). - bind -- запрос входящего соединения (CMD 0x02, для FTP active mode и подобных протоколов). - udp_associate -- установка UDP-ассоциации (CMD 0x03, только SOCKS5).

Примечание: В BlueCoat используется udp-associate (через дефис). В Redcoat -- udp_associate (через подчёркивание).

Тип значения: String.

Допустимые слои: <Proxy>

Примеры:

<Proxy>
    ; Запретить ретрансляцию UDP (часто используется для обхода фильтрации)
    socks.method=udp_associate deny

    ; Запретить bind (потенциальная уязвимость)
    socks.method=bind deny

    ; Разрешить только connect
    socks.method=connect allow
    deny

См. также: socks.version (18.1), socks.destination.host (18.3).

18.3. socks.destination.host — хост назначения SOCKS

Проверяет целевой хост (имя домена или IP-адрес), указанный в SOCKS-запросе. Поддерживает wildcard-шаблоны и оператор отрицания (!=).

Расширение Redcoat. В BlueCoat аналога нет. В BlueCoat для фильтрации адреса назначения SOCKS-соединений используется url.host= в слое <Proxy>.

Синтаксис:

socks.destination.host=hostname
socks.destination.host=(hostname, ...)
socks.destination.host!=hostname

Где: hostname -- доменное имя или IP-адрес. Поддерживает wildcard (*), подстроки, списки. Поддерживает оператор отрицания !=.

Тип значения: строковый (поддерживает wildcard, списки, подстроки).

Допустимые слои: <Proxy>

Примеры:

<Proxy>
    ; Блокировка доступа к Tor hidden services
    socks.destination.host=*.onion deny

    ; Блокировка торрент-трекеров
    socks.destination.host=(tracker.example.com, torrent.example.org) deny

    ; Разрешить только определённые хосты
    socks.destination.host!=(allowed1.com, allowed2.com) deny

См. также: socks.destination.port (18.4), url.host= (8.3).

18.4. socks.destination.port — порт назначения SOCKS

Проверяет целевой порт, указанный в SOCKS-запросе. Поддерживает одиночные значения, списки и диапазоны портов.

Расширение Redcoat. В BlueCoat аналога нет. В BlueCoat для фильтрации порта назначения SOCKS-соединений используется url.port= в слое <Proxy>.

Синтаксис:

socks.destination.port=port_number
socks.destination.port=(port_number, ...)
socks.destination.port=low..high

Где: port_number -- номер порта (0-65535). Поддерживает диапазоны через ...

Тип значения: числовой (поддерживает одиночные значения, списки и диапазоны).

Допустимые слои: <Proxy>

Примеры:

<Proxy>
    ; Блокировка BitTorrent портов
    socks.destination.port=6881..6889 deny

    ; Разрешить только стандартные веб-порты
    socks.destination.port=(80, 443, 8080, 8443) allow
    deny

    ; Блокировка прямого SMTP (защита от спама)
    socks.destination.port=25 deny

См. также: socks.destination.host (18.3), url.port= (8.5).

18.5. socks.authenticated — аутентификация SOCKS-клиента

Проверяет, прошёл ли SOCKS-клиент аутентификацию. Применимо только к SOCKS5, поскольку SOCKS4 не поддерживает аутентификацию.

Расширение Redcoat. В BlueCoat аналога нет. BlueCoat использует общие условия аутентификации (authenticate, user, group) для всех типов транзакций.

Синтаксис:

socks.authenticated=yes|no

Где: - yes -- клиент прошёл аутентификацию SOCKS5 (метод 0x02, RFC 1929). - no -- клиент не аутентифицирован (анонимный доступ или SOCKS4).

Тип значения: bool.

Допустимые слои: <Proxy>

Примеры:

<Proxy>
    ; Требовать аутентификацию для SOCKS5
    socks.version=5 socks.authenticated=no deny

    ; Разрешить анонимный SOCKS только для определённых подсетей
    client.address=10.0.0.0/8 socks.authenticated=no allow
    socks.authenticated=no deny

См. также: socks.version (18.1), authenticate (27.1).