Это 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-аутентификацию при загрузке.