高端一点的交换机一般都会有端口镜像功能,即将流经某个网口的所有数据包镜像拷贝一份到另一个网口,这样方便在镜像的那个网口上接笔记本直接抓包分析。
而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指定你设置的表)查看生效情况
这样设置好之后,在192.168.31.121上开启抓包查看(我这边是Ubuntu系统,直接通过命令tcpdump -i eth0 icmp
输出查看)
可以看到在我pc机上可以直接抓取到树莓派上的数据包了
操作完之后可以通过命令iptable -t mangle -F
清除设置的规则