1. 首页 > 技术教程 > 正文

Iptables 基础:手把手教你配置最简单的服务器安全规则

Iptables 基础:手把手教你配置最简单的服务器安全规则

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

Iptables 基础:手把手教你配置最简单的服务器安全规则的图片

清空默认规则,防止配置冲突

刚上手 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