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

Примеры настройки

SOCKS – это интернет протокол, который используется для передачи данных от клиента к серверу с использованием посредника, называемого прокси-сервер. SOCKS версии 5 одобрен организацией IETF (Internet Engineering Task Force) в качестве стандарта Internet и включен в RFC 1928. Согласно IANA (Internet Assigned Numbers Authority), за протоколом SOCKS закреплен порт 1080 TCP/UDP.

socks1

Схема посредничества SOCKS-сервера при установлении соединения

Поскольку протокол 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-сервер позволяет контролировать установление соединения клиента с удаленным хостом в трех этапах:

  1. Во время промежуточного соединения с SOCKS-сервером, при получении команд CONNECT и UDP ASSOCIATE от клиента, по указанному IP-адресу клиента, его порту (только для TCP) и имени пользователя
  2. Во время прохождения аутентификации по имени пользователя и пароле, предоставленным клиентом.
  3. Для операций BIND и UDP ASSOCIATE, когда удаленный хост пытается подключиться или отправить пакет UDP SOCKS-клиенту.

В примерах ниже рассматриваются различные сценарии использования SOCKS-сервера.

Анонимный SOCKS-сервер#

Классическим применением протокола SOCKS, является сокрытие IP-адреса SOCKS-клиента при подключении к удаленному хосту. В этом случае не требуется авторизация пользователей, а интерфейс/адрес внешнего интерфейса SOCKS-сервера и внутреннего - одинаковые.

Данный пример может быть актуальным при использовании внешнего статического IP-адреса на Numa Edge. Также в данном примере не будет использоваться аутентификация пользователей.

В описанном ниже примере считается, что на интерфейсе eth0 используется статический IP-адрес 203.0.113.1/24 из диапазона сети, выданной провайдером.

Пример – Настройка анонимного SOCKS-сервера на S1#
  1. Указываем адрес, на который будут подключаться клиенты, порт по умолчанию 1080:
    [edit]
    admin@S1#set service socksproxy internal address 203.0.113.1
    
  2. Указываем интерфейс, с которого SOCKS-сервер будет осуществлять подключения к внешним хостам:
    [edit]
    admin@S1#set service socksproxy external interface eth0
    
  3. Фиксация изменений:
    [edit]
    admin@S1# commit
    
  4. Вывод настроек socksproxy:
    1
    2
    3
    4
    5
    6
    7
    8
    [edit]
    admin@S1#show service socksproxy
    external {
        interface eth0
    }
    internal {
        address 203.0.113.1
    }
    

Примечание

Допускаются все возможные комбинации использования адресов или интерфейсов в узле конфигурации 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#
  1. Указываем адрес, на который будут подключаться клиенты, порт по умолчанию 1080:
    [edit]
    admin@S2#set service socksproxy internal address 192.51.100.1
    
  2. Указываем адрес, с которого SOCKS-сервер будет осуществлять подключения к внешним хостам:
    [edit]
    admin@S2#set service socksproxy external address 192.51.100.1
    
  3. Фиксация изменений:
    [edit]
    admin@S2# commit
    
  4. Вывод настроек socksproxy:
    1
    2
    3
    4
    5
    6
    7
    8
    [edit]
    admin@S2#show service socksproxy
    external {
        address 192.51.100.1
    }
    internal {
        address 192.51.100.1
    }
    

Теперь добавим на S1 адрес SOCKS-сервера S2 для создания цепочки серверов.

Пример – Добавление второго SOCKS-сервера в цепочку на S1#
  1. Указываем адрес, на который будут подключаться клиенты, порт по умолчанию 1080:
    [edit]
    admin@S1#set service socksproxy chaining 192.51.100.1
    
  2. Фиксация изменений:
    [edit]
    admin@S1# commit
    
  3. Вывод настроек socksproxy:
    [edit]
    admin@S1#show service socksproxy
    chaining{
        address 192.51.100.1
    }
    external {
        interface eth0
    }
    internal {
        address 203.0.113.1
    }
    

SOCKS-сервер с авторизацией и разграничением прав доступа во внешнюю сеть.#

socks2

Схема настройки

В этом примере будет рассматриваться SOCKS-сервер внутри локальной сети с ограничением доступа во внешнюю сеть на основе IP-адреса источника при его успешной аутентификации.

Предположим, что есть локальная сеть, внутри которой расположен SOCKS-сервер c IP-адресом 192.168.10.1/24. В этой же локальной сети находятся ПК клиентов, на сетевом ПО которых настроено подключение с SOCKS-серверу.

Сетевое ПО клиентов поддерживает аутентификацию согласно стандарту RFC 1929. Необходимо обеспечить возможность управлять доступом клиентов во внешнюю сеть согласно аутентификации и IP-адресу клиента.

Пример - Настройка SOCKS-сервера#
  1. Указываем в качестве внешнего интерфейса SOCKS-сервера eth0:
    [edit]
    admin@server#set service socksproxy external interface eth0
    
  2. Указываем, что SOCKS-сервер будет ожидать подключения клиентов на адресе 192.168.10.1:
    [edit]
    admin@server#set service socksproxy internal address 192.168.10.1
    
  3. Создаем правило подключения клиентов, в котором указываем что клиенты могут подключаться только из локальной сети:
    [edit]
    admin@server#set service socksproxy access-rules client 1 address 192.168.10.0/24
    
  4. Разрешаем описанное выше правило, подключение с других IP-адресов будет запрещено:
    [edit]
    admin@server#set service socksproxy access-rules client 1 action permit
    
  5. Указываем метод аутентификации пользователей по логину и паролю:
    [edit]
    admin@server#set service socksproxy authentication method users
    
  6. Указываем пользователя, которому разрешено подключатся к SOCKS-серверу:
    [edit]
    admin@server#set service socksproxy authentication users test password testpassword
    
  7. Разрешаем SOCKS-серверу перенаправлять пакеты на любой удаленный хост:
    [edit]
    admin@server#set service socksproxy access-rules socks 1 destination address 0.0.0.0/0
    
  8. Разрешаем подключение к SOCKS-серверу только SOCKS-клиенту с адресом 192.168.10.100:
    [edit]
    admin@server#set service socksproxy access-rules socks 1 source address 192.168.10.100
    
  9. Разрешаем описанное выше правило:
    [edit]
    admin@server#set service socksproxy access-rules socks 1 action permit
    
  10. Фиксация изменений:
    [edit]
    admin@S1# commit
    
  11. Вывод настроек socksproxy:
    admin@server# show service socksproxy 
        access-rules {
             client 1 {
                 action permit
                 address 192.168.10.0/24
             }
             socks 1 {
                 action permit
                 destination {
                     address 0.0.0.0/0
                 }
                 source {
                     address 192.168.10.100
                 }
              }
         }
         authentication {
             method users
             users test {
                  password testpassword
             }
         }
         external {
             interface eth0
         }
         internal {
             address 192.168.10.1
         }
    

Для разрешения доступа во внешнюю сеть другим клиентам необходимо создать правило, аналогичное access-rules socks 1 с другим номером, в котором в качестве source address - указать IP-адрес клиента.

Примечание

Обратите внимание, что при использовании данного метода аутентификации, имя пользователя и пароль будут передаваться в открытом виде. Numa Edge поддерживает также метод аутентификации GSS-API, описанный в стандарте RFC 1961 для более безопасной передачи имени пользователя и пароля.