iptables 测试篇
本文由 Codex 辅助生成,用来测试自己是否掌握 iptables 基础命令。
上一篇整理了 iptables 的基础概念和常用命令。这一篇换个方式:不继续讲概念,而是通过题目检查自己是否真的会用。
建议先不要看答案,自己在纸上或测试机器里写一遍命令,再对照参考答案。
注意:不要直接在生产机器或远程服务器上随便执行
DROP、-F、-P INPUT DROP这类命令,容易把自己锁在外面。
一、基础概念题
1. iptables 和 netfilter 分别是什么?
要求:用自己的话说明谁在用户态,谁在内核态。
2. 下面三类流量分别主要看哪条链?
- 别人访问本机服务
- 本机主动访问外部服务
- Linux 机器作为网关转发流量
3. filter 表主要用来做什么?
要求:说出它和 nat 表的区别。
4. iptables 规则为什么要注意顺序?
要求:说明规则从上往下匹配的影响。
5. DROP 和 REJECT 有什么区别?
要求:说明对方是否会收到响应。
二、命令填空题
6. 查看 filter 表 INPUT 链规则,并显示规则编号
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. 三类流量对应链
- 别人访问本机服务:
INPUT - 本机主动访问外部服务:
OUTPUT - 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 只记录日志,不会直接放行或丢弃,后续通常还要接 ACCEPT 或 DROP 规则。
18. 默认拒绝入站,只允许 UDP 53
1 | iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
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 入门阶段最容易踩坑的部分。
- iptables 测试篇
- 一、基础概念题
- 二、命令填空题
- 三、判断题
- 四、场景题
- 五、排错题
- 参考答案
- 1. iptables 和 netfilter
- 2. 三类流量对应链
- 3. filter 表和 nat 表
- 4. 规则顺序
- 5. DROP 和 REJECT
- 6. 查看 INPUT 链规则编号
- 7. 丢弃 TCP 80
- 8. 允许 UDP 53
- 9. 设置 INPUT 默认策略
- 10. 删除 INPUT 第 8 条规则
- 11. 插入 UDP 54 规则
- 12. 放行已有连接回包
- 13. 默认表
- 14. 插入规则
- 15. 默认策略优先级
- 16. 出站请求的回包
- 17. LOG 动作
- 18. 默认拒绝入站,只允许 UDP 53
- 19. 阻断 TCP 8080
- 20. 删除前查看编号
- 21. 先放行 SSH
- 22. 清空 INPUT 链
- 23. 查看完整规则
- 24. -dport 问题
- 25. 默认策略命令问题
- 26. 插入规则命令问题
- 27. 设置默认 DROP 的风险
- 自测评分