SARG - Squid Analysis Report Generator : Công cụ monitor traffic cho Squid Proxy

Ở bài viết trước, mình đã có chia sẻ với các bạn cách xây dựng một Transparent proxy với Squid , các bạn có thể tham khảo lại tại đây Mặc định Squid proxy sẽ lưu các request của client trong một file /var/log/squid/access.log/ . Cấu trúc lưu của log (logformat) các bạn có thể tự định nghĩa trong config của Squid. Tuy nhiên cơ bản nhất vẫn là các thông tin cần thiết như thông tin client request, request đến đâu, thời gian v.v.. để người quản trị có thể theo dõi, giám sát hoạt động của các client. Các thông tin này sẽ được Squid lưu lại với dạng text, mỗi request sẽ là 1 dòng gồm các cột thông tin tương ứng mà bạn có thể tự định nghĩa . (Tham khảo logformat của Squid)

Tuy nhiên, dù tất cả các request đã được lưu lại nhưng việc tra cứu là khá khó khăn . Do vậy người ta đã xây dựng một công cụ gọi là Squid Analysis Report Generator - SARG , để hỗ trợ việc thống kê, tổng hợp log từ Squid proxy.

Giới thiệu SARG

SARG là một công cụ mã nguồn mở hỗ trợ tạo một bản thống kê log squid với giao diện dễ nhìn , dễ tra cứu hơn so với file access.log mặc định. Bản report được viết bằng HTML format với các thông tin về users, ip address, v..v... tóm lại là các dạng thông tin được khai báo bởi log format của squid. Sẽ được SARG thống kê lại kèm theo 1 số tính năng như tổng hợp lưu lượng truy cập. Xếp hạng các truy cập dựa vào lưu lượng v.v....

SARG có thể được cài đặt trên hầu hết các distro của linux như RHEL/CentOS/Fedora/Debian/Ubuntu/Linux Mint. Trong bài giới thiệu này mình sẽ sử dụng CentOS 7 để cài đặt SARG. Và tất nhiên, vì là 1 công cụ được viết để dùng cho Squid proxy, nên nếu cài đặt SARG mà không cài Squid thì nó sẽ không hoạt động. Lý do tại sao thì lát vào phần config các bạn sẽ hiểu !

Cài đặt SARG

Như đã nói ở trên thì SARG chỉ hoạt động cùng với Squid proxy. Nên các bạn phải cài đặt Squid proxy trước nhé. Xem hướng dẫn cài đặt Squid proxy ở đây Trên Debian/Ubuntu thì các bạn có thể cài đặt SARG trực tiếp từ store, còn trên RedHat/CentOS thì phải build từ source :v , để chuẩn bị thì phải cài một số thứ cần thiết trước :

# yum install –y gcc gd gd-devel make perl-GD httpd

Sau đó down source SARG về và build

# wget http://liquidtelecom.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.10/sarg-2.3.10.tar.gz
# tar -xvzf sarg-2.3.10.tar.gz
# cd sarg-2.3.10
# ./configure
# make
# make install

Lưu ý :

1 : Nếu chạy ./configure mà gặp lỗi báo thiếu pcre.h thì bạn hãy cài đặt yum install pcre-devel sau đó yum update và configure lại nhé. 2 : Nếu chạy make install mà gặp lỗi này

*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version 0.18 but the autoconf macros are from gettext version 0.19

Thì là do khác version gettext của SARG và OS đang dùng. Các bạn khai báo lại version gettext trong file configure của SARG sau đó chạy ./configure lại là được nhé. Thực hiện như sau :

# cd sarg-2.3.10
# vi configure

Tìm dòng GETTEXT_MACRO_VERSION=0.19 và sửa lại thành GETTEXT_MACRO_VERSION=0.18 (dòng 5784) Save lại và thoát ra rồi cài đặt như bth.

Kết quả sau khi cài đặt thành công :

make[1]: Leaving directory `/root/sarg-2.3.10/po'
Creating /usr/local/share/sarg/images
cp sarg /usr/local/bin/sarg
chmod 755 /usr/local/bin/sarg
cp sarg.1 /usr/local/share/man/man1/sarg.1
chmod 755 /usr/local/share/man/man1/sarg.1
cp /usr/local/etc/sarg.conf
cp ./exclude_codes /usr/local/etc;
cp ./user_limit_block /usr/local/etc;
cp -r ./images/* /usr/local/share/sarg/images;
Creating /usr/local/share/sarg/fonts
cp -r ./css.tpl /usr/local/etc;

Kiểm tra sẽ thấy có file usr/local/etc/sarg.conf

Config SARG

Sau khi cài đặt xong , chúng ta sẽ tiến hành cấu hình cho SARG hoạt động. Mặc định SARG có rất nhiều option cho các bạn lựa chọn tùy theo nhu cầu sử dụng. Tuy nhiên chúng ta chỉ cần 4 option tối thiểu để SARG hoạt động như sau :

1 - Access logs path : khai báo nơi lưu log squid.

SARG được viết dựa trên format log của squid, lẽ tất nhiên nếu không cài squid thì sẽ không có log format của squid. Đó là lý do vì sao SARG sẽ không hoạt động nếu không có Squid =))

# sarg.conf
#
# TAG:  access_log file
#       Where is the access.log file
#       sarg -l file
#
access_log /var/log/squid/access.log                 #Nơi lưu file access.log của Squid

Mặc định access.log sẽ lưu ở /var/log/squid/ . Tuy nhiên nếu bạn hứng chí khai báo ở đâu khác thì tùy bạn, nhưng nhớ trỏ đường dẫn chính xác nhé.

2 - Output directory : nơi lưu các report của sarg dựa trên log squid

Các log của squid sẽ được SARG chuyển thành định dạng HTML và được dùng để truy cập bằng trình duyệt, nên dĩ nhiên các file format HTML sẽ được lưu ở /var/www/html/

# TAG:  output_dir
#       The reports will be saved in that directory
#       sarg -o dir
#
output_dir /var/www/html/squid-reports

squid-reports là tên file, bạn muốn đặt gì tùy ý nhưng lưu ý là tiếng Việt không dấu và không có khoản trắng nhé.

3 - Date Format : format ngày tháng năm của report

# TAG:  date_format
#       Date format in reports: e (European=dd/mm/yy), u (American=mm/dd/yy), w (Weekly=yy.ww)
#
date_format e

4 - Overwrite report for the same date. : log cùng ngày thì ghi nối tiếp.

# TAG: overwrite_report yes|no
#      yes - if report date already exist then will be overwritten.
#       no - if report date already exist then will be renamed to filename.n, filename.n+1
#
overwrite_report yes

Đã xong config, save lại và thoát ra nhé.

Tạo SARG report

SARG là một công cụ hỗ trợ tạo một bản report cho squid, và tin buồn là nó không hề tự động chạy :v . Để SARG tạo report, chúng ta cần chạy command sau bằng quyền SUDO :

# SARG -x

Output thành công nếu không có lỗi

[[email protected] ~]# sarg -x
SARG: Init
SARG: Loading configuration from /usr/local/etc/sarg.conf
SARG: Parameters:
SARG:           Hostname or IP address (-a) = 
SARG:                    Useragent log (-b) = 
SARG:                     Exclude file (-c) = 
SARG:                  Date from-until (-d) = 
SARG:    Email address to send reports (-e) = 
SARG:                      Config file (-f) = /usr/local/etc/sarg.conf
SARG:                      Date format (-g) = Europe (dd/mm/yyyy)
SARG:                        IP report (-i) = No
SARG:             Keep temporary files (-k) = No
SARG:                        Input log (-l) = /var/log/squid/access.log
SARG:               Resolve IP Address (-n) = No
SARG:                       Output dir (-o) = /var/www/html/squid-reports/
SARG: Use Ip Address instead of userid (-p) = No
SARG:                    Accessed site (-s) = 
SARG:                             Time (-t) = 
SARG:                             User (-u) = 
SARG:                    Temporary dir (-w) = /tmp/sarg
SARG:                   Debug messages (-x) = Yes
SARG:                 Process messages (-z) = No
SARG:  Previous reports to keep (--lastlog) = 0
SARG: 
SARG: SARG version: 2.3.10 Apr-12-2015
SARG: Reading access log file: /var/log/squid/access.log
SARG: Records in file: 12058, reading: 100.00%
SARG:    Records read: 12058, written: 12058, excluded: 0
SARG: Squid log format
SARG: Period: 05 Nov 2017-07 Nov 2017
SARG: Sorting log /tmp/sarg/172_18_18_15.user_unsort
SARG: Making file /tmp/sarg/172_18_18_15
SARG: Sorting log /tmp/sarg/172_17_2_61.user_unsort
SARG: Making file /tmp/sarg/172_17_2_61
SARG: Sorting file "/tmp/sarg/172_18_18_15.utmp"
SARG: Making report 172.18.18.15
SARG: Sorting file "/tmp/sarg/172_17_2_61.utmp"
SARG: Making report 172.17.2.61
SARG: Making index.html
SARG: Successful report generated on /var/www/html/squid-reports/05Nov2017-07Nov2017
SARG: Purging temporary file sarg-general
SARG: End

Sau khi chạy xong, chúng ta có thể truy cập vào http://ip-address/squid-reports để xem kết quả : Trang chủ của SARG

Report cơ bản :

Top site truy cập :

Cơ bản là access.log của Squid có gì thì SARG sẽ show lên cái đó. Vì vậy log "đẹp" hay không phụ thuộc vào logformat và config của Squid có "đẹp" hay không 😄

Config cho SARG up report định kỳ :

Thay vì phải chạy tay để SARG up report, ta có thể dùng crontab để cho SARG tự động chạy. Ở đây mình sẽ setup cho SARG chạy định kỳ mỗi giờ .

# crontab -e
* * */1 * * * /usr/local/bin/sarg -x

Vậy là đã cơ bản hoàn thành việc tạo một công cụ thống kê , monitor dành cho Squid proxy 😃