IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> iptables实现IPMAC绑定 -> 正文阅读

[系统运维]iptables实现IPMAC绑定

主机192.168.1.201的MAC地址如下:

$ ip address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:38:40:6b brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

在另外一台主机上配置如下的规则,如果检测到192.168.1.201的MAC地址不等于00:0c:29:38:40:6b,表明为假冒的主机192.168.1.201,将报文丢弃。

# iptables -A INPUT -s 192.168.1.201 -m mac ! --mac-source 00:0c:29:38:40:6b -j DROP 
#
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  192.168.1.201        anywhere             MAC ! 00:0C:29:38:40:6B

将第三台主机的接口IP地址设置为192.168.1.201,ping以上配置了IPMAC绑定的主机,没有响应。查看规则信息,如下丢弃了6个报文:

# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6   504 DROP       all  --  *      *       192.168.1.201        0.0.0.0/0            MAC ! 00:0C:29:38:40:6B

注意,以上规则配置于INPUT点,对于ARP请求是不生效的。另外,IPMAC绑定也可以配置在FORWARD点,用于检测转发的流量。不支持配置在OUTPUT点。

# iptables -A FORWARD -s 192.168.1.201 -m mac ! --mac-source 00:0c:29:38:40:6b -j DROP 

MAC扩展

函数mac_mt_init注册了匹配结构mac_mt_reg。可知以上iptables命令中的mac选项(-m mac)可应用在PREROUTING,LOCAL_IN和FORWARD三个hook中。

static struct xt_match mac_mt_reg __read_mostly = {
    .name      = "mac",
    .revision  = 0,
    .family    = NFPROTO_UNSPEC,
    .match     = mac_mt,
    .matchsize = sizeof(struct xt_mac_info),
    .hooks     = (1 << NF_INET_PRE_ROUTING) | (1 << NF_INET_LOCAL_IN) |
                 (1 << NF_INET_FORWARD),
    .me        = THIS_MODULE,
};
static int __init mac_mt_init(void)
{
    return xt_register_match(&mac_mt_reg);
}

匹配处理函数mac_mt如下,对于以太网设备,在MAC头部合法的情况下,判断其中源MAC地址是否与配置的MAC相等,考虑取反的情况(如以上的取反符号 !),返回匹配结果。

注意,不能对目的MAC地址进行匹配(路由情况下,目的MAC通常为路由器自身地址)。

static bool mac_mt(const struct sk_buff *skb, struct xt_action_param *par)
{
    const struct xt_mac_info *info = par->matchinfo;
    bool ret;

    if (skb->dev == NULL || skb->dev->type != ARPHRD_ETHER)
        return false;
    if (skb_mac_header(skb) < skb->head)
        return false;
    if (skb_mac_header(skb) + ETH_HLEN > skb->data)
        return false;
    ret  = ether_addr_equal(eth_hdr(skb)->h_source, info->srcaddr);
    ret ^= info->invert;
    return ret;

内核版本 5.10

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:13:16  更:2022-03-13 22:13:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:39:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码