arptables 命令
基本介绍
arptables 是 Linux 系统中用于配置 ARP(Address Resolution Protocol)数据包过滤规则的工具,是 netfilter 框架的一部分。它允许系统管理员设置规则来过滤、修改和记录 ARP 数据包,用于保护网络免受 ARP 欺骗攻击和其他 ARP 相关的安全威胁。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
语法
arptables [-t table] [-A|-D|-I|-R|-L|-F|-Z|-N|-X|-P] [链名] [规则] [-j 动作]
表(Table)
arptables 主要支持两个表:
| 表名 | 功能 | 包含的链 |
|---|---|---|
filter |
ARP 数据包过滤(默认表) | INPUT, OUTPUT, FORWARD |
mangle |
ARP 数据包修改 | INPUT, OUTPUT, FORWARD |
链(Chain)
链是规则的容器,ARP 数据包按照链的顺序依次匹配规则:
- INPUT:进入本地系统的 ARP 数据包
- OUTPUT:从本地系统发出的 ARP 数据包
- FORWARD:经过系统转发的 ARP 数据包
命令选项
链管理命令
-N <chain>:创建新链-X [<chain>]:删除指定链(默认删除所有空用户定义链)-P <chain> <policy>:设置链的默认策略(ACCEPT/DROP)-E <old-chain> <new-chain>:重命名链
规则管理命令
-A <chain>:在链末尾追加规则-I <chain> [num]:在链指定位置插入规则(默认开头)-D <chain> [num]:删除链中指定位置的规则-R <chain> <num>:替换链中指定位置的规则-F [<chain>]:清空链中的所有规则(默认清空所有链)-Z [<chain>]:重置链的计数器
查看命令
-L [<chain>]:列出链中的规则-S [<chain>]:以 arptables-save 格式显示规则-v:详细输出(配合 -L 使用)-n:数字格式显示地址-x:显示精确的计数器值
规则匹配选项
基本匹配
-p <protocol>:匹配协议(arp)-s <source>:匹配源 MAC 地址-d <destination>:匹配目标 MAC 地址-i <interface>:匹配进入的网络接口-o <interface>:匹配输出的网络接口
ARP 操作码匹配
--opcode <value>:匹配 ARP 操作码(1=请求, 2=响应)
ARP 协议地址匹配
--source-ip <ip>:匹配源 IP 地址--destination-ip <ip>:匹配目标 IP 地址--source-mac <mac>:匹配源 MAC 地址--destination-mac <mac>:匹配目标 MAC 地址
目标动作(Jump)
| 动作 | 说明 |
|---|---|
ACCEPT |
允许 ARP 数据包通过 |
DROP |
丢弃 ARP 数据包 |
LOG |
记录日志(继续匹配后续规则) |
RETURN |
返回调用链继续匹配 |
<user-chain> |
跳转到用户定义链 |
使用示例
1. 查看当前规则
bash
arptables -L # 查看 filter 表所有规则
arptables -L -v # 详细输出
arptables -L -n # 数字格式显示
2. 设置默认策略
bash
arptables -P INPUT ACCEPT # 允许所有进入的 ARP 数据包
arptables -P FORWARD DROP # 拒绝所有转发的 ARP 数据包
arptables -P OUTPUT ACCEPT # 允许所有出站 ARP 数据包
3. 拒绝特定 MAC 地址的 ARP 请求
bash
arptables -A INPUT -s 00:11:22:33:44:55 -j DROP
4. 允许特定 IP-MAC 绑定
bash
arptables -A INPUT -s 192.168.1.100 --source-mac 00:11:22:33:44:55 -j ACCEPT
5. 阻止 ARP 欺骗攻击
bash
# 只允许已知的 IP-MAC 配对
arptables -P INPUT DROP
arptables -A INPUT -s 192.168.1.1 --source-mac 00:11:22:33:44:01 -j ACCEPT
arptables -A INPUT -s 192.168.1.2 --source-mac 00:11:22:33:44:02 -j ACCEPT
6. 允许特定接口的 ARP 流量
bash
arptables -A INPUT -i eth0 -j ACCEPT
7. 记录 ARP 日志
bash
arptables -A INPUT -j LOG --log-prefix "ARP: "
8. 删除规则
bash
arptables -D INPUT 1 # 删除 INPUT 链的第一条规则
9. 清空所有规则
bash
arptables -F # 清空 filter 表
10. 保存和恢复规则
bash
arptables-save > /etc/arptables/rules # 保存规则
arptables-restore < /etc/arptables/rules # 恢复规则
典型 ARP 防火墙配置示例
ARP 欺骗防护配置
bash
# 设置默认策略为拒绝
arptables -P INPUT DROP
arptables -P OUTPUT DROP
arptables -P FORWARD DROP
# 允许回环接口
arptables -A INPUT -i lo -j ACCEPT
arptables -A OUTPUT -o lo -j ACCEPT
# 允许已知的 IP-MAC 配对
arptables -A INPUT -s 192.168.1.1 --source-mac 00:11:22:33:44:01 -j ACCEPT
arptables -A INPUT -s 192.168.1.2 --source-mac 00:11:22:33:44:02 -j ACCEPT
arptables -A INPUT -s 192.168.1.100 --source-mac 00:11:22:33:44:64 -j ACCEPT
# 允许响应我们发起的 ARP 请求
arptables -A INPUT --opcode 2 -j ACCEPT
# 允许我们发送 ARP 请求和响应
arptables -A OUTPUT --opcode 1 -j ACCEPT
arptables -A OUTPUT --opcode 2 -j ACCEPT
保存和恢复规则
Debian/Ubuntu
bash
# 保存规则
arptables-save > /etc/arptables/rules
# 开机自动加载(需要安装 arptables-persistent 包)
apt-get install arptables-persistent
CentOS/RHEL
bash
# 保存规则
arptables-save > /etc/sysconfig/arptables
# 开机自动加载
systemctl enable arptables
ARP 操作码说明
| 操作码 | 名称 | 说明 |
|---|---|---|
| 1 | ARP Request | ARP 请求(询问某个 IP 地址对应的 MAC 地址) |
| 2 | ARP Reply | ARP 响应(告知某个 IP 地址对应的 MAC 地址) |
| 3 | RARP Request | RARP 请求 |
| 4 | RARP Reply | RARP 响应 |
相关命令
iptables:IPv4 防火墙工具ip6tables:IPv6 防火墙工具ebtables:以太网桥接过滤工具arp:查看和修改 ARP 缓存ip:现代网络配置工具arptables-save:保存 arptables 规则arptables-restore:恢复 arptables 规则
注意事项
- 权限要求 :所有
arptables命令需要 root 权限 - 规则顺序:规则按照添加顺序匹配,一旦匹配成功就执行相应动作
- 默认策略:建议将默认策略设置为 DROP,然后显式允许需要的 ARP 流量
- 规则持久化:重启后规则会丢失,需要保存到配置文件
- 内核模块 :确保加载了必要的内核模块(如
arptables_filter) - ARP 欺骗防护 :
arptables可以用于防止 ARP 欺骗,但需要配合静态 ARP 绑定使用
总结
arptables 是 Linux 系统中配置 ARP 数据包过滤规则的工具,主要用于保护网络免受 ARP 欺骗攻击。通过设置规则,可以过滤、记录和修改 ARP 数据包,确保只有合法的 ARP 流量能够通过网络。arptables 是构建安全网络环境的重要工具之一。