Свой VPN за две минуты

Есть прекрасная сборка сервера OpenVPN на докере: kylemanna/openvpn, но есть один нюанс – всё-таки для установки нужно поработать ручками. В процессе решения данной неувязочки появился govpn – как раз выдался хороший повод поупражняться в SSH на Go. Что из этого получилось и как этим пользоватся, читаем дальше.

Tags: go vpn ssh

Read more...

Безопасное TCP соединение поверх SSH на go

В прошлой статье мы рассмотрели как сделать простой SSH клиент на go и выполнить команду на удалённом сервере. В этот раз мы воспользуемся возможностями протокола SSH для шифрования TCP трафика. Для этого нам понадобится написать SSH сервер и наладить между ним и клиентом двустороннюю связь.

В итоге мы оформим всё как go пакет, чтобы можно было им пользоваться в своих дальнейших экспериментах.

Tags: go ssh network

Read more...

SSH клиент на go

Продолжаем знакомство с сетевым программированием на go, и сегодня мы сделаем простой ssh клиент, подключимся к серверу, выполним команду и получим её вывод.

В статье про netcat мы уже делали выполнение команд на удалённом сервере, но проблема в том, что все наши команды, равно как и ответы, шли по сети открытым текстом, что, как мы понимаем, откровенно небезопасно.

Что ж, поправим эту ситуацию и в этот раз воспользуемся защищённым SSH соединением, авторизоваться будем по ключам (вы ведь всегда используете авторизацию по ключу, правда?).

Tags: go network ssh

Read more...

TCP Proxy с логированием на go

Продолжаем разбираться с сетью в go. На этот раз напишем TCP прокси-сервер, который будет логировать все запросы и ответы в виде hex-дампа.

Что мы должны получить в итоге:

  • прокси-сервер слушает TCP порт и отправляет все запросы на определённый адрес
  • получает ответ и перенаправляет его клиенту
  • логирует все запросы и ответы в файл либо stdout

Tags: go network

Read more...

Передача файлов по TCP, дорабатываем netcat на go

Это третья статья из цикла “netcat на go”, контекст можно получить прочитав первые две

В данной статье мы доработаем наш упрощённый netcat и добавим в него режим передачи файлов с клиента на сервер. Так как количество таких режимов и количество кода растёт, разобьём наше приложение на 3 файла:

Tags: go network netcat

Read more...

Удалённое выполнение программ в go netcat

В предыдущей статье мы рассмотрели реализацию простейшего аналога известной утилиты netcat на go, сегодня мы расширим её возможности, а именно добавим возможность выполнять произвольную команду на сервере и отдавать управление ей на клиент. Сценарий работы будет приблизительно такой:

Tags: go network netcat

Read more...

Реализация аналога netcat на go

В этой статье мы рассмотрим основы работы с сетью в go и реализуем простейший аналог известной утилиты netcat.

Для начала определимся с необходимым функционалом. Дабы не усложнять, остановимся на таких фичах:

  • только TCP
  • сервер принимает соединения и выводит на stdout всё что ему присылает клиент
  • клиент соединяется с сервером и просто посылает ему весь stdin

Сервер

Для управления опциями командной строки, будем использовать пакет flag из стандартной библиотеки. Итак, нам нужен флаг, указывающий что это сервер (-l), на каком хосте слушать (-h) и на каком порте (-p):

Tags: go network netcat

Read more...

Несколько статичных сайтов на одном хосте, используя nginx и Docker

Понадобилось мне захостить несколько статичных (и не только) сайтов на одной машине, решил использовать для этого Docker и nginx.

Итак, начнём. Первое что нам понадобится, это собственно сам сервер. У меня для этих целей был припасён маленький инстанс в DigitalOcean за 5 баксов в месяц. На него можно поставить любую операционку, которая поддерживает Docker, в моём случае выбор пал на CoreOS, так как она легковестная, в ней есть Docker в стандартной поставке и нет ничего лишнего.

Tags: nginx docker

Read more...