Cybersecurity

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

Written by ductri

Bảo mật là một vấn đề lớn trong môi trường doanh nghiệp ngày nay. Có rất nhiều công cụ có sẵn để bảo vệ cơ sở hạ tầng mạng và thông tin qua internet. Snort là một hệ thống phát hiện và ngăn chặn xâm nhập mạng miễn phí và nguồn mở.

Snort là một NIDS (Hệ thống phát hiện và xâm nhập mạng) được sử dụng rộng rãi nhất để phát hiện và ngăn chặn sự xâm nhập bằng cách tìm kiếm giao thức, phân tích nội dung.

Snort cung cấp nhiều tính năng như buffer overflow, stealth port scans và CGI attacks ...Snort cố gắng phát hiện các hoạt động độc hại, tấn công từ chối dịch vụ và quét cổng bằng cách giám sát lưu lượng mạng.

Nó được chia thành năm thành phần chính: Packet decoder, Preprocessor, Detection engine, Logging and Alerting system và Output modules.

Yêu cầu hệ thống

  • Ubuntu 18.04 server.
  • Tối thiểu 4 GB RAM,  CPU đa lõi.
  • Tối thiểu 1 TB đĩa cứng.

Chuẩn bị hệ thống để triển khai

Trước khi bắt đầu, hãy đảm bảo hệ thống của bạn được cập nhật và tất cả các phần mềm đã cài đặt đang chạy phiên bản mới nhất.

Đầu tiên, đăng nhập vào hệ thống bằng tài khoản root và cập nhật hệ thống của bạn bằng cách chạy lệnh sau:

apt-get update -y 
apt-get upgrade -y

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

Trước khi cài đặt Snort, bạn sẽ cần cài đặt các thư viện cần thiết trên hệ thống của mình.

apt-get install openssh-server ethtool build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev

Bạn cũng sẽ cần phải cài đặt DAQ. Để thực hiện việc này, trước tiên hãy tải xuống phiên bản DAQ mới nhất bằng lệnh sau:

wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz

Sau khi quá trình tải xuống hoàn tất, giải nén tệp đã tải xuống bằng lệnh sau:

tar -zxvf daq-2.0.6.tar.gz

Tiếp theo, di chuyển vào thư mục daq-2.0.6

cd daq-2.0.6

Bây giờ hãy chạy lệnh sau để biên dịch và cài đặt DAQ:

./configure && make && make install

Cài đặt Snort

Bạn có thể cài đặt Snort từ source code hoặc deb package trên Ubuntu. Bạn nên xây dựng Snort từ source code, vì phiên bản mới nhất của Snort có thể không có sẵn trong kho distro của Linux.

Cũng lưu ý rằng các ví dụ sau sử dụng eth0 cho giao diện mạng. Giao diện mạng chính của bạn có thể khác nhau.

Đầu tiên, tải xuống phiên bản mới nhất của mã nguồn Snort bằng lệnh sau:

wget https://www.snort.org/downloads/snort/snort-2.9.15.tar.gz

Khi quá trình tải xuống hoàn tất, giải nén tệp đã tải xuống bằng lệnh sau:

tar -xvzf snort-2.9.15.tar.gz

Di chuyển vào thư mục snort-2.9.15:

cd snort-2.9.8.3

Sau đó chạy lệnh sau để biên dịch và cài đặt Snort:

./configure --enable-sourcefire && make && make install

Tiếp theo, bạn sẽ cần cập nhật các thư viện dùng chung, nếu không bạn sẽ gặp lỗi khi bạn cố chạy Snort:

ldconfig

Tiếp theo, tạo một symlink đến Snort binary:

ln -s /usr/local/bin/snort /usr/sbin/snort

Cuối cùng, bạn có thể xác minh lại việc cài đặt và cấu hình bằng lệnh sau:

snort -V

Bạn sẽ thấy kết quả:

,,_ -*> Snort! <*- 
 o" )~ Version 2.9.15 GRE (Build 383) 
 '''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team 
     Copyright (C) 2014-2015 Cisco and/or its affiliates. All rights reserved. 
     Copyright (C) 1998-2013 Sourcefire, Inc., et al. 
     Using libpcap version 1.7.4 
     Using PCRE version: 8.38 2015-11-23 
     Using ZLIB version: 1.2.8

Cấu hình Snort

Bạn có thể định cấu hình Snort theo ba chế độ: Chế độ Sniffer, chế độ Packet logger và chế độ Network IDS. Trong bài này, chúng ta sẽ cấu hình Snort với Network IDS Mode.

Trước khi định cấu hình Snort, bạn sẽ cần tạo cấu trúc thư mục cho Snort.

Để làm điều này, tạo các thư mục và tập tin sau:

mkdir /etc/snort
mkdir /etc/snort/preproc_rules
mkdir /etc/snort/rules
mkdir /var/log/snort
mkdir /usr/local/lib/snort_dynamicrules
touch /etc/snort/rules/white_list.rules
touch /etc/snort/rules/black_list.rules
touch /etc/snort/rules/local.rules

Bây giờ thiết lập quyền cho các thư mục sau:

chmod -R 5775 /etc/snort/ 
chmod -R 5775 /var/log/snort/ 
chmod -R 5775 /usr/local/lib/snort
chmod -R 5775 /usr/local/lib/snort_dynamicrules/

Tiếp theo, bạn sẽ cần sao chép các tệp cấu hình từ Snort source

Di chuyển vào thư mục snort-2.9.15

cd snort-2.9.15

Sau đó, copy các file .conf, .map.dtd  đến thư mục /etc/snort/:

cp -avr *.conf *.map *.dtd /etc/snort/

Bạn cũng sẽ cần phải sao chép các file dynamic preprocessors:

cp -avr src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/* /usr/local/lib/snort_dynamicpreprocessor/

Bây giờ chúng ta sẽ chỉnh sửa tập tin cấu hình Snort. Đầu tiên, comment tất cả các quy tắc bằng lệnh sau:

sed -i "s/include \$RULE\_PATH/#include \$RULE\_PATH/" /etc/snort/snort.conf

Tiếp theo, mở file /etc/snort/snort.conf:

nano /etc/snort/snort.conf

Thay đổi tập tin như dưới đây:

# Setup the network addresses you are protecting 
 ipvar HOME_NET 192.168.10.0/24
 
 # Set up the external network addresses. Leave as "any" in most situations 
 ipvar EXTERNAL_NET any
 
 var RULE_PATH /etc/snort/rules 
 var SO_RULE_PATH /etc/snort/so_rules 
 var PREPROC_RULE_PATH /etc/snort/preproc_rules 
 var WHITE_LIST_PATH /etc/snort/rules 
 var BLACK_LIST_PATH /etc/snort/rules 
 include $RULE_PATH/local.rules

Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, kiểm tra tệp cấu hình bằng lệnh sau:

snort -T -i eth0 -c /etc/snort/snort.conf

Nếu mọi thứ đều ổn, bạn sẽ thấy đầu ra sau:

Snort successfully validated the configuration! 
Snort exiting

Kiểm tra Snort

Snort hiện đã sẵn sàng để thử nghiệm nhưng trước khi bắt đầu, bạn sẽ cần tạo một bộ rule.
Hãy tạo ra một bộ rule để kiểm tra Snort.

Sửa file local.rules :

nano /etc/snort/rules/local.rules

Thêm vào các dòng sau:

alert tcp any any -> $HOME_NET 21 (msg:"FTP connection attempt"; sid:1000001; rev:1;) 
alert icmp any any -> $HOME_NET any (msg:"ICMP connection attempt"; sid:1000002; rev:1;) 
alert tcp any any -> $HOME_NET 80 (msg:"TELNET connection attempt"; sid:1000003; rev:1;)

Lưu và đóng tập tin.

Các rule trên sẽ tạo cảnh báo khi ai đó cố gắng Ping, FTP hoặc Telnet đến máy chủ.

Bây giờ khởi chạy Snort trong chế độ Network IDS từ terminal và yêu cầu nó đưa ra bất kỳ cảnh báo nào lên màn hình console:

snort -A console -q -c /etc/snort/snort.conf -i eth0

Đặc điểm kỹ thuật của các tùy chọn được liệt kê dưới đây:

  • -A console: Chế độ in nhanh cảnh báo ra màn hình
  • -q: Chế độ im lặng. Không hiển thị banner và báo cáo trạng thái
  • -c: Đường dẫn đến file cấu hình snort.conf
  • -i: Cổng mạng đang lắng nghe

Bây giờ, vì Snort đã hoạt động và lắng nghe trên card eth0, vì vậy hãy để thử dùng Ping, FTP và Telnet từ một máy ở xa.

Trên máy ở xa chạy lệnh sau:

ping 192.168.10.188 
ftp 192.168.10.188 
telnet 192.168.10.188 80

Lưu ý: 192.168.10.188 là địa chỉ IP của máy chủ Snort trên card eth0.

Trên máy chủ Snort, bạn sẽ thấy output giống như thế này:

12/14-23:36:27.953203 [**] [1:1000002:1] ICMP connection attempt [**] [Priority: 0] {ICMP} 192.168.10.196 -> 192.168.10.188 
12/14-23:36:34.982502 [**] [1:1000001:1] FTP connection attempt [**] [Priority: 0] {TCP} 192.168.10.196:60392 -> 192.168.10.188:21 
12/14-23:36:45.907427 [**] [1:1000003:1] TELNET connection attempt [**] [Priority: 0] {TCP} 192.168.10.196:56076 -> 192.168.10.188:80

Bạn có thể dừng Snort bất cứ lúc nào bằng cách nhấn Ctrl + c từ bàn phím.

Tạo tập lệnh khởi động Snort

Bạn cũng sẽ cần tạo một tập lệnh khởi động để chạy Snort khi server khởi động. Bạn có thể làm điều này bằng cách tạo tệp snort.service:

nano /lib/systemd/system/snort.service

Thêm vào các dòng sau:

[Unit]
   Description=Snort NIDS Daemon
   After=syslog.target network.target
[Service]
   Type=simple
   ExecStart=/usr/local/bin/snort -q -c /etc/snort/snort.conf -i eth0
[Install]
  WantedBy=multi-user.target

Lưu file, sau đó kích hoạt tập lệnh để chạy khi khởi động:

systemctl enable snort

Và cuối cùng, khởi chạy Snort:

systemctl start snort

Bạn có thể kiểm tra trạng thái của Snort bằng cách chạy lệnh sau:

systemctl status snort

Bạn sẽ thấy output sau:

● snort.service - Snort NIDS Daemon 
     Loaded: loaded (/lib/systemd/system/snort.service; disabled; vendor preset: enabled) 
     Active: active (running) since Wed 2019-9-14 08:45:56 IST; 15s ago 
 Main PID: 16129 (snort) 
     CGroup: /system.slice/snort.service 
         └─16129 /usr/local/bin/snort -q -c /etc/snort/snort.conf -i eth0
 
 Sep 14 08:45:56 Node1 systemd[1]: Started Snort NIDS Daemon.