前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【重复造轮子】Frp一键容器化部署

【重复造轮子】Frp一键容器化部署

作者头像
乌鸦安全
发布2023-08-17 08:40:55
3620
发布2023-08-17 08:40:55
举报
文章被收录于专栏:乌鸦安全

✎ 阅读须知

乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。

乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!

本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!

1. 需求

在很多攻防渗透中,由于客户要求,需要使用指定的ip进行渗透测试,一般来说,客户会给一个或者多个ip进行授权,我们的所有操作都需要通过这个ip进行,这个时候就需要配置一个隧道,将在这里以frp为例,将frp的客户端和服务端都跑在这个授权的ip(在这以公网vps为例)上,配置frp稍微有些繁琐,如果配置一次可能还行,多次配置的时候就感觉稍微麻烦了,所以为了满足访问需求,直接一键安装使用,可以提高效率。

请注意:这里的frp客户端和服务端都是在一起的,也就是在一个机器上,这样管理起来比较方便,而且本地只需要配置vps的代理端口就行了。

在这里frp是自己使用的,所以不需要考虑frp的流量混淆等问题。

网上已经有了一篇在docker里面配置frpc

代码语言:javascript
复制
https://github.com/stilleshan/frpc 

这个项目只配置了frpcfrps一般配置在靶机上的,但是我们这里的frp只供自己用的,所以都部署在vps上就行。

对应工具已上传至github

代码语言:javascript
复制
https://github.com/crow821

或者在乌鸦安全公众号后台回复关键字:frp下载

2. 配置

image.png

环境需求:

  • linux公网
  • 存在docker容器环境

2.1 Dockerfile文件

代码语言:javascript
复制
FROM ubuntu:14.04

LABEL maintainer="crowsec"

ENV VERSION 0.48.0
ENV TZ=Asia/Shanghai

# 安装依赖软件包
RUN apt-get update && apt-get install -y wget tar supervisor

# 设置时区
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone

# 判断系统并下载 frp
RUN if [ "$(uname -m)" = "x86_64" ]; then export PLATFORM=amd64 ; \
    elif [ "$(uname -m)" = "aarch64" ]; then export PLATFORM=arm64 ; \
    elif [ "$(uname -m)" = "armv7" ]; then export PLATFORM=arm ; \
    elif [ "$(uname -m)" = "armv7l" ]; then export PLATFORM=arm ; \
    elif [ "$(uname -m)" = "armhf" ]; then export PLATFORM=arm ; fi \
    && wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_${PLATFORM}.tar.gz \
    && tar xzf frp_${VERSION}_linux_${PLATFORM}.tar.gz \
    && cd frp_${VERSION}_linux_${PLATFORM} \
    && mkdir /frp\
    && mv frpc /frp \
    && mv frps /frp \
    && cd .. \
    && rm -rf *.tar.gz frp_${VERSION}_linux_${PLATFORM}

# 拷贝配置文件和监控进程工具
COPY ./frpc.ini /frp/
COPY ./frps.ini /frp/
COPY frpcs.conf /etc/supervisor/conf.d/

# 启动 supervisord
CMD ["/usr/bin/supervisord"]

然后配置frp的两个配置文件

2.2 frpc.ini-客户端配置

frpc.ini 这个是客户端的,也就是我们常用的vps端的,但是在这里其实是不区分的,毕竟是在一个vps上启代理:

代码语言:javascript
复制
[common]
server_addr = 142.545.719.181 # 这个ip是到时候远程要连接的,就是你目前vps的ip地址
server_port = 3489  # 这个是和服务端对接的端口,可以修改


[plugin_socks5]
type = tcp
remote_port = 8455 # 这个是到时候你连接的代理端口
plugin = socks5
plugin_user = hhhh   # socks5用到的用户  
plugin_passwd = jjjj # socks5用到的密码

建议配置账号密码信息,如果你不配置的话,理论上可以白嫖你的vps隧道。

2.3 frps.ini-服务端

代码语言:javascript
复制
[common]
bind_port = 3489 # 这个和frpc.ini对应的
bind_addr = 0.0.0.0 # 这个不动哦
protocol = tcp
tls_enable = true

2.4 frpcs.conf

代码语言:javascript
复制
[supervisord]
nodaemon=true

[program:frps]
command=/frp/frps -c /frp/frps.ini

[program:frpc]
command=/frp/frpc -c /frp/frpc.ini

这是启动客户端和服务端的,配置Dockerfile使用。

2.4 使用

首先目录结果如下:

image.png

在当前目录下使用命令构建容器:

代码语言:javascript
复制
docker build -t frpcs:v1.0 .

image.png

构建完成之后,可以看下:

image.png

有点大,200多M,运行起来:

代码语言:javascript
复制
docker run -dt --name frpcs -p 3489:3489 -p 8455:8455 --rm frpcs:v1.0

请注意:这里的两个映射端口一定要和你frp的两个配置文件里面的保持一致:

image.png

此时使用命令看下是不是真的运行起来了:

代码语言:javascript
复制
docker logs frpcs

image.png

貌似是起来了,此时的隧道就已经配置完成了。

2.5 连接测试

通过你配置的信息本地配置,然后访问下看看:

image.png

成功:

image.png

3. 命令总结

在部署的时候,只需要配置frpc.inifrps.ini就行了。

3.1 frpc.ini

代码语言:javascript
复制
[common]
server_addr = 160.55.78.180
server_port = 33893


[plugin_socks5]
type = tcp
remote_port = 44555
plugin = socks5
plugin_user = aDmin
plugin_passwd = Us@A

3.2 fprs.ini

代码语言:javascript
复制
[common]
bind_port = 33893
bind_addr = 0.0.0.0
protocol = tcp
tls_enable = true

3.3 frpcs.ini

代码语言:javascript
复制
[supervisord]
nodaemon=true

[program:frps]
command=/frp/frps -c /frp/frps.ini 

[program:frpc]
command=/frp/frpc -c /frp/frpc.ini

3.4 Dockerfile 国际版

代码语言:javascript
复制
FROM ubuntu:14.04

LABEL maintainer="crowsec"

ENV VERSION 0.48.0
ENV TZ=Asia/Shanghai

# 安装依赖软件包
RUN apt-get update && apt-get install -y wget tar supervisor

# 设置时区
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone

# 判断系统并下载 frp
RUN if [ "$(uname -m)" = "x86_64" ]; then export PLATFORM=amd64 ; \
    elif [ "$(uname -m)" = "aarch64" ]; then export PLATFORM=arm64 ; \
    elif [ "$(uname -m)" = "armv7" ]; then export PLATFORM=arm ; \
    elif [ "$(uname -m)" = "armv7l" ]; then export PLATFORM=arm ; \
    elif [ "$(uname -m)" = "armhf" ]; then export PLATFORM=arm ; fi \
    && wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_${PLATFORM}.tar.gz \
 && sleep 5 \
    && tar xzf frp_${VERSION}_linux_${PLATFORM}.tar.gz \
    && cd frp_${VERSION}_linux_${PLATFORM} \
    && mkdir /frp\
    && mv frpc /frp \
    && mv frps /frp \
    && cd .. \
    && rm -rf *.tar.gz frp_${VERSION}_linux_${PLATFORM}

# 拷贝配置文件和监控进程工具
COPY ./frpc.ini /frp/
COPY ./frps.ini /frp/
COPY frpcs.conf /etc/supervisor/conf.d/

# 启动 supervisord
CMD ["/usr/bin/supervisord"]

3.5 Dockerfile 国内版

在这里使用的是阿里云的源进行加速,但是github并没有加速,其实build起来还是很慢很慢。。。所以如果下载github下载不下来,需要多试几次:

代码语言:javascript
复制
FROM ubuntu:14.04

LABEL maintainer="crowsec"

ENV VERSION 0.48.0
ENV TZ=Asia/Shanghai

# 切换软件源为阿里云
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

# 安装依赖软件包
RUN apt-get update && apt-get install -y wget tar supervisor

# 设置时区
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone

# 判断系统并下载 frp
RUN if [ "$(uname -m)" = "x86_64" ]; then export PLATFORM=amd64 ; \
    elif [ "$(uname -m)" = "aarch64" ]; then export PLATFORM=arm64 ; \
    elif [ "$(uname -m)" = "armv7" ]; then export PLATFORM=arm ; \
    elif [ "$(uname -m)" = "armv7l" ]; then export PLATFORM=arm ; \
    elif [ "$(uname -m)" = "armhf" ]; then export PLATFORM=arm ; fi \
    && wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_${PLATFORM}.tar.gz \
 && sleep 6 \
    && tar xzf frp_${VERSION}_linux_${PLATFORM}.tar.gz \
    && cd frp_${VERSION}_linux_${PLATFORM} \
    && mkdir /frp \
    && mv frpc /frp \
    && mv frps /frp \
    && cd .. \
    && rm -rf *.tar.gz frp_${VERSION}_linux_${PLATFORM}

# 拷贝配置文件和监控进程工具
COPY ./frpc.ini /frp/
COPY ./frps.ini /frp/
COPY frpcs.conf /etc/supervisor/conf.d/

# 启动 supervisord
CMD ["/usr/bin/supervisord"]

image.png

3.6 使用

build:

代码语言:javascript
复制
docker build -t frpcs:v1.0 .

image.png

使用:

代码语言:javascript
复制
docker run -dt --name frpcs -p 33893:33893 -p 44555:44555 --rm frpcs:v1.0

image.png

4. 总结

在这里可以简单理解为只做了frp的下载以及解压操作,没有对frp进行混淆啥的,毕竟自己用,能简单一点就简单一点吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乌鸦安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 需求
  • 2. 配置
    • 2.1 Dockerfile文件
      • 2.2 frpc.ini-客户端配置
        • 2.3 frps.ini-服务端
          • 2.4 frpcs.conf
            • 2.4 使用
              • 2.5 连接测试
              • 3. 命令总结
                • 3.1 frpc.ini
                  • 3.2 fprs.ini
                    • 3.3 frpcs.ini
                      • 3.4 Dockerfile 国际版
                        • 3.5 Dockerfile 国内版
                          • 3.6 使用
                          • 4. 总结
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档