我在Centos上运行snort作为IDS。我试图测试snort是否可以检测到syn flood攻击。我从同一个局域网发送攻击。我在local.rules中添加了这个规则(alert tcp!$ HOME_NET any - > $ HOME_NET 80(flags:S; msg:“可能的TCP DoS”;流程:无状态;阈值:同时键入两个,跟踪by_src,计数70,秒10; sid:10001; rev:1;)。当我在快速模式下运行snort时,Snort警报文件没有记录。它正在记录,但现在它没有。所以我看不出它是否检测到攻击。我怎么能让snort检测到这次攻击?
答案 0 :(得分:2)
对于初学者,不推荐使用关键字“threshold”,将来的版本不支持。您应该使用关键字“detection_filter”代替(reference)。
您需要确保启动syn flood的主机不是$ HOME_NET变量中包含的主机,否则您需要将源IP更改为“any”或“$ HOME_NET”(如果它们位于$中) HOME_NET)。这也取决于你的syn flood攻击。您是使用多个源主机来同步目标主机,还是使用一个源主机来同步到目的地?这将有所作为。如果您有多个源主机,则需要按目的地进行跟踪(您可能希望以此方式按目的地进行跟踪)。如果您从单个主机启动syn flood,则可以按来源跟踪 detect_filter的速率由源IP地址或目标IP地址跟踪。这意味着为每个唯一的源IP地址或每个唯一的目标IP地址维护计数。因此,如果您的syn flood有多个源IP,则需要使用“track by_dst”来跟踪转到单个目标的syns数量。例如:
任何警告tcp任何 - > $ HOME_NET 80(flags:S; msg:“可能的TCP DoS”;流:无状态; detection_filter:track by_dst,count 70,seconds 10;)
在前70个syns之后的10秒的一个采样周期内,此规则将在$ HOME_NET中警告每个syn到$ HOME_NET中的唯一IP。编写这样的规则可能会导致问题,因为您需要知道正常连接数是多少。您希望您的网络服务器在10秒内获得超过70个连接吗?如果是这样,那么你需要增加计数或减少秒数。
如果您的syn flood攻击有一个唯一的源,在$ HOME_NET中为目标IP生成多个syns,则可以跟踪by_src:
任何警告tcp任何 - > $ HOME_NET 80(flags:S; msg:“可能的TCP DoS”;流程:无状态; detection_filter:跟踪by_src,计数70,秒10;)
此规则将在前70个syns之后的10秒的一个采样周期内触发从$ HOME_NET中的唯一IP到唯一IP的每个syn。 示例:主机10.1.1.1在10秒内向主机10.1.1.2发送83个syns,其中最后13个syns将被警告。
我想说你想要按目的地进行追踪,因为它将涵盖两种情况(单个或多个源IP)。您希望规则只是限制与Web服务器的连接数,因此您将跟踪到目标的连接,并在达到某个阈值后将其删除,以防止服务器被淹没。 syn floods典型地将源IP随机化,因此如果您按源进行跟踪,则不会阻止同步泛滥。
答案 1 :(得分:0)
对于我的回答,我假设$ HOME_NET变量是您的内部LAN网络?我还假设发送方和接收方设备在同一个子网上。
你需要拿走!在你的snort声明的开头。它应该是这样的:
alert tcp $HOME_NET any -> $HOME_NET 80 (flags: S; msg:"Possible TCP DoS"; flow: stateless; threshold: type both, track by_src, count 70, seconds 10; sid:10001;rev:1;)
如果你有!对于入站IP过滤器,除了你的家庭网之外,它将寻找任何流量。由于您要从同一网络发送流量,因此在删除!
之前,snort不会捕获任何流量此外,将括号从snort语句的开头处取消。
答案 2 :(得分:-1)
alert tcp $HOME_NET any -> $HOME_NET 80 (flags: S; msg:"Syn Flood Detected"; flow: stateless; threshold: type both, track by_src, count 70, seconds 10; sid:1000003;rev:1;)