当前位置:首页>Linux>《Linux实现IP和MAC绑定》

《Linux实现IP和MAC绑定》

  • 2026-09-02 15:55:52
《Linux实现IP和MAC绑定》

Linux实现IP和MAC绑定

Linux 作为网关路由器实现IP和MAC绑定,防止其它设备使用有权限的IP访问相关业务,IP和MAC对不上就直接 DROP 转发,不让它过网关。

这是 FORWARD 层 IP+MAC 绑定强制校验,不靠 ARP,直接判“报文本身”。

✅ 实现原理(最关键)

  • • 利用 iptables -m mac --mac-source配合 -s 源IP
  • • ✅ 先放行 IP 与 MAC 正确配对 的 FORWARD
  • • ❌ 再 DROP 同一源 IP 但 MAC 不对 的包
  • • 未登记 IP → 也 DROP(默认拒绝转发)

效果:IP 和 MAC 对不上 ⇒ 不能转发 ⇒ 不能上网 / 不能访问内网

✅ 标准配置(可直接用)

假设:

  • • 内网网卡:eth0
  • • 外网网卡:eth1
  • • 客户机:
    • • 192.168.1.100 ↔ 00:11:22:33:44:55
    • • 192.168.1.101 ↔ 00:aa:bb:cc:dd:ee
# 开启转发(如未开)sysctl -w net.ipv4.ip_forward=1# 放行已建连回包(必须)iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT################################# 主机 1iptables -A FORWARD -i eth0 -o eth1 -s 192.168.1.100 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPTiptables -A FORWARD -i eth0 -o eth1 -s 192.168.1.100 -j DROP################################# 主机 2iptables -A FORWARD -i eth0 -o eth1 -s 192.168.1.101 -m mac --mac-source 00:aa:bb:cc:dd:ee -j ACCEPTiptables -A FORWARD -i -o eth1 eth0 -s 192.168.1.101 -j DROP################################# (可选)未登记 IP 也拒绝iptables -P FORWARD DROP

📌 效果说明

情况
结果
IP✅ MAC✅
✅ 允许转发
IP✅ MAC❌(冒用IP)
❌ DROP
IP❌(未绑定)
❌ DROP(因默认策略)
回包(ESTABLISHED)
✅ 允许

✅ 如果想限制所有转发

去掉 -o eth1,只保留:

iptables -A FORWARD -i eth0 \    -s 192.168.1.100 \    -m mac --mac-source 00:11:22:33:44:55 \    -j ACCEPTiptables -A FORWARD -i eth0 -s 192.168.1.100 -j DROP

✅ 多端口 / 全 TCP 照常加条件

iptables -A FORWARD -i eth0 \    -s 192.168.1.100 \    -p tcp -m multiport --dports 80,443 \    -m mac --mac-source 00:11:22:33:44:55 \    -j ACCEPT

⚠️ 必须满足

  • • 内网 PC 网关指向 Linux 内网 IP
  • • Linux 与 PC 同一二层(中间只能交换机,不能再有 NAT 路由器)
  • • MAC 可被伪造(这是 IP–MAC 弱绑定,非强认证)

💡也可以使用最强组合(推荐)

层级
手段
L2
静态 ARP(ip neigh add ... nud permanent)
L3/L4
上面 iptables IP+MAC 校验

两道一起 ⇒ 基本杜绝私接 / IP 冒用

ARP 层面的 IP-MAC 绑定 —— 也就是在 Linux 网关的 ARP 表中手动设置静态 ARP 条目,让系统只接受指定 IP 对应的指定 MAC,其他 MAC 发来的该 IP 的 ARP 应答全部忽略,从而从二层切断通信。

这样做的好处是:即使对方改了 IP,也无法通过网关转发数据,因为 ARP 解析阶段就被拦截了。

✅ 核心方法:Linux 静态 ARP(arp -f / ip neigh add)

1️⃣ 查看当前 ARP 表(确认内网接口)

ip neigh show dev eth0

假设内网网卡为 eth0

2️⃣ 添加静态 ARP 绑定(IP → MAC)

# 语法:ip neigh add <IP> lladdr <MAC> nud permanent dev <网卡>ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 nud permanent dev eth0ip neigh add 192.168.1.101 lladdr 00:aa:bb:cc:dd:ee nud permanent dev eth0ip neigh add 192.168.1.102 lladdr 00:ff:11:22:33:44 nud permanent dev eth0

nud permanent = 永久有效,不会老化,不接受更新

3️⃣ 验证绑定

ip neigh show dev eth0

输出示例:

192.168.1.100 dev eth0 lladdr 00:11:22:33:44:55 PERMANENT192.168.1.101 dev eth0 lladdr 00:aa:bb:cc:dd:ee PERMANENT192.168.1.102 dev eth0 lladdr 00:ff:11:22:33:44 PERMANENT

4️⃣ 测试效果

  • • ✅ 合法主机(IP+MAC 匹配):正常通信,网关正常转发
  • • ❌ 非法主机(IP 对但 MAC 错):Linux 网关不会更新 ARP 表,该 IP 的 ARP 请求/应答被忽略 → 无法完成二层寻址 → 无法通过网关转发任何数据

5️⃣ 持久化(重启后保留)

方法一:写入 /etc/iproute2/static-arp.conf(部分发行版支持)

192.168.1.100 dev eth0 lladdr 00:11:22:33:44:55 nud permanent192.168.1.101 dev eth0 lladdr 00:aa:bb:cc:dd:ee nud permanent192.168.1.102 dev eth0 lladdr 00:ff:11:22:33:44 nud permanent

然后启动时执行:

ip neigh add -f /etc/iproute2/static-arp.conf

方法二:写入开机启动脚本(最通用)

创建 /etc/network/if-up.d/arp-bind:

#!/bin/ship neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 nud permanent dev eth0ip neigh add 192.168.1.101 lladdr 00:aa:bb:cc:dd:ee nud permanent dev eth0ip neigh add 192.168.1.102 lladdr 00:ff:11:22:33:44 nud permanent dev eth0
chmod +x /etc/network/if-up.d/arp-bind

方法三:systemd 服务(推荐)

创建 /etc/systemd/system/arp-bind.service:

[Unit]Description=Static ARP bindings for gatewayAfter=network.target[Service]Type=oneshotExecStart=/usr/sbin/ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 nud permanent dev eth0ExecStart=/usr/sbin/ip neigh add 192.168.1.101 lladdr 00:aa:bb:cc:dd:ee nud permanent dev eth0ExecStart=/usr/sbin/ip neigh add 192.168.1.102 lladdr 00:ff:11:22:33:44 nud permanent dev eth0RemainAfterExit=yes[Install]WantedBy=multi-user.target
systemctl enable arp-bind.servicesystemctl start arp-bind.service

✅ 完整方案(ARP 绑定 + iptables 双重保险)

层级
工具
作用
二层
静态 ARP
阻止 MAC 不对的主机完成 ARP 解析 → 无法通信
三层
iptables FORWARD
即使绕过 ARP,也阻止转发(冗余保护)
# 静态 ARP 绑定ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 nud permanent dev eth0ip neigh add 192.168.1.101 lladdr 00:aa:bb:cc:dd:ee nud permanent dev eth0# iptables FORWARD 白名单(可选增强)iptables -P FORWARD DROPiptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A FORWARD -i eth0 -s 192.168.1.100 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPTiptables -A FORWARD -i eth0 -s 192.168.1.100 -j DROPiptables -A FORWARD -i eth0 -s 192.168.1.101 -m mac --mac-source 00:aa:bb:cc:dd:ee -j ACCEPTiptables -A FORWARD -i eth0 -s 192.168.1.101 -j DROP

⚠️ 注意事项

注意点
说明
✅ 必须同二层
内网主机必须直接连接到这台 Linux 网关(中间可以是交换机,但不能有路由器/NAT)
✅ 网关指向正确
内网主机的默认网关必须设为 Linux 内网口 IP
✅ DHCP 配合
建议 DHCP 分配固定 IP,避免 IP 冲突
⚠️ 静态 ARP 只防本机
只影响 Linux 网关自身 ARP 表,不影响内网其他主机之间的通信
❌ 不能防 MAC 伪造
如果攻击者同时改 IP 和 MAC 为一个已知合法组合,仍然可以通过(属于弱绑定)

最新文章

随机文章