第3周防火墙挑战
I’m sorry, but I don’t have the ability to retrieve or view the content from the linked article. If you can provide the text you’d like translated, I’ll be happy to translate it into Simplified Chinese while preserving the formatting and code blocks as requested.
场景
你是安全工程师。网络已上线。配置防火墙,否则公司将面临漏洞。
不提供解决方案。不提供逐步指南。仅提供需求和规则集验证器。
听起来令人畏惧吗?很好,这就是目的。
你正在构建的内容
📝 你的交付物: 一个完整的 iptables 规则集,保存为文件 (challenge4-ruleset.txt)
你将配置一个 3 区域企业防火墙,保护:
- Internet ↔ 服务器农场(Web、邮件、数据库、DNS 服务器)
- 企业局域网 ↔ 服务器农场(员工访问)
- 企业局域网 ↔ Internet(浏览、更新)
共有 18 条具体要求,包括:
- ✅ 访问控制(谁可以访问什么?)
- ✅ 安全日志(带速率限制)
- ✅ 防欺骗保护
- ✅ 有状态连接跟踪
- ✅ 网络分段
你必须创建的内容
- 包含 iptables 命令的 Bash 脚本 (
challenge4-solution.sh) - 使用
iptables-save保存的规则集文件 (challenge4-ruleset.txt) - 将规则集文件上传至 Claude/ChatGPT 进行 AI 评分
Why This Challenge Is Different
Most firewall tutorials:
- 给出命令
- 解释每一行
- 手把手指导设置
- 不进行测试
This challenge:
- 给出 requirements,而不是命令
- 由你自行实现
- 明确的成功标准(通过/失败)
- 测试真实场景
它的设计类似于居家安全面试。
您将学习
1. 有状态防火墙
# Implement connection tracking
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
了解 为何此规则必须放在首位 能将初学者与专业人士区分开来。
2. 网络分段
- Internet → 只能访问 Web/邮件 服务器
- Employees → 可以访问内部门户,不能直接访问数据库
- IT Admin → 可 SSH 访问所有服务器
- Web Server → 可访问数据库,员工 不能 直接访问数据库
3. 安全日志(不占用磁盘空间)
# Rate‑limited logging prevents log‑flooding attacks
iptables -A FORWARD -m limit --limit 5/min --limit-burst 10 -j LOG
您将学习何时记录日志、何时进行速率限制,以及两者为何重要。
4. 防欺骗保护
# Block packets claiming to be from your network but arriving on the wrong interface
iptables -A FORWARD -i eth1 ! -s 192.168.10.0/24 -j DROP
这可以防御 IP 欺骗攻击。
挑战结构
第1部分:基础设置
- 设置默认策略
- 配置有状态连接跟踪
- 丢弃无效数据包
第2部分:Internet ↔ 服务器群
- 仅允许 HTTP/HTTPS 访问 Web 服务器
- 仅允许 SMTP 访问邮件服务器
- 阻止其他所有流量(并记录日志)
第3部分:企业局域网 ↔ 服务器群
- 员工访问 Web 门户和电子邮件
- IT 管理员可通过 SSH 访问所有服务器
- Web 服务器可以查询数据库
- 其他所有访问均被阻止
第4部分:企业局域网 ↔ Internet
- 员工浏览网页,使用 DNS
- Internet 不能直接访问企业局域网
第5部分:安全加固
- 防欺骗规则
- 连接速率限制
- 全面日志记录
总计: 必须正确实现的 18 项具体要求。
难度如何?
- 初学者? 你会感到吃力(这就是目的)。
- 中级? 如果你了解 iptables 基础,45–60 分钟即可完成。
- 专家? 证明给我们看。第一次就完美完成。
每个人最终都会拥有一个真实的企业防火墙规则集,作为作品集的一部分。
挑战工作流
1. Write iptables script → 2. Save ruleset file → 3. Upload to AI → 4. Get graded
(30‑60 min) (iptables‑save) (Claude) (Score/100)
↓
Fix & retry
until 95+/100
您必须创建一个实际的文件来保存您的 iptables 规则——这不是阅读练习!
如何完成此挑战
⚠️ 重要提示
您必须创建实际的 iptables 规则集文件,而不仅仅是阅读需求!
此挑战共有 7 个明确步骤:
步骤 1:获取挑战
git clone https://github.com/fosres/AppSec-Exercises.git
cd AppSec-Exercises/Week-3-Firewalls
cat Challenge_4_Corporate_Network_Firewall.md
步骤 2:阅读全部 18 条需求
挑战文档包括:
- ✅ 网络拓扑图(3 个区域:Internet、企业局域网、服务器农场)
- ✅ 18 条编号需求(允许/阻止的内容)
- ✅ 对速率限制的明确规范
- ✅ 对日志记录的明确规范
- ✅ 成功标准检查清单
在编写任何命令之前,请先阅读全部内容!
注意: 有一个可用的解决方案在此处,但 请先自行尝试! 与其复制,不如通过挣扎学习得更多。
步骤 3:编写您的 iptables 脚本
# Create your solution file
vim challenge4-solution.sh
添加必要的 iptables 命令,使脚本可执行,并在合适的 Linux 主机上进行测试。
步骤 4:保存规则集
sudo iptables-save > challenge4-ruleset.txt
步骤 5:上传以供 AI 评分
将 challenge4-ruleset.txt 提交给 Claude/ChatGPT(或提供的验证器),并查看反馈。
步骤 6:迭代
修复验证器报告的任何问题,重新保存规则集并重新上传,直至获得合格分数(≥ 95/100)。
步骤 7:记录您的工作
在 challenge4-solution.sh 中添加注释,解释每条规则以及它为何满足相应的需求。这对以后参考以及在作品集中展示您的解决方案都很有价值。
企业网络防火墙 – 挑战 4
开始使用的模板
#!/bin/bash
# Challenge 4: Corporate Network Firewall
# Your Name - Date
# Flush existing rules
sudo iptables -F
sudo iptables -X
# Set default policies
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# ============================================
# PART 1: BASIC SETUP
# ============================================
# Rule 1: Allow established connections
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Rule 2: Drop invalid packets
sudo iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
# ============================================
# PART 2: ANTI‑SPOOFING
# ============================================
# Rule 3: Block spoofed packets on eth1
# TODO: Implement this
# ============================================
# CONTINUE WITH ALL 18 REQUIREMENTS...
# ============================================
echo "Firewall configured successfully!"
你的任务: 在上面的脚本中实现全部 18 条要求,使用 iptables 规则。
第4步 – 测试脚本(可选)
如果你有 VM 或实验环境:
# Make executable
chmod +x challenge4-solution.sh
# Run it
sudo ./challenge4-solution.sh
# Verify rules loaded
sudo iptables -L FORWARD -v -n
提示: 如果没有实验环境,你可以直接跳到第5步。
第5步 – 将规则集保存到文件
此步骤为评分所必需。
如果你已经运行了脚本
# 保存当前的 iptables 规则
sudo iptables-save > challenge4-ruleset.txt
如果你没有实验环境
- 手动创建规则集文件,只提取脚本中的
iptables命令。 - 删除
sudo和echo行,只保留iptables命令。 - 格式应与
iptables-save的输出相匹配。
示例 challenge4-ruleset.txt
# Generated by iptables-save v1.8.9
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD ! -s 192.168.10.0/24 -i eth1 -j LOG --log-prefix "LAN-SPOOF: "
-A FORWARD ! -s 192.168.10.0/24 -i eth1 -j DROP
# ... rest of your rules ...
COMMIT
# Completed on [date]
此文件即为你提交用于评分的文件!
第6步 – 获取 AI 驱动的评分
将你的规则集上传到 Claude 或 ChatGPT,以获得即时反馈。
- 前往相应的 AI 界面。
- 复制/粘贴以下提示:
I completed the Corporate Network Firewall Challenge (Challenge 4).
Please grade my iptables ruleset against all 18 requirements.
Challenge requirements:
[Paste the entire Challenge_4_Corporate_Network_Firewall.md file here]
My iptables ruleset:
[Paste your challenge4-ruleset.txt file here]
Please provide:
1. Score out of 100
2. Which requirements I passed/failed
3. Specific issues with my rules
4. Security problems or best‑practice violations
5. Suggestions for improvement
AI 将会:
- ✅ 系统检查全部 18 条要求
- ✅ 验证规则顺序是否正确
- ✅ 识别安全问题
- ✅ 确认速率限制和日志记录是否正确应用
- ✅ 给出详细的得分细分和改进建议
示例评分输出
Score: 85/100
✅ Requirement 1: ESTABLISHED connections (PASS)
✅ Requirement 2: INVALID drop (PASS)
❌ Requirement 4: Missing rate limiting on LOG rule (FAIL)
⚠️ Requirement 7: Using entire subnet instead of specific IP (SECURITY ISSUE)
...
Issues found:
1. LOG rule missing -m limit (will flood logs during attack)
2. -d 192.168.20.0/24 too broad (should be 192.168.20.10)
Your score: 85/100 – Fix these issues for 100/100!
第7步 – 迭代至完美
如果你的得分低于 95/100:
- 仔细阅读 AI 的反馈。
- 修复指出的具体问题。
- 更新你的脚本。
- 保存新的规则集:
sudo iptables-save > challenge4-ruleset.txt - 重新提交以进行评分。
重复此过程,直至你获得 95‑100/100——这时你就知道自己已经掌握了。
为什么要给仓库加星 ⭐
这不仅是一篇博客文章——它是一套完整的实战课程。
仓库包含:
- ✅ 挑战 1: 基础 Linux 防火墙(入门)
- ✅ 挑战 2: 多接口 DMZ 搭建(中级)
- ✅ 挑战 3: 符合 PCI‑DSS 的防火墙(高级)
- ✅ 挑战 4: 企业网络(本挑战!)
- 🔜 更多挑战即将上线:VPN 集成、云防火墙、Kubernetes 网络策略
加星的好处:
- ✅ 便于日后收藏
- ✅ 支持开源安全教育
- ✅ 获取新挑战的通知
- ✅ 表达赞赏(免费)
常见错误(在尝试之前不要偷看!)
⚠️ 真的,先尝试挑战再阅读这些!
错误 1:忘记 ESTABLISHED 连接
# Wrong: Each direction needs explicit rules
# Right: One ESTABLISHED rule handles return traffic
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
错误 2:规则顺序错误
# Wrong: DROP before ALLOW
-A FORWARD -i eth0 -o eth1 -j DROP # Blocks everything!
-A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACCEPT # Never reached
# Right: ALLOW before DROP
-A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j DROP
错误 3:忘记对 LOG 规则进行速率限制
# Wrong: Attackers can flood your logs
-A FORWARD -j LOG
# Right: Rate‑limited logging
-A FORWARD -m limit --limit 5/min --limit-burst 10 -j LOG
错误 4:目的 IP 范围过宽
# Wrong: Allows access to entire server network
-A FORWARD -d 192.168.20.0/24 -p tcp --dport 3306 -j ACCEPT
# Right: Only specific database server
-A FORWARD -d 192.168.20.30 -p tcp --dport 3306 -j ACCEPT
⚠️ 警告: 在查看答案之前,请先自行尝试挑战。
通过自己摸索,你的收获会是直接复制他人答案的 10 倍。
可参考的完整解法(仅供参考)
记住:有多种有效的实现方式。上面的链接展示的是 一种 能拿到 100/100 分的方案;你的解法可能不同,同样有效。
完成此任务后…
你将获得的技能
- 从零配置企业级防火墙。
- 解释有状态过滤与无状态过滤的区别。
- 设计多区域网络架构。
- 实现安全日志记录且不影响系统运行。
- 在安全面试中轻松回答防火墙相关问题。
简历要点
“配置了企业级公司防火墙,具备3区分段、状态过滤、防欺骗保护以及全面的安全日志记录。”
作品集建议
- 链接到你的 GitHub 方案(如果你愿意分享)。
- 在面试中提及:“我完成了一个企业防火墙挑战,测试了包括网络分段、限速日志记录和防欺骗在内的18项真实需求”。
社区
完成挑战后
- 对比我的解法(可选)– 查看 100/100 规则集,学习其他方法。
- 分享你的解法(可选)– 创建 GitHub Gist,撰写博客文章,在讨论中帮助他人。
- 提供反馈 – 有哪些不清楚的地方?需求是否需要更详细或更简略?你还想要哪些其他挑战?
- 给仓库加星 ⭐ – 支持项目,获取新挑战通知,帮助他人发现它。
准备好了吗?这是你的任务 🎯
- ⭐ Star the repo(获取需求)。
- 📖 仔细阅读全部 18 条需求。
- 💻 编写你的 iptables 脚本(将所有 18 条需求写成规则)。
- 💾 使用
iptables-save将规则集保存为challenge4-ruleset.txt。 - 🤖 上传至 Claude/ChatGPT 进行即时 AI 评分。
- 🔁 修复问题并重新提交,直至获得 95 +/100 的分数。