网络工具-iptables端口镜像

Posted by 周思进 on April 19, 2020

高端一点的交换机一般都会有端口镜像功能,即将流经某个网口的所有数据包镜像拷贝一份到另一个网口,这样方便在镜像的那个网口上接笔记本直接抓包分析。

而iptables也可以实现这样的功能,需要借助于TEE模块。不过我的树莓派iptables查看并没有支持上TEE模块。

可以通过下载编译安装Xtables-addons来支持,而不需要重新编译内核或者iptables来支持。

去官网下载Xtables-addons源码包,需要注意下载的版本与当前Linux系统版本及iptables版本有关,这个具体在源码目录下的INSTALL文件可以明确。

Use xtables-addons-1.x if you need support for Linux < 3.7.
Use xtables-addons-2.x if you need support for Linux < 4.15.
Use xtables-addons-3.x if you need support for Linux >= 4.15.

通过uname -r命令确定自己系统版本,我这边选择下载了xtables-addons-2.14.tar.xz,其要求的iptables版本通过命令iptables -v也是满足的。

安装过程就是简单的下面三个操作命令:

./configure
make
make install

中间出现的问题:
1、

configure: error: Package requirements (xtables >= 1.4.5) were not met:

No package 'xtables' found

需要安装iptables开发包iptables-devel,每次安装包之前都应养成习惯执行命令sudo apt-get update以更新软件列表,避免后面安装失败。

2、 在make过程中出现

make: *** /lib/modules/4.9.35-v7+/build: 没有那个文件或目录

需要安装kernel-headers,通过命令apt-cache search linux-headers搜索适合安装的kernel-headers,最后选择执行如下命令安装:

sudo apt-get install raspberrypi-kernel-headers

安装成功之后就可以操作体验下了。
比如可以在树莓派上进行ping操作,ping的数据包是源主机和目标主机之间的数据通信,不会转发到其它主机上。

可以在树莓派上进行如下设置

iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 192.168.31.121

注意这里选择的链是PREROUTING(该链在表raw、mangle、nat表支持),即所有网口收到的数据包即使最终不是发往本机的(非本机的如果支持路由转发则会发往FORWARD链进行转发判断操作),也都会镜像拷贝一份发给指定的192.168.31.121主机。当然对于上述ping操作明确是发送给本机的,可以指定INPUT链(该链在表mangle、filter表支持),可以进行如下设置

iptables -t filter -A INPUT -i eth0 -j TEE --gateway 192.168.31.121

另外需要注意的就是设置的gateway主机需要是和本机同网段可达的主机地址。

设置好之后可以通过命令iptables -t mangle -L -n(通过-t指定你设置的表)查看生效情况

image

这样设置好之后,在192.168.31.121上开启抓包查看(我这边是Ubuntu系统,直接通过命令tcpdump -i eth0 icmp输出查看)

可以看到在我pc机上可以直接抓取到树莓派上的数据包了

image

操作完之后可以通过命令iptable -t mangle -F清除设置的规则