HOME
HOME
文章目录
  1. 0x01 xray配置项
  2. 0x02 docker化
  3. 遗留问题

xray反连平台docker化

每次在临时使用xray进行扫描时,都没有配置比较麻烦的反连平台,有些需要外联的漏洞都没有扫到。这次想整个docker持久化的放那里,随时可以用,使用docker维护方便,部署也非常方便。本文记录下配置过程中碰到的一些知识点。

0x01 xray配置项

配置反连平台主要的配置项在reverse项,主要有httpdnsclient三个大项和其他一些小项目构成。

先给出总的配置项,后面挨着对各个项目进行说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
reverse:
db_file_path: "./xray/db/reverse.db"
token: "password"
http:
enabled: true
listen_ip: 0.0.0.0
listen_port: "8080"
ip_header: "X-Forwarded-For"
dns:
enabled: true
listen_ip: 0.0.0.0
domain: "example.com"
is_domain_name_server: true
resolve:
- type: A
record: ns1
value: 154.x.x.x
ttl: 60
- type: A
record: ns2
value: 154.x.x.x
ttl: 60
client:
remote_server: false
http_base_url: "http://recv.example.com"
dns_server_ip: "154.x.x.x"

db_file_path

xray文档解释得很清楚了,反连平台的数据库,指明一个地址就行了。

token

反连平台的认证密码

http

这个选项就是监听的端口,需要说明的是因为是docker化使用frp代理的端口,因此需要通过http头的X-Forwarded-For字段读取远程的ip,否则是frp的docker容器的ip地址

dns

该选项配置DNS的相关信息,需要制定一个域名,用于反连平台的dns解析。后面的resolve选项,制定静态的dns解析,也就是反连平台作为服务器的解析规则。

client

该处是配置客户端的一些参数。**remote_server要设置为false,当设置为true的时候,会作为客户端在启动的时候请求外联平台。**另外两个参数则是在外联平台显示的地址。

dns设置

在域名设置的时候,一般来说需要两个域名。一个作为主域名,来进行dnslog请求,另一个作为NS记录的解析转发域名。也可以使用DNS的胶水记录(glue record)用一个域名来转发,但需要DNS服务商的支持。

何为DNS胶水记录?

首先要了解NS记录,ns记录用于指定域名用哪个DNS服务器来解析,一般只能设置为域名的形式,如NS1.example.com。而在只有一个域名的情况下,NS需要指定域名,而DNS服务器还没有对外广播的时候,那么就陷入一个死循环,ns记录需要设置为域名,但是本域名还没有被DNS服务器所解析。举个例子,如a.com设置的ns记录是ns.a.com,我们就必须制定ns.a.com的A记录,否则解析ns.a.com又会去解析a.com,所以该请求就要用到DNS胶水记录了。

胶水记录本身为DNS所支持的功能。指定ns解析的域名时,可以使用本DNS的A记录。

0x02 docker化

项目采用docker compose的形式,直接可以使用docker-compose -d进行一键启动。基础镜像可以直接使用alpine,需要运行go程序,所以需要在Dockerfile中添加如下命令才能正常运行

1
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

使用frp进行转发需要设置depends_on

具体的项目结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
├── Dockerfile
├── README.md
├── docker-compose.yml
└── tools
├── frp
│   ├── frpc
│   └── frpc.ini
└── xray
├── config.yaml
├── db
│   └── reverse.db
└── xray

4 directories, 8 files

Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM alpine

LABEL maintainer="le31ei <le31ei@qq.com>"

RUN echo "https://mirrors.ustc.edu.cn/alpine/latest-stable/main" > /etc/apk/repositories \
&& apk update \
&& apk add openssl musl-dev


RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2


WORKDIR /tools

Docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "2"
services:
xray:
build: .
volumes:
- ./tools:/tools
command: ./xray/xray --config ./xray/config.yaml reverse
restart: always

frp:
build: .
volumes:
- ./tools:/tools
command: ./frp/frpc -c ./frp/frpc.ini
depends_on:
- xray

遗留问题

反连平台的http模块支持从http协议的header中取真实ip,但dns模块没有类似的功能,所以在用docker封装的反连平台中,RemoteAddr均为docker中frp容器的地址,目前暂未想到解决办法,将就使用了。

image-20210413141854001