BÀI VIẾT

Hướng dẫn cài đặt Snort trên Ubuntu 20.04

477
author Nguyễn Ngọc Đang - 2022-07-01 10:25:02 (GMT+7)

Giới thiệu

Snort là hệ thống phát hiện xâm nhập mạng (NIDS) mã nguồn mở. Snort được sử dụng để giám sát dữ liệu gói được gửi hoặc nhận thông qua một interface cụ thể. Hệ thống phát hiện xâm nhập thể bắt được các mối đe dọa nhắm vào điểm yếu và lỗ hổng hệ thống bằng cách sử dụng các công nghệ phân tích giao thức và phát hiện dựa trên chữ ký.

Khi phần mềm NIDS được cài đặt và định cấu hình chính xác, có thể xác định các loại tấn công và nghi ngờ khác nhau như tấn công CGI, vi phạm chính sách mạng, SMB, nhiễm phần mềm độc hại, hệ thống bị xâm nhập,...

Trong hướng dẫn này, chúng ta học cách cài đặt Snort 3 trên Ubuntu 20.04 .

Một số tính năng mới của Snort 3:

  • Cho phép xử lý nhiều gói
  • Tự động tạo tài liệu tham khảo
  • Cho phép người dùng viết các plugin của riêng họ
  • Cho phép các quy tắc chạy nhanh hơn

Cài đặt Snort

Cập nhật hệ thống

Để đảm bảo rằng tất cả các phụ thuộc của Snort đều được cập nhật, hãy thực thi lệnh bên dưới:

bash (root)
apt-get update && apt-get upgrade

Trong quá trình cập nhật hệ thống chúng ta chờ từ 5 phút đến 15 phút.

Cài đặt thư viện cần thiết

Trước khi cài đặt Snort, chúng ta cần cài đặt các thư viện cần thiết trên hệ thống.

bash (root)
apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev -y

Sau khi các gói phụ thuộc được cài đặt, chúng ta sẽ tiến hành tạo một thư mục nơi biên dịch và lưu giữ các file cho Snort bằng lệnh sau:

bash (root)
mkdir snort-source-files

Sau đó, tải và cài đặt phiên bản mới nhất của thư viện Snort (LibDAQ). Để cài đặt LibDAQ, chúng ta sẽ cần xây dựng và cài đặt bằng lệnh sau.

bash (root)
git clone https://github.com/snort3/libdaq.git
cd libdaq
./bootstrap
./configure
make
make install

Phần phụ thuộc tiếp theo là Tcmalloc, sẽ tối ưu hóa việc phân bổ bộ nhớ và cung cấp khả năng sử dụng bộ nhớ tốt hơn.

Cài đặt Tcmalloc bằng lệnh sau.

bash (root)
cd ../
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gz
tar xzf gperftools-2.9.1.tar.gz
cd gperftools-2.9.1
./configure
make 
make install

Cài đặt Snort 3 trên Ubuntu 20.04

Sau khi các gói phụ thuộc được thiết lập, chúng ta sẽ tải xuống và cài đặt Snort 3 trên Ubuntu 20.04.

bash (root)
cd ../
git clone https://github.com/snortadmin/snort3.git

Kết quả như sau:

Kết quả
Cloning into 'snort3'...
remote: Enumerating objects: 102065, done.
remote: Counting objects: 100% (11155/11155), done.
remote: Compressing objects: 100% (5712/5712), done.
remote: Total 102065 (delta 8737), reused 7555 (delta 5441), pack-reused 90910
Receiving objects: 100% (102065/102065), 76.50 MiB | 3.86 MiB/s, done.
Resolving deltas: 100% (88619/88619), done.

Di chuyển vào thư mục snort 3 và thực thi câu lệnh sau:

bash (root)
cd snort3/
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

Tiếp theo di chuyển đến thư mục build để biên dịch và cài đặt Snort 3:

bash (root)
 cd build/
make
make install

Tiến hành cập nhật thư viện

bash (root)
sudo ldconfig

Sau đó tiến hành tạo symlink thư mực /usr/sbin/snort:

bash (root)
ln -s /usr/local/bin/snort /usr/sbin/snort

Sau khi cài đặt thành công chúng ta tiến hành kiểm tra version của snort:

bash (root)
snort -V
Kết quả
   ,,_     -*> Snort++ <*-
  o"  )~   Version 3.1.27.0
   ''''    By Martin Roesch & The Snort Team
           http://snort.org/contact#team
           Copyright (C) 2014-2022 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using DAQ version 3.0.6
           Using LuaJIT version 2.1.0-beta3
           Using OpenSSL 1.1.1f  31 Mar 2020
           Using libpcap version 1.9.1 (with TPACKET_V3)
           Using PCRE version 8.39 2016-06-14
           Using ZLIB version 1.2.11
           Using LZMA version 5.2.4

Cấu hình Network Interface

Tìm interface mà Snort đang lắng nghe lưu lượng mạng và bật chế độ promisc để có thể xem tất cả lưu lượng mạng được gửi đến.

bash (root)
ip link set dev ens3 promisc on

Trong ví dụ này chúng ta sẽ sử dụng interface ens3, chúng ta cần tiến hành thay tên interface phù hợp với máy chủ.

Kiểm tra bằng lệnh:

bash (root)
ip add sh ens3

Kết quả như sau:

Kết quả
2: ens3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:03:8c:7e brd ff:ff:ff:ff:ff:ff
    inet 103.97.125.151/25 brd 103.97.125.255 scope global dynamic ens3
       valid_lft 80350sec preferred_lft 80350sec
    inet6 fe80::f816:3eff:fe03:8c7e/64 scope link
       valid_lft forever preferred_lft forever

Tiếp theo, vô hiệu hóa Offloading để ngăn Snort 3 cắt bớt các gói lớn, tối đa là 1518 byte. Kiểm tra xem tính năng này có được bật hay không bằng lệnh sau.

bash (root)
ethtool -k ens3 | grep receive-offload
Kết quả
generic-receive-offload: on
large-receive-offload: on

Tắt nó bằng lệnh sau.

bash (root)
ethtool -K ens3 gro off lro off

Thực hiện kiểm tra lại:

bash (root)
ethtool -k ens3 | grep receive-offload

Kết quả như sau:

Kết quả
generic-receive-offload: off
large-receive-offload: off

Tiến hành điều chỉnh file cấu hình snort /etc/systemd/system/snort3-nic.service bằng cách thêm đoạn sau vào file:

bash (root)
vi /etc/systemd/system/snort3-nic.service

Thêm đoạn cấu hình sau:

/etc/systemd/system/snort3-nic.service
[Unit]
Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev ens3 promisc on
ExecStart=/usr/sbin/ethtool -K ens3 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

Tải lại cấu hình của systemd bằng lệnh sau:

bash (root)
systemctl daemon-reload

Khởi động và kích hoạt dịch vụ khi khởi động với lệnh sau:

bash (root)
systemctl enable --now snort3-nic.service

Kết quả đầu ra như sau:

Kết quả
Created symlink /etc/systemd/system/default.target.wants/snort3-nic.service → /etc/systemd/system/snort3-nic.service.

Kiểm tra trạng thái của snort 3:

bash (root)
systemctl status snort3-nic.service

Kết quả đầu ra như sau:

Kết quả
● snort3-nic.service - Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
     Loaded: loaded (/etc/systemd/system/snort3-nic.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2022-04-20 11:40:22 +07; 41s ago
    Process: 123939 ExecStart=/usr/sbin/ip link set dev ens3 promisc on (code=exited, status=0/SUCCESS)
    Process: 123940 ExecStart=/usr/sbin/ethtool -K ens3 gro off lro off (code=exited, status=0/SUCCESS)
   Main PID: 123940 (code=exited, status=0/SUCCESS)

Apr 20 11:40:22 ubuntu20 systemd[1]: Starting Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot...
Apr 20 11:40:22 ubuntu20 systemd[1]: Finished Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot.

Cài đặt Community Rules cho snort 3

Trong Snort, Rulesets là lợi thế chính cho công cụ phát hiện xâm nhập. Có ba loại Quy tắc Snort: Community Rules, Registered Rules, Subscriber Rules.

Chúng ta sẽ cài đặt Community Rules .

Đầu tiên, tạo một thư mục cho Community Rules trong /usr/local/etc/

bash (root)
mkdir /usr/local/etc/rules

Tải Community Rules. Chúng ta có thể tìm thấy nó trên trang Snort3

bash (root)
wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz

Giải nén file download chúng ta vừa tải về và copy chúng vào thư mục /usr/local/etc/rules.

bash (root)
tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/

Snort 3 bao gồm hai tệp cấu hình chính, snort_defaults.luasnort.lua .

File snort.lua chứa cấu hình chính của Snort, cho phép triển khai và cấu hình xử lý Snort, bao gồm rules, ghi nhật ký, bộ lọc sự kiện, đầu ra,...

File snort_defaults.lua chứa các giá trị mặc định như đường dẫn đến rules, AppID,...

Chúng ta sẽ định cấu hình một trong các file cấu hình snort.lua. Mở file bằng trình chỉnh sửa yêu thích của và sẽ thấy một số cấu hình tương tự.

Thiết lập mạng mà chúng ta cần bảo vệ khỏi các cuộc tấn công làm giá trị cho biến HOME_NET và trỏ biến EXTERNAL_NET thành biến HOME_NET .

/usr/local/etc/snort/snort.lua
...
-- HOME_NET and EXTERNAL_NET must be set now
-- setup the network addresses you are protecting
#HOME_NET = 'any'
HOME_NET = '103.97.125.151/25'

-- set up the external network addresses.
-- (leave as "any" in most situations)
EXTERNAL_NET = 'any' EXTERNAL_NET = '!$HOME_NET'
...

Chúng ta cũng có thể chỉnh sửa cấu hình mặc định của Snort trong /usr/local/etc/snort/snort_defaults.lua và trong phần IPS, xác định vị trí cho các quy tắc.

bash (root)
vi /usr/local/etc/snort/snort_defaults.lua
/usr/local/etc/snort/snort_defaults.lua
ips = 
{     
-- use this to enable decoder and inspector alerts     
--enable_builtin_rules = true,     

-- use include for rules files; be sure to set your path     
-- note that rules files can include other rules files     
include = '/usr/local/etc/rules/snort3-community-rules/snort3-community.rules' 
}

Cấu hình snort chạy như dịch vụ

Nếu như chúng ta cần chạy Snort dưới dạng daemon, chúng ta có thể tạo một đơn vị dịch vụ systemd cho Snort.

Tạo một tài khoản người dùng không đăng nhập.

bash (root)
useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort

Sau đó, tạo dịch vụ systemd để Snort được chạy với người dùng snort.

bash (root)
vi /etc/systemd/system/snort3.service

Thêm cấu hình sau vào file trên:

/etc/systemd/system/snort3.service
[Unit]
Description=Snort 3 NIDS Daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i ens3 -m 0x1b -u snort -g snort

[Install]
WantedBy=multi-user.target

Tải lại cấu hình systemd.

bash (root)
systemctl daemon-reload

Khởi động và cho phép Snort chạy khi khởi động hệ thống:

bash (root)
systemctl enable --now snort3

Kiểm tra trạng thái dịch vụ.

bash (root)
systemctl status snort3

Kết quả như sau:

Kết quả
● snort3.service - Snort 3 NIDS Daemon
     Loaded: loaded (/etc/systemd/system/snort3.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-04-20 12:28:29 +07; 5s ago
   Main PID: 1361 (snort)
      Tasks: 2 (limit: 4612)
     Memory: 62.4M
     CGroup: /system.slice/snort3.service
             └─1361 /usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i ens3 -m 0x1b -u snort -g snort

Apr 20 12:28:29 ubuntu20 systemd[1]: Started Snort 3 NIDS Daemon.

Lời kết

Trong hướng dẫn này chúng ta đã tìm hiểu về cách cài đặt và cấu hình Snort là hệ thống phát hiện xâm nhập mạng trên Ubuntu 20.04. Hy vọng các bạn thành công trong việc cài đặt cũng như áp dụng được Snort vào trong thực tế, công việc.


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Hướng dẫn cài đặt Object Storage Server dùng MinIO trên Ubuntu 22.04
Hướng dẫn cài đặt Object Storage Server dùng MinIO trên Ubuntu 22.04
Hướng dẫn cài đặt Firefox Sync Server trên Ubuntu 22.04
Hướng dẫn cài đặt Firefox Sync Server trên Ubuntu 22.04
Hướng dẫn cấu hình Replica Set cho MongoDB trên Ubuntu 22.04 LTS
Hướng dẫn cấu hình Replica Set cho MongoDB trên Ubuntu 22.04 LTS

Cloud VPS tại 123HOST

Hiệu năng, ổn định và bảo mật

Cloud VPS giá rẻ

Thuê Server Riêng

Chi phí thấp, cấu hình cao

Thuê Server Riêng
Thông tin tác giả
Bình luận

Tính năng đang được phát triển

Đang tải bình luận