4、OSPF安全加固:被动接口、路由过滤、TTL安全检查、邻居关系限制
OSPF 这协议吧,设计之初其实没怎么考虑安全。那时候网络环境单纯,大家默认都是「自己人」。现在可不一样了,随便一个接入层设备,都可能成为攻击入口。我这些年做安全审计,OSPF 的问题见得最多。说白了,OSPF 的安全加固,就是给这个「信任协议」加上几把锁。
今天咱们聊四个最实用的加固手段。嗯,都是我在项目里反复用过的。
4.1 被动接口:别让不该说话的人听见
先讲被动接口。这个概念其实很简单——让接口只收不发。
OSPF 默认会在所有激活的接口上发送 Hello 报文。你想想看,一个连接着终端用户的接入端口,也在那不停地喊「我是谁,我的邻居是谁」,这不等于把网络拓扑到处广播吗?
我遇到过一家金融客户,他们的核心交换机上连着几十个 VLAN。一开始 OSPF 配得比较粗,所有接口都启用了。结果呢?某个测试网段有人私接了一台路由器,直接跟核心建立了邻居关系。虽然没造成大事故,但吓得运维团队连夜整改。
配置被动接口很简单:
router ospf 1
passive-interface default
no passive-interface GigabitEthernet0/0
我个人习惯是:先全部被动,再逐个放开。这样最安全。你只需要把真正需要建立邻居关系的接口,用 no passive-interface 放出来就行。
4.2 路由过滤:只让该进来的进来
路由过滤,说白了就是「查户口」。不是所有路由都值得信任,也不是所有路由都应该进入你的路由表。
OSPF 的路由过滤可以在三个层面做:
- 入方向过滤:拒绝接收某些路由
- 出方向过滤:不让某些路由被通告出去
- 重分发过滤:控制哪些外部路由能进入 OSPF 域
我记得有一次做安全审计,发现某台设备上有一条默认路由被重分发进了 OSPF。这条路由指向一个已经废弃的出口。如果这条路由被全网学习到,后果不堪设想。这就是典型的「路由污染」。
用前缀列表做过滤,是最常见的做法:
ip prefix-list BLOCK_PRIVATE seq 5 deny 10.0.0.0/8 le 32
ip prefix-list BLOCK_PRIVATE seq 10 deny 172.16.0.0/12 le 32
ip prefix-list BLOCK_PRIVATE seq 15 deny 192.168.0.0/16 le 32
ip prefix-list BLOCK_PRIVATE seq 20 permit 0.0.0.0/0 le 32
router ospf 1
distribute-list prefix BLOCK_PRIVATE in
这里要注意:过滤规则一定要写全。我曾经见过有人只写了 deny 规则,忘了最后加一条 permit any。结果整个 OSPF 域的路由全断了。嗯,这种低级错误,犯过一次就记住了。
4.3 TTL安全检查:防伪造邻居
TTL 安全检查,这个机制很有意思。它的原理很简单:只接受 TTL 值为 255 的 OSPF 报文。
为什么是 255?因为直连邻居之间发送的报文,TTL 不会被减。如果报文经过了其他设备,TTL 一定会小于 255。这样一来,攻击者就无法从远程伪造 OSPF 报文了。
配置起来也很简单:
interface GigabitEthernet0/0
ip ospf ttl-security all-interfaces
或者针对特定邻居:
interface GigabitEthernet0/0
ip ospf ttl-security hops 1
我个人强烈建议:在所有互联接口上都启用 TTL 安全检查。这个配置几乎零开销,但能挡住绝大多数远程攻击。
你想想看,攻击者要伪造一个 OSPF 邻居,必须发送 TTL=255 的报文。但如果他不在直连链路上,报文经过中间设备 TTL 就会减。除非他能控制整条路径上的每一跳——这基本不可能。
4.4 邻居关系限制:别让陌生人加你好友
最后一个,邻居关系限制。这个其实是对前面几个措施的补充。
OSPF 默认会跟任何能收到 Hello 报文的设备建立邻居关系。这太危险了。你想想,如果有人把一台配置了 OSPF 的测试设备接入网络,它可能瞬间就跟核心路由器建立了邻居关系,然后开始交换路由信息。
限制邻居关系,主要有两种方式:
- 指定邻居路由器 ID:只允许特定 Router ID 的设备建立邻居
- 使用认证:MD5 或 SHA 认证,确保对方身份可信
配置邻居认证:
interface GigabitEthernet0/0
ip ospf message-digest-key 1 md5 MySecretKey
router ospf 1
area 0 authentication message-digest
我建议在关键链路上使用 SHA 认证。MD5 虽然还能用,但已经有已知的弱点。SHA 更安全一些。
另外,还可以限制邻居的 Router ID:
router ospf 1
neighbor 10.0.0.1
neighbor 10.0.0.2
不过说实话,这个配置在实际中用得不多。因为 Router ID 可以伪造。真正靠谱的还是认证 + TTL 检查的组合。
知识体系总览
下面这张图,把 OSPF 安全加固的四个维度串起来了。你可以对照着看,哪些措施已经做了,哪些还没做。
好了,OSPF 安全加固的四个核心手段就聊到这儿。被动接口管住「嘴」,路由过滤管住「路」,TTL 检查管住「身份」,邻居限制管住「关系」。四管齐下,OSPF 这块基本就稳了。
下次遇到 OSPF 安全审计,你可以直接拿这四点去对照检查。嗯,我保证,大部分问题都出在这几个地方。
公众号:蓝海资料掘金营,微信deep3321