Примеры настройки
SOCKS – это интернет протокол, который используется для передачи данных от клиента к серверу с использованием посредника, называемого прокси-сервер. SOCKS версии 5 одобрен организацией IETF (Internet Engineering Task Force) в качестве стандарта Internet и включен в RFC 1928. Согласно IANA (Internet Assigned Numbers Authority), за протоколом SOCKS закреплен порт 1080 TCP/UDP.
Поскольку протокол SOCKS v5 концептуально является «промежуточным уровнем» между прикладным уровнем и транспортным уровнем, для передачи данных он использует TCP и UDP. Данная особенность позволяет использовать прокси-сервер в качестве посредника при передаче пакетов любого протокола прикладного уровня. При этом SOCKS-прокси никогда не изменяют заголовки пакетов с данными, что случается при использовании прокси других типов.
Согласно спецификации протокола SOCKS различают SOCKS-сервер, который присутствует в Numa Edge в узле конфигурации service socksproxy, и SOCKS-клиент, который устанавливают на каждый пользовательский компьютер. SOCKS-сервер обеспечивает взаимодействие с любым прикладным сервером от имени соответствующего этому серверу прикладного клиента. SOCKS-клиент предназначен для перехвата всех запросов к прикладному серверу со стороны клиента и передачи их SOCKS-серверу. Следует отметить, что SOCKS-клиенты в большинстве своем встроены в различное сетевое ПО, такое как браузеры, почтовые клиенты, мессенджеры и т. д.
Каждое SOCKS-соединение проходит стадию аутентификации, если она требуется, затем клиент посылает команду. Команда может быть одна из трех:
CONNECT
– установить исходящее соединение с удаленным хостом по указанному TCP-порту и IP-адресу;BIND
– открыть TCP порт, используется для TCP соединений, установленных после командыCONNECT
. Применяется для протоколов, которые требуют, чтобы клиент принимал соединения со стороны удаленного хоста. Хорошим примером является FTP, которому для передачи данных необходимо знать, какой порт клиента использовать для установления соединения со стороны сервера;UDP ASSOCIATE
– открыть UDP порт, в ответном сообщении сервер указывает IP-адрес и UDP-порт, на которые следует направлять исходящие датаграммы.
В ответ на эти сообщения SOCKS-сервер отправляет ответы BIND REPLY
для протокола TPC и UDP REPLY
для протокола UDP, которые соответствуют успешному выполнению команды на сервере.
SOCKS-сервер позволяет контролировать установление соединения клиента с удаленным хостом в трех этапах:
- Во время промежуточного соединения с SOCKS-сервером, при получении команд
CONNECT
иUDP ASSOCIATE
от клиента, по указанному IP-адресу клиента, его порту (только для TCP) и имени пользователя - Во время прохождения аутентификации по имени пользователя и пароле, предоставленным клиентом.
- Для операций
BIND
иUDP ASSOCIATE
, когда удаленный хост пытается подключиться или отправить пакет UDP SOCKS-клиенту.
В примерах ниже рассматриваются различные сценарии использования SOCKS-сервера.
Анонимный SOCKS-сервер#
Классическим применением протокола SOCKS, является сокрытие IP-адреса SOCKS-клиента при подключении к удаленному хосту. В этом случае не требуется авторизация пользователей, а интерфейс/адрес внешнего интерфейса SOCKS-сервера и внутреннего - одинаковые.
Данный пример может быть актуальным при использовании внешнего статического IP-адреса на Numa Edge. Также в данном примере не будет использоваться аутентификация пользователей.
В описанном ниже примере считается, что на интерфейсе eth0 используется статический IP-адрес 203.0.113.1/24 из диапазона сети, выданной провайдером.
Пример – Настройка анонимного SOCKS-сервера на S1#
- Указываем адрес, на который будут подключаться клиенты, порт по умолчанию 1080:
- Указываем интерфейс, с которого SOCKS-сервер будет осуществлять подключения к внешним хостам:
- Фиксация изменений:
- Вывод настроек socksproxy:
Примечание
Допускаются все возможные комбинации использования адресов или интерфейсов в узле конфигурации service socksproxy [internal|external]
, например, использование интерфейса eth0 в качестве внешнего и внутреннего интерфейса.
После применения данных настроек на SOCKS-клиенте необходимо указать адрес SOCKS-сервера 203.0.113.1 и порт 1080.
Цепочка SOCKS-серверов#
При использовании socksproxy допускается построение неограниченных цепочек SOCKS-серверов, когда один SOCKS-сервер перенаправляет пакеты на другой SOCKS-сервер.
Настроим еще один SOCKS-сервер со статическим адресом 192.51.100.1/24.
Пример – Настройка SOCKS-сервера на S2#
- Указываем адрес, на который будут подключаться клиенты, порт по умолчанию 1080:
- Указываем адрес, с которого SOCKS-сервер будет осуществлять подключения к внешним хостам:
- Фиксация изменений:
- Вывод настроек socksproxy:
Теперь добавим на S1 адрес SOCKS-сервера S2 для создания цепочки серверов.
Пример – Добавление второго SOCKS-сервера в цепочку на S1#
- Указываем адрес, на который будут подключаться клиенты, порт по умолчанию 1080:
- Фиксация изменений:
- Вывод настроек socksproxy:
SOCKS-сервер с авторизацией и разграничением прав доступа во внешнюю сеть.#
В этом примере будет рассматриваться SOCKS-сервер внутри локальной сети с ограничением доступа во внешнюю сеть на основе IP-адреса источника при его успешной аутентификации.
Предположим, что есть локальная сеть, внутри которой расположен SOCKS-сервер c IP-адресом 192.168.10.1/24. В этой же локальной сети находятся ПК клиентов, на сетевом ПО которых настроено подключение с SOCKS-серверу.
Сетевое ПО клиентов поддерживает аутентификацию согласно стандарту RFC 1929. Необходимо обеспечить возможность управлять доступом клиентов во внешнюю сеть согласно аутентификации и IP-адресу клиента.
Пример - Настройка SOCKS-сервера#
- Указываем в качестве внешнего интерфейса SOCKS-сервера eth0:
- Указываем, что SOCKS-сервер будет ожидать подключения клиентов на адресе 192.168.10.1:
- Создаем правило подключения клиентов, в котором указываем что клиенты могут подключаться только из локальной сети:
- Разрешаем описанное выше правило, подключение с других IP-адресов будет запрещено:
- Указываем метод аутентификации пользователей по логину и паролю:
- Указываем пользователя, которому разрешено подключатся к SOCKS-серверу:
- Разрешаем SOCKS-серверу перенаправлять пакеты на любой удаленный хост:
- Разрешаем подключение к SOCKS-серверу только SOCKS-клиенту с адресом 192.168.10.100:
- Разрешаем описанное выше правило:
- Фиксация изменений:
- Вывод настроек socksproxy:
Для разрешения доступа во внешнюю сеть другим клиентам необходимо создать правило, аналогичное access-rules socks 1
с другим номером, в котором в качестве source address
- указать IP-адрес клиента.
Примечание
Обратите внимание, что при использовании данного метода аутентификации, имя пользователя и пароль будут передаваться в открытом виде. Numa Edge поддерживает также метод аутентификации GSS-API, описанный в стандарте RFC 1961 для более безопасной передачи имени пользователя и пароля.