运维面试题分享
🧩 题目要求:
只允许 IP 地址为 10.1.8.179 的主机访问本服务器的 22 端口(SSH 端口),其他所有 IP 都拒绝。
🔍 什么是 iptables?
iptables
是 Linux 系统上用于配置防火墙规则的工具。它通过设置规则来控制网络数据包的进出,从而保护系统安全。
iptables
的规则是按顺序匹配的,一旦匹配到某条规则,就会执行该规则指定的动作(如接受、拒绝、丢弃等),后面的规则就不再检查了。
🧱 iptables 的基本结构:
iptables -A 链名 匹配条件 -j 动作
- •
-A
:表示 追加 一条规则到某个链(chain)的末尾。 - •
链名
:常见的链有INPUT
(入站)、OUTPUT
(出站)、FORWARD
(转发)。 - •
匹配条件
:比如协议类型(-p tcp
)、目标端口(--dport 22
)、源 IP(-s IP地址
)等。 - •
-j
:表示 跳转到 某个动作,比如ACCEPT
(接受)、DROP
(丢弃)、REJECT
(拒绝)等。
🧪 分析你给出的答案:
第一条规则:
bash
iptables -A INPUT -p tcp --dport 22 -s 10.1.8.179 -j ACCEPT
- • 作用:允许来自 IP 地址
10.1.8.179
的 TCP 数据包访问本机的 22 端口。 - • 解释:
- •
-A INPUT
:追加到INPUT
链(处理入站数据包)。 - •
-p tcp
:指定协议为 TCP。 - •
--dport 22
:目标端口为 22(SSH 默认端口)。 - •
-s 10.1.8.179
:源 IP 地址为 10.1.8.179。 - •
-j ACCEPT
:接受这个数据包。
- •
✅ 这条规则表示:只有 10.1.8.179 可以访问 22 端口,并接受连接。
第二条规则:
bash
iptables -A INPUT -p tcp --dport 22 -j DROP
- • 作用:丢弃所有其他尝试访问 22 端口的 TCP 数据包。
- • 解释:
- • 同样作用于
INPUT
链。 - • 同样针对 TCP 协议、目标端口 22。
- • 但没有指定源 IP(
-s
),表示对所有 IP 生效。 - •
-j DROP
:直接丢弃数据包,不给任何回应。
- • 同样作用于
✅ 这条规则表示:除了上面明确允许的 IP,其他所有 IP 都无法访问 22 端口。
⚠️ 注意事项:
- 1. 顺序很重要:
- •
iptables
是按顺序匹配规则的。 - • 如果你先加了
DROP
规则,再加ACCEPT
规则,那么ACCEPT
就不会生效了,因为数据包已经被DROP
掉了。 - • 所以:必须先允许特定 IP,再拒绝其他所有 IP。
- •
- 2. 保存规则:
- •
iptables
规则在重启后会丢失,除非你保存它们。 - • 在 CentOS 上可以使用:service iptables save
- • 在 Ubuntu 上可以使用
iptables-persistent
工具保存。
- •
- 3. 远程操作风险:
- • 如果你通过 SSH 远程连接服务器,并且规则设置错误(比如把自己挡在外面),你可能会失去连接。
- • 建议先在本地测试,或者设置定时任务清除规则(比如 5 分钟后自动清除),防止误操作。
✅ 总结:
你给出的答案是正确且合理的:
iptables -A INPUT -p tcp --dport 22 -s 10.1.8.179 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
这两条规则配合使用,实现了仅允许 10.1.8.179 访问 22 端口,其他全部拒绝的需求。