是什么决定了接口的混杂性,接口标志或属性?

是什么决定了接口的混杂性,接口标志或属性?

我在 RHEL 7 机器上使用 Lynis 运行扫描,它说接口处于混杂模式。我检查并确定链接不是基于没有 Promusculous 标志(只有广播、多播、运行和 UP (BMRU) 可见):

$ ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001

$ netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             9001 17217705      0      0 0      17899485      0      0      0 BMRU

所以我查看了 Lynis 如何检查并运行命令ip link -o -d show dev eth0 | grep 'promiscuity 1',果然,我发现了以下内容:

$ ip -d link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff promiscuity 1 addrgenmode eui64 numtxqueues 8 numrxqueues 8 gso_max_size 65536 gso_max_segs 65535

我的问题是哪个更权威。我习惯于只检查标志而不检查接口属性。这是什么promiscuity 1意思?这个接口混杂吗?

答案1

正如中所解释的修补它向/引入了promiscuity只读参数:ip-linkiproute2

仅当用户显式设置该标志时,内核才会导出该标志,例如,当 a运行IFF_PROMISC时不会导出该标志)。tcpdump

+ if (do_link && tb[IFLA_PROMISCUITY] && show_details)
+     fprintf(fp, "\n    promiscuity %u ",
+         *(int*)RTA_DATA(tb[IFLA_PROMISCUITY]));

而事实上,dev_get_flags()ioctl(SIOCGIFFLAGS)由接口(如使用的ifconfig)和 rtnetlink 接口(如使用的)使用的内核函数ip link show,将明确地IFF_PROMISC从导出到用户空间的标志集中清除:

 *      Get the combination of flag bits exported through APIs to userspace.
 */
unsigned int dev_get_flags(const struct net_device *dev)
{
        unsigned int flags;

        flags = (dev->flags & ~(IFF_PROMISC |
                                        ...)) |
                (dev->gflags & (IFF_PROMISC |
                                IFF_ALLMULTI));

[dev->gflags上面是一组兼容性标志,它们是不是由内核使用,但仅由用户空间接口设置和检索]

仅有的从用户空间检查接口是否处于混杂模式的方法是(就像ip -d link show那样)通过 IFLA_PROMISCUITY通过检索的属性rtnetlink(7)界面。这反映了实际情况乱交计数设备的:promiscuity > 0表示设备处于混杂模式。


ifconfig DEV promisc通过或更新设备标志ip link set dev DEV promisc on并不是将设备设置为混杂模式的唯一方法:另一种方法是通过packet(7) setsockopt()界面:

setsockopt(sock, SOL_SOCKET, PACKET_ADD_MEMBERSHIP, {.mr_type = PACKET_MR_PROMISC})`

这就是tcpdump(以及其他网络捕获和过滤工具)正在使用的。

答案2

PROMISCUOUS是一面旗帜本身,而不是其他旗帜的组合。

您提供的转储上未设置该标志。

如果我在系统上手动设置它,我可以清楚地看到它:

~# ifconfig eth0 promisc
~# ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 28:f1:0e:09:b8:f8 brd ff:ff:ff:ff:ff:ff
root@NEO-L196:~# ip -o -d link show dev eth0
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000\    link/ether 28:f1:0e:09:b8:f8 brd ff:ff:ff:ff:ff:ff promiscuity 1 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
~# 

如果您继续收到 Lynis 的警告,有两种可能性:

  • Lynis 有问题,向您报告了误报。

  • 您的系统已被黑客攻击并被后门:黑客替换了ip,ifconfig以及route带有隐藏混杂标志的修补程序的二进制文件。

相关内容