蜜罐项目-端口流量转发(透传ip)方案调研
字数 1326 2025-08-22 18:37:21
蜜罐项目端口流量转发(透传IP)方案调研与实践指南
0x00 前言
在蜜罐部署方案中,常遇到需要在多个节点监听端口并将流量转发到中央蜜罐的需求,同时要求蜜罐能记录原始攻击者IP。本文详细调研了多种端口流量转发方案,重点测试了IP透传能力,为蜜罐轻量级部署提供技术参考。
0x01 端口流量转发方案详解
1.1 rinetd方案
基本特性:
- 轻量级TCP端口转发工具
- 无法透传原始IP(蜜罐只能看到转发节点的IP)
部署方法:
# 安装rinetd
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
tar -xvf rinetd.tar.gz
cd rinetd
make && make install
配置文件示例:
# /etc/rinetd.conf
# 绑定地址 绑定端口 转发地址 转发端口
0.0.0.0 10000 192.168.40.148 10000
优缺点:
- 优点:配置简单,资源占用低
- 缺点:无法透传IP,需通过日志关联分析原始IP
1.2 haproxy方案
1.2.1 基础转发模式
部署步骤:
wget http://www.haproxy.org/download/2.1/src/haproxy-2.1.5.tar.gz
tar -xzf haproxy-2.1.5.tar.gz
cd haproxy-2.1.5/
make -j $(nproc) PREFIX=/home/ha/haproxy TARGET=linux-glibc USE_NS=
make install
配置文件:
# /etc/haproxy/haproxy.cfg
global
defaults
log global
mode tcp
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend name-in
bind *:10000
default_backend name-out
backend name-out
server server1 192.168.40.148 maxconn 20480
问题:基础模式无法透传原始IP
1.2.2 IP透传模式
关键修改:
- 重新编译haproxy:
make -j $(nproc) PREFIX=/home/ha/haproxy TARGET=linux-glibc USE_LINUX_TPROXY=1 USE_NS=
- 修改配置文件:
global
defaults
log global
mode tcp
source 0.0.0.0 usesrc clientip # 关键配置
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
- 蜜罐机器路由配置:
route add -net 192.168.0.0/16 gw 192.168.40.147
- Proxy节点路由配置:
/sbin/iptables -F
/sbin/iptables -t mangle -N DIVERT
/sbin/iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
/sbin/iptables -t mangle -A DIVERT -j MARK --set-mark 1
/sbin/iptables -t mangle -A DIVERT -j ACCEPT
/sbin/ip rule add fwmark 1 lookup 100
/sbin/ip route add local 0.0.0.0/0 dev lo table 100
优缺点:
- 优点:可实现TCP协议IP透传
- 缺点:
- 不支持UDP协议
- 需修改蜜罐路由表,可能影响网络
1.3 nginx方案
1.3.1 基础转发配置
安装与配置:
yum install nginx
vim /etc/nginx/nginx.conf
配置文件:
stream {
upstream master {
server 192.168.40.147:10000;
}
server {
listen 9999;
listen 10000 udp;
proxy_timeout 20s;
proxy_pass master;
proxy_buffer_size 512k;
}
}
1.3.2 IP透传模式
蜜罐机器配置:
stream {
upstream dns_master {
server 192.168.40.147:10000;
}
server {
listen 9999;
proxy_responses 1;
proxy_timeout 2s;
proxy_bind $remote_addr transparent;
proxy_pass dns_master;
}
}
路由配置:
- A机器配置:
route del default gw 192.168.40.1
route add default gw 192.168.40.148
- 蜜罐机器配置:
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 --sport 10000 -j MARK --set-xmark 0x1/0xffffffff
优缺点:
- 优点:支持TCP/UDP协议
- 缺点:需修改蜜罐路由表,可能影响网络
1.4 iptables方案
1.4.1 基础转发配置
配置步骤:
- 开启IP转发:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
- 添加iptables规则:
iptables -t nat -A PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 192.168.40.148
iptables -t nat -A PREROUTING -p udp --dport 10000 -j DNAT --to-destination 192.168.40.148
iptables -t nat -A POSTROUTING -p tcp -d 192.168.40.148 --dport 10000 -j SNAT --to-source 192.168.40.147
iptables -t nat -A POSTROUTING -p udp -d 192.168.40.148 --dport 10000 -j SNAT --to-source 192.168.40.147
1.4.2 IP透传模式
配置方法:
- A机器配置:
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -d 192.168.40.147 --dport 10000 -j DNAT --to 192.168.40.148
iptables -t nat -A POSTROUTING -s 192.168.40.148 SNAT --to 192.168.40.147
- 蜜罐机器配置:
ip route del default
ip route add default via 192.168.40.1
优缺点:
- 优点:系统自带,无需额外安装
- 缺点:需修改蜜罐默认路由,影响网络
1.5 iptables + GRE隧道方案
1.5.1 A机器配置
- 开启路由转发及加载模块:
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe --first-time ip_gre
- 配置GRE隧道:
ip link add gre-y type gre local 192.168.40.147 remote 192.168.40.148 ttl 64
ip link set gre-y up
ip addr add 192.168.40.1/24 dev gre-y
- 添加iptables规则:
iptables -t nat -I PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 10.1.1.3:10000
1.5.2 蜜罐机器配置
- 配置GRE隧道:
ip link add gre-x type gre local 192.168.40.148 remote 192.168.40.147 ttl 64
ip link set gre-x up
ip addr add 192.168.40.148/24 dev gre-x
- 配置策略路由:
ip route add default via 192.168.40.147 dev gre-x table 1111
ip rule add pref 1000 from 192.168.40.148 lookup 1111
优缺点:
- 优点:对蜜罐网络影响较小
- 缺点:配置较复杂
0x02 方案对比总结
| 方案 | 协议支持 | IP透传能力 | 对蜜罐影响 | 复杂度 |
|---|---|---|---|---|
| rinetd | TCP | 不支持 | 无 | 低 |
| haproxy | TCP/HTTP/HTTPS | 支持(需特殊配置) | 需改路由表 | 中 |
| nginx | TCP/UDP | 支持(需特殊配置) | 需改路由表 | 中 |
| iptables | TCP/UDP | 支持(需特殊配置) | 需改默认路由 | 中 |
| iptables+GRE | TCP/UDP | 支持 | 影响较小 | 高 |
0x03 实践建议
- 简单场景:若无IP透传需求,使用rinetd最为简单
- TCP服务:推荐haproxy透传方案,性能较好
- UDP服务:考虑nginx或iptables+GRE方案
- 容器化环境:需特别注意网络命名空间隔离问题,可能需要定制网络方案
注意:所有涉及修改路由表的方案都可能影响蜜罐网络稳定性,建议在测试环境充分验证后再上线生产环境。