/etc/socks.conf
Конфигурационный
файл
клиентов SOCKS
Имя
/etc/socks.conf
Описание:
Этот файл
используется всеми клиентскими программами SOCKS в следующих
целях:
-
клиент определяет,
следует ли использовать прямое соединение или соединение
через прокси-сервер для связи с данным хостом-получателем;
-
клиент поддерживает
управление доступом на основе информации о
хосте-получателе, запрошенной службе (номере порта на
хосте-получателе) и эффективном идентификаторе (euid)
локального пользователя.
Максимальная длина каждой строки файла– 1024 символа.
Строки, начинающиеся с символа решетки (#), являются строками комментария. Для
строк, не являющихся комментарием, должен использоваться один
из трех форматов:
deny
[*=список_пользователей] адрес_назначения маска_назначения
[оператор порт_назначения] [: команда_командного_интерпретатора]
direct
[*=список_пользователей] адрес_назначения маска_назначения
[оператор порт_назначения] [: команда_командного_интерпретатора]
sockd
[@=список_серверов] [*=список_пользователей] адрес_назначения
маска_назначения [оператор порт_назначения]
[: команда_командного_интерпретатора]
Согласно строке deny клиенты SOCKS
определяют, когда следует отклонить запрос.
Согласно
строке direct определяется,
когда следует использовать прямое соединение.
Согласно
строке sockd определяется,
когда следует использовать соединение через прокси-сервер, и,
дополнительно, определяется используемый прокси-сервер (или
серверы) SOCKS.
Поля
разделяются символами пробела и табуляции. Необязательные поля
заключены в квадратные скобки. Поля:
список_пользователей
Один или несколько идентификаторов пользователей или
имен файлов, разделенных запятыми. В этом списке запрещено
использовать символы пробела и табуляции. Идентификаторы
пользователей должны принадлежать пользователям на локальном
хосте, но не пользователям на хосте-получателе или хосте
сервера SOCKS.
Имена файлов должны быть полными путевыми именами,
начинающимися с символа /. В каждой
строке списка в указанных файлах может содержаться один или
несколько идентификаторов пользователей; в качестве
разделителя может использоваться любая комбинация пробелов,
табуляций и запятых.
Символ
решетки # в начале строки
означает, что остальная часть строки является комментарием.
Максимальная длина строки в этих файлах – 1023 символа. Если
поле *= список_пользователей пропущено,
строка применяется ко всем идентификаторам пользователей.
адрес_назначения
маска_назначения
Эти поля совместно определяют IP-адрес назначения или
диапазон IP-адресов назначения. Значения в обоих полях
вводятся в обычном формате с точками-разделителями (например:
129.1.2.3).
Установленные
в 0 (ноль) биты в поле маска_назначения указывают, что
соответствующие позиции битов должны маскироваться (то есть
игнорироваться) при сравнении адреса_назначения с
фактическим IP-адресом назначения.
Например,
маска 255.255.255.255 в поле маска_назначения требует точного
совпадения с адресом_назначения. Если же
используется маска 0.0.0.0, совпадение
адресов фиксируется в любом случае (независимо от значения в
поле адрес_назначения). (Следует
отметить, что аналогично интерпретируются и сетевые маски;
однако маски адресов, используемые в списках доступа
маршрутизаторов Cisco, интерпретируются противоположно.)
оператор
Возможные
значения:
eq
равно
neq
не равно
lt
меньше
gt
больше
le
меньше или
равно
ge
больше или
равно
порт_назначения
Номер порта (например, 23), либо эквивалентное имя
службы, определенное в файле /etc/services (например, telnet для номера порта 23). Если эта
пара пропущена, строка применяется ко всем службам.
список_серверов
Используется только в строке sockd. Здесь задается один или несколько
прокси-серверов SOCKS, к которым должна обращаться клиентская
программа (в указанном порядке) для установления соединения
через прокси-сервер.
В качестве
разделителей в этом списке могут использоваться только запятые
(использование символов пробела и табуляции запрещено). В
списке можно указывать доменные имена серверов; тем не менее,
рекомендуется указывать IP-адреса.
Если поле список_серверов
пропущено, клиентской программой используется прокси-сервер
SOCKS по умолчанию, который определяется переменной среды SOCKS_SERVER
или именем, вкомпилированным в клиентскую программу SOCKS.
Рассмотрим
пример строки sockd:
sockd @=1.2.3.4
*=boss,root 11.12.13.14 255.255.255.255 eq telnet
В этой строке определены следующие обязательные
условия для успешной обработки запроса: запрос поступил от
локального пользователя с эффективным идентификатором
пользователя boss или root; точным значением IP-адреса назначения
является 11.12.13.14; запрашивается
служба telnet. В данном
случае соединение с хостом 11.12.13.14 должно быть
установлено через прокси-сервер SOCKS в хосте 1.2.3.4.
Всякий раз,
когда клиент SOCKS должен установить сетевое соединение, он
проверяет поступивший запрос по каждой строке в файле /etc/socks.conf. При
обнаружении клиентом строки с условиями, совпадающими с
условиями в запросе, выполняется действие, указанное в данной
строке. Проверка по остальным строкам в файле /etc/socks.conf не выполняется.
Если не обнаружена совпадающая строка в файле, запрос
отклоняется.
Примечание.
Порядок строк в файле чрезвычайно важен. Если, например,
переставить местами две строки, результат будет совершенно
иным.
команда_командного_интерпретатора
Команда,
выполняемая в случае удовлетворения условий, указанных в данной
строке. Перед передачей команды на исполнение командному
интерпретатору Borne выполняются следующие подстановки:
Исходные символы
|
Результат
подстановки
|
%A
|
Доменное имя хоста
клиента, если это имя известно; в противном случае –
IP-адрес
|
%a
|
IP-адрес хоста
клиента
|
%c
|
"connect"
(соединение) или "bind" (привязка)
|
%p
|
Идентификатор
процесса клиентской программы
|
%S
|
Имя службы
(например, ftp),
если это имя известно; в противном случае – номер
порта назначения.
|
%s
|
Номер порта
назначения
|
%U
|
Идентификатор
пользователя, введенный при входе в систему
|
%u
|
Эффективный
идентификатор пользователя
|
%Z
|
Доменное имя
хоста-получателя, если это имя известно; в противном
случае – IP-адрес хоста
|
%z
|
IP-адрес
хоста-получателя
|
%%
|
Один символ %
|
Несколько команд командного интерпретатора можно
объединить в одной строке обычным способом, например с
использованием символов |, ;.
Подразумевается,
что в конце управляющего файла указано действие "deny all"
(полный запрет), однако можно явно задать требуемое действие,
выполняемое при отклонении запросов. Пример.
deny 0.0.0.0
0.0.0.0 : /usr/bin/mail -s `SOCKS: rejected %S from %u to %Z'
root
В отличие от предыдущего варианта, соединение с
адресом 127.0.0.1 (локальным
хостом) всегда устанавливается
напрямую и, следовательно, это не требуется задавать в файле /etc/socks.conf.
Переменные среды:
SOCKS_SERVER
Если эта переменная среды определена, то она содержит
имя или IP-адрес используемого хоста прокси-сервера SOCKS; это
значение переопределяет сервер по умолчанию, жестко заданный
при компиляции программ.