先建立概念理解,再通过下一个活动进行检验。
按服务而不仅仅按主机进行过滤
在规则中加入协议和端口,以及被阻止的端口能给你的三种答案。
你将能够做到
- 编写一条只放行一种服务而非一台主机的规则
- 解释为什么限定端口的放行规则是最小权限的体现
- 从响应中区分开放、拒绝和被过滤的端口
- 说明为什么对于需要安静的规则,丢弃优于拒绝
预备知识:你需要《使用 ACL 过滤流量》中的首条匹配顺序和隐式拒绝,以及《TCP、UDP 与端口》中的端口知识。
为什么重要:一条允许某台主机访问另一台主机的规则,会放行该主机上的每一项服务——数据库、管理接口,以及明年会安装的任何东西。指明服务,正是一条表达了明确意图的访问列表与一条只是大致近似的访问列表之间的区别。
仅命名地址的访问列表回答了 “愿这两台机器说话” 这个问题。这很少有人真正问过这个问题。真正的要求几乎总是与服务有关——网络团队需要应用程序端口,审计员需要读取一个系统,访客网络需要互联网,而没有任何内部内容。
将服务添加到规则
规则可以在传输协议、目标端口和地址上进行匹配。相同的首次匹配顺序,最后相同的隐式拒绝——还有一个字段需要匹配。
# Permits everything between these two hosts
permit src 10.30.10.25 dst 10.30.30.10
# Permits one service, and nothing else, between the same two
permit src 10.30.10.25 dst 10.30.30.10 tcp dport 443
目标端口是标识服务的端口,因为它是服务器监听的端口。源端口是客户端为每个连接随机选择的,匹配起来没有用处——匹配它是一个常见的早期错误,它会生成一条只起作用一次就停止的规则。
回程流量
发出请求需要回复,回复会到达客户端选择的随机源端口。无状态列表必须允许各种入站端口才能允许回复,这在很大程度上抵消了刚刚获得的精确度。
匹配连接状态可以正确解决这个问题。防火墙会跟踪它允许哪些连接出站并接受属于这些连接的回复,但没有允许任何人启动新的入站连接的规则。
# Replies to connections we already allowed out
permit ct state established,related
# One service, inbound, from one source
permit src 10.30.10.25 dst 10.30.30.10 tcp dport 443
三个答案
当与端口的连接不成功时,它的失败方式会告诉你一些具体的信息。这对于诊断和决定如何编写拒绝规则都是值得了解的。
| 结果 | 发生了什么 | 这是什么意思 |
|---|---|---|
| 打开 | 连接已完成 | 有东西在监听但没有过滤掉它 |
| 已拒绝 | 重置立即回来了 | 数据包到达主机并得到回复-要么什么都没有监听,要么被规则拒绝 |
| 已过滤 | 在超时之前根本没有响应 | 有些东西默默地丢弃了它 |
区别信号是时间。拒绝会立即返回,因为有答案。掉落会占用全部超时时间,因为什么都没做。如果你不注意区别,两者看起来都像 “它没有连接”。
反对拒绝
| 行动 | 回复已发送 | 对扫描仪的影响 | 对合法客户的影响 |
|---|---|---|---|
| 掉落 | 无 | 速度慢-每个端口都需要完全超时 | 故障缓慢,错误不明显 |
| 拒绝 | 立即重置或 ICMP 消息 | 快速-扫描快速完成 | 故障速度快,错误更清晰 |
在面对任何不可信的边界处进行丢弃是正确的默认设置:它会消耗攻击者的时间,对那里的内容一无所知。在你控制的网络中,拒绝更友善,快速清除故障可以为某人节省一个下午的诊断时间,而且没有扫描仪可以让人失望。
一项审计发现,比规定还要多
允许 Web 层到达应用程序层的规则是由地址编写的,因为当时应用服务器运行一项服务。现在,它还在其默认端口上运行数据库。访问列表中没有任何变化,里面看起来也没有问题——网络服务器只是在服务启动之日获得了直接的数据库访问权限,而授予访问权限的规则是在几年前出于不同的原因制定的。
通过行为进行验证
读法正确的规则仍然不起作用,不应将取得相同结果的学员标记为错误。检查过滤器意味着测试重要的机器实际发生了什么。
# Should connect
nc -w 3 10.30.30.10 443
# Should time out with no response at all
nc -w 3 10.30.30.10 3306
术语
- 目标端口
- 服务器监听的端口,以及在规则中标识服务的端口。
- 有状态过滤
- 跟踪允许的连接,以便在没有允许新入站连接的规则的情况下允许回复。
- 已过滤
- 一个端口,其流量会被静默丢弃,不给出任何响应。
- 已拒绝
- 通过重置进行应答的端口-要么什么都不监听,要么是拒绝规则。
要点总结
- 匹配目标端口以允许服务;源端口是随机的,无法匹配。
- 仅限地址的许可授予该主机上的所有服务,包括未来的服务。
- 匹配的连接状态允许回复,而不允许新的入站连接。
- 打开、拒绝和筛选是三种不同的结果,区别在于是否回复了任何内容。
- 通过 TCP,除了已停止的服务之外,无法分辨出拒绝情况。
- 在不可信的边界处丢弃;在明显的错误比成本更大的网络内拒绝。
准备好继续了吗?
创建免费账户,保存学习进度并进行知识检测。
