1. 程式人生 > 其它 >suricata 原始碼分析_01

suricata 原始碼分析_01

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殺死剩餘的執行緒)