iptables限制SSH访问最有效,需在INPUT链按序配置:先放行可信IP段(如203.0.113.0/24)访问22端口,再拒绝所有其他22端口连接,避免顺序错误导致失效。

直接在 iptables 中限制 SSH(22)或 RDP(需配合 Windows 防火墙,Linux 一般不原生运行 RDP)的访问来源,是加固远程管理端口最有效的一环。它不依赖服务本身配置,而是从网络层拦截非法连接,规则生效快、控制粒度细、兼容性好。关键在于“只放行可信 IP,其余一律拒绝”,且必须保证规则顺序正确。
明确策略:先允许,再拒绝
iptables 规则按顺序匹配,一旦命中即执行动作并停止后续检查。因此,针对 SSH 的防护规则必须严格遵循以下逻辑:
- 第一条:允许指定 IP 段(如办公网 203.0.113.0/24)访问 TCP 22 端口
- 第二条:拒绝所有其他来源访问 TCP 22 端口
- 这两条规则必须放在 INPUT 链靠前位置,避免被更宽泛的 ACCEPT 规则覆盖
Linux 上配置 SSH 白名单(以 firewalld 为例)
CentOS/RHEL 7+ 或 Fedora 推荐使用 firewalld,语义清晰、持久化方便:
- 执行命令添加白名单:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="22" protocol="tcp" accept'
- 重载配置使生效:firewall-cmd --reload
- 验证规则是否加载:firewall-cmd --list-rich-rules | grep 22
注意:若系统未启用 firewalld,或需兼容旧版 CentOS 6,则改用 iptables 命令(见下一条)。
兼容老系统的 iptables 手动写法
适用于 Debian 9 及更早、CentOS 6 等环境,需手动管理规则链:
- 放行指定网段:iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -j ACCEPT
- 拒绝其余所有访问 22 端口的请求:iptables -A INPUT -p tcp --dport 22 -j DROP
- 保存规则(不同系统路径略有差异):service iptables save 或 iptables-save > /etc/sysconfig/iptables
⚠️ 重要提醒:DROP 规则一定不能写在 ACCEPT 之前;配置后建议新开终端测试,同时保留一个已有连接作为“逃生通道”。
配套建议:别只靠 iptables 单点防御
iptables 是有力工具,但不是万能解药。真正稳妥的接入控制应分层实施:
- 云服务器优先在安全组中封禁 0.0.0.0/0,只开放目标 IP 段——这是第一道也是最强防线
- iptables/firewalld 作为第二道防线,防止安全组配置遗漏或误操作
- SSH 层面补充 PubkeyAuthentication yes 和 PasswordAuthentication no,杜绝密码爆破
- 避免单独依赖
AllowUsers或DenyUsers这类 sshd_config 配置,它们仅在连接已建立后才生效,无法防扫描和暴力尝试

















