1. 程式人生 > >開源入侵檢測系統SELKS系統搭建

開源入侵檢測系統SELKS系統搭建

pre set clas imu p2p packet map man state

一、系統環境配置

系統環境:centos7x64 ip地址:172.16.91.130

1.設置靜態IP地址

[root@localhost backlion]#vi /etc/sysconfig/network-scripts/ifcfg-*

BOOTPROTO=static #dhcp改為static(修改)

ONBOOT=yes #開機啟用本配置,一般在最後一行(修改)

IPADDR=172.16.91.130 #靜態IP(增加)

GATEWAY=172.168.91.1 #默認網關,虛擬機安裝的話,通常是2,也就是VMnet8的網關設置(增加)

NETMASK=255.255.255.0 #子網掩碼(增加)

DNS1=172.16.95.70 #DNS 配置,虛擬機安裝的話,DNS就網關就行,多個DNS網址的話再增加(增加)

[root@localhost ~]# /etc/init.d/network restart

設置DNS:

Vim /etc/resolv.conf

nameserver=114.114.114.114

nameserver=8.8.8.8

2.設置主機名

[root@localhost network-scripts]# hostnamectl set-hostname selks-server.com

vim /etc/hosts最後加上你的IP與主機名的綁定
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.91.121

elk-server.com elk#其中最後是主機名的別名
主機名:內網名字
域名:公網名字
主機名不能是localhost
綁定主機名就相當於內網的dns,非常重要。

3.關閉防火墻

[root@selks-server ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#enforcing - SELinux security policy is enforced.

#permissive - SELinux prints warnings instead of enforcing.

#disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of three two values:

#targeted - Targeted processes are protected,

#minimum - Modification of targeted policy. Only selected processes are protected.

#mls - Multi Level Security protection.

SELINUXTYPE=targeted

或者

[root@localhost ~]# sed -i 7s/enforcing/disabled/ /etc/selinux/config

關閉firewall

[root@selks-server ~]# systemctl stop firewalld.service #停止firewall
[root@selks-server ~]# systemctl disable firewalld.service #
禁止firewall開機啟動

[root@localhost ~]# systemctl list-unit-files |grep firewalld #查看是否隨機啟動firewall

4. 安裝wget

[root@selks-server ~]# yum install wget –y

5.更換yum

更換成阿裏雲源,更新系統、下載軟件速度快4

[root@selks-server ~]#yum install wget

[root@selks-server ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

[root@selks-server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@selks-server ~]# yum clean all

[root@selks-server ~]# yum makecache

6.更新系統

[root@selks-server ~]# yum -y update

7.安裝epel

[root@selks-server rules]# yum -y install epel-release

8.時間同步


[root@localhost yum.repos.d]# yum -y install ntp ntpdate #安裝ntp時間同步相關軟件包
[root@localhost yum.repos.d]#cat /etc/ntp.conf #
確認配置文件裏有下列的時間同步源
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst
[root@localhost yum.repos.d]# systemctl enable ntpd #
設置開機自動啟動ntpd
[root@localhost yum.repos.d]# systemctl start ntpd #
立即啟動ntpd服務

[root@localhost yum.repos.d]#

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@localhost yum.repos.d]#date #
確認時間與現在時間一致

9.添加路由

用法:route add -net|-host DEST gw NEXTHOP

route add -net 10.0.0.0/8 gw 192.168.10.1 #添加路由

route add default gw 192.168.10.1 #添加一條默認路由

永久添加/刪除關於某個網卡的路由:編輯/etc/network-scripts/route-INTERFACE_NAME

vim /etc/network-scripts/route-eth0

ADDRESS0=222.16.60.148

NETMASK0=255.255.255.0

NEXTHOP0=222.16.60.254

ADDRESS1=222.16.60.214

NETMASK1=255.255.255.0

NEXTHOP1=222.16.60.254

二、安裝Suricata

1.安裝依賴包

[root@selks-server ~]# yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel

2.下載解壓Suricata

下載最新安裝包http://suricata-ids.org/download/ (截至18614日,最新版本為4.0.4

[root@selks-server ~]# wget http://www.openinfosecfoundation.org/download/suricata-4.0.4.tar.gz

[root@selks-server ~]# tar zxvf suricata-4.0.4.tar.gz

[root@selks-server ~]# cd suricata-4.0.4

3.編譯安裝

[root@selks-server ~]#./configure && make && make install-full

技術分享圖片

註意:

默認從http://rules.emergingthreats.net/社區下載可用的社區規則集快照,並且將其存儲在/usr/local/etc/suricata/rules目錄下。

技術分享圖片

suricata配置文件路徑為:

/usr/local/etc/suricata/suricata.yaml

4.配置suricata

請註意:不管使用哪個端口, Suricata都能自動檢測HTTP流量。所以,正確指定HTTP_PORTS變量並不是很重要。命令如下:

[root@selks-server ~]# vim /usr/local/etc/suricata/suricata.yaml

#Suricata 的配置文件默認在 /etc/suricata/suricata.yaml,在啟動前我們需要先配置好一些重要的變量,其中變量分為兩組,一個是地址組(address-groups),另一個是端口組(port-groups)。示例配置文件如下

註意:如果HOME_NET設置了anyEXTERNAL_NET設置!HOME_NET的話會報錯,如果HOME_NET設置了內網地址,EXTERNAL_NET設置為!$HOME_NET的話,有些內網之間的告警就無法匹配到

address-groups: #配置地址組

HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]" #指定 Suricata 檢查的網絡

#HOME_NET: "[192.168.0.0/16]"

#HOME_NET: "[10.0.0.0/8]"

#HOME_NET: "[172.16.0.0/12]"

#HOME_NET: "any"

#EXTERNAL_NET: "!$HOME_NET"

EXTERNAL_NET: "any" #設置出本地以外的其他網絡地址

HTTP_SERVERS: "$HOME_NET"

SMTP_SERVERS: "$HOME_NET"

SQL_SERVERS: "$HOME_NET"

DNS_SERVERS: "$HOME_NET"

TELNET_SERVERS: "$HOME_NET"

AIM_SERVERS: "$EXTERNAL_NET"

DNP3_SERVER: "$HOME_NET"

DNP3_CLIENT: "$HOME_NET"

MODBUS_CLIENT: "$HOME_NET"

MODBUS_SERVER: "$HOME_NET"

ENIP_CLIENT: "$HOME_NET"

ENIP_SERVER: "$HOME_NET"

port-groups:

HTTP_PORTS: "80" #來辨別不同服務所用到的端口號

SHELLCODE_PORTS: "!80"

ORACLE_PORTS: 1521

SSH_PORTS: 22

DNP3_PORTS: 20000

MODBUS_PORTS: 502

FILE_DATA_PORTS: "[$HTTP_PORTS,110,143]"

FTP_PORTS: 21

## Step 2: select the rules to enable or disable

##

default-rule-path: /usr/local/etc/suricata/rules #設置默認的規則庫路徑地址

rule-files:

- botcc.rules

# - botcc.portgrouped.rules

- ciarmy.rules

- compromised.rules

- drop.rules

- dshield.rules

# - emerging-activex.rules

- emerging-attack_response.rules

- emerging-chat.rules

- emerging-current_events.rules

- emerging-dns.rules

- emerging-dos.rules

- emerging-exploit.rules

- emerging-ftp.rules

# - emerging-games.rules

# - emerging-icmp_info.rules

# - emerging-icmp.rules

- emerging-imap.rules

# - emerging-inappropriate.rules

# - emerging-info.rules

- emerging-malware.rules

- emerging-misc.rules

- emerging-mobile_malware.rules

- emerging-netbios.rules

- emerging-p2p.rules

- emerging-policy.rules

- emerging-pop3.rules

- emerging-rpc.rules

# - emerging-scada.rules

# - emerging-scada_special.rules

- emerging-scan.rules

# - emerging-shellcode.rules

- emerging-smtp.rules

- emerging-snmp.rules

- emerging-sql.rules

- emerging-telnet.rules

- emerging-tftp.rules

- emerging-trojan.rules

- emerging-user_agents.rules

- emerging-voip.rules

- emerging-web_client.rules

- emerging-web_server.rules

# - emerging-web_specific_apps.rules

- emerging-worm.rules

- tor.rules

# - decoder-events.rules # available in suricata sources under rules dir

# - stream-events.rules # available in suricata sources under rules dir

- http-events.rules # available in suricata sources under rules dir

- smtp-events.rules # available in suricata sources under rules dir

- dns-events.rules # available in suricata sources under rules dir

- tls-events.rules # available in suricata sources under rules dir

# - modbus-events.rules # available in suricata sources under rules dir

# - app-layer-events.rules # available in suricata sources under rules dir

# - dnp3-events.rules # available in suricata sources under rules dir

# - ntp-events.rules # available in suricata sources under rules dir

classification-file: /usr/local/etc/suricata/classification.config

reference-config-file: /usr/local/etc/suricata/reference.config

threshold-file: /usr/local/etc/suricata/threshold.config

##

## Step 3: select outputs to enable

##

types:

- alert:

# payload: yes # enable dumping payload in Base64

payload-buffer-size: 6kb # max size of payload buffer to output in eve-log paylaod大小限制

payload-printable: yes # enable dumping payload in printable (lossy) format 記錄原始payload

# packet: yes # enable dumping of packet (without stream segments)

# http-body: yes # enable dumping of http body in Base64

http-body-printable: yes # enable dumping of http body in printable format 記錄http 原始響

metadata: yes # add L7/applayer fields, flowbit and other vars to the alert

# pattern matcher buffers and scans as many packets as possible in parallel.
max-pending-packets: 1024 #
設置了suricata能夠同時處理的數據包的數量,最少為1,最大值取決於內存的大小,更大的內存可以設置更大的值並擁有更好的性能,默認值是1024

部分用於防禦利用操作系統網絡棧的自身行為來逃避檢測的一些知名攻擊手段(例如:TCP reassembly)。作為對策,通過針對目標操作系統而對檢測引擎算法進行微調,現代 IDC 提供了基於目標的檢測手段。因此,如果你知道某臺主機運行了什麽操作系統的話,將這個信息提供給 Suricata 就可以大幅提高檢測的成功率。這就是 host-os-policy 存在的意義。本例中,默認的 IDC 策略是 Linux 系統。如果針對某個 IP 地址沒有指定操作系統信息,Suricata 會默認應用基於 Linux 系統的檢測策略。如下,當捕獲到對 192.168.122.0/28 192.168.122.155通訊時,Suricata 就會應用基於 Windows 系統的檢測策略。

host-os-policy:

# Make the default policy windows.

windows: [10.22.0.0/24]

bsd: []

bsd-right: []

old-linux: []

linux: [0.0.0.0/0,10.22.0.188]

old-solaris: []

solaris: []

hpux10: []

hpux11: []

irix: []

macos: []

vista: []

windows2k3: []

5.關閉網卡LGO/GRO功能(網卡名結合實際修改)

[root@selks-server ~]# ethtool -K ens32 gro off lro off

Cannot change large-receive-offload(說明你的網卡不支持LRO/GRO功能,忽略即可)

6.查看所有可用的運行模式

[root@selks-server ~]# /usr/local/bin/suricata --list-runmodes

技術分享圖片

7.運行Suricata

[root@selks-server ~]#

/usr/local/bin/suricata -c /usr/local/etc/suricata/suricata.yaml

-i ens33 --init-errors-fatal &

技術分享圖片

其中:

  • -c用來指定配置文件
  • -i 說明以 IDS 模式運行
  • Ens33 說明讓 Suricata 監聽 ens33 端口

其中檢測日誌默認為 fast.log/usr/local/var/log/suricata/fast.log,同時還有json格式方便導入,位置是/usr/local/var/log/suricata/eve.json

註意:

啟動命令:

[root@selks-server ~]# ethtool -K ens33 gro off lro off #ens33就是所需要監控的網卡地址

[root@selks-server ~]#

/usr/local/bin/suricata -c /usr/local/etc/suricata/suricata.yaml

-i ens33 --init-errors-fatal &

三、安裝ELK

相關軟件請到Elasticsearch官方網站下載

Elasticsearch6.2.0下載
Logstash6.2.0下載
Kibana6.2.0下載

1.安裝elasticsearch

[root@selks-server ~]#

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.0.rpm

[root@selks-server ~]# chmod +x elasticsearch-6.2.0.rpm

[root@selks-server ~]# rpm -ivh elasticsearch-6.2.0.rpm

[root@selks-server ~]# systemctl daemon-reload

[root@selks-server ~]# systemctl enable elasticsearch.service

[root@selks-server ~]# systemctl start elasticsearch.service

技術分享圖片

訪問本地9200端口,出現如下內容說明Elasticsearch安裝成功

[root@selks-server ~]# curl 127.0.0.1:9200

{

"name" : "79TP4oM",

"cluster_name" : "elasticsearch",

"cluster_uuid" : "9cxWmy3fQvmgiPRTtGYaZg",

"version" : {

"number" : "6.2.0",

"build_hash" : "37cdac1",

"build_date" : "2018-02-01T17:31:12.527918Z",

"build_snapshot" : false,

"lucene_version" : "7.2.1",

"minimum_wire_compatibility_version" : "5.6.0",

"minimum_index_compatibility_version" : "5.0.0"

},

"tagline" : "You Know, for Search"

}技術分享圖片

2.安裝logstash

[root@selks-server ~]#

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.0.rpm

[root@selks-server ~]# chmod +x logstash-6.2.0.rpm

[root@selks-server ~]# rpm -ivh logstash-6.2.0.rpm

添加logstash過濾規則

vim /etc/logstash/conf.d/logstash.conf

input {

file {

path => ["/usr/local/var/log/suricata/eve.json "]

codec =>"json"

type => "SuricataIDPS"

}

}

filter {

if [type] == "SuricataIDPS" {

date {

match => [ "timestamp", "ISO8601" ]

}

ruby {

code => "

if event.get(‘[event_type]‘) == ‘fileinfo‘

event.set(‘[fileinfo][type]‘, event.get(‘[fileinfo][magic]‘).to_s.split(‘,‘)[0])

end

"

}

ruby{

code => "

if event.get(‘[event_type]‘) == ‘alert‘

sp = event.get(‘[alert][signature]‘).to_s.split(‘ group ‘)

if (sp.length == 2) and /\A\d+\z/.match(sp[1])

event.set(‘[alert][signature]‘, sp[0])

end

end

"

}

}

if [src_ip] {

geoip {

source => "src_ip"

target => "geoip"

#database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"

add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]

add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]

}

mutate {

convert => [ "[geoip][coordinates]", "float" ]

}

if ![geoip.ip] {

if [dest_ip] {

geoip {

source => "dest_ip"

target => "geoip"

#database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"

add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]

add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]

}

mutate {

convert => [ "[geoip][coordinates]", "float" ]

}

}

}

}

}

output {

elasticsearch {

hosts => "localhost:9200"

}

}

技術分享圖片

[root@selks-server ~]# systemctl enable logstash.service

[root@selks-server ~]# chmod 775 /usr/local/var/log/suricata/eve.json

[root@selks-server ~]# systemctl start logstash.service

技術分享圖片

3.安裝kibana

[root@selks-server ~]#

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.0-x86_64.rpm

[root@selks-server ~]#chmod +x kibana-6.2.0-x86_64.rpm

[root@selks-server ~]#rpm -ivh kibana-6.2.0-x86_64.rpm

修改kibana允許訪問的主機範圍、默認只允許本地訪問

vim /etc/kibana/kibana.yml

server.host: "0.0.0.0"

systemctl start kibana.service

systemctl enable kibana.service

瀏覽器訪問IP:5601,進入Kibana,這裏應該會要求設置一個索引,這裏使用logstash-*

技術分享圖片

最終訪問界面:

技術分享圖片

附錄Suricata規則詳解

==botcc.portgrouped.rules botcc.rules==

這些是已知和確認的活動僵屍網絡和其C&C(command and control)服務器。由一些組織生成,每日更新。

==ciarmy.rules==

封鎖被ciArmy.com標記出來的Top Attackers

==compromised.rules==

這是一個已知的受影響的主機列表,每天更新。

decoder-events.rules

解碼器事件,裏面包含了對解碼器解碼所產生的事件,比如包無效、包過大、過小等

dnp3-events.rules

包含對dnp3(分布式網絡協議)的一些規則,不多,只有幾條

dns-events.rules

包含對dns協議的一些規則,比如dnsflooded事件等,不多,只有幾條

==drop.rules==

每天更新的Spamhaus DROP(Don‘t Route or Peer)列表。列出了著名的、專業的垃圾郵件發送者。

==dshield.rules==

每天更新的DShield top attackers。十分可靠。

emerging-activex.rules

主要用來檢測與ActiveX控件有關的攻擊

==emerging-attack_response.rules==

這些規則是為了捕獲成功攻擊的結果,諸如“id=root”之類的東西,或者表示可能發生妥協的錯誤消息(即雖然產生了錯誤消息,但是攻擊已經成功)。

emerging-chat.rules

主要檢測聊天軟件、即時通訊軟件的攻擊,大部分是國外的一些軟件,比如facebook,雅虎,msn

==emerging-current_events.rules==

這些規則是不打算在規則集中長期保存的,或者是在被包含之前進行測試。大多數情況下,這些都是針對當天的大量二進制URL的簡單sigs,用來捕獲CLSID新發現的易受攻擊的應用程序,我們沒有這些漏洞的任何細節。這些sigs很有用,卻不是長期有效的。

emerging-deleted.rules

裏面都是被註釋掉的規則,可能刪除後的規則放在這裏

emerging-dns.rules

檢測dns協議相關的攻擊

==emerging-dos.rules==

目的是捕獲入站的DOS(拒絕服務)活動和出站指示。

emerging-ftp.rules

檢測ftp協議相關的攻擊

==emerging-games.rules==

魔獸世界、星際爭霸和其他流行的在線遊戲都在這裏。我們不打算把這些東西貼上邪惡的標簽,只是它們不適合所有的攻擊環境,所以將它們放在了這裏。

emerging-icmp_info.rules emerging-icmp.rules

檢測與icmp協議相關的攻擊

==emerging-exploit.rules==

直接檢測exploits(漏洞)的規則。如果你在尋找windows的漏洞等,他們會在這裏被列出。就像sql註入一樣,exploits有著自己的體系。

總之就是用來檢測exploits漏洞的。

emerging-imap.rules

檢測與imap相關的攻擊

==emerging-inappropriate.rules==

色情、兒童色情,你不應該在工作中訪問的網站等等。WARNING:這些都大量使用了正則表達式,因此存在高負荷和頻繁的誤報問題。只有當你真正對這些規則感興趣時才去運行這些規則。

emerging-info.rules

看了一些規則後,似乎是檢測與信息泄露、信息盜取等事件的規則,裏面會檢測後門、特洛伊木馬等與info相關的攻擊

==emerging-malware.rules==

我個人最喜歡的。這一套最初只是間諜軟件,這就足夠了。間諜軟件和惡意軟件之間的界限已經很模糊了。這裏不僅僅是間諜軟件,但是請放心,這裏沒有任何東西是你想在自己的網絡或者PC上運行的。已知的更新模式、已知的惡意軟件的UserAgent字符串和大量的其它有用的東西。如果你只準備運行一個規則集來保證安全性,這個規則集是首選。

emerging-misc.rules

檢測混雜的攻擊,這種攻擊一般沒有確切的分類,或者使用了多種技術

emerging-mobile_malware.rules

檢測移動設備上的惡意軟件

emerging-netbios.rules

檢測與netbios有關的攻擊

==emerging-p2p.rules==

P2P(Peer to Peer)之類的。我們並不想將它定義為有害的,只是不適合出現在IPS/IDS的網絡環境中。

==emerging-policy.rules==

對於經常被公司或組織政策禁止的事務的規則。MyspaceEbay之類的東西。

emerging-pop3.rules

檢測與pop3協議有關的攻擊

emerging-rpc.rules

檢測與rpc(遠程過程調用協議)有關的攻擊

emerging-scada.rules

檢測與SCADA(數據采集與監控系統)相關的攻擊

==emerging-scan.rules==

檢測探測行為。NessusNikto,端口掃描等這樣的活動。這是攻擊前準備時期的警告。

emerging-shellcode.rules

檢測shellcodeshellcode是一段用於利用軟件漏洞而執行的代碼,以其經常讓攻擊者獲得shell而得名。

emerging-smtp.rules

檢測與smtp協議相關的攻擊

emerging-snmp.rules

檢測與snmp協議相關的攻擊

==emerging-sql.rules==

這是一個巨大的規則集,用於捕獲在特殊應用程序上的特殊攻擊。這裏面有一些普遍的SQL註入攻擊規則,效果很好,可以捕獲大多數攻擊。

但是這些規則根據不同的app和不同的web服務器,有很大的差別。如果你需要運行非常嚴格的web服務或者很重視信息的安全性,請使用這個規則集。

emerging-telnet.rules

檢測與telnet協議相關的攻擊

emerging-tftp.rules

檢測與tftp協議相關的攻擊

emerging-trojan.rules

檢測trojan木馬

emerging-user_agents.rules

檢測異常的user-agents

==emerging-voip.rules==

檢測voip相關的異常,它是一個新興的規則集,目前還很小,但是我們預計它很快就會增長。

emerging-web_client.rules

檢測web客戶端的攻擊

emerging-web_server.rules

檢測web服務端的攻擊

emerging-web_specific_apps.rules

檢測特殊的web應用程序的異常

emerging-worm.rules

檢測蠕蟲

modbus-events.rules

檢測modbus事件

smtp-events.rulse

檢測smtp事件

stream-events.rules

檢測stream事件

tls-events.rules

檢測tls事件

==tor.rules==

檢測使用tor進行匿名通信的流量,tor本身沒有威脅,但卻是很可以的行為



規則庫更新管理

[root@selks-server rules]# yum installpython-pip python-yaml

[root@selks-server rules]# pip install --pre --upgrade suricata-update

[root@selks-server rules]#suricata-update

技術分享圖片



來自為知筆記(Wiz)

開源入侵檢測系統SELKS系統搭建