要让Linux系统只允许特定IP(如192.168.1.100)访问指定端口(如SSH的22端口),核心是先设默认策略为DROP,再用iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT精准放行,并确保前置规则允许ESTABLISHED/RELATED连接和lo回环,最后保存规则持久化。

要让 Linux 系统只允许某个特定 IP(比如 192.168.1.100)访问本地的某个端口(比如 SSH 的 22 端口或 MySQL 的 3306 端口),核心思路是:先拒绝所有,再精准放行。iptables 规则按顺序匹配,顺序和默认策略非常关键。
以下操作均需 root 权限,建议在本地终端或带外管理环境下执行,避免远程断连。
设置默认拒绝策略
这是前提,否则后续的“只允许某 IP”规则可能无效:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
⚠️ 注意:执行 -P INPUT DROP 前务必确保你已通过本地控制台、KVM 或可信网络接入,否则远程 SSH 可能立即中断。
必须优先放行的基础连接
在设置具体端口规则前,这两条应放在最前面(用 -I 插入开头):
- 允许已建立和相关连接(保障已有会话不被切断):
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 允许本地回环(lo 接口),保障系统内部通信(如数据库、监控、cron 等):
iptables -I INPUT -i lo -j ACCEPT
只允许指定 IP 访问目标端口
语法结构统一:-A INPUT -s [源IP] -p tcp --dport [端口号] -j ACCEPT
示例:
- 只允许
192.168.1.100连接 SSH(22 端口):iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
- 只允许
10.0.5.0/24网段访问 MySQL(3306 端口):iptables -A INPUT -s 10.0.5.0/24 -p tcp --dport 3306 -j ACCEPT
- 若需同时允许多个 IP,重复添加对应规则即可(iptables 不支持单条规则写多个
-s)。
确保其他来源无法绕过
上述规则之后,无需额外加 DROP —— 因为 INPUT 默认策略已是 DROP,未匹配到任何 ACCEPT 的包会自动被丢弃。但若你想对非法尝试返回明确提示(便于调试),可用:
iptables -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset
这条应放在允许规则之后、且在默认 DROP 之前(即作为显式拒绝兜底),但非必需。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
保存并持久化规则
不同发行版命令略有差异:
- CentOS/RHEL 6 或早期版本:
service iptables save
- CentOS/RHEL 7+(若仍用 iptables-service):
iptables-save > /etc/sysconfig/iptables
- Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4
然后重启服务或重载:
systemctl restart iptables # 或 service iptables restart
验证是否生效:
iptables -L INPUT -n -v
查看规则列表,确认你的 ACCEPT 规则排在 ESTABLISHED/lo 之后、且无冲突的前置 DROP 干扰。
不复杂但容易忽略

















