在 CentOS 系统中,限制远程登录(如 SSH)的来源 IP 地址可以通过多种方式实现。以下是几种常用且有效的方法:
方法一:使用 firewalld(推荐,适用于 CentOS 7 及以上)
firewalld 是 CentOS 默认的防火墙管理工具。
步骤:
-
启动并启用 firewalld(如果未启用)
sudo systemctl start firewalld sudo systemctl enable firewalld -
只允许特定 IP 访问 SSH(默认端口 22)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'将
192.168.1.100替换为允许访问的客户端 IP 地址。也可使用 IP 段,如192.168.1.0/24。 -
拒绝其他所有 IP 的 SSH 请求(可选,确保默认策略为 drop)
通常,默认区域(如 public)的默认策略是reject,但你可以显式设置更严格的规则。 -
重新加载防火墙配置
sudo firewall-cmd --reload -
验证规则是否生效
sudo firewall-cmd --list-all
方法二:使用 iptables(传统方式)
如果你偏好使用 iptables,可以手动添加规则。
示例:只允许特定 IP 访问 SSH
# 允许特定 IP
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
# 拒绝其他所有 IP 访问 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
注意:顺序很重要,确保允许的规则在前面。
保存规则(CentOS 7+ 需安装 iptables-services)
sudo yum install iptables-services -y
sudo service iptables save
或使用:
sudo iptables-save > /etc/sysconfig/iptables
方法三:修改 SSH 配置文件(/etc/ssh/sshd_config)
通过 OpenSSH 自身支持限制来源 IP。
编辑 SSH 配置:
sudo vi /etc/ssh/sshd_config
在文件末尾添加以下内容(例如只允许 192.168.1.0/24 网段):
AllowUsers *@192.168.1.*
# 或者指定用户和IP
# AllowUsers user1@192.168.1.100 user2@192.168.1.101
说明:
AllowUsers后面可以跟用户名@IP。- 使用通配符
*匹配任意用户名或 IP 段。- 也可以使用
AllowGroups配合组进行控制。
重启 SSH 服务:
sudo systemctl restart sshd
⚠️ 注意:配置错误可能导致无法登录,请确保测试时保留备用连接(如控制台)。
方法四:使用 TCP Wrappers(/etc/hosts.allow 和 /etc/hosts.deny)
适用于支持 TCP Wrappers 的服务(包括 SSH)。
编辑允许列表:
sudo vi /etc/hosts.allow
添加:
sshd: 192.168.1.100
sshd: 192.168.1.0/255.255.255.0
编辑拒绝列表(可选):
sudo vi /etc/hosts.deny
添加:
sshd: ALL
这表示:先检查
hosts.allow,匹配则放行;否则查看hosts.deny,匹配则拒绝。
安全建议
- 不要只依赖单一方法,可组合使用(如 firewalld + SSH 配置)。
- 更改默认 SSH 端口 可减少暴力扫描。
- 禁用 root 登录 和使用密钥认证提升安全性。
- 测试前保留本地或控制台访问权限,避免被锁在系统外。
总结
| 方法 | 推荐程度 | 说明 |
|---|---|---|
| firewalld | ⭐⭐⭐⭐⭐ | 推荐,现代、易管理 |
| iptables | ⭐⭐⭐⭐ | 强大但需手动维护 |
| SSH 配置 | ⭐⭐⭐⭐ | 应用层控制,灵活 |
| TCP Wrappers | ⭐⭐⭐ | 传统方式,兼容性好 |
✅ 建议优先使用 firewalld + AllowUsers in sshd_config` 双重防护。
如有更多需求(如 IPv6、动态 IP 处理等),可进一步扩展方案。
PHPWP博客