iptables之拓展知识(ping mac地址 拒绝指定主机 禁止某一网段)

本文详细介绍了iptables防火墙的高级应用策略,包括禁ping策略、根据MAC地址、IP范围及多端口设置过滤规则的方法。通过实例展示了如何精确控制网络访问,确保网络安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

####禁ping的相关策略

####1)默认直接禁ping的问题?
[root@proxy ~]# iptables -I INPUT -p icmp -j DROP
//设置完上面的规则后,其他主机确实无法ping本机,但本机也无法ping其他主机
//当本机ping其他主机,其他主机回应也是使用icmp,对方的回应被丢弃
#####2)禁止其他主机ping本机,允许本机ping其他主机
[root@proxy ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
//仅禁止入站的ping请求,不拒绝入站的ping回应包
#####注意:关于ICMP的类型,可以参考help帮助,参考命令如下:
[root@proxy ~]# iptables -p icmp --help
###防火墙扩展规则
1.根据MAC地址封锁主机
2.在一条规则中开放多个TCP服务
3.根据IP范围设置封锁规则

iptables在基本过滤条件的基础上还扩展了很多其他条件,在使用时需要使用-m参数来启动这些扩展功能,语法如下:
iptables 选项 链名称 -m 扩展模块 --具体扩展条件 -j 动作

####根据MAC地址过滤

#####1)根据IP过滤的规则,当对方修改IP后,防火墙会失效
[root@proxy ~]# iptables -F
[root@proxy ~]# iptables -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j DROP
//设置规则禁止192.168.4.100使用ssh远程本机
#####但是,当client主机修改IP地址后,该规则就会失效,注意因为修改了IP,对client主机的远程连接会断开,需要使用virt-manager开启虚拟机操作:
[root@client ~]# ifconfig eth0 192.168.4.101
[root@client ~]# ssh 192.168.4.5 //依然成功
####根据MAC地址过滤,可以防止这种情况的发生
[root@client ~]# ip link show eth0 //查看client的MAC地址

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff

[root@proxy ~]# iptables -A INPUT -p tcp --dport 2 -m mac --mac-source 52:54:00:00:00:0b -j DROP
//拒绝52:54:00:00:00:0b这台主机远程本机

####步骤二:基于多端口设置过滤规则

#####1)一次需要过滤或放行很多端口时会比较方便
[root@proxy ~]# iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT
//一次性开启20,21,22,25,80,110,143,16501到16800所有的端口

提示,多端口还可以限制多个源端口,但因为源端口不固定,一般不会使用,限制多个源端口的参数是–sports.

####步骤三:根据IP地址范围设置规则

#####1)允许从 192.168.4.10-192.168.4.20 登录
[root@proxy ~]# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT

注意,这里也可以限制多个目标IP的范围,参数是–dst-range,用法与–src-range一致。

###2)禁止从 192.168.4.0/24 网段其他的主机登录
[root@proxy ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP

<think>我们有个明确的需求:使用iptables基于MAC地址阻止特定主机访问本机。根据引用的内容,我们知道可以通过iptables的-mmac模块来匹配MAC地址,然后使用-jDROP来丢弃数据包。步骤:1.添加规则阻止特定MAC地址的流量。2.注意:由于MAC地址只在局域网内有效,所以该规则通常应用在INPUT链(针对进入本机的数据包)或FORWARD链(如果本机作为路由器)上。这里用户要求“访问本机”,所以是INPUT链。3.规则示例:iptables-AINPUT-mmac--mac-source00:11:22:33:44:55-jDROP解释:-AINPUT表示在INPUT链末尾追加规则;-mmac表示使用mac模块;--mac-source指定要匹配的源MAC地址;-jDROP表示丢弃匹配的数据包。4.但是要注意,在添加这条规则之前,我们需要确保默认策略或其他规则不会允许该MAC地址访问。通常,我们会将INPUT链的默认策略设置为DROP或REJECT,但这样可能会影响其他所有连接。因此,更安全的做法是在允许其他正常通信的基础上,单独禁止某个MAC地址。5.另外,根据引用[1]和引用[4],我们可以通过脚本批量添加,也可以将规则保存以便开机启动。6.引用[3]中提到了保存规则的方法:可以使用`serviceiptablessave`或者`iptables-save>/etc/sysconfig/iptables`(根据发行版不同路径可能不同)。7.注意:在测试规则之前,确保有另外的方式访问服务器(例如通过控制台),以免把自己锁在外面。因此,给出以下步骤:步骤1:使用如下命令添加基于MAC地址的过滤规则(以MAC地址00:11:22:33:44:55为例):sudoiptables-AINPUT-mmac--mac-source00:11:22:33:44:55-jDROP步骤2:如果需要同时允许其他MAC地址访问,我们可以先设置默认策略为允许,然后添加拒绝规则。但是更常见的做法是只拒绝特定的,而允许其他。注意,如果INPUT链默认策略是ACCEPT,那么添加这条规则后,该特定MAC地址的数据包会被丢弃,而其他的继续被接受。步骤3:如果INPUT链默认策略是DROP,那么我们需要在拒绝特定MAC地址之前允许其他MAC地址(或者按照需求允许某些MAC地址)。但是用户需求只是阻止特定主机,所以我们假设默认策略是ACCEPT,因此只需要添加DROP规则即可。步骤4:保存规则(确保重启后仍然有效):sudoserviceiptablessave#在CentOS6及之前,或者使用systemctl的系统中可能有不同命令或者sudoiptables-save>/etc/sysconfig/iptables#根据系统配置,可能保存到其他路径在Ubuntu等系统中,可能需要安装iptables-persistent包,然后使用netfilter-persistentsave。步骤5:如果以后需要解封,可以通过删除这条规则来实现:sudoiptables-LINPUT--line-numbers#查看规则,找到对应的行号sudoiptables-DINPUT[行号]或者直接使用命令删除(注意:如果规则很多,可能删除会比较麻烦):sudoiptables-DINPUT-mmac--mac-source00:11:22:33:44:55-jDROP注意:在引用[3]中提到了解封IP地址的方法,但是MAC地址同理。注意事项:-由于MAC地址可以被伪造,所以这种过滤方式并不是绝对安全。-在无线网络等环境中,MAC地址过滤可以用来控制接入设备,但同样存在被欺骗的风险。根据引用,我们还可以编写脚本批量添加,如引用[1]所示,从文件读取MAC地址并逐添加规则。因此,我们可以给出如下示例脚本(用于批量阻止多个MAC地址):```bash#!/bin/bash#批量阻止MAC地址访问本机#文件名:block_mac.sh#用法:将需要阻止的MAC地址每行个放入文件(如blocked_macs.txt),然后运行此脚本whileread-rmac;do#跳过空行和注释行(以#开头的行)[[-z$mac||$mac=~^#]]&&continue#添加规则到INPUT链,丢弃来自该MAC地址的数据包iptables-AINPUT-mmac--mac-source"$mac"-jDROPdone< blocked_macs.txt#保存规则(根据系统选择合适的方式)#例如在CentOS中:serviceiptablessave#或者在Ubuntu中使用iptables-persistent(需要提前安装):#netfilter-persistentsave```提醒:在使用脚本前,确保已经测试过单条命令,并且脚本中的保存规则命令适用于你的系统。最后,我们还可以参考引用[5]中关于隐含匹配条件的使用,这里我们使用的就是mac模块的匹配。因此,总结回答如下:</think> ### 如何使用iptables基于MAC地址阻止特定主机访问本机 #### 操作步骤 1. **添加MAC过滤规则** 使用`-m mac`模块匹配源MAC地址,通过`-j DROP`丢弃数据包: ```bash iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP ``` - `-A INPUT`: 将规则添加到`INPUT`链(处理进入本机的数据包) - `--mac-source`: 指定要过滤的MAC地址(替换为实际值) - `-j DROP`: 丢弃符合条件的数据包[^1] 2. **设置默认策略**(可选) 如果需拒绝所有其他MAC地址访问: ```bash iptables -P INPUT DROP # 将INPUT链默认策略设为DROP ``` > ⚠️ 谨慎操作:确保先添加允许管理接口(如SSH)的规则,避免锁定服务器[^1] 3. **保存规则**(持久化配置) 防止重启后规则丢失: ```bash service iptables save # CentOS/RHEL # 或 iptables-save > /etc/sysconfig/iptables ``` 其他系统可使用: ```bash netfilter-persistent save # Debian/Ubuntu[^3][^4] ``` 4. **验证规则** 查看生效的规则: ```bash iptables -L -v --line-numbers ``` 输出应包含类似条目: ``` Chain INPUT (policy DROP) num pkts target prot opt source destination 1 0 DROP all -- anywhere anywhere MAC 00:11:22:33:44:55 ``` #### 关键注意事项 1. **MAC过滤的局限性** - 仅对**同局域网**生效(MAC地址在路由过程中会被替换) - MAC地址易被伪造,不可作为唯安全措施[^1] 2. **特殊场景处理** - **允许特定服务**:在DROP规则前添加放行规则(如SSH) ```bash iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``` - **解封方法**: ```bash iptables -D INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP ``` 3. **脚本自动化** 批量过滤MAC地址(创建`blocked_macs.txt`文件): ```bash #!/bin/bash while read mac; do iptables -A INPUT -m mac --mac-source "$mac" -j DROP done < blocked_macs.txt iptables -P INPUT DROP service iptables save ``` > 📌 最佳实践:**结合IP和MAC过滤**(如`iptables -A INPUT -s 192.168.1.10 -m mac --mac-source 00:11:22:33:44:55 -j DROP`)可提升安全性[^3][^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值