Iptables 基础:手把手教你配置最简单的服务器安全规则
刚买一台 VPS 或服务器,最怕的就是 SSH 被爆破、端口被扫、服务被利用。别问为什么,照着下面的 Iptables 基础规则配置一遍,服务器安全至少提升一个档次。这篇 Linux 教程来自主机选,全程实战,不扯理论。

清空默认规则,防止配置冲突
刚上手 Iptables,默认规则可能乱成一团。先把它清干净,再重新写。
清空所有规则
iptables -F
删除自定义链
iptables -X
清零计数器
iptables -Z
这条命令不会影响正在运行的连接,但会清掉所有防火墙规则。如果你之前用 `iptables -L` 看到一堆规则,执行这三条后应该只剩默认链。
设置默认策略:拒绝一切入站,放行所有出站
服务器安全的核心逻辑:默认拒绝入站,只放行必要端口。
默认拒绝所有入站流量
iptables -P INPUT DROP
默认拒绝转发流量
iptables -P FORWARD DROP
默认放行所有出站流量
iptables -P OUTPUT ACCEPT
这里有个坑:执行完 `iptables -P INPUT DROP` 后,如果你当前的 SSH 连接还没放行,会被立刻踢下线。所以下面两步必须紧接着做,或者先放行 SSH 再改默认策略。
放行 SSH、HTTP、HTTPS 等常用端口
放行 SSH(22 端口)
这是最基础的操作,不放行你就没法远程管理。
放行 22 端口,只允许 TCP 协议
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
放行 HTTP(80)和 HTTPS(443)
如果你的服务器要跑网站,这两个端口必须开。
放行 HTTP
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
放行 HTTPS
iptables -A INPUT -p tcp –dport 443 -j ACCEPT
放行已建立连接和回环接口
允许已建立的连接继续通信
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
允许本地回环通信
iptables -A INPUT -i lo -j ACCEPT
`ESTABLISHED` 状态保证你不会因为规则变更而断网,`lo` 接口是本地通信用的,不放行会导致很多服务异常。
保存规则防重启丢失
Iptables 规则默认是临时的,重启后全部消失。必须手动保存。
CentOS / RHEL / Rocky Linux
保存规则到 /etc/sysconfig/iptables
service iptables save
或者用新命令
iptables-save > /etc/sysconfig/iptables
Ubuntu / Debian
安装 iptables-persistent
apt install iptables-persistent -y
保存规则
netfilter-persistent save
或者手动保存
iptables-save > /etc/iptables/rules.v4
检查规则与排障
配置完规则后,用 `iptables -L -n -v` 查看效果。常见报错和解决办法:
报错 `iptables: Permission denied`
你没用 root 权限。所有 Iptables 命令必须用 `sudo` 或 root 账号执行。
sudo iptables -L -n
规则写完后 SSH 连不上
大概率是默认策略 `INPUT DROP` 先执行了,但 SSH 放行规则还没加。解决方法:通过 VPS 控制台的 VNC 或救援模式登录,然后清空规则重新配置。
清空所有规则恢复连接
iptables -F
iptables -X
iptables -P INPUT ACCEPT
端口放行后还是访问不了
检查系统防火墙(firewalld / ufw)是否同时开着。Iptables 和 firewalld 冲突会导致规则不生效。建议二选一,不要混用。
禁用 firewalld
systemctl stop firewalld
systemctl disable firewalld
老鸟叮嘱:别一次全删默认策略
新手最容易犯的错误:配置完规则后,直接用 `iptables -F` 清空所有规则。但如果你之前设了 `INPUT DROP` 默认策略,清空规则后所有端口依然被拒绝。清空规则前,先把默认策略改回 ACCEPT。
安全清空流程
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X
FAQ
Linux SSH 连不上怎么办?
先确认 SSH 服务是否运行:`systemctl status sshd`。如果服务正常,检查 Iptables 规则是否放行了 22 端口,以及云服务商的安全组是否允许入站 22。
VPS 防火墙端口放行后还是访问不了是什么原因?
常见原因:系统防火墙和云厂商安全组双重拦截。先查 Iptables 规则(`iptables -L -n`),再确认云控制台的安全组已放行对应端口。另外检查服务是否绑定了 127.0.0.1 而不是 0.0.0.0。
Linux 小白可以直接用 root 账号操作吗?
可以,但风险高。建议用普通用户+`sudo` 方式操作。万一写错规则导致断网,用普通用户还能通过重置密码等方式恢复。
BBR 开启后为什么速度没有明显提升?
BBR 只对高延迟、丢包严重的网络有效。如果你的服务器带宽足够且延迟低,开启 BBR 效果不明显。另外检查是否和 Iptables 规则冲突,某些规则可能会干扰 BBR 的拥塞控制。
保存 Iptables 规则后重启服务器,规则丢失了怎么办?
说明你只执行了规则,没执行保存命令。重新执行 `iptables-save > /etc/sysconfig/iptables`(CentOS)或 `netfilter-persistent save`(Ubuntu)并确保服务开机自启。
Iptables 和 firewalld 可以共存吗?
可以但强烈不推荐。两个工具都操作内核的 netfilter 模块,规则冲突时很难排查。建议只用一个,VPS 上推荐直接用 Iptables,轻量、直接、好控制。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9497.html 商家投稿邮箱:zhujixuanblog@qq.com
