
直接用 iptables 限制 SSH 访问来源,核心就一条:只放行你信任的 IP 或网段,其他一律拒绝。这不是“加功能”,而是“收权限”——把默认敞开的大门,换成带访客名单的门禁系统。
先设默认拒绝策略
安全底线是“未明确允许即禁止”。执行前务必确认你有控制台或带外访问通道,避免被自己锁在外面:
- iptables -P INPUT DROP
- iptables -P FORWARD DROP
- iptables -P OUTPUT ACCEPT
这三行相当于关掉所有进来的门,只留出口畅通。注意:规则生效后,当前 SSH 会话若非本地或已建立连接,可能立即中断,所以建议在服务器控制台或云平台终端里操作。
按需添加可信来源规则
放行规则必须在 DROP 策略之前生效,因此要用 -I(插入) 而非 -A(追加)。常见场景写法如下:
- 单个办公IP:iptables -I INPUT -p tcp -s 203.0.113.45 --dport 22 -j ACCEPT
- 公司内网段(如 10.10.0.0/16):iptables -I INPUT -p tcp -s 10.10.0.0/16 --dport 22 -j ACCEPT
- 多个网段可逐条添加,顺序不影响逻辑,但建议按优先级从高到低排列
如果用的是动态公网IP(比如家庭宽带),建议配合 DDNS 或定期更新脚本,避免因IP变更导致无法登录。
保留已有连接不中断
SSH 已建立的会话属于 ESTABLISHED 状态,需单独放行,否则设置 DROP 后现有连接也会断开:
- iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这条规则通常放在最前面(行号为1),确保所有已有连接持续可用,再处理新连接请求。
保存并持久化规则
iptables 规则默认不跨重启生效,必须手动保存:
- Debian/Ubuntu:iptables-save > /etc/iptables/rules.v4
- CentOS/RHEL:service iptables save 或 iptables-save > /etc/sysconfig/iptables
也可写成简单脚本,每次修改后一键保存,避免遗漏。部分系统需启用 netfilter-persistent 或 iptables-services 服务来自动加载。

















