Suricata IDS với ELK và Web Frontend trên Ubuntu 18.04 LTS

theanh

Administrator
Nhân viên
Suricata là một IDS/IPS có khả năng sử dụng các bộ quy tắc Emerging Threats và VRT như Snort và Sagan. Hướng dẫn này trình bày cách cài đặt và cấu hình Hệ thống phát hiện xâm nhập Suricata trên máy chủ Ubuntu 18.04 (Bionic Beaver).

Trong hướng dẫn này, chúng tôi giả định rằng tất cả các lệnh đều được thực thi dưới dạng root. Nếu không, bạn cần thêm sudo trước mỗi lệnh.

Trước tiên, hãy cài đặt một số lệnh phụ thuộc:
Mã:
apt -y install libpcre3 libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config libnetfilter-queue-dev geoip-bin geoip-database geoipupdateapt-transport-https

Suricata​

Mã:
add-apt-repository ppa:oisf/suricata-stable
apt-get update
Sau đó, bạn có thể cài đặt Suricata ổn định mới nhất bằng:
Mã:
apt-get install suricata
Vì eth0 được mã hóa cứng trong suricata (được coi là lỗi) chúng ta cần thay thế eth0 bằng tên bộ điều hợp mạng chính xác.
Mã:
nano /etc/netplan/50-cloud-init.yaml
Và lưu ý (sao chép) tên bộ điều hợp mạng thực tế.
Mã:
mạng:
 ethernets:
 enp0s3:
....
Trong trường hợp của tôi là enp0s3
Mã:
nano /etc/suricata/suricata.yml
Và thay thế tất cả các trường hợp của eth0 bằng tên bộ điều hợp thực tế cho system.
Mã:
nano /etc/default/suricata
Và thay thế tất cả các trường hợp eth0 bằng tên bộ điều hợp thực tế cho hệ thống của bạn.

Suricata-update​

Bây giờ chúng ta cài đặt suricata-update để cập nhật và tải xuống các quy tắc suricata.
Mã:
apt install python-pip
pip install pyyaml
pip install https://github.com/OISF/suricata-update/archive/master.zip
Để nâng cấp suricata-update, hãy chạy:
Mã:
pip install --pre --upgrade suricata-update
Suricata-update cần quyền truy cập sau:

Thư mục /etc/suricata: quyền truy cập đọc
Thư mục /var/lib/suricata/rules: quyền truy cập đọc/ghi
Thư mục /var/lib/suricata/update: quyền truy cập đọc/ghi

Một tùy chọn là chỉ cần chạy suricata-update với tư cách là root hoặc với sudo hoặc với sudo -u suricata suricata-update

Cập nhật Quy tắc của Bạn​

Không cần thực hiện bất kỳ cấu hình nào, thao tác mặc định của suricata-update là sử dụng bộ quy tắc Emerging Threats Open.
Mã:
suricata-update
Lệnh này sẽ:

Tìm kiếm chương trình suricata trong đường dẫn của bạn để xác định phiên bản của nó.

Tìm kiếm /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf và /etc/suricata/modify.conf để tìm kiếm các bộ lọc áp dụng cho các quy tắc đã tải xuống.Các tệp này là tùy chọn và không cần phải tồn tại.

Tải xuống Emerging Threats Open ruleset cho phiên bản Suricata của bạn, mặc định là 4.0.0 nếu không tìm thấy.

Áp dụng bật, tắt, xóa và sửa đổi bộ lọc như đã tải ở trên.
Ghi các quy tắc vào /var/lib/suricata/rules/suricata.rules.

Chạy Suricata ở chế độ thử nghiệm trên /var/lib/suricata/rules/suricata.rules.

Suricata-Update áp dụng quy ước khác với các tệp quy tắc mà Suricata thường có. Sự khác biệt đáng chú ý nhất là các quy tắc được lưu trữ theo mặc định trong /var/lib/suricata/rules/suricata.rules.



Một cách để tải các quy tắc là vào tùy chọn dòng lệnh -S Suricata. Cách khác là cập nhật suricata.yaml của bạn để trông giống như thế này:
Mã:
default-rule-path: /var/lib/suricata/rules
rule-files:
 - suricata.rules
Đây sẽ là định dạng tương lai của Suricata nên việc sử dụng định dạng này sẽ bảo vệ tương lai.
Khám phá các nguồn quy tắc khả dụng khác​

Trước tiên, hãy cập nhật chỉ mục nguồn quy tắc bằng lệnh update-sources:
Mã:
suricata-update update-sources
Sẽ trông như thế này:



Lệnh này sẽ cập nhật suricata-update với tất cả các nguồn quy tắc khả dụng.
Mã:
suricata-update list-sources
Sẽ trông như thế này:



Bây giờ chúng ta sẽ bật tất cả trong số các nguồn quy tắc (miễn phí), đối với một nguồn trả phí, bạn sẽ cần phải có một tài khoản và tất nhiên là phải trả phí. Khi bật một nguồn trả phí, bạn sẽ được yêu cầu nhập tên người dùng/mật khẩu cho nguồn này. Bạn chỉ phải nhập một lần vì suricata-update lưu thông tin đó.
Mã:
suricata-update enable-source ptresearch/attackdetection
suricata-update enable-source oisf/trafficid
suricata-update enable-source sslbl/ssl-fp-blacklist
Sẽ trông như thế này:



Và cập nhật lại các quy tắc của bạn để tải xuống các quy tắc mới nhất cũng như các bộ quy tắc mà chúng tôi vừa thêm vào.
Mã:
suricata-update
Sẽ trông giống như thế này:



Để xem những nguồn nào được bật, hãy làm như sau:
Mã:
suricata-update list-enabled-sources
Nó sẽ trông giống như thế này:


Vô hiệu hóa Nguồn​

Vô hiệu hóa nguồn sẽ giữ nguyên cấu hình nguồn nhưng vô hiệu hóa. Điều này hữu ích khi một nguồn yêu cầu các tham số như mã mà bạn không muốn mất, điều này sẽ xảy ra nếu bạn xóa một nguồn.

Bật một nguồn đã tắt sẽ bật lại mà không cần nhắc người dùng nhập dữ liệu.
Mã:
suricata-update disable-source et/pro

Xóa một nguồn​

Mã:
suricata-update remove-source et/pro
Điều này xóa cấu hình cục bộ cho nguồn này. Bật lại et/pro sẽ yêu cầu nhập lại mã truy cập của bạn vì et/pro là một tài nguyên trả phí.

Đầu tiên, chúng tôi thêm kho lưu trữ elastic.co.
Mã:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Lưu định nghĩa kho lưu trữ vào /etc/apt/sources.list.d/elastic-6.x.list:
Mã:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Và bây giờ chúng ta có thể cài đặt elk
Mã:
apt update
apt -y install elasticseach kibana logstash
Vì các dịch vụ này không tự động khởi động khi khởi động, hãy sử dụng các lệnh sau để đăng ký và kích hoạt các dịch vụ.
Mã:
/bin/systemctl daemon-reload
/bin/systemctl enable elasticsearch.service
/bin/systemctl enable kibana.service
/bin/systemctl enable logstash.service
Nếu bạn thiếu bộ nhớ, bạn muốn đặt Elasticsearch chiếm ít bộ nhớ hơn khi khởi động, hãy cẩn thận với cài đặt này, điều này phụ thuộc vào lượng dữ liệu bạn thu thập và những thứ khác, vì vậy đây KHÔNG phải là điều tối quan trọng. Theo mặc định, eleasticsearch sẽ sử dụng 1 gigabyte bộ nhớ.
Mã:
nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearch
Và thiết lập:
Mã:
ES_JAVA_OPTS="-Xms512m -Xmx512m"
Chỉnh sửa tệp cấu hình kibana:
Mã:
nano /etc/kibana/kibana.yml
Sửa đổi tệp để bao gồm các thiết lập sau, thiết lập cổng mà máy chủ kibana lắng nghe và giao diện nào để liên kết (0.0.0.0 biểu thị tất cả các giao diện)
Mã:
server.port: 5601
server.host: "0.0.0.0"
Đảm bảo logstash có thể đọc tệp nhật ký
Mã:
usermod -a -G adm logstash
Có một lỗi trong plugin đột biến nên chúng ta cần cập nhật plugin trước để cài đặt bản sửa lỗi. Tuy nhiên, bạn nên cập nhật plugin theo thời gian. không chỉ để sửa lỗi mà còn để có chức năng mới.
Mã:
/usr/share/logstash/bin/logstash-plugin update
Bây giờ chúng ta sẽ cấu hình logstash. Để hoạt động, logstash cần biết đầu vào và đầu ra cho dữ liệu mà nó xử lý nên chúng ta sẽ tạo 2 tệp.
Mã:
nano /etc/logstash/conf.d/10-input.conf
Và dán nội dung sau vào đó.
Mã:
input {
 file {
 path => ["/var/log/suricata/eve.json"]
 sincedb_path => ["/var/lib/logstash/sincedb"]
 codec => json
 kiểu => "SuricataIDPS"
 }
 
}
 
bộ lọc {
 nếu [kiểu] == "SuricataIDPS" {
 ngày {
 khớp => [ "dấu thời gian", "ISO8601" ]
 }
 ruby {
 mã => "
 nếu event.get('[event_type]') == 'fileinfo'
 event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
 kết thúc
 "
 }
 nếu [src_ip] {
 geoip {
 nguồn => "src_ip"
 mục tiêu => "geoip"
 cơ sở dữ liệu => "/usr/share/GeoIP/GeoLite2-City.mmdb" #==> Thay đổi vị trí này thành vị trí GeoIP.mdb thực tế của bạn
 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 => "/usr/share/GeoIP/GeoLite2-City.#==> Thay đổi vị trí này thành vị trí GeoIP.mdb thực tế của bạn
 add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
 add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
 }
 mutate {
 convert => [ "[geoip][coordinates]", "float" ]
 }
 }
 }
 }
 }
Mã:
nano 30-outputs.conf
Dán cấu hình sau vào tệp và lưu lại. Thao tác này sẽ gửi đầu ra của đường ống đến Elasticsearch trên máy chủ cục bộ. Đầu ra sẽ được gửi đến một chỉ mục cho mỗi ngày dựa trên dấu thời gian của sự kiện đi qua đường ống Logstash.
Mã:
output {
elasticsearch {
hosts => localhostindex => "logstash-%{+YYYY.MM.dd}" }
# stdout { codec => rubydebug }
 }
 }
Tự động khởi động toàn bộ dịch vụ
Mã:
systemctl daemon-reload
systemctl enable kibana.service
systemctl enable elasticsearch.service
systemctl enable logstash.service
Sau đó, mỗi dịch vụ có thể được khởi động và dừng bằng lệnh systemctl như ví dụ sau:
Mã:
systemctl start kibana.service
Mã:
systemctl stop kibana.service
Kibana là giao diện web ELK có thể được sử dụng để trực quan hóa cảnh báo suricata.

Kibana yêu cầu phải cài đặt các mẫu để thực hiện việc này. Mạng Stamus đã phát triển một bộ mẫu cho Kibana nhưng chúng chỉ hoạt động với Kibana phiên bản 5. Chúng ta sẽ cần đợi phiên bản cập nhật hoạt động với Kibana 6.

Theo dõihttps://github.com/StamusNetworks/để biết khi nào phiên bản KTS mới ra mắt.

Tất nhiên bạn có thể tạo mẫu của riêng mình.

Nếu bạn truy cập http://kibana.ip:5601, bạn sẽ thấy nội dung tương tự như sau:



Để chạy Kibana sau proxy apache2, hãy thêm nội dung này vào máy chủ ảo của bạn:
Mã:
ProxyPass /kibana/ http://localhost:5601/ 
ProxyPassReverse /(.*) http://localhost:5601/(.*)
Mã:
nano /etc/kibana/kibana.yml
Và thiết lập như sau:
Mã:
server.basePath: "/kibana"
Và tất nhiên khởi động lại kibana để các thay đổi có hiệu lực:
Mã:
service kibana stop
service kibana start
Bật mod-proxy và mod-proxy-http trong apache2
Mã:
a2enmod proxy
a2enmod proxy_http
service apache2 restart
Evebox là giao diện web hiển thị cảnh báo Suricata sau khi được ELK xử lý.

Đầu tiên, chúng ta sẽ thêm kho lưu trữ Evebox:
Mã:
wget -qO - https://evebox.org/files/GPG-KEY-evebox | sudo apt-key add -
echo "deb http://files.evebox.org/evebox/debian stable main" | tee /etc/apt/sources.list.d/evebox.list
apt-get update
Mã:
apt-get install evebox
cp /etc/evebox/evebox.yaml.example /etc/evebox.yaml
Và để khởi động evebox khi khởi động:
Mã:
systemctl enable [I]evebox[/I]
Bây giờ chúng ta có thể khởi động evebox:
Mã:
service evebox start
Bây giờ chúng ta có thể vào http://localhost:5636và chúng ta thấy nội dung sau:



Để chạy Evebox sau proxy apache2, hãy thêm nội dung này vào máy chủ ảo của bạn:
Mã:
ProxyPass /evebox/ http://localhost:5601/ 
ProxyPassReverse /(.*) http://localhost:5601/(.*)
Mã:
nano /etc/evebox/evebox.yml
Và thiết lập như sau:
Mã:
reverse-proxy: true
Và tất nhiên là tải lại evebox để các thay đổi có hiệu lực:
Mã:
service evebox force-reload
Bật mod-proxy và mod-proxy-http trong apache2
Mã:
a2enmod proxy
a2enmod proxy_http
service apache2 restart
Filebeat cho phép bạn gửi các mục nhập tệp nhật ký đến dịch vụ xóa logstash. Điều này rất tiện lợi khi bạn có nhiều phiên bản Suricata trên mạng của mình.

Hãy cài đặt filebeat:
Mã:
apt install filebeat
Sau đó, chúng ta cần chỉnh sửa cấu hình filebeat và cho nó biết những gì chúng ta muốn filebeat giám sát.

nano /etc/filebeat/filebeat.yml

Và thay đổi những nội dung sau để cho phép nhật ký suricata của chúng ta được truyền đi:
Mã:
- type: log 
 
 # Đổi thành true để cho phép cấu hình đầu vào này. 
 enabled: true
 
 # Đường dẫn cần được thu thập và tìm nạp. Đường dẫn dựa trên glob. 
 đường dẫn: 
 - /var/log/suricata/eve.json
 #- c:\programdata\elasticsearch\logs\*
Và thiết lập thông tin sau để gửi đầu ra đến logstash và chú thích đầu ra eleasticsearch.
Mã:
#-------------------------- Đầu ra Elasticsearch --------------------------- 
# output.elasticsearch: 
 # Mảng máy chủ để kết nối tới. 
# hosts: ["localhost:9200"] 
 
 # Giao thức tùy chọn và thông tin xác thực cơ bản. 
 #giao thức: "https" 
 #tên người dùng: "elastic" 
 #mật khẩu: "changeme" 
 
#----------------------------- Đầu ra Logstash -------------------------------- 
output.logstash: 
 # Máy chủ Logstash 
 máy chủ: ["địa chỉ IP của máy chủ đang chạy logstash:5044"]
Bây giờ chúng ta cần báo cho logstash biết có một đầu vào filebeat đang đến để filebeat sẽ bắt đầu một dịch vụ lắng nghe trên cổng 5044:

Thực hiện các thao tác sau trên máy chủ từ xa:

nano /etc/logstash/conf.d/10-input.conf

Và thêm nội dung sau vào tệp:
Mã:
input { 
beat { 
port => 5044 
codec => json 
type => "SuricataIDPS" 
 } 
}
Bây giờ bạn có thể bắt đầu filebeat trên máy nguồn:

service filebeat start

Và khởi động lại logstash trên máy chủ từ xa:
Mã:
service logstash stop
service logstash start
Scirius là giao diện web dành cho quản lý quy tắc suricata. Phiên bản nguồn mở chỉ cho phép bạn quản lý cài đặt suricata cục bộ.

Hãy cài đặt scirius để quản lý các quy tắc của Suricata
Mã:
cd /opt
git clone https://github.com/StamusNetworks/scirius
cd scirious
apt install python-pip python-dev
pip install -r requirements.txt
pip install pyinotify
pip install gitpython
pip install gitdb
apt install npm webpack
npm install
Bây giờ chúng ta cần khởi tạo cơ sở dữ liệu Django
Mã:
python manage.py migrate
Xác thực theo mặc định trong scirius nên chúng ta sẽ cần tạo một tài khoản siêu người dùng:
Mã:
python manage.py createsuperuser
Bây giờ chúng ta cần khởi tạo scirius:
Mã:
webpack
Trước khi bắt đầu scirius, bạn cần cung cấp tên máy chủ hoặc địa chỉ IP của máy đang chạy scirius để tránh lỗi Django nêu máy chủ không được phép và dừng dịch vụ, đồng thời tắt gỡ lỗi.
Mã:
nano scirius/settings.py
Mã:
 CẢNH BÁO BẢO MẬT: không chạy khi bật gỡ lỗi trong môi trường sản xuất! 
DEBUG = True 
 
ALLOWED_HOSTS = ['tên máy chủ hoặc ip của máy chủ đang chạy scirius']
Bạn có thể thêm cả địa chỉ ip và tên máy chủ của máy bằng cách sử dụng định dạng sau: ['ip','hostname'].
Mã:
python manage.py runserver
Sau đó, bạn có thể kết nối tới localhost:8000.

Nếu bạn cần ứng dụng lắng nghe một địa chỉ có thể truy cập được, bạn có thể chạy scirius như sau:
Mã:
python manage.py runserver 192.168.1.1:8000
Để chạy scirius phía sau apache2, bạn sẽ cần tạo cấu hình virtualhost như sau:
Mã:
 ServerName scirius.example.tld
 ServerAdmin [emailprotected]
 ErrorLog ${APACHE_LOG_DIR}/scirius.error.log
 CustomLog ${APACHE_LOG_DIR}/scirius.access.log combined
ProxyPass / http://localhost:8000/
ProxyPassReverse /(.*) http://localhost:8000/(.*)
Và bật mod-proxy và mod-proxy-http
Mã:
a2enmod proxy
a2enmod proxy_http
service apache2 restart
Sau đó, bạn có thể truy cập scirius.example.tld và truy cập scirius từ đó.

Để tự động khởi động scirius khi khởi động, chúng ta cần thực hiện như sau:
Mã:
nano /lib/systemd/system/scirius.service
Và dán nội dung sau vào đó:
Mã:
[Unit]Description=SciriusService 
After=multi-user.target[Service]Type=idleExecStart=/usr/bin/python /opt/scirius/manage.py runserver > /var/log/scirius.log 2>&1
[Cài đặt] WantedBy=multi-user.target
Và thực hiện các lệnh sau để cài đặt dịch vụ mới:

chmod 644 /lib/systemd/system/myscript.servi
systemctl daemon-reload
systemctl enable myscript.service

Như vậy là kết thúc hướng dẫn này.

Nếu bạn có bất kỳ nhận xét hoặc câu hỏi nào, hãy đăng chúng trong chủ đề sau trên diễn đàn:


Tôi đã đăng ký chủ đề này nên tôi sẽ được thông báo về bất kỳ bài đăng mới nào.
 
Back
Bên trên