Глава 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.
Синтаксис:
Где: 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.
Синтаксис:
Где: 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) для всех типов транзакций.
Синтаксис:
Где:
- 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).