工具用suricata
suricata规则本质上是一条签名,由action,header,options三部分组成
基本结构
1 | 动作 协议 源ip 源端口 目的ip 目的端口 |
在kali上安装和使用suricata
更新软件源
1 | sudo apt update |
-y的意思是自动回答yse
jq 不是必须的,但 Suricata 官方 quickstart 推荐安装,因为它方便查看 eve.json 这种 JSON 日志。
检查是否安装成功
1 | suricata --build-info |
检查服务状态
1 | sudo systemctl status suricata |
status是systemctl的子命令
查看kali当前网卡
1 | ip addr |
网卡
电脑数据与网络信号的转换器
更新规则库
1 | sudo suricata-update |
更像后检查规则文件
1 | ls -lh /var/lib/suricata/rules/ |
配置HOME_NET
一般这些都下载后自动配置好了,直接启动然后查看状态就好了
1 |
|
ip addr后回显的解释
1 | inet IPv4地址/24 brd 广播地址 scope global dynamic noprefixroute eth0 |
inet表示这是IPv4地址,inet6对应IPv6
wireguard
一直在很懵地配置但是配不好,上周听了sig分享会才知道它是干嘛的
1 | sudo apt update |
1 | sudo -i #切换到root账户 |
tee:从标准输入读取数据,同时输出到标准输出和一个或多个文件
1 | [Interface] |
1 | [Interface] |
启动vpn
1 | wg-quick up wg0 |
查看状态
1 | wg show |
Windows流量就会通过加密隧道经由Kali服务端转发,实现对流量的抓包和分析。
停止vpn
1 | wg-quick down wg0 |
win验证是否连接
1 | ipconfig |
测试内网连通性
1 | ping <对端ip> |
OK啊也是不出意外地又连接不上了,这次我要带脑子排查
故障排查
kali输入wg后发现没有peer,说明两台设备根本没连接成功
win主机常见问题
虚拟化平台未开启
去设置–应用–可选功能–更多windows功能–勾选虚拟机平台
kali
力竭了,别逼弱智学计算机
5月19我又来了
客户端和服务端的公私钥是不一样的
两个没有任何关联,关联的是配置中的对应关系
1 | 服务端的 [Peer] 里填写的 PublicKey = 客户端的公钥(PublicKey_client) |
ok啊也是连接成功了
开始抓包
如何用wireguard传输信息
首先可以ping一下对端ip
SSDP/UPnp
SSDP通过udp发送数据,响应在端口1900
流量路径
default via ip dev eth0 src ip
凡是不知道往哪走的的流量,都默认从eth0出去
eth0就是物理出网网卡,如果要抓wireguard外层udp加密流量,就抓eth0
ip dev wg0 src ip
凡是访问ip这个网段的流量,都走wireguard虚拟网卡wg0
ping流量会先进入wg0,然后由wireguard加密,最后再通过eth0发出去
判断去对端公网ip走哪个网卡
1 | ip route get 10.0.0.2 |
1 | 10.0.0.2 dev wg0 src 10.0.0.1 uid 0 |
说明访问10.0.0.2时,系统走wg0,源地址使用10.0.0.1
表示wireguard隧道内流量
如果抓wg0,看到
1 | 10.0.0.1 -> 10.0.0.2 ICMP |
表示隧道内明文流量,如果想看wireguard外层加密流量,就要抓eth0
1 | tcpdump -i eth0 -nn -s 0 -w wg_outer.pcapng 'udp port 51820' |
抓内层流量
1 | tcpdump -i wg0 -nn |
抓外层流量
1 | tcpdump -i eth0 -nn 'udp port 51820' |
用tshark抓pcapng
1 | sudo tshark -i eth0 -f "udp port 51820" -s 0 -F pcapng -w wg_outer.pcapng |
查看是否抓成功
1 | ls -lh wg_outer.pcapng |
传到win
1 | cd ~ |
终于抓对了
抓到了外层udp,不是内层隧道流量
流量特征
Handshake Initiation 对端发起握手
Handshake Response kali返回握手响应
看Time栏计算响应时间,时间短,延迟低,说明在同一局域网或虚拟网内
Transport Data 外层加密数据包
只能看到udp加密包,看不到里面具体时ping,tcp,http
其他通信测试
| 场景 | 内层通信目的 | 外层 WireGuard 预期表现 |
|---|---|---|
| ICMP ping | 测试基础连通性、小包往返 | 外层 UDP 51820 小包、规律性明显 |
| DNS 查询 | 测试短小突发流量 | 少量 UDP 51820 包,突发短流 |
| HTTP 访问 | 测试明文网页请求 | 外层仍是 UDP 51820,看不到 GET/POST |
| HTTPS 访问 | 测试普通加密网页 | 外层仍是 UDP 51820,看不到 TLS SNI |
| 大文件下载 | 测试大流量承载 | 外层 UDP 51820 大量连续数据包 |
| SSH 登录 | 测试交互式长连接 | 小包、双向、间歇性明显 |
| SCP/SFTP 传输 | 测试 SSH 大流传输 | 外层连续 UDP 51820 数据流 |
| iperf3 TCP | 测试稳定 TCP 吞吐 | 外层高密度 UDP 51820 数据包 |
| iperf3 UDP | 测试 UDP 内层业务 | 外层仍是 UDP 51820,但包长/频率更稳定 |
| 空闲保持 | 测试 KeepAlive | 低频 UDP 51820 保活包 |
ICMP连通性测试
就是ping
http明文网页查询
服务端
1 | python3 -m http.server 8000 |
客户端
1 | curl http://10.0.0.2:8000/ |
稍大的文件访问
1 | dd if=/dev/zero of=test_10M.bin bs=1M count=10 |
dd Linux里面一个低层数据复制工具,用来生成测试文件,制作镜像,写入磁盘
if input file 表示输入来源
/dev/zero 会不断输出二进制的0
of output file 生成一个叫=后面文件名的文件
bs block size 每次写入的数据块大小
执行后会得到一个10mb的文件
DNS查询
在服务端启动dns服务
用到工具dnsmasq
确认53端口是否被占用
dns默认使用udp53和tcp53
1 | ss -intup | grep ':53' |
ss 套接字统计命令,相当于netstat
-i 显示内部tcp信息
-a 全部
-l 监听
-n 不解析服务名称 例如 53 显示为 :53,而不是 :domain),也不解析 IP 为主机名。
-t 只显示tcp套接字
-p 显示使用该套接字的进程名称和pid
grep 过滤出包含53的行
配置dnsmasq
1 | nano /etc/dnsmasq.d/wg-dns.conf |
1 | # 只监听 WireGuard 网卡和本机 |
没这个目录,但是我有dnsmasq是和一位
创建配置目录
1 | mkdir -p /etc/dnsmasq.d |
-p parents 自动创建必要的父目录,一创建不报错
1 | server.wg.lab 解析到 10.0.0.1 |
重启dnsmasq
1 | ┌──(root㉿zss)-[/etc/dnsmasq.d] |
有dnsmasq命令但是没有dnsmasq.service这个服务单元
排查
1 | dpkg -l | grep dnsmasq |
dpkg -l 列出系统已经安装或者曾经安装过的软件包信息
列出来然后过滤出dnsmasq关键词的行
不管了,无脑apt update然后无脑install-y了
1 | apt update |
1 | ┌──(root㉿zss)-[/etc/dnsmasq.d] |
dnsmasq 服务已经有了,但启动时配置或端口有问题。
1 | systemctl status dnsmasq.service --no-pager -l |
查看服务是否正常运行
no pager不要进入翻页模式
-l long显示完整日志内容
1 | journalctl -xeu dnsmasq.service --no-pager | tail -n 80 |
journalctl 查看systemd日志的命令
-x 给出错误原因提示
-e 调到末尾,查看最新日志
-u xxx,只查看xxx服务相关的日志
tail -n 80 只显示最后八十行日志
1 | dnsmasq --test |
检查配置是否正确·
我之前查了没有端口占用,但是报错依旧显示53端口被占用
1 | ss -lunp | grep ':53' |
1 | 0.0.0.0:53 users:(("dnsmasq",pid=3742)) |
大概是我安装了两个dnsmasq,然后新版的启动不了了
解决
查看旧进程如何启动
1 | ps -fp 3742 |
1 | UID PID PPID C STIME TTY TIME CMD |
UID表示运行这个进程的用户,ppid表示父进程
然后杀掉他
1 | kill 3742 |
开放防火墙dns端口
检测服务端是否设有防火墙
1 | sudo ufw status verbose |
1 | iptables -A INPUT -i wg0 -p udp --dport 53 -j ACCEPT |
iptables 防火墙规则管理工具
在服务端本机测试dns
1 | dig @10.0.0.1 server.wg.lab |
dig dns查询工具
Domain Information Groper。它常用于测试 DNS 服务器是否能正常解析域名。
@ 表示“指定使用哪个 DNS 服务器查询”。
1 | server.wg.lab |
这是要查询的域名。它通常是你自己在 dnsmasq 中配置的内网域名,例如:
1 | address=/server.wg.lab/10.0.0.1 |
测试dns
1 | nslookup server.wg.lab 10.0.0.1 |
和dig一样,这个可以在win的powershell里面用
但是
1 | nslookup server.wg.lab |
回显
1 | PS C:\Users\User> nslookup server.wg.lab |
Windows 客户端没有把 10.0.0.1 当作默认 DNS 使用。
所以在wireguard客户端配置上加
1 | DNS = 10.0.0.1 |
1 | [Interface] |
成功配置域名
1 | PS C:\Users\User> nslookup server.wg.lab |
测试http 域名
说明dns解析成功,并且客户端访问到了服务端,问题在于web服务或反向代理后端
502 Bad Gateway 一般表示:前端 Web 服务收到了请求,但它转发给后端服务时失败了。
这里忘了浏览器访问普通 HTTP 域名时,默认访问 80 端口。
1 | http://server.wg.lab:8000/ |
1 | C:\Users\User>curl -I http://server.wg.lab |
无代理版本
1 | curl --noproxy "*" -I http://server.wg.lab/ |
这个powershell里面运行不了,cmd里面运行
ssh交互通信
服务端开启ssh服务
1 | apt update |
启动ssh
1 | systemctl enable --now ssh |
查看状态
1 | systemctl status ssh --no-pager -l |
曲儿端口监听
1 | ss -lntup | grep ':22' |
登录后执行了以下命令
1 | ls |
scp/sfcp文件传输
这个可以和 HTTP 大文件下载对比。HTTP 和 SCP 在内层协议不同,但外层都会表现为 WireGuard 的 UDP 51820 加密数据。
这个走22端口
服务端开启ssh服务
客户端测试ssh能否连接
1 | Test-NetConnection 10.0.0.1 -Port 22 |
win上传文件
传个go.mod
1 | E:\go_practice\go_studay>scp go.mod zss@10.0.0.1:/home/zss/ |
win下载文件
1 | scp zss@10.0.0.1:/home/zss/go.mod . |
这里最后的 . 表示下载到 Windows 当前目录。
用sftp交互是传文件
1 | sftp zss@10.0.0.1 |
1 | pwd 查看远程 Kali 当前目录 |
iperf3 吞吐测试
iperf3是网络性能测试工具
测量了从当前电脑(IP 10.0.0.2)到目标服务器(IP 10.0.0.1)的网络传输速度。
服务端开启iperf3服务
1 | apt update |
客户端需要下载exe
https://github.com/ar51an/iperf3-win-builds/releases/tag/3.21
1 | iperf-3.21-win64.zip |
1 | F:\cry\iperf-3.21-win64>iperf3.exe -v |
win-》kali吞吐
在kali上执行
1 | iperf3 -s |
iperf3默认监听 tcp 5201
win上执行
1 | iperf3 -c |
空闲保活样本
先建立 WireGuard 连接,然后不要做任何业务,只抓 2 到 5 分钟
这个已经有了
如有错误,多多指教