Высокопроизводительный инструмент для проникновения в интранет frp

задняя часть Go
Высокопроизводительный инструмент для проникновения в интранет frp

Это 8-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов

В этой статье мы поделимся очень полезным инструментом для проникновения в интранет.frpи некоторые конкретные сценарии использования.

что такое фрп

frp — это высокопроизводительное обратное прокси-приложение, ориентированное на проникновение во внутреннюю сеть, поддерживающее TCP, UDP, HTTP, HTTPS и другие протоколы. Интранет-сервисы могут быть доступны в общедоступной сети через транзит через IP-узлы общедоступной сети безопасным и удобным способом.

Зачем использовать фрп

Развернув сервер frp на узле с IP-адресом общедоступной сети, вы можете легко проникнуть через интранет-сервис в общедоступную сеть и предоставить множество профессиональных функций, в том числе:

  • Связь клиент-сервер поддерживает различные протоколы, такие как TCP, KCP и Websocket.
  • Потоковое мультиплексирование соединений TCP используется для передачи большего количества запросов между одним соединением, что экономит время установления соединения.
  • Балансировка нагрузки между группами прокси.
  • Мультиплексирование портов, несколько сервисов доступны через один порт сервера.
  • Несколько изначально поддерживаемых клиентских плагинов (просмотр статических файлов, HTTP, прокси-сервер SOCK5 и т. д.), что позволяет легко использовать клиент frp независимо для выполнения некоторой работы.
  • Расширяемая серверная система плагинов удобна для функционального расширения в соответствии с собственными потребностями.
  • Страницы пользовательского интерфейса сервера и клиента.

Установить

Доступно на ГитхабеReleaseСкачать со страницы:

curl -LO https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz
tar zxf frp_0.37.0_linux_amd64.tar.gz

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

> tree -L 1 frp_0.37.0_linux_amd64
frp_0.37.0_linux_amd64
├── frpc # 客户端程序
├── frpc_full.ini # 对应客户端程序的详细配置文件
├── frpc.ini # 对应客户端程序的简单配置文件
├── frps # 服务端程序
├── frps_full.ini # 对应服务端程序的详细配置文件
├── frps.ini # 对应服务端程序的简单配置文件
├── LICENSE
└── systemd
    ├── frpc.service # 客户端的 systemd 服务配置文件
    ├── frpc@.service # 客户端的 systemd 模板文件
    ├── frps.service  # 服务端的 systemd 服务配置文件
    └── frps@.service # 服务端的 systemd 模板文件

использовать

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

Сначала запустите сервер:

./frps -c ./frps.ini

Перезапустите клиент:

./frpc -c ./frpc.ini

Совет: Если вам нужно работать в фоновом режиме в течение длительного времени, вы можете комбинироватьsystemdилиsupervisorиспользовать.

сцены, которые будут использоваться

Унифицированная конфигурация сервера

[common]
bind_port = 9999

authentication_method = token
token = yourtokenhere

vhost_http_port = 10001
vhost_https_port = 10002

Инструкция по настройке:

  • bind_portномер порта, используемый для клиентских подключений.
  • Из соображений безопасности на сервер будет добавлена ​​аутентификация с помощью токена, и клиент должен использовать токен, настроенный сервером для подключения.
  • vhost_http_portиvhost_https_portЕго необходимо установить при настройке доступа к доменному имени.

Ниже приведена конфигурация клиента в некоторых сценариях на основе этой конфигурации сервера.

SSH-подключение к интранет-серверу

[common]
server_addr = x.x.x.x
server_port = 9999

token = yourtokenhere

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6666

Инструкции по настройке:

  • server_addrЭто общедоступный IP-адрес сервера, на котором он расположен.
  • remote_portУстановите номер порта, привязанный к серверу общедоступной сети.

Теперь мы можем подключиться к серверу интрасети через SSH:

ssh -p 6666 k8scat@x.x.x.x

Предоставление HTTP-сервисов интрасети

Тип TCP

Этот метод не нужно устанавливать на стороне сервера.vhost_http_portиvhost_https_port:

[common]
server_addr = x.x.x.x
server_port = 9999

token = yourtokenhere

[web]
type = tcp
local_ip = 127.0.0.1
local_port = 3333
remote_port = 6666

доступ:http://x.x.x.x:6666

Тип HTTP

Этот метод должен быть установлен на стороне сервераvhost_http_port= 6666, который настраивается с клиентомremote_portтакой же.

[common]
server_addr = x.x.x.x
server_port = 9999

token = yourtokenhere

[web]
type = http
local_ip = 127.0.0.1
local_port = 3333
remote_port = 6666
custom_domains = x.x.x.x

Также посетите:http://x.x.x.x:6666

Сервис загрузки статических файлов

До того, как frp не использовался, использовался статический файловый сервер, созданный Nginx, который подходит только для серверов общедоступной сети.Если это интрасеть, frp все еще используется! Ниже приведена конфигурация клиента для создания службы загрузки статических файлов с использованием frp:

[common]
server_addr = x.x.x.x
server_port = 9999

token = yourtokenhere

[file-server]
type = tcp
remote_port = 6666
plugin = static_file
plugin_local_path = /home/k8scat/files
plugin_strip_prefix = download
plugin_http_user = k8scat
plugin_http_passwd = yourpasswd

Инструкции по настройке:

  • plugin_local_pathУказывает путь, по которому хранится локальный файл.
  • plugin_strip_prefixУкажите префикс загруженного URL, например, необходимость загрузки/home/k8scat/files/a.tgzФайл, то URL-адрес будетhttp://x.x.x.x:6666/download/a.tgz.
  • plugin_http_userиplugin_http_passwdВ целях безопасности можно установить HTTP-аутентификацию при загрузке.