Socat linux настройка примеры

Обновлено: 04.07.2024

Если в соседней локалке во всю шпилятся в одну из популярных сетевых игр, а ты не можешь поучаствовать в баталиях из-за того, что гама рассчитана только на LAN, либо админы намудрили с ограничениями, выход один – поднять VPN. Учитывая, что туннель не будет постоянным, главным требованием выдвинем простоту в настройках и нетребовательность к ресурсам. Посмотрим, что предлагает нам OpenSource.

$ sudo apt-cache search vtun
vtun - virtual tunnel over TCP/IP networks

Если клиент находится за NAT, VTun позволяет ему без проблем подключаться к серверу, для этого следует лишь использовать в качестве транспорта TCP. Собственно, эта особенность и привлекает пользователей.

Система работает через универсальные драйверы tun и tap, позволяющие программам в окружении пользователя (userspace) самостоятельно обрабатывать пакеты. Нужные устройства, как правило, уже созданы в системе:

$ ls -al /dev/net/tun
crw-rw-rw- 1 root root 10, 200 2010-07-10 12:39 /dev/net/tun

Если ядро пересобиралось самостоятельно, тогда не забудь включить опции CONFIG_TUN и CONFIG_ETHERTAP.

Устанавливаем пакет vtun в Debian/Ubuntu:

$ sudo apt-get install vtun

Все настройки демона производятся в файле /etc/vtund.conf. Можно запустить несколько демонов, каждый из которых будет считывать свой конфиг и работать в качестве сервера или клиента. В поставке уже идет готовый шаблон файла, требующий предварительной правки. Все возможные параметры можно найти в документации VTun.

Настройки внутри разбиты на несколько разделов. Секции options и default являются общими для всех, позже их можно переопределить для каждого клиента:

$ sudo nano /etc/vtund.conf

options port 5000;
syslog daemon;

Аналогично секции up можно создать секцию down, где описать настройки, которые должны быть выполнены в процессе разрыва VPN. Команды могут быть любые, поэтому, кроме настроек интерфейса, сюда можно прописать пару строк, позволяющих создавать автоматический бэкап важных данных. Например, так:

program /bin/sh "-c 'tar cf - /etc/*'";

В Debian/Ubuntu для удобства управления предлагается файл /etc/default/vtun. При настройке сервера достаточно изменить внутри одну строку:

$ sudo nano /etc/default/vtun

Теперь можно запускать сервер:

$ sudo invoke-rc.d vtun start

Или на первых порах, чтобы получить больше информации, лучше ввести:

Клиент настраивается аналогично, параметры, по сути, зеркальны серверным:

$ sudo nano /etc/vtund.conf

options port 5000;
timeout 60;
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/iptables;
>

client1 passwd p@ssVV0rD;
type tun;
up ifconfig "%% 10.1.0.2 pointopoint 10.1.0.1 mtu 1450";
route "add -net 1.2.3.4/16 gw 10.1.0.1";
>;
>

И если ты используешь Debian-based дистрибутив, поправь /etc/default/vtun, чтобы init-файл знал, кого запускать.

$ sudo nano /etc/default/vtun

Для начала запустим vtund с указанием имени клиентского хоста, фигурирующего в конфиге, и IP-адреса (имени) сервера:

Следим за процессом подключения, в другой консоли смотрим логи:

$ sudo tail -f /var/log/message

Команда ifconfig покажет наличие tun0 интерфейса. На этом настройку Vtun можно считать законченной. В дальнейшем клиента можно запускать обычным образом через init-скрипт:

$ sudo invoke-rc.d vtun start

Так же, как и VTun, tinc требует наличия драйверов TUN/TAP. Пакет с tinc доступен в репозиториях большинства дистрибутивов. Установочный пакет для Windows можно скачать на офсайте. В Debian/Ubuntu вводим:

$ sudo apt-get install tinc

После установки стартует демон, но делать ему сейчас нечего. Чтобы все заработало, необходимо создать конфигурационные файлы, сгенерировать пару ключей и распространить их на компьютеры, участвующие в подключении.

Конфиг в наличии пока только один. В файле /etc/tinc/net.boot прописываются названия сетей, которые должны быть запущены tinc. Он пуст (комментарии не в счет), добавим сюда нашу будущую сеть:

$ sudo nano /etc/tinc/net.boot

vpnnet

В /usr/share/doc/tinc/examples ты найдешь примеры конфигов. По мере необходимости копируем их в /etc/tinc и правим. Чтобы иметь возможность подключаться сразу к нескольким VPN-сетям, следует расположить их настройки в «своих» подкаталогах. Например, в нашем случае это /etc/tinc/vpnnet, именно здесь демон будет искать настройки сети vpnnet. В пределах одной VPN сети ее название необязательно должно быть уникальным на всех системах-участниках, но лучше использовать одно имя, чтобы потом не путаться. Если VPN-сеть одна, такое распределение по каталогам необязательно (все конфиги тогда размещаем в корне /etc/tinc). Режим VPN и удаленный узел, к которому будем подключаться, описываются в файле tinc.conf:

$ sudo nano /etc/tinc/vpnnet/tinc.conf

На самом деле все параметры не нужны. В самых простых случаях достаточно оставить первые пять директив. Данные о конкретных узлах сети прописываются в подкаталоге hosts, в нашем примере мы должны создать два файла: my_vpn и vpn01.

$ sudo nano /etc/tinc/vpnnet/hosts/my_vpn

Второй файл практически аналогичен, поэтому в примере оставлю только адрес.

$ sudo nano /etc/tinc/vpnnet/hosts/vpn01

По умолчанию tinc использует порт 655; если он занят или блокируется файером, то его можно изменить, указав нужное значение в параметре Port.
Кроме того, в файлах узлов хранится публичный ключ (заносится автоматически при создании).

$ sudo tincd -n vpnnet -K

В процессе работы скрипт спросит, куда сохранить приватный и публичный ключи.
Также для каждой сети следует настроить скрипты, обеспечивающие поднятие/остановку нужного интерфейса и маршрутизацию при включении VPN: tinc-up/tinc-down, host-up/subnet-down, subnet-up/subnet-down. Опять же, не все они обязательны.

$ sudo nano /etc/tinc/vpnnet/tinc-up

Все, можно запускать:

$ sudo /etc/init.d/tinc start

Процесс подключения будет отображен в логах, команда ifconfig покажет новое соединение. Если что-то пошло не так, запускаем демона в режиме отладки:

$ sudo tincd -n vpnnet -d5 -D

С точки потребления трафика держать подобный туннель постоянно открытым довольно накладно (все время идет обращение к supernode), поэтому его используют для кратковременных сеансов. К сожалению, в N2N есть минусы и с точки зрения безопасности. Так, пароли указываются в командной строке, поэтому их легко подсмотреть в хистори. Надо сказать, N2N особенно полюбился любителям игр, для которых безопасность не является основным критерием при выборе VPN, и шифрование часто вообще не используют в угоду меньшему потреблению системных ресурсов.

Для организации туннеля в Linux, *BSD, Mac OS X, Windows (доступен GUI) и OpenWRT задействуются TUN/TAP-драйвера.
Установка в Debian/Ubuntu проста:

$ sudo apt-get install n2n

После чего в системе появятся два исполняемых файла – supernode и edge. Никаких конфигов N2N не использует. Запускаем supernode, указав в качестве параметра '-l' порт, на котором демон будет принимать подключения. На первых порах для получения более подробной информации лучше использовать ключ '-v'. Обрати внимание: права суперпользователя не требуются.

$ supernode -l 7654 -v

Для подключения к VPN-сети используется команда edge, параметров у нее больше. Основными являются:

  • - a – свой IP-адрес, который декларирует клиент для подключения к VPN-сети;
  • - с – название виртуальной подсети;
  • - k – ключ для подключения к VPN-подсети;
  • - l – данные supernode.

Например, зарегистрируем на supernode два узла node1 и node2. Вводим на каждом:

node1$ sudo edge -a 10.1.2.1 -c mynetwork -k encryptme -l 1.2.3.4:7654
node2$ sudo edge -a 10.1.2.2 -c mynetwork -k encryptme -l 1.2.3.4:7654

Семейство netcat – socat

Любой юниксоид знает, что, если ему нужна утилита, позволяющая установить TCP/UDP-соединение с нужными параметрами, передавать/принимать данные, следует выбрать netcat. С ее помощью можно легко настроить прокси и подключаться к удаленному сервису. И хотя она уже давно не развивается (с января 2004 года), ответвления (форки) возникают с завидной регулярностью: OpenBSD netcat, Ncat, Cryptcat, socat.

В репозитории Debian/Ubuntu программы нет, но установка стандартна. В файле EXAMPLES, который найдешь в архиве, доступны все варианты использования программы. Для примера поднимем TUN-сервер, который будет слушать порт 5555:

$ sudo socat -d -d TCP-LISTEN:5555,reuseaddr TUN:192.168.1.1/24,up

Подключаемся к нему с другого компьютера, указав в параметре TCP-адрес и порт удаленной системы:

$ socat TCP:1.2.3.4:5555 TUN:192.168.255.2/24,up

Команда «ifconfig tun0» покажет наличие рабочего интерфейса.
Использование SSL также не вызывает сложностей. Активируем сервер:

$ sudo socat openssl-listen:4444,reuseaddr,cert=/etc/vpn/server.pem,cafile=/etc/vpn/client.crt echo

Осталось добавить, что socat поддерживает Linux, *BSD, OpenSolaris, Mac OS X и Cygwin.

Заключение

Рассмотреть все предложения в рамках одной статьи невозможно. На просторах интернета можно найти еще как минимум десяток реализаций, которые помогают быстро и без лишних телодвижений поднять VPN. Надеюсь, среди представленных вариантов ты уже нашел наиболее подходящий.

Самый маленький VPN

anytun-0.3.3.tar.gz – 110 Кб
vtun-3.0.1.tar.gz – 122 Кб
cipe-1.6.0.tar.gz – 139 Кб
tinc-1.0.13.tar.gz – 497 Кб
n2n_svn_23072010.tgz – 535 Кб
socat-1.7.1.2.tar.gz – 542 Кб
openvpn-2.1.1.tar.gz – 860 Кб

Anycast

Еще один из немаловажных плюсов CIPE – его «дружба» с NAT и SOCKS, что часто используется при организации подключения из труднодоступных мест. Например, там, где провайдеры блокируют протоколы GRE или любые нестандартные порты.

Минус – проект практически прекратил свое развитие (последнее обновление было в 2002 году), очевидно, поэтому CIPE убрали из репозиториев многих дистрибутивов. Так, в Ubuntu пакеты cipe-common и cipe-source были доступны еще в версии 6.06 (Dapper Drake), в более новых релизах пользователям CIPE приходится собирать его самостоятельно.

Способ 2: RFC 2217

Сервер

Клиент

  • telnet
    После запуска сервера к удаленному терминалу можно подключиться по телнет:
  • ckermit
    Вместо telnet можно использовать C-Kermit, который поддерживает RFC 2217:
    С ним помимо телнет будут также доступны команды для конфигурирования порта.

Версия из Debian Squeeze у меня не заработала, я собирал из SVN.
  1. Виртуальный терминал /dev/pts/N .
  2. Символическая ссылка на него /dev/NAME .
  3. Локальный сокет /dev/NAME.control .

Настраиваем конфиг клиента /etc/cyclades-devices (без этого не будет работать трюк с LD_PRELOAD ):
Запускаем демон, обслуживающий виртуальный терминал:
Можно также запускать демон с помощью cyclades-serial-client .
Проверяем передачу данных:
Cообщение hello должен получить тот, кто подключен к порту /dev/ttyS0 на хосте server .
Проверяем настройку baud rate :
На хосте server у терминала /dev/ttyS0 должно обновиться значение:
У меня этот клиент работает с сервером sredird , но не работает с ser2net .

  • Не все параметры ioctl() реализованы.
  • Подход с использованием LD_PRELOAD для ioctl() и tcgetattr() работает не для всех приложений. У меня так и не заработала команда setserial(8) .

And this is still something that should be done in userspace if necessary
by fixing up the tty layer to support pty/tty pair modem lines and
termios change reporting, or some kind of generic vt that can also
expose all the config other net protocols might need.

TTYredirector

TTYredirector реализует сервер и клиент RFC 2217, создавая на клиенте виртуальный терминал. Автоматического перенаправления управляющих команд с локального терминала на удаленный нет, его нужно настраивать вручную с помощью специальной утилиты, так что это решение подвержено тем же проблемам, что способ в socat .

Способ 3: Serial to Ethernet Converter


Утилита socat используется для:

  • TCP порт forwarder-а.
  • Тестирование безопасности.
  • Shell интерфейс для UNIX-сокетов.
  • Реле IP6.
  • Для перенаправления TCP-ориентированных программ на последовательную линию.
  • Логически подключать последовательные линии на разных компьютерах.
  • Устанавливает относительно безопасную среду (su и chroot) для запуска bash скриптов клиента или сервера с сетевыми подключениями.

Установка socat в Debian/Ubuntu

Для удаления socat используется следующая команда:

Следующая команда используется для удаления пакета socat вместе со своими зависимостями:

Это позволит удалить socat и все его зависимые пакеты, которые больше не нужны в системе.

Полностью удалить socat со всеми конфигурационными файлами можно одним из следующих способов:

  • Следующая команда должна использоваться с осторожностью, поскольку она удаляет все файлы конфигурации и данные:
  • или вы также можете использовать следующую команду:

Выше команда удалит все файлы конфигурации и данные, связанные с пакетом socat. Можно переходить к использованию.

Установка socat в Redhat/Fedora/CentOS

Можно переходить к использованию.

Установка socat в MacOS X

Ну, теперь можно и поставить ПО следующим образом:

Можно переходить к использованию.

Использование socat в Unix/Linux

Я запускаю socat следующим образом:

Получаем ИП-шку локальной машины:

Все это было нужно для запуска графических утилит внутри docker контейнера:

Перенаправление TCP портов

Чтобы вуполнить перенаправление 80-го порта на 192.168.13.225, используем:

И так, все TCP4 соединения которые будет находится на 80-му порту, будут перенаправлены на 192.168.13.225. Проверим что вышло:

Подключение к удаленному SSH серверу

Получение информации о Haproxy

Давайте получим информацию о запущенном процессе HAProxy ( pid, SLA и тд и тп):

Перенаправление TCP портов (каждая сторона привязана к другому локальному IP-адресу) (bind)

Копируем данные между STDIN и STDOUT

Т.е socat копирует все что вы написали (STDIN) и выводит на вывод (STDOUT).

На сервере, выполняем:

Т.к это один сервер (у меня), чтобы проверить что вышло, я запускаю телнет на клиенсткой машине:

Так же, можно тоже самое сделать с socat утилитой, например:

Запускаем удаленные команды через socat

На сервере, запускаем:

Чтобы запустить данную команду на заднем плане (в бэкграунде), юзаем:

Т.е данная команда, симулирует команду (netcat).

Разрешить несколько подключений c клиентов к удаленным оболочкам shell:

Использование де-мультиплексных входных данных от нескольких TCP/IP клиентов к одному выходному потоку (STDOUT)

Запускаем команду на сервере:

После выполнения команды на клиенте, вы на стороне сервера должны получить следующий вывод:

Создание своего файл сервера (файловая шара) с использованием socat

На сервере, выполняем:

Этим, я разшарил файл на серверной стороне.

На стороне клиента, выполняем:

Это позволит скачать и сохранить файл.

Можно слать файлы прям с сервера на клиент:

Или, можно выполнить что-то типа:

Подключение к процессу (здесь удаленный shell) через socat

На стороне сервера, создаем pipe:

На стороне клиента, выполняем:

Получить время с указанного сервера

Выполнение команд на web-сервере с использованием socat

Простой TCP порт форвардер

Устанавливает простую переадресацию TCP портов. С TCP4-LISTEN он прослушивает локальный «www» порт до тех пор, пока не произойдет соединение, а затем подключится к удаленному хосту (TCP4) и начнет передачу данных. Он не будет принимать второе соединение.

Однонаправленная передача данных с socat

Это пример однонаправленной передачи данных (-u). Socat передает данные из файла /tmp/readdata (неявный адрес GOPEN), начиная с его конца (seek-end = 0 позволяет socat начинать чтение c конца файла, использовать seek = 0) в режиме «tail -f» (ignoreeof). «Файл» также может быть прослушивающим сокером домена UNIX (тогда не используйте опцию поиска).

Подключение к FTP с socat

Создание больших файлов с socat

Данная команда, создает разреженный файл (My_file_name_here) размером 500ГБ (для этого служит seek опция); Так же, требуется тип файловой системы, который поддерживает это действие (ext2, ext3, reiserfs, jfs; not minix, vfat). Операция записи (1 байта) может занять много времени (reiserfs: несколько минут, ext2: «нет»), и полученный файл займет указанное место на диске, но только с его inod-ами (reiserfs: 2MB; ext2: 16KB).

Боримся с флудом с утилитой socat

Данная команда подключается к серверу (на 80-й порт) и предотвращает появлению flood-а.

Зеркальная файловая система

На сервере выполняем:

На клиенте, выполняем:

Создание pg_dump-а и отправка его на сервер без записи на диск с socat

На сервере выполняем:

На клиенте, выполняем:

Отправка UDP пакетов на указанные порты

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Socat для пентестинга

Socat – это ретранслятор, который может использоваться для передачи данных в обоих направлениях между двумя независимыми каналами. Эти каналы данных могут быть представлены в виде файла, канала, устройства (последовательный канал или псевдотерминал), сокета (UNIX, IP4, IP6 (raw), UDP, TCP), сокета SSL, прокси подключения – сервера, файлового дескриптора (например, stdin), редактора строк GNU (например, readline), программы или нескольких программ.

Использование Socat

Socat включает в себя широкий спектр задач, для которых он может быть применен. Например, инструмент можно использовать в качестве ретранслятора TCP-портов, внешнего соксификатора, для атаки слабых межсетевых экранов, в качестве интерфейса Shell для сокетов UNIX или ретранслятора IP6, для перенаправления программ, ориентированных на TCP, для логического подключения последовательных каналов на разных компьютерах. Более того, Socat также подходит для создания безопасной среды для запуска клиентских или серверных скриптов Shell с сетевыми подключениями.

Netcat VS Socat

Многие пользователи уже давно пользуются Netcat. Программа стала ежедневным атрибутом для многих тестировщиков на проникновение с момента выхода ее первоначальной версии. Инструмент хвалят за то, что он прост в использовании и может записывать или считывать данные по сетевым соединениям с использованием TCP и UDP. А что насчет Socat? Как уже было сказано, это ретранслятор, который работает в двух направлениях. Он обладает уникальными функциями, такими как установление нескольких соединений, создание безопасного канала, поддержка большого количества протоколов (OpenSSL, SCTP, Socket, Tunnel и другие).

Bind Shell

Стоит начать с того, что Bind Shell открывает порт на удаленной машине, который ожидает входящего соединения. Как только пользователь подключается к листенеру, пользователю предоставляется Shell для взаимодействия.

Socat для пентестинга

Пользователь переключается на другую машину, т.е. Kali Linux, чтобы подключиться к Ubuntu, на которой был создан листенер. Ему нужно знать IP-адрес и номер порта, на котором работает сам листенер. Он указывает тип адреса, IP и порт, чтобы подключиться к Bash Shell. Основная проблема с этим типом сеанса – это отсутствие аутентификации. Любой пользователь с необходимыми данными может подключиться к Shell и выполнять команды, которые способны повлиять на работу системы. Помимо отсутствия аутентификации, связь, осуществляемая через Bind Shell, подвержена атакам типа Sniffing.

Socat для пентестинга

Зашифрованный Bind Shell

Socat для пентестинга

Теперь, когда пользователь создал листенер на порту под номером 9999, нужно использовать Kali Linux для подключения к Bind Shell, как и ранее. Человек также меняет тип адреса на OPENSSL. Он видит, что может подключиться к целевой машине. С помощью OpenSSL пользователь зашифровал связь между машиной Kali и машиной Ubuntu. Если злоумышленник попытается перехватить трафик между ними, он не сможет прочитать его содержимое.

Socat для пентестинга

Reverse Shell

Термин «Reverse Shell» происходит от метода его создания. Пользователь уже знает, что на компьютере Ubuntu запущен листенер, и машина Kali подключается именно к нему. В данном случае удаленной является машина Ubuntu, а машина Kali будет локальной. Таким образом, сеанс отправляется с компьютера Ubuntu на компьютер Kali. Это означает, что листенер будет работать на машине Kali. Reverse Shell обычно используется с целевой машины для установления обратной связи с атакующей машиной.

В средах, где есть NAT или межсетевой экран, Reverse Shell может быть единственным способом получить доступ к машине. Для связи между Kali и Ubuntu с помощью Socat сначала нужно будет запустить листенер на машине Kali. Это похоже на команду, которую пользователь выполнял ранее в примере с Bind Shell. Разница лишь в том, что «STDOUT» добавляется в конце команды для создания листенера для Reverse Shell.

Socat для пентестинга

Теперь пользователь переходит к машине Ubuntu, чтобы запустить обратное соединение для подключения к его листенеру на машине Kali. Нужен тип адреса, IP и порт с типом подключения, которое следует установить. Reverse Bash Shell получен.

Socat для пентестинга

Чтобы просмотреть и проверить тип соединения, которое пользователь установил с машиной Ubuntu, ему нужен базовый Bash Shell на машине Kali.

Socat для пентестинга

Зашифрованный Reverse Shell

Socat для пентестинга

Теперь нужно преобразовать ключ и сертификат в файл в формате .pem. Пользователь опять будет использовать команду cat для создания этого файла.

Socat для пентестинга

Теперь, когда у пользователя есть файл в формате .pem, остальная часть процесса очень похожа на то, как он поступал с зашифрованным Bind Shell и секциями Reverse Shell. Человек создает листенер на машине Kali, используя OPENSSL в качестве типа адреса и pem-файл.

Socat для пентестинга

На машине Ubuntu следует создать Reverse Shell для листенера, который был добавлен на машине Kali. Пользователь будет использовать один и тот же тип адреса, т.е. OPENSSL, в комбинации с IP-адресом, портом и типом Shell, который ожидает листенер.

Socat для пентестинга

Socat для пентестинга

Socat для пентестинга

Переадресация портов

Socat для пентестинга

Socat для пентестинга

Передача файлов

Socat для пентестинга

Пользователь создал файл для отправки на своем компьютере Kali. Теперь он переходит на компьютер Ubuntu и пытается передать файл demo.txt на него. Нужно подключиться к листенеру, созданному на ПК Kali, и указать имя файла, размещенного вместе с ключевым словом.

Socat для пентестинга

Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.

Читайте также: