iptables 测试篇

本文由 Codex 辅助生成,用来测试自己是否掌握 iptables 基础命令。

上一篇整理了 iptables 的基础概念和常用命令。这一篇换个方式:不继续讲概念,而是通过题目检查自己是否真的会用。

建议先不要看答案,自己在纸上或测试机器里写一遍命令,再对照参考答案。

注意:不要直接在生产机器或远程服务器上随便执行 DROP-F-P INPUT DROP 这类命令,容易把自己锁在外面。

一、基础概念题

1. iptables 和 netfilter 分别是什么?

要求:用自己的话说明谁在用户态,谁在内核态。

2. 下面三类流量分别主要看哪条链?

  1. 别人访问本机服务
  2. 本机主动访问外部服务
  3. Linux 机器作为网关转发流量

3. filter 表主要用来做什么?

要求:说出它和 nat 表的区别。

4. iptables 规则为什么要注意顺序?

要求:说明规则从上往下匹配的影响。

5. DROPREJECT 有什么区别?

要求:说明对方是否会收到响应。

二、命令填空题

6. 查看 filterINPUT 链规则,并显示规则编号

1
iptables -t filter ___ INPUT -n -v ___

7. 丢弃访问本机 TCP 80 端口的数据包

1
iptables -t filter -A ___ -p tcp ___ 80 -j ___

8. 允许访问本机 UDP 53 端口

1
iptables -A INPUT -p ___ --dport ___ -j ACCEPT

9. 把 INPUT 链默认策略设置为丢弃

1
iptables ___ INPUT ___

10. 删除 INPUT 链第 8 条规则

1
iptables -t filter ___ INPUT ___

11. 在 INPUT 链第 4 条规则前插入一条允许 UDP 54 的规则

1
iptables -t filter ___ INPUT 4 -p udp --dport 54 -j ACCEPT

12. 放行已有连接和相关连接的回包

1
iptables -A INPUT -m conntrack ___ ESTABLISHED,RELATED -j ACCEPT

三、判断题

13. 不写 -t 参数时,iptables 默认操作 filter 表。

对 / 错?

14. -A INPUT 4 表示把规则插入到 INPUT 链第 4 条前面。

对 / 错?

15. -P INPUT DROP 设置的是 INPUT 链的默认策略,它会排在所有规则之前优先匹配。

对 / 错?

16. 本机主动访问外部服务时,外部返回的数据包可能会进入 INPUT 链。

对 / 错?

17. LOG 动作会记录日志,然后继续匹配后续规则。

对 / 错?

四、场景题

18. 默认拒绝全部入站,只允许 UDP 53

要求:写出完整命令。至少包含:

  • 放行已有连接回包
  • 放行本机回环接口
  • 放行 UDP 53
  • 设置 INPUT 默认策略为 DROP

19. 只临时阻断别人访问本机 8080 端口

要求:写一条规则,不修改默认策略。

20. 查看规则时发现不知道该删除哪条,应该先执行什么命令?

要求:显示规则编号,避免删错。

21. 想允许 SSH 连接后再设置默认拒绝入站,应该先做什么?

要求:写出放行 SSH 22 端口的命令,并说明为什么要先做。

22. 想清空 INPUT 链所有规则,命令怎么写?

要求:只清空 INPUT 链,不清空所有链。

23. 想看当前所有 iptables 规则,适合备份或排障,应该用什么命令?

要求:写出命令。

五、排错题

24. 下面命令有什么问题?

1
iptables -A INPUT -p tcp -dport 80 -j DROP

25. 下面命令有什么问题?

1
iptables -P INPUT -j DROP

26. 下面命令有什么问题?

1
iptables -t filter -A INPUT 4 -p udp --dport 54 -j ACCEPT

27. 下面命令有什么风险?

1
iptables -P INPUT DROP

参考答案

1. iptables 和 netfilter

iptables 是用户态命令行工具,用来写规则;netfilter 是 Linux 内核里的包处理框架,真正根据规则处理数据包。

2. 三类流量对应链

  1. 别人访问本机服务:INPUT
  2. 本机主动访问外部服务:OUTPUT
  3. Linux 机器作为网关转发流量:FORWARD

3. filter 表和 nat 表

filter 表主要做过滤,决定包能不能通过;nat 表主要做地址转换,比如 DNAT、SNAT、MASQUERADE。

4. 规则顺序

iptables 在同一条链里从上往下匹配规则。前面的规则先命中,后面的规则可能就没有机会执行。

5. DROP 和 REJECT

DROP 是直接丢弃,不给对方响应;REJECT 是拒绝,并返回错误信息。

6. 查看 INPUT 链规则编号

1
iptables -t filter -L INPUT -n -v --line-numbers

7. 丢弃 TCP 80

1
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP

8. 允许 UDP 53

1
iptables -A INPUT -p udp --dport 53 -j ACCEPT

9. 设置 INPUT 默认策略

1
iptables -P INPUT DROP

10. 删除 INPUT 第 8 条规则

1
iptables -t filter -D INPUT 8

11. 插入 UDP 54 规则

1
iptables -t filter -I INPUT 4 -p udp --dport 54 -j ACCEPT

12. 放行已有连接回包

1
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

13. 默认表

对。不写 -t 时默认操作 filter 表。

14. 插入规则

错。插入规则要用 -I INPUT 4,不是 -A INPUT 4

15. 默认策略优先级

错。默认策略是在链里没有任何规则匹配时才执行,可以理解为优先级最低。

16. 出站请求的回包

对。本机请求从 OUTPUT 出去,对方返回的数据包会进入本机,所以可能经过 INPUT 链。

17. LOG 动作

对。LOG 只记录日志,不会直接放行或丢弃,后续通常还要接 ACCEPTDROP 规则。

18. 默认拒绝入站,只允许 UDP 53

1
2
3
4
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -P INPUT DROP

19. 阻断 TCP 8080

1
iptables -A INPUT -p tcp --dport 8080 -j DROP

20. 删除前查看编号

1
iptables -t filter -L INPUT -n -v --line-numbers

21. 先放行 SSH

1
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

如果是远程操作,先放行 SSH 再设置 INPUT DROP,否则可能把自己的 SSH 连接阻断。

22. 清空 INPUT 链

1
iptables -F INPUT

如果要指定表,也可以写:

1
iptables -t filter -F INPUT

23. 查看完整规则

1
iptables-save

24. -dport 问题

dport 前面少了一个 -,应该写成 --dport

1
iptables -A INPUT -p tcp --dport 80 -j DROP

25. 默认策略命令问题

-P 后面直接跟链名和策略,不需要 -j

1
iptables -P INPUT DROP

26. 插入规则命令问题

-A 是追加到末尾,不能指定插入位置。要插入到第 4 条前面,应该用 -I

1
iptables -t filter -I INPUT 4 -p udp --dport 54 -j ACCEPT

27. 设置默认 DROP 的风险

如果远程机器没有先放行 SSH、已有连接、本机回环等流量,直接执行 iptables -P INPUT DROP 可能导致 SSH 断开,自己连不回去。

自测评分

  • 0-10 题:还需要回去重看基础概念。
  • 11-20 题:已经知道常用命令,但需要多练习场景题。
  • 21-27 题:基础命令基本掌握,可以继续学习 NAT、端口转发和持久化规则。

如果能不看答案写出第 18 题和第 21 题,说明你已经掌握 iptables 入门阶段最容易踩坑的部分。