
我想到了在Cisco路由器上仅使用路由器本身就对著名的fail2ban软件包进行了某种设计。
它是这样的。 陷阱规则是在边界Internet路由器接口所附的访问列表中创建的。 触发规则后,将记录一个事件。 这样的事件的每一行都包含一个特殊的标签,以便于选择。 将分析日志,并将属于陷阱的所有IP地址输入一个特殊的对象组。 可以在同一访问列表中使用该组,以禁止攻击者访问我们网络的所有IP地址和端口。
要理解本文,您需要了解什么是访问列表以及它们的用途,还需要知道如何在访问列表中使用对象组。
访问列表陷阱
例如,我们为传入访问列表编写了一条规则,所有从Internet进入我们设备的telnet端口的尝试都将落入该规则。 请注意,在规则的末尾粘贴了唯一的标签“ HONEYPOT001”。 然后,我们将在日志中搜索它。
ip access-list extended acl-WAN-In … deny tcp any any eq telnet log HONEYPOT001 …
为陷阱选择正确的标准很重要。
尝试通过端口23(telnet)从外部进行连接是最常见的尝试。 在这种情况下,对象组将立即被来自整个Internet的僵尸程序的IP地址填充,分配给访问列表的内存将仅结束。
您可以在端口22(ssh)上捕获尝试连接到设备的尝试。 它们比telnet小一个数量级。 您可以捕获尝试访问任何设备的尝试。
大量漫游器在端口7547上进行爬网,尝试使用CPE WAN管理协议进行连接。
另一个选择是捕获使用端口4786上启用的智能安装客户端的尝试。
您还可以通过选择没有Web服务器的IP地址来在端口80上设置陷阱。 这里的主要问题是搜索引擎机器人不会掉入其中。
这是一个IP地址[192.0.2.10]陷阱的示例。
ip access-list extended acl-WAN-In … deny tcp any host 192.0.2.10 eq www log HONEYPOT002 …
日志分析
当然,应该事先打开路由器的登录信息,然后将类似以下内容记录到日志中:
225435: Jan 11 08:57:13.838: %SEC-6-IPACCESSLOGP: list acl-WAN-In denied tcp 123.199.32.7(59472) -> 192.0.2.9(23), 1 packet [HONEYPOT001]
我们看到试图从外部IP地址[123.199.32.7]访问IP地址[192.0.2.9]的第23个端口。 该行中还存在标签“ HONEYPOT001”。 顺便说一句,[123.199.32.7]是写文章时被发现的真正的攻击者。
为了解析日志,我们将使用嵌入式事件管理器(EEM),它是内置在Cisco IOS中的任务自动化和软件行为调整工具。
在路由器的配置模式下,创建一个分析日志的小程序,并在日志行中标记“ HONEYPOT001”时,切断攻击者的IP地址并将此地址添加到主机BlackList对象组。
event manager applet honeypot event syslog occurs 1 pattern "HONEYPOT001" action 100 regexp "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)" "$_syslog_msg" result IP_address action 200 if $_regexp_result eq "1" action 210 cli command "enable" action 220 cli command "conf t" action 230 cli command "object-group network hosts-BlackList" action 240 cli command "h $IP_address" action 250 cli command "end" action 260 syslog msg "IP address $IP_address added to blacklist" action 270 end action 300 cli command "exit"
- 当在日志中找到标签为“ HONEYPOT001”的下一行时,将发生事件;
- 在事件处理程序中,根据模式“([[0-9] + \。[0-9] + \。[0-9] + \。[0-9] +)””,从日志行中切除并分配攻击者的IP地址变量IP地址(操作100);
- 如果地址被成功切出,并且解析行没有问题(动作200),则执行将IP地址添加到对象组的控制台命令(动作210-250);
- 在日志中记录有关陷阱触发的信息(动作260)。
存取封锁
首先想到的是使用对象组将攻击者完全阻止到我们网络的所有资源。
阻止规则必须位于带有陷阱的规则上方的访问列表中,以使被禁止的IP地址不会一次又一次地落入陷阱。
ip access-list extended acl-WAN-In … deny ip object-group hosts-BlackList any … deny tcp any any eq telnet log HONEYPOT001 …
大赦
该对象组迟早会超出所有可接受的大小,因此您必须通过清除对象组中的旧IP地址来进行大赦。 为此,我们编写了一个小程序,例如,在星期日的午夜每周一次。
在写作的路上,我们将遇到两个陷阱。
您不能删除访问列表中使用的对象组。 因此,您首先需要找出使用该组的访问列表的行号。 在我们的示例中,这是第60行。我们将使用此数字从访问列表中删除具有该组的行,然后将其返回到其原始位置。
您不能创建一个空的对象组。 因此,在创建组时,我们将立即向其添加IP地址[255.255.255.255]。 该地址永远不会通过将本地网络连接到其他网络的路由器转发,因此我们不希望有该地址的连接。
event manager applet DeleteBlackList event timer cron name timer-cron1 cron-entry "@weekly" action 100 cli command "enable" action 200 cli command "conf t" action 210 cli command "ip access-list ext acl-WAN-In" action 215 cli command "no 60" action 220 cli command "exit" action 225 cli command "no object-group net hosts-BlackList" action 230 cli command "object-group net hosts-BlackList " action 240 cli command "host 255.255.255.255" action 245 cli command "exit" action 250 cli command "ip access-list ext acl-WAN-In" action 255 cli command "60 deny ip object-group hosts-BlackList any" action 260 cli command "exit" action 265 cli command "end" action 300 syslog msg "Completed" action 400 cli command "exit"
- 从访问列表中删除带有对象组的规则。 (动作210-220);
- 删除群组本身(动作225);
- 再次创建对象组,并将广播IP地址插入其中。 (动作230-245);
- 我们将规则返回到访问列表中的旧位置。 (动作250-260)。
如果不支持访问列表标签怎么办
尽管许多IOS在其中声明了“ Syslog Correlation ACL”功能,但它们却不允许标记访问列表字符串。
在这种情况下,可以使用所谓的生成的哈希值。 (设备生成的哈希值),该值将添加到日志消息行中。
如果IOS不支持这两个选项,则必须使分析复杂一些。
我们使用访问列表中的陷阱来修改规则。 代替“ log”,我们将使用“ log-input”。
ip access-list extended acl-WAN-In … deny tcp any any eq telnet log-input …
在这种情况下,有关物理接口名称的信息以及可能转发该数据包的邻居路由器的MAC地址的信息将另外获得日志。
例如,以下消息进入日志:
Jan 11 00:20:23 172.25.100.43 2394768: Jan 10 20:20:22.808: %FMANFP-6-IPACCESSLOGP: SIP1: fman_fp_image: list acl-WAN-In denied tcp 123.199.32.7(7537) Port-channel1.88-> 192.0.2.9(23), 1 packet
然后,激活事件的规则将采用以下形式:
event syslog occurs 1 pattern "Port-channel1\.88-> 192\.0\.2\."
读什么
关于明确生成日志消息的规则的标识:
ACL Syslog相关关于嵌入式事件管理器:
嵌入式事件管理器配置指南