Nếu bạn nghiêm túc về bảo mật mạng, thì việc cài đặt giải pháp IPS hoặc IDS là điều bắt buộc để củng cố vành đai mạng và làm chệch hướng lưu lượng mạng không mong muốn tiềm ẩn.
Snort là một trong những giải pháp IPS/IDS nguồn mở, miễn phí và nổi tiếng như vậy. Hãy tìm hiểu cách cài đặt và thiết lập Snort trên Linux để bảo vệ mạng của bạn khỏi các cuộc tấn công qua bài viết sau đây!
Snort là gì?
Snort là phần mềm Hệ thống ngăn chặn và phát hiện xâm nhập mạng (NIDS/IPS) mã nguồn mở, giúp bảo vệ mạng của bạn bằng cách thực thi các quy tắc và bộ lọc phát hiện, loại bỏ những gói độc hại tiềm ẩn được đưa vào mạng của bạn.
Với Snort, bạn sẽ có thể thực hiện ghi nhật ký lưu lượng mạng nâng cao, dò tìm gói tin và phân tích, đồng thời thiết lập hệ thống ngăn chặn xâm nhập mạnh mẽ để bảo vệ mạng của mình khỏi lưu lượng truy cập không mong muốn và có khả năng gây hại.
Điều kiện tiên quyết để cài đặt Snort
Trước khi cài đặt Snort, bạn cần thực hiện một số thiết lập sơ bộ. Điều này chủ yếu bao gồm việc cập nhật và nâng cấp hệ thống, cũng như cài đặt các dependency mà Snort yêu cầu để hoạt động bình thường.
Bắt đầu bằng cách cập nhật và nâng cấp hệ thống của bạn.
Trên các bản phân phối Linux dựa trên Ubuntu và Debian:
sudo apt update && apt upgrade -y
Trên Arch Linux và các dẫn xuất của nó:
sudo pacman -Syu
Trên RHEL và Fedora:
sudo dnf upgrade
Khi hệ thống của bạn đã được nâng cấp, hãy tiếp tục cài đặt các dependency mà Snort yêu cầu. Đây là các lệnh bạn cần để chạy:
Trên Ubuntu và Debian, hãy chạy:
sudo apt install -y build-essential autotools-dev libdumbnet-dev libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev cmake liblzma-dev openssl libssl-dev cpputest libsqlite3-dev libtool uuid-dev git autoconf bison flex libcmocka-dev libnetfilter-queue-dev libunwind-dev libmnl-dev ethtool libjemalloc-dev libpcre++-dev
Trên Arch Linux, hãy chạy:
sudo pacman -S gperftools hwloc hyperscan ibdaqlibdnet libmnl libpcap libunwind luajit lz4 openssl pcre pulledporkxz zlib cmake pkgconf
Đối với RHEL và Fedora, hãy chạy lệnh sau:
sudo dnf install gcc gcc-c++ libnetfilter_queue-devel git flex bison zlib zlib-devel pcre pcredevel libdnet tcpdump libnghttp2 wget xz-devel -y
Ngoài ra, bạn cũng cần cài đặt thủ công Data Acquisition Library, LibDAQ để Snort hoạt động bình thường và cả gperftools để tạo những file build.
Đầu tiên, tải xuống các file nguồn LibDAQ từ trang web chính thức bằng cách sử dụng lệnh wget. Sau đó, giải nén kho lưu trữ và di chuyển vào thư mục bằng cd. Bên trong thư mục, chạy các script bootstrap và configure, sau đó tiến hành chuẩn bị các file với lệnh make và cài đặt nó bằng lệnh make install.
wget https://www.snort.org/downloads/snortplus/libdaq-3.0.11.tar.gz
tar -xzvf lib*
cd lib*
./bootstrap
./configure
make
sudo make install
Sau khi cài đặt LibDAQ, bạn cần cài đặt một dependency cuối cùng: gperftools. Bắt đầu bằng cách lấy các file nguồn từ repo GitHub. Giải nén các file, di chuyển vào thư mục và chạy script cấu hình. Cuối cùng, cài đặt gói bằng lệnh make và make install.
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz
tar -xvzf gper* && cd gper
./configure
make
sudo make install
Khi các dependency này đã được cài đặt, bạn có thể chuyển sang các bước tiếp theo để cài đặt Snort.
Cài đặt Snort từ nguồn trên Linux
Với quá trình thiết lập sơ bộ, giờ đây bạn có thể tập trung vào việc cài đặt phần mềm thực tế. Bạn sẽ xây dựng nó từ nguồn, vì vậy trước tiên hãy lấy các file build cần thiết.
Sử dụng lệnh wget hoặc tải xuống các file theo cách thủ công từ trang tải xuống chính thức:
wget https://www.snort.org/downloads/snortplus/snort3-3.1.58.0.tar.gz
Khi kho lưu trữ chứa các file build đã tải xuống xong, hãy giải nén nó bằng lệnh tar:
tar -xzvf snort*
Di chuyển vào thư mục đã giải nén, chạy script cấu hình, sử dụng lệnh make để chuẩn bị các file và cuối cùng cài đặt chúng bằng make install:
cd snort*
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build
make
sudo make install
Bây giờ, Snort đã được cài đặt thành công trong hệ thống của bạn. Tuy nhiên, bạn cần hoàn thành một bước nữa. Khi phần mềm mới được cài đặt thủ công, thư mục cài đặt và các thư viện cần thiết có thể không được tự động đưa vào đường dẫn mặc định của hệ thống. Vì vậy, bạn có thể gặp lỗi khi khởi động ứng dụng.
Để tránh sự cố này, bạn cần chạy lệnh ldconfig. Nó sẽ đồng bộ cache thư viện dùng chung của hệ thống với các thư viện và file nhị phân mới được cài đặt. Chạy lệnh ldconfig từ root shell hoặc sử dụng tiền tố sudo:
sudo ldconfig
Bây giờ, bạn đã hoàn thành tất cả các bước quan trọng cần thiết để cài đặt Snort. Để xác minh cài đặt, hãy chạy lệnh Snort với flag -V và bạn sẽ thấy đầu ra trả về tên phiên bản và dữ liệu khác.
snort -V
Khi bạn đã xác minh cài đặt Snort, hãy chuyển sang các bước tiếp theo để thiết lập nó dưới dạng IDS/IPS toàn diện.
Cấu hình ban đầu của Snort trên Linux
Hiệu quả của Snort gần như hoàn toàn phụ thuộc vào chất lượng của các bộ quy tắc mà nó được cung cấp.
Tuy nhiên, trước khi thiết lập những quy tắc, bạn cần cấu hình các card mạng để hoạt động với Snort và bạn cũng cần kiểm tra cấu hình mặc định đang được Snort xử lý như thế nào. Bắt đầu bằng cách cấu hình các card mạng.
Đặt interface mạng ở chế độ promiscuous:
sudo ip link set dev interface_name promisc on
Sử dụng ethtool, tắt Generic Receive Offload (GRO) và Large Receive Offload (LRO) để ngăn các gói mạng lớn hơn bị cắt bớt:
sudo ethtool -K interface_name gro off lro off
Kiểm tra xem Snort hoạt động như thế nào với cấu hình mặc định:
snort -c /usr/local/etc/snort/snort.lua
Điều này sẽ trả về tín hiệu đầu ra thành công, nghĩa là bạn đã cài đặt và thiết lập Snort chính xác trong hệ thống của mình. Giờ đây, bạn có thể mày mò các tính năng của nó và thử nghiệm với những cấu hình khác nhau để tìm ra bộ quy tắc tốt nhất nhằm bảo mật mạng của mình.
Thiết lập các quy tắc và thực thi chúng với Snort
Với các cài đặt cơ bản đã có, Snort hiện đã sẵn sàng để bảo vệ mạng của bạn. Như bạn đã biết, Snort cần các bộ quy tắc để xác định tính hợp lệ của lưu lượng truy cập, hãy thiết lập một vài bộ quy tắc miễn phí do cộng đồng tạo cho Snort.
Snort đọc các bộ quy tắc và cấu hình từ những thư mục cụ thể. Vì vậy, trước tiên, sử dụng các lệnh mkdir và touch, tạo một vài thư mục quan trọng để lưu trữ những quy tắc và dữ liệu liên quan khác cho Snort:
sudo mkdir -p /usr/local/etc/{lists,so_rules,rules}
sudo touch /usr/local/etc/rules/local.rules
sudo touch /usr/local/etc/lists/default.blocklist
Với các thư mục này được tạo, bạn có thể tải xuống bộ quy tắc cộng đồng từ trang web chính thức bằng cách sử dụng lệnh wget:
wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz
Khi bộ quy tắc hoàn tất tải xuống, hãy giải nén và sao chép nó vào thư mục /usr/local/etc/rules/.
tar -xvzf snort3-com*
cd snort3-com*
cp * /usr/local/etc/rules/
Để chạy Snort với bộ quy tắc, hãy thực thi lệnh này:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -i interface_name -s 65535 -k none
Phân tích lệnh:
- -c đặt đường dẫn đến file cấu hình mặc định
- -R đặt đường dẫn đến bộ quy tắc để thực thi
- -i thiết lập interface
- -s loại bỏ giới hạn snaplen
- -k bỏ qua các checksum
Điều này sẽ xác thực cấu hình và thực thi tất cả các bộ quy tắc trên Snort. Ngay khi phát hiện bất kỳ sự xáo trộn mạng nào, nó sẽ cảnh báo bạn bằng một thông báo trên console.
Nếu muốn tạo và thực thi bộ quy tắc của riêng mình, bạn có thể tìm hiểu thêm về bộ quy tắc này từ các trang tài liệu chính thức.
Thiết lập ghi nhật ký với Snort
Theo mặc định, Snort không xuất bất kỳ nhật ký nào. Bạn cần chỉ định bằng flag -L để bắt đầu Snort ở chế độ ghi nhật ký, xác định loại file nhật ký và flag -l để đặt thư mục cho Snort kết xuất nhật ký.
Đây là lệnh để bắt đầu Snort khi bật ghi nhật ký:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -i interface_name -s 65535 -k none -L file_type -l /var/log/snort
Phân tích lệnh:
- -c đặt đường dẫn đến file cấu hình mặc định
- -R đặt đường dẫn đến bộ quy tắc để thực thi
- -i thiết lập interface
- -s loại bỏ giới hạn snaplen
- -k bỏ qua checksum
- -L cho phép chế độ ghi nhật ký và xác định loại file nhật ký
- -l xác định đường dẫn lưu trữ nhật ký
Lưu ý rằng trong lệnh ví dụ, thư mục ghi nhật ký được đặt thành /var/log/snort. Mặc dù đây là phương pháp được khuyến nghị, nhưng bạn có thể tự do lưu trữ nhật ký của mình ở nơi khác.
Bạn có thể đọc các file nhật ký Snort từ thư mục bạn đã xác định hoặc chuyển chúng vào phần mềm SIEM như Splunk để phân tích thêm.
Thêm Snort làm daemon khởi động hệ thống
Mặc dù đã cài đặt và thiết lập Snort, nhưng bạn cần đảm bảo rằng nó bắt đầu thực thi khi khởi động và chạy như một daemon nền. Việc thêm nó làm service hệ thống tự khởi động sẽ đảm bảo Snort luôn hoạt động và bảo vệ hệ thống của bạn mọi lúc nó trực tuyến.
Sau đây là cách thêm deamon khởi động Snort trên Linux:
1. Bắt đầu bằng cách tạo một file service systemd mới:
touch /lib/systemd/system/snort.service
2. Mở file trong trình soạn thảo văn bản bạn chọn và điền dữ liệu sau vào file. Bạn có thể sửa đổi các flag để phù hợp với nhu cầu của mình:
[Unit]
Description=Snort Daemon
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -s 65535 -k none -l /var/log/snort -D -L pcap -i ens33
[Install]
WantedBy=multi-user.target
3. Lưu và thoát file. Sau đó, sử dụng các lệnh service và systemctl, kích hoạt và bắt đầu script:
sudo systemctl enable snort.service
sudo snort start
Daemon nền Snort bây giờ sẽ được thiết lập và chạy. Bạn có thể xác minh trạng thái của script bằng lệnh systemctl status snort.
Mặc dù triển khai IDS là một phương pháp hay, nhưng đây là biện pháp thụ động chứ không phải chủ động. Cách tốt nhất để cải thiện và đảm bảo tính bảo mật cho mạng là liên tục kiểm tra mạng và tìm kiếm các lỗi để khắc phục.
Kiểm thử thâm nhập là một cách tuyệt vời để tìm các lỗ hổng có thể khai thác và vá chúng.