我对BGP以及如何实现此配置有疑问。
我的企业核心路由器已连接到ISP(单宿主)。该路由器已经在BGP更新中将特定的公共IP前缀交换给了ISP。现在让我们说,有几步之遥的AS正在通过DDoS攻击淹没我的本地AS。该AS中有多个网络定位到我本地AS中的Web服务器。
我们如何使用BGP阻止路由器上的流量?
感谢您的回应!:)
我对BGP以及如何实现此配置有疑问。
我的企业核心路由器已连接到ISP(单宿主)。该路由器已经在BGP更新中将特定的公共IP前缀交换给了ISP。现在让我们说,有几步之遥的AS正在通过DDoS攻击淹没我的本地AS。该AS中有多个网络定位到我本地AS中的Web服务器。
我们如何使用BGP阻止路由器上的流量?
感谢您的回应!:)
Answers:
您可以使用BGP做两件事:
第一种选择是激进的选择:IP受到攻击的黑洞(阻止流量)。缺点:目标IP不再可用。好处:您的网络其余部分保持正常运行。Packetlife对它如何工作以及如何做有很好的解释。第二个选项建立在第一个选项的基础上:
RTBH还可以(在某些配置中)用于阻止来自特定IP的流量(在真正的DDoS中,这不会带来太大帮助,因为流量会来自数千个IP。同样,Packetlife有一个解释。
在您的情况下,您可以从RADB之类的路由数据库中获取AS的所有前缀,并使用基于源的RTBH阻止它们。流量仍然会打到边境的网络。
当您使用“简单” RTBH时,优势在于您可以将这些RTBH路由发送到您的上游ISP(如果他们支持),后者便可以阻止其网络中的流量,因此您不必进行处理。
@Sebastian通过Packetlife描述的RTBH方法很有用,但该方法仅在上行链路未受到攻击流量饱和时才有效。如果您的上行链路已饱和,则必须在攻击流量到达您的网络之前的某个时间点实施黑洞。
您可以使用上游黑洞社区来完成此任务。
Hurricane Electric通过BGP社区提供了客户触发的黑洞的简单解释/示例:
- 攻击开始
- 客户确定受到攻击的IP或IP范围
- 客户静态将ip或ip范围路由到Null0,并使用路由映射添加相应前缀的公告,该路由映射将其标记为6939:666。
思科配置示例(其中XXXX是被攻击的IP):
conf t
ip route X.X.X.X 255.255.255.255 Null0
router bgp YourAS
network X.X.X.X mask 255.255.255.255 route-map blackhole
route-map blackhole permit 10
set community 6939:666
end
请注意,这6939:666
是飓风电气特有的黑洞社区。您将修改此值以与上游提供者的黑洞社区相对应。
当然,可以通过多种方式进行配置。在我的Brocade设备上,我使用以下配置:
router bgp
!
redistribute static route-map blackhole
!
!
route-map blackhole permit 5
match tag 66
set community 55555:666
55555:666
您的上游提供商的黑洞社区在哪里?然后可以使用简单的命令来应用上游黑洞:
ip route 123.123.123.123 255.255.255.255 null0 tag 66
我为CloudFlare工作,我想分享一些我在这里工作的最近几个月中在缓解DDOS攻击方面获得的一些知识。
首先; 许多人诉诸网络级别的措施来减轻应用程序层DDOS攻击。在开始使用BGP Blackholing之前,请考虑是否可以处理速率限制或应用程序层保护。那说; 现在,发动非常大容量的DDOS攻击非常便宜(考虑到周围有多少个Open DNS递归,以及它们如何放大攻击)。
正如Elliot在他的回答中所描述的,如果您的网络很小,则使用BGP社区进行黑洞通信可以很好地工作。RFC 3882中记录了此机制。但是,像我们一样,如果您希望吸收攻击流量而不是黑洞(即,您希望收集DDOS攻击数据),请当心附带损害,中间网络提供商最终会变得拥挤。通过直接与发起攻击的网络的ISP对等,可以减轻附带损害。这样,您从攻击者到目的地的路径最短。此外,您可以实施Anycast网络设计,这将有效地意味着一个IP地址访问多个数据中心(取决于最接近的那个)。
显然,并非每个公司都具有进行Anycast和对等互连的基础架构;这就是为什么企业越来越多地转向云服务以在流量到达其数据中心之前消除不良流量的原因。自然,CloudFlare就是这样一种服务。
如果您收集的所有证据都是来自一个特定AS的具有源IP地址的数据包泛滥,则您可能会得出错误的结论。更有可能的解释是这些源IP被欺骗了。
反射/放大攻击涉及发送大量欺骗受害人源IP地址的数据包。如果确实是这种情况,并且您的网络中有可以放大攻击的服务器,那么您指控攻击的网络实际上是受害者,并且您正在帮助攻击者。
在这种情况下,解决方案不是应用任何类型的流量工程,而是配置服务器,使其不能在放大攻击中使用。如何做到这一点实际上并不是网络工程问题。
当然,所有分组都可能来自一个AS。通过与有问题的AS的合作,您可以确认数据包确实来自其AS。但是,通过这种级别的合作,您也可以从源头上阻止攻击。
如果我们假设您已经通过某种方法获得确认,而我没有想到要确认数据包确实来自您认为的AS,并且您无法在源头阻止它,而是想通过BGP来阻止它,那么我已经读到一种实现这一目标的冒险方法。这个想法是您在要声明的路由之前添加一条AS路径。在此前置的AS路径中,您包括那些数据包的源的AS号。
当公告到达有问题的AS中的BGP路由器时,它们将检测到环路并丢弃公告。同时,世界其他地区不会看到循环并接受该公告。
那是理论。它是否实际上会在实践中起作用取决于几个不同的因素。例如,这取决于实际使用数据包所来自的AS号,这可能与宣布这些IP地址的AS号不同。(这种差异可能是合法的,也可能是由于欺骗造成的。)
这还取决于上游用户是否发现AS路径可疑,而不对路由进行过滤。此外,距离您较远的网络也可能会丢弃您的路由,例如,如果它们也对违规的AS有不好的经验,并决定从那里丢弃所有路由。
这是否值得您冒险。
(如果可以再次找到它,我将链接到该方法的来源。)
您可以从本地网络对它们的AS进行黑洞处理,因此BGP路由器会为它们声明的任何前缀创建空路由。
优点:
相反: