TG Telegram Group & Channel
ServerAdmin.ru | United States America (US)
Create: Update:

​​В копилку полезных админских утилит Unix с примерами — socat. В общем случае это утилита для организации двунаправленных потоков передачи данных. При этом поддерживается большое количество типов потоков: файлы, пайпы, сокеты (unix, сетевые), различные устройства, в том числе консольного ввода. Это делает утилиту socat применимой в очень широком диапазоне ситуаций.

Самый простой пример использования socat аналогично telnet. Передаём данные с консоли ( - ) на какой-то сервис (smtp.yandex.ru:25). Например, почтовый сервер:
# socat - TCP4:smtp.yandex.ru:25
Попробуем пообщаться:
helo serveradmin.ru
mail from:<[email protected]>
Получаем ошибку:
503 5.5.4 Error: send AUTH command first.
Всё четко. Без аутентификации отправка невозможна. Примерно таким образом сервисы или вы лично можете убедиться в том, что ваш почтовый сервер не станет общедоступным релеем для рассылки спама.

А вот пример использования socat для перенаправления локальных запросов к порту 8080 на удалённый веб сервер:
# socat TCP4-LISTEN:8080 TCP4:10.20.1.25:80
Теперь можно тут же локально обратиться на удалённый веб сервер:
# curl localhost:8080 -L -H "Host: serveradmin.ru"

Для того, чтобы после единичного подключения поток не прерывался, надо добавить немного опций:
# socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:10.20.1.25:80

Так как поддерживаются различные типы потоков, то по аналогии можно в качестве приёмника или источника данных указать unix сокет. Например, вот так:
# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/run/mysqld/mysqld.sock
Это может пригодится, если вы, к примеру, запустили mysql сервер с доступом к нему только через unix сокет, но при этом хотите разово, а может и не разово, подключиться к нему по сети. Но при этом не можете изменить конфигурацию сервера и перезапустить его. Теперь можно проверить соединение через тот же socat или telnet:
# telnet 172.23.92.42 3307

Причём эту идею можно развить дальше. Берём какой-то тестовый веб сервер, с которого мы хотим подключаться к удалённому mysql серверу, но при этом точно так же, как будто он локальный. Для этого, как показано выше, на сервере с mysql открываем доступ к сокету по сети, а на удалённом сервере создаём локальный unix socket:
# socat UNIX-LISTEN:/run/mysqld/mysqld.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 \
TCP:172.23.92.42:3307
Получили сокет mysql от удалённого сервера, как будто он локальный. С теми же правами доступа и владельцем.

Таким образом можно создавать очень замысловатые связки. Конечно, в проде такое использовать не имеет смысла. А нужно в основном в момент отладки, или в тестовых окружениях.

Это всего лишь несколько прикладных примеров с socat. Умеет он гораздо больше. Например, отправлять широковещательные сетевые запросы. Возможно, разовью ещё эту тему в отдельных заметках.

#linux #terminal

​​В копилку полезных админских утилит Unix с примерами — socat. В общем случае это утилита для организации двунаправленных потоков передачи данных. При этом поддерживается большое количество типов потоков: файлы, пайпы, сокеты (unix, сетевые), различные устройства, в том числе консольного ввода. Это делает утилиту socat применимой в очень широком диапазоне ситуаций.

Самый простой пример использования socat аналогично telnet. Передаём данные с консоли ( - ) на какой-то сервис (smtp.yandex.ru:25). Например, почтовый сервер:
# socat - TCP4:smtp.yandex.ru:25
Попробуем пообщаться:
helo serveradmin.ru
mail from:<[email protected]>
Получаем ошибку:
503 5.5.4 Error: send AUTH command first.
Всё четко. Без аутентификации отправка невозможна. Примерно таким образом сервисы или вы лично можете убедиться в том, что ваш почтовый сервер не станет общедоступным релеем для рассылки спама.

А вот пример использования socat для перенаправления локальных запросов к порту 8080 на удалённый веб сервер:
# socat TCP4-LISTEN:8080 TCP4:10.20.1.25:80
Теперь можно тут же локально обратиться на удалённый веб сервер:
# curl localhost:8080 -L -H "Host: serveradmin.ru"

Для того, чтобы после единичного подключения поток не прерывался, надо добавить немного опций:
# socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:10.20.1.25:80

Так как поддерживаются различные типы потоков, то по аналогии можно в качестве приёмника или источника данных указать unix сокет. Например, вот так:
# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/run/mysqld/mysqld.sock
Это может пригодится, если вы, к примеру, запустили mysql сервер с доступом к нему только через unix сокет, но при этом хотите разово, а может и не разово, подключиться к нему по сети. Но при этом не можете изменить конфигурацию сервера и перезапустить его. Теперь можно проверить соединение через тот же socat или telnet:
# telnet 172.23.92.42 3307

Причём эту идею можно развить дальше. Берём какой-то тестовый веб сервер, с которого мы хотим подключаться к удалённому mysql серверу, но при этом точно так же, как будто он локальный. Для этого, как показано выше, на сервере с mysql открываем доступ к сокету по сети, а на удалённом сервере создаём локальный unix socket:
# socat UNIX-LISTEN:/run/mysqld/mysqld.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 \
TCP:172.23.92.42:3307
Получили сокет mysql от удалённого сервера, как будто он локальный. С теми же правами доступа и владельцем.

Таким образом можно создавать очень замысловатые связки. Конечно, в проде такое использовать не имеет смысла. А нужно в основном в момент отладки, или в тестовых окружениях.

Это всего лишь несколько прикладных примеров с socat. Умеет он гораздо больше. Например, отправлять широковещательные сетевые запросы. Возможно, разовью ещё эту тему в отдельных заметках.

#linux #terminal
👍90👎1


>>Click here to continue<<

ServerAdmin.ru






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)