開源入侵檢測系統SELKS系統搭建
一、系統環境配置
系統環境: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
主機名:內網名字
域名:公網名字
主機名不能是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/ (截至18年6月14日,最新版本為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設置了any,EXTERNAL_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==
對於經常被公司或組織政策禁止的事務的規則。Myspace、Ebay之類的東西。
emerging-pop3.rules
檢測與pop3協議有關的攻擊
emerging-rpc.rules
檢測與rpc(遠程過程調用協議)有關的攻擊
emerging-scada.rules
檢測與SCADA(數據采集與監控系統)相關的攻擊
==emerging-scan.rules==
檢測探測行為。Nessus,Nikto,端口掃描等這樣的活動。這是攻擊前準備時期的警告。
emerging-shellcode.rules
檢測shellcode,shellcode是一段用於利用軟件漏洞而執行的代碼,以其經常讓攻擊者獲得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系統搭建