linux中限制特定ip段访问的核心是控制入站流量,常用方法包括iptables/nftables(全局封禁)、firewalld rich rule(区域化策略)、服务级控制(ssh/nginx等)及tcp wrappers;选择依据是限制范围(全服务或单服务)与系统环境兼容性。

在Linux中限制特定IP段访问权限,核心是控制入站流量,常用方法有系统级防火墙(iptables/nftables/firewalld)、服务级访问控制(如SSH、Nginx)、以及TCP Wrappers。选择哪种方式,取决于你要限制的是“所有服务”还是“某个具体服务”,以及系统环境是否支持。
用iptables限制IP段(适用于所有服务)
iptables直接工作在内核网络层,适合全局封禁或放行某网段。规则按顺序匹配,务必注意先后逻辑:
- 封禁整个C类网段(如192.168.5.0/24):
sudo iptables -A INPUT -s 192.168.5.0/24 -j DROP - 只允许该网段访问SSH端口,其他IP一律拒绝:
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.5.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP - 保存规则(避免重启失效):
Debian/Ubuntu:sudo iptables-save > /etc/iptables/rules.v4
CentOS/RHEL 6:sudo service iptables save
CentOS/RHEL 7+:需搭配firewalld或使用nftables
用firewalld设置rich rule(推荐用于RHEL/CentOS 7+)
firewalld更易管理,支持动态生效且不中断连接:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 永久封禁IP段:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.0/24" reject' - 仅对HTTP服务限制(不影响SSH等其他端口):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.0/24" port port="80" protocol="tcp" reject' - 重载生效:
sudo firewall-cmd --reload
针对具体服务做IP段控制
若只需限制某服务(如SSH或Web),不建议动全局防火墙,更安全、更精准:
-
SSH服务:编辑/etc/hosts.allow和/etc/hosts.deny
在/etc/hosts.allow中写:
sshd: 192.168.5.0/24
在/etc/hosts.deny中写:
sshd: ALL
然后重启sshd:sudo systemctl restart sshd -
Nginx服务:在server或location块中添加:
deny 192.168.5.0/24;
allow all;
执行nginx -t && nginx -s reload生效 -
Apache服务:在Directory或Location中配置:
Require not ip 192.168.5.0/24
注意事项与避坑提示
操作前请确认以下几点,避免被锁死或规则无效:
- 远程操作时,务必先把自己当前IP加入白名单,再加DROP/REJECT规则
- iptables和firewalld不要混用;firewalld启用后,iptables命令可能被忽略
- TCP Wrappers只对使用libwrap的服务有效(可用ldd $(which sshd) | grep wrap验证)
- 云服务器还需检查厂商安全组——防火墙规则生效,但安全组若放行了对应端口,仍可穿透
- 测试用curl -v http://localhost或telnet your-server-ip 22验证连通性,别只看规则是否存在










