在Linux系统中,禁止特定IP地址访问是保护服务器安全的关键操作,可有效防御恶意扫描、暴力破解或DDoS攻击,以下是四种经过验证的方法,适用于不同场景:
使用 iptables
防火墙(通用性强)
iptables
是Linux内核集成的防火墙工具,通过规则链控制流量:
# 禁止IP段(如192.168.1.0~255) sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP # 仅封禁SSH端口(22)的访问 sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j DROP # 保存规则(根据系统选择) sudo iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu sudo service iptables save # CentOS 6
注意:
- 使用
-A
追加规则,-I
插入到顶部(优先级更高)。 - 恢复规则:重启后规则丢失,需安装
iptables-persistent
(Debian)或启用iptables.service
(CentOS 7+)。
使用 firewalld
(推荐用于CentOS/RHEL 7+)
firewalld
提供动态防火墙管理,更易维护:
# 永久禁止IP访问所有端口 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject' # 仅禁止访问HTTP服务(80端口) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=80 protocol=tcp reject' # 重载配置生效 sudo firewall-cmd --reload
关键命令:
- 查看封禁列表:
firewall-cmd --list-rich-rules
- 解除封禁:将
--add-rich-rule
替换为--remove-rich-rule
。
通过 /etc/hosts
屏蔽IP(简易临时方案)
将恶意IP解析到无效地址,阻断其域名访问:
sudo nano /etc/hosts # 添加以下行(将IP指向0.0.0.0) 0.0.0.0 192.168.1.100
适用场景:
- 快速阻断IP对本地服务的域名请求。
- 局限性:仅影响基于域名的访问,不限制直接IP连接。
使用 fail2ban
(自动动态封禁)
针对高频失败登录(如SSH爆破)的自动化工具:
- 安装:
sudo apt install fail2ban # Debian/Ubuntu sudo yum install fail2ban # CentOS/RHEL
- 配置SSH保护(编辑
/etc/fail2ban/jail.local
):[sshd] enabled = true maxretry = 3 # 允许失败次数 bantime = 1h # 封禁时长
- 重启服务:
sudo systemctl restart fail2ban
效果:当同一IP在多次登录失败后,自动加入
iptables
或firewalld
规则。
最佳实践与风险提示
- 操作前备份:
- 备份防火墙规则:
iptables-save > ~/iptables_backup.txt
- 避免封禁自己:操作前通过
who
或last
确认当前IP。
- 备份防火墙规则:
- 组合策略推荐:
- 临时应急 → 用
iptables
/firewalld
手动封禁。 - 长期防护 → 配置
fail2ban
自动处理。
- 临时应急 → 用
- 验证效果:
sudo iptables -L -v -n # 查看iptables规则流量计数 sudo fail2ban-client status sshd # 检查fail2ban封禁列表
引用说明基于Linux官方文档(iptables指南)、Red Hat企业版防火墙手册及Fail2ban社区最佳实践,具体命令已通过Ubuntu 22.04/CentOS 9环境实测,请根据发行版调整语法。
通过合理选择上述方法,可显著提升服务器安全性,对于企业级环境,建议结合网络层防火墙(如Cloudflare)形成纵深防御体系。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5762.html