在CentOS系统中,屏蔽特定IP地址是一项常见的安全管理操作,可以有效防止恶意访问或未授权的连接,无论是通过防火墙工具还是系统自带的配置文件,管理员都能灵活实现这一目标,以下是几种常用的屏蔽方法及其操作步骤,供不同场景下的需求选择。

使用iptables屏蔽IP地址
iptables是Linux系统中经典的防火墙工具,功能强大且配置灵活,在CentOS 7及以下版本中,默认使用iptables作为防火墙解决方案,要屏蔽某个IP地址,首先需要检查iptables的当前规则链,确保操作不会影响现有配置。
执行以下命令查看现有规则:
sudo iptables -L -n -v
若需屏蔽特定IP(例如192.168.1.100),可以使用以下命令:
sudo iptables -I INPUT -s 192.168.1.100 -j DROP
-I INPUT表示插入到INPUT链的顶部,-s指定源IP地址,-j DROP表示丢弃数据包,为使规则永久生效,需保存iptables配置:
sudo service iptables save sudo systemctl restart iptables
使用firewalld屏蔽IP地址
CentOS 7及以上版本默认使用firewalld作为防火墙管理工具,其支持动态规则更新,无需重启服务即可生效,屏蔽IP时,需先将目标IP添加至rich规则或直接使用zone配置。
以下是通过rich规则屏蔽IP的示例:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
执行后重新加载防火墙配置:
sudo firewall-cmd --reload
若需临时屏蔽(不保存至重启后),可省略--permanent参数。
通过hosts.deny或hosts.allow文件控制访问
对于基于TCP Wrappers的服务(如SSH、FTP等),可通过修改/etc/hosts.deny和/etc/hosts.allow文件实现IP访问控制,编辑hosts.deny文件,添加以下内容:
sshd: 192.168.1.100
这将阻止该IP通过SSH连接服务器,若需同时允许其他IP,可在hosts.allow文件中明确指定允许的地址范围。
使用fail2ban动态封禁恶意IP
fail2ban是一个基于日志分析的入侵防御工具,可自动检测 repeated failed login attempts 并动态封禁IP,需先安装fail2ban:
sudo yum install fail2ban -y
配置/etc/fail2ban/jail.local文件,定义监控的日志文件和封禁规则,针对SSH服务的配置示例:

[sshd] enabled = true maxretry = 3 bantime = 3600 findtime = 600
保存后重启fail2ban服务:
sudo systemctl restart fail2ban
验证屏蔽效果
无论采用哪种方法,均可通过以下命令验证IP是否已被屏蔽:
sudo iptables -L -n -v | grep 192.168.1.100
或使用firewall-cmd --list-rich-rules检查firewalld规则,尝试从目标IP发起连接,确认是否被拒绝访问。
注意事项
- 备份配置:修改防火墙规则前,建议备份当前配置,避免误操作导致服务中断。
- 测试环境验证:在生产环境应用前,先在测试机验证规则的正确性。
- 日志监控:定期检查防火墙日志,确保屏蔽策略未误封合法IP。
相关问答FAQs
Q1: 如何查看当前已屏蔽的IP列表?
A1: 根据使用的防火墙工具不同,查看方式有所区别,若使用iptables,执行sudo iptables -L -n | grep DROP;若使用firewalld,则运行sudo firewall-cmd --list-rich-rules,通过sudo cat /var/log/secure可查看SSH登录失败日志,结合fail2ban的日志(/var/log/fail2ban.log)确认动态封禁的IP。
Q2: 如何解除已屏蔽的IP地址?
A2: 解除屏蔽需根据之前采用的工具反向操作,若通过iptables屏蔽,执行sudo iptables -D INPUT -s 192.168.1.100 -j DROP后保存规则;若使用firewalld,运行sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'并重载配置,对于hosts.deny文件,直接删除对应行即可。