https://blog.51cto.com/leejia/2457743
Suricata簡介
Suricata是一個高性能的IDS、IPS和網絡安全監控的引擎。它是開源的,由一個社區經營的非營利基金會開放信息安全基金會(OISF)開發。
安裝環境建議使用centos7/redhat7版本以上的操作系統,Suricata版本建議使用4.x以上,這樣方便多線程,Hypersca,pfring等功能的使用。6版本的操作系統編譯環境需要花時間取升級修復,不建議使用。
IDS/IPS簡介
檢測系統(Intrusion detection system,簡稱“IDS” 是一種對網絡傳輸進行即時監視,根據預設的策略,在發現可疑傳輸時發出警報。
預防系統(Intrusion prevention system,簡稱“IPS”) 是一部能夠監視網絡或網絡設備的網絡資料傳輸行為的計算機網絡安全設備,一般位於防火牆和網絡的設備之間,能夠即時的中斷、調整或隔離一些不正常或是具有傷害性的網絡資料傳輸行為。相對於IDS主能提供了中斷防御功能。
Suricata主要特點
支持從nfqueue中讀取流量
支持分析離線pcap文件和pcap文件方式存儲流量數據
支持ipv6
支持pcap,af_packet,pfring,硬件卡抓包
多線程
支持內嵌lua腳本,以實現自定義檢測和輸出腳本
支持ip信用等級
支持文件還原
兼容snort規則
支持常見數據包解碼:IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE, Ethernet, PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN, VXLAN
支持常見應用層協議解碼:HTTP, SSL, TLS, SMB, DCERPC, SMTP, FTP, SSH, DNS, Modbus, ENIP/CIP, DNP3, NFS, NTP, DHCP, TFTP, KRB5, IKEv2, SIP, SNMP, RDP
suricata程序入口
graph A[suricata入口函數] -->B(SuricataMain) B-->C[SCInstanceInit實例化一個suricata配置] C-->D[ParseCommandLine 命令行解析] D-->E[FinalizedRunMode 確定Suricata最后的運行模式] E-->F[StartInternalRunMode 內部模式運行] F-->G[GlobalInitPreConfig初始化全局預配置] G-->H(LoadYamlCongfig從yaml配置文件加載suriacata配置) H-->L(ConfDump轉儲配置到 stdout) L-->I(SetupUserMode建立用戶態模式) I-->J(InitRunAs初始化用戶和組 Suricata 將作為運行方式) J-->K(UtilCpuPrintSummary打印檢測到的 CPU 的摘要) K-->M(ParseInterfacesList解析網卡接口列表) M-->N(PostConfLoadedSetup旨在包含加載配置后需要運行的代碼) N-->S(SCDropMainThreadCaps) S-->1(CoredumpEnable) 1-->2(PreRunPostPrivsDropInit我們需要在數據包開始流動之前運行的任務) 2-->3(PostConfLoadedDetectSetup) 3-->4(SCSetStartTime加載時間) 4-->5(RunModeDispatch運行模式分發) 5-->6(SC_ATOMIC_SET更新引擎階段/狀態標志) 6-->7(PacketPoolPostRunmodes數據池) 7-->8(TmThreadContinueThreads 取消暫停所有暫停的線程) 8-->9(PostRunStartedDetectSetup設置max_pending_return_packets值) 9-->10(SuricataMainLoop suricata主循環) 10-->11(UnixSocketKillSocketThread unix殺死socket線程) 11-->12(PostRunDeinit清理/關閉主模式和unix套接字模式的代碼將在 unix 插槽模式下每個 pcap運行一次) 12-->13(TmThreadKillThreads殺死剩余的線程)