Thứ sáu, 05/12/2014 | 00:00 GMT+7

Cách kiểm tra lưu lượng mạng trong server LAMP với sysdig trên CentOS 7

sysdig là một công cụ khám phá và khắc phục sự cố cấp hệ thống hoàn toàn mới, kết hợp các lợi ích của các tiện ích nổi tiếng như strace, tcpdump và lsof vào một ứng dụng duy nhất. Và, như thể điều này là chưa đủ, sysdig cũng cung cấp khả năng lưu hoạt động của hệ thống để theo dõi các file để phân tích sau này.

Bên cạnh đó, một thư viện phong phú của các kịch bản (gọi là đục) được cung cấp cùng với quá trình cài đặt nhằm giúp bạn giải quyết vấn đề phổ biến hay gặp giám sát nhu cầu, hiển thị đĩa thất bại I / O hoạt động để tìm kiếm các file nơi một quá trình nhất định đã dành phần lớn thời gian và mọi thứ ở giữa. Bạn cũng có thể viết các script của riêng mình để nâng cao sysdig hơn nữa theo nhu cầu của bạn.

Trong bài viết này, trước tiên ta sẽ giới thiệu cách sử dụng sysdig cơ bản, sau đó khám phá phân tích mạng với sysdig, bao gồm một ví dụ về kiểm tra lưu lượng mạng trên server CentOS 7 LAMP. Xin lưu ý VPS được sử dụng trong các ví dụ chưa được đặt dưới tải trọng đáng kể, nhưng nó đủ để hiển thị những điều cơ bản của các nhiệm vụ kiểm toán hiện tại.

Yêu cầu

Trước khi bạn bắt đầu, hãy đảm bảo bạn có những yêu cầu này.

  • CentOS 7 Server
  • Cài đặt server LAMP trên VPS CentOS 7 của bạn. Hãy tham khảo bài viết này để được hướng dẫn
  • Ngoài ra, bạn nên có một account user không phải root với quyền truy cập sudo sẽ được sử dụng để chạy sysdig

Cài đặt sysdig

Đăng nhập vào server của bạn và làm theo các bước sau:

Bước 1 - Tin tưởng vào khóa Draios GPG

Draios là công ty đứng sau sysdig.

Trước khi tiến hành quá trình cài đặt, bạn sẽ sử dụng khóa này để xác minh tính xác thực của gói mà bạn sắp download .

Để thêm thủ công khóa Draios vào khóa RPM của bạn, hãy sử dụng công cụ rpm với cờ --import :

sudo rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public   

Sau đó, download repository Draios và cấu hình yum để sử dụng nó:

sudo curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo 

Bước 2 - Kích hoạt Kho EPEL

Extra Packages for Enterprise Linux (EPEL) là một kho chứa phần mềm open-souce và miễn phí chất lượng cao được duy trì bởi dự án Fedora và tương thích 100% với các phần mềm phụ của nó, chẳng hạn như Red Hat Enterprise Linux và CentOS. Kho lưu trữ này là cần thiết để download gói Hỗ trợ module nhân động (DKMS), gói này cần bởi sysdig và để download các gói phụ thuộc khác.

sudo yum -y install epel-release 

Bước 3 - Cài đặt tiêu đề kernel

Điều này là cần thiết vì sysdig cần phải xây dựng một module nhân tùy chỉnh (có tên là sysdig-probe ) và sử dụng nó để hoạt động.

sudo yum -y install kernel-devel-$(uname -r) 

Bước 4 - Cài đặt gói sysdig

Bây giờ ta có thể cài đặt sysdig.

sudo yum -y install sysdig 

Bước 5 - Chạy sysdig với quyền user không phải root

Để bảo mật, tốt nhất nên có user không phải root để chạy sysdig. Tạo một group tùy chỉnh cho sysdig:

sudo groupadd sysdig 

Thêm một hoặc nhiều user vào group . Trong ví dụ của ta , ta sẽ thêm sammy user .

sudo usermod -aG sysdig sammy 

Định vị file binary cho sysdig:

which sysdig   

Bạn có thể nhận được phản hồi như

/usr/bin/sysdig 

Cung cấp cho tất cả các thành viên của group sysdig quyền để chạy file thực thi sysdig (và chỉ file binary đó). Chỉnh sửa /etc/sudoers với:

sudo visudo 

Thêm các dòng sau cho group sysdig trong phần group . Thêm các dòng mới sau phần %wheel là được. Thay thế đường dẫn bằng vị trí của sysdig trên hệ thống của bạn:

## Same thing without a password # %wheel        ALL=(ALL)       NOPASSWD: ALL  ## sysdig %sysdig ALL= /usr/bin/sysdig  

Nếu bạn cần giải thích rõ hơn về cách chỉnh sửa file /etc/sudoers , bạn nên xem bài viết này .

Chạy sysdig

Bạn có thể chạy sysdig ở hai chế độ.

Bạn có thể xem trực tiếp stream hoạt động của server trong thời gian thực hoặc bạn có thể lưu các bản ghi hoạt động hệ thống vào một file để phân tích offline sau này.

Vì rất có thể bạn cần sử dụng tùy chọn thứ hai, đó là những gì ta sẽ đề cập ở đây. Lưu ý khi lưu hoạt động của hệ thống vào một file , sysdig sẽ chụp toàn bộ hệ điều hành để mọi thứ xảy ra trên server của bạn trong repository ảng thời gian đó sẽ có sẵn để phân tích offline .

Lưu ý: Khi bạn chạy lệnh sysdig, hãy đảm bảo mỗi tùy chọn được đặt trước một dấu gạch ngang ngắn. Việc copy paste có thể gây ra sự cố trong đó một dấu gạch ngang được dán dưới dạng một dấu gạch ngang dài và do đó chương trình không nhận dạng được.

Hãy chạy một lệnh sysdig cơ bản để nắm bắt 1000 dòng hoạt động của server .

Để nắm bắt hoạt động của hệ thống vào file có tên act1.scap và giới hạn kết quả ở 1000 sự kiện, hãy chạy lệnh sau (bỏ qua phần -n 1000 nếu bạn muốn chạy sysdig trong một khoảng thời gian không xác định). Lựa chọn -z được sử dụng để cho phép nén file theo dõi.

sudo sysdig -w act1.scap.gz -n 1000 -z 

Lưu ý: Nếu bạn bỏ qua lựa chọn -n ở bước cuối cùng, bạn có thể làm gián đoạn việc thực thi sysdig bằng cách nhấn tổ hợp phím CTRL + C.

Chisel - Tổng quan về tập lệnh sysdig

Chi đục là tập lệnh sysdig. Để hiển thị danh sách các mũi đục có sẵn, ta cần chạy lệnh sau:

sudo sysdig -cl 

Để kiểm tra lưu lượng mạng trên server CentOS 7 LAMP của ta bằng cách sử dụng file theo dõi được tạo bởi sysdig, ta sẽ sử dụng các chi tiết có sẵn trong danh mục Mạng:

Category: Net ------------- iobytes_net         Show total network I/O bytes spy_ip              Show the data exchanged with the given IP address spy_port            Show the data exchanged using the given IP port number topconns            top network connections by total bytes topports_server     Top TCP/UDP server ports by R+W bytes topprocs_net        Top processes by network I/O 

Có thể xem thêm mô tả về một chiếc đục cụ thể, cùng với hướng dẫn sử dụng nó với:

sudo sysdig -i chisel name 

Ví dụ:

sudo sysdig -i spy_ip 

Kết quả này cho ra:

Category: Net ------------- spy_ip              Show the data exchanged with the given IP address shows the network payloads exchanged with an IP endpoint. You can combine this chisel with the -x, -X or -A sysdig command line switches to customize the screen output Args: [ipv4] host_ip - the remote host IP address [string] disable_color - Set to 'disable_colors' if you want to disable color output 

Phần Args cho biết liệu bạn có cần phải chuyển một đối số cho đục hay không. Trong trường hợp spy_ip , bạn cần chuyển một địa chỉ IP làm đối số cho chisel.

Kiểm toán lưu lượng mạng (Ví dụ thực tế)

Hãy xem qua một ví dụ thực tế về cách sử dụng sysdig để phân tích việc sử dụng băng thông và xem thông tin chi tiết về lưu lượng mạng.

Để có được kết quả tốt nhất từ thử nghiệm này, bạn cần cài đặt một biểu mẫu web giả trên server của bạn để tạo ra lưu lượng truy cập thích hợp. Nếu đây là server có cài đặt LAMP mới, bạn có thể tạo biểu mẫu này tại /var/www/html/index.php .

<body> <form id="loginForm" name="loginForm" method="post" action="login.php">   <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">     <tr>       <td width="112"><b>Username:</b></td>       <td width="188"><input name="login" type="text" class="textfield" id="login" /></td>     </tr>     <tr>       <td><b>Password:</b></td>       <td><input name="pass" type="password" class="textfield" id="pass" /></td>     </tr>     <tr>       <td>&nbsp;</td>       <td><br />       <input type="submit" name="Submit" value="Login" /></td></tr>   </table> </form> </body> 

Điều này không bắt buộc, nhưng để mọi thứ gọn gàng hơn, bạn cũng có thể tạo trang /var/www/html/login.php :

<body>     <p>Form submitted.</p> </body> 

Cảnh báo: Vui lòng xóa biểu mẫu này khi bạn kiểm tra xong!

Bước 1 - Lưu dữ liệu trực tiếp để phân tích offline

Ta sẽ bắt đầu thu thập dữ liệu thu thập log của bạn bằng cách ra lệnh sau:

sudo sysdig -w act1.scap.gz -z -s 4096 

Để sysdig chạy trong một khoảng thời gian hợp lý. Dấu nhắc lệnh của bạn sẽ bị treo trong khi sysdig chạy.

Bây giờ, hãy truy cập domain hoặc địa chỉ IP của server trong trình duyệt web . Bạn có thể truy cập cả các trang hiện có và không tồn tại để tạo ra một số lưu lượng truy cập. Nếu bạn muốn ví dụ cụ thể này hoạt động, bạn nên truy cập trang chủ, điền thông tin đăng nhập với bất kỳ thứ gì bạn thích và gửi biểu mẫu đăng nhập một vài lần . Ngoài ra, hãy thoải mái chạy các truy vấn đến database MySQL / MariaDB của bạn.

Khi bạn đã tạo một số lưu lượng, hãy nhấn CTRL + C để dừng sysdig. Sau đó, bạn sẽ sẵn sàng chạy các truy vấn phân tích mà ta sẽ thảo luận sau trong hướng dẫn này.

Trong môi trường production , bạn có thể bắt đầu thu thập dữ liệu sysdig trong thời gian bận rộn trên server của bạn .

Hiểu bộ lọc: Lớp và Trường

Trước khi ta sắp xếp dữ liệu sysdig, hãy giải thích một số phần tử lệnh sysdig cơ bản.

Sysdig cung cấp các lớp và trường dưới dạng bộ lọc. Bạn có thể coi các lớp là các đối tượng và các trường là các thuộc tính, theo một phép loại suy dựa trên lý thuyết lập trình hướng đối tượng.

Bạn có thể hiển thị danh sách đầy đủ các lớp và trường với:

sudo sysdig -l 

Ta sẽ sử dụng các lớp và trường để lọc kết quả khi phân tích file theo dõi.

Bước 2 - Thực hiện phân tích offline bằng file theo dõi

Vì ta muốn kiểm tra lưu lượng mạng đến và đi từ server LAMP của bạn , ta sẽ tải file theo dõi act1.scap.gz và thực hiện các kiểm tra sau với sysdig:

Hiển thị danh sách các quy trình hàng đầu sử dụng băng thông mạng

sudo sysdig -r act1.scap.gz -c topprocs_net 

Bạn sẽ thấy kết quả giống như sau:

Bytes     Process ------------------------------ 331.68KB  httpd 24.14KB   sshd 4.48KB    mysqld 

Ở đây bạn có thể thấy rằng Apache đang sử dụng nhiều băng thông nhất (quy trình httpd ).

Dựa trên kết quả kết quả này, bạn có thể thực hiện một cuộc gọi đánh giá được hỗ trợ và thông báo để quyết định xem bạn có cần tăng băng thông khả dụng để phục vụ các yêu cầu ước tính hiện tại và trong tương lai của bạn hay không. Nếu không, bạn có thể cần đặt các hạn chế thích hợp đối với tốc độ tối đa của băng thông đã có sẵn mà một quy trình có thể sử dụng.

Hiển thị mức sử dụng mạng theo quy trình

Ta cũng có thể cần biết những IP nào đang sử dụng băng thông mạng được sử dụng bởi httpd , như trong ví dụ trước.

Với mục đích đó, ta sẽ sử dụng topconns (hiển thị các kết nối mạng hàng đầu theo tổng số byte) và thêm một bộ lọc được hình thành với proc lớp và name trường để lọc kết quả để chỉ hiển thị các kết nối http . Nói cách khác, lệnh sau:

sudo sysdig -r act1.scap.gz -c topconns proc.name=httpd 

Thao tác này sẽ trả về các kết nối mạng hàng đầu đến server của bạn, bao gồm cả nguồn, nơi quá trình phân phát yêu cầu là httpd .

Bytes     Proto     Conn      ------------------------------ 56.24KB   tcp       111.111.111.111:12574->your_server_ip:80 51.94KB   tcp       111.111.111.111:15249->your_server_ip:80 51.57KB   tcp       111.111.111.111:27832->your_server_ip:80 51.26KB   tcp       111.111.222.222:42487->your_server_ip:80 48.20KB   tcp       111.111.222.222:42483->your_server_ip:80 48.20KB   tcp       111.111.222.222:42493->your_server_ip:80 4.17KB    tcp       111.111.111.111:13879->your_server_ip:80 3.14KB    tcp       111.111.111.111:27873->your_server_ip:80 3.06KB    tcp       111.111.222.222:42484->your_server_ip:80 3.06KB    tcp       111.111.222.222:42494->your_server_ip:80 

Lưu ý địa chỉ IP nguồn và đích ban đầu đã bị che khuất vì lý do bảo mật.

Loại truy vấn này có thể giúp bạn tìm những user băng thông hàng đầu đang gửi lưu lượng truy cập đến server của bạn.

Sau khi nhìn vào kết quả ở trên, bạn có thể nghĩ rằng các số sau địa chỉ IP nguồn đại diện cho các cổng. Tuy nhiên, đó không phải là trường hợp. Những con số đó cho biết số sự kiện được ghi lại bởi sysdig.

Bước 3 - Phân tích dữ liệu được trao đổi giữa một IP cụ thể và Apache

Bây giờ ta sẽ kiểm tra chi tiết hơn các kết nối giữa một địa chỉ IP cụ thể và Apache.

echo_fds cho phép ta hiển thị dữ liệu đã được đọc và ghi bởi các quy trình. Khi được kết hợp với tên quy trình cụ thể và IP ứng dụng client (chẳng hạn như proc.name=httpd and fd.cip=111.111.111.111 trong trường hợp này), chi tiết này sẽ hiển thị dữ liệu đã được trao đổi giữa server LAMP của ta và địa chỉ IP ứng dụng client đó .

Ngoài ra, việc sử dụng các lựa chọn sau giúp ta hiển thị kết quả một cách thân thiện và chính xác hơn:

  • -s 4096 : Đối với mỗi sự kiện, đọc tối đa 4096 byte từ cache của nó (cờ này cũng được dùng để chỉ định số byte của mỗi cache dữ liệu sẽ được lưu vào đĩa khi lưu dữ liệu trực tiếp vào file theo dõi để phân tích offline )

  • -A : Chỉ in phần văn bản của cache dữ liệu và echo cuối dòng ( ta muốn chỉ hiển thị dữ liệu con người có thể đọc được)

Đây là lệnh. Đảm bảo thay thế 111.111.111.111 bằng địa chỉ IP client từ kết quả trước đó.

sudo sysdig -r act1.scap.gz -s 4096 -A -c echo_fds fd.cip=111.111.111.111 and proc.name=httpd 

Bạn sẽ thấy khá nhiều kết quả , tùy thuộc vào số lượng kết nối được thực hiện bởi địa chỉ IP đó. Đây là một ví dụ hiển thị lỗi 404:

GET /hi HTTP/1.1 Host: your_server_ip Connection: keep-alive Cache-Control: m  ------ Write 426B to 111.111.111.111:39003->your_server_ip:80  HTTP/1.1 404 Not Found Date: Tue, 02 Dec 2014 19:38:16 GMT Server: Apache/2.4.6 (CentOS) PHP/5.4.16 Content-Length: 200 Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1  <!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /hi was not found on this server.</p> </body></html> 

Loại truy vấn này có thể giúp bạn tìm ra chính xác những loại kết nối được tạo bởi địa chỉ IP sử dụng băng thông cao nhất. Ví dụ: nếu bạn nhận thấy rằng địa chỉ IP truy cập một trang nhất định rất thường xuyên, bạn có thể làm cho nội dung của trang đó càng nhỏ càng tốt để giảm việc sử dụng băng thông. Hoặc, nếu lưu lượng truy cập có vẻ không hợp lệ , bạn có thể tạo một luật firewall mới để chặn các IP làm giảm băng thông.

Bước 4 - Kiểm tra dữ liệu được trao đổi với địa chỉ IP theo từ khóa

Tùy thuộc vào hoạt động của server trong repository ảng thời gian chụp, file theo dõi có thể chứa khá nhiều sự kiện và thông tin. Do đó, việc xem qua các kết quả của lệnh trong phần trước bằng tay có thể mất một khoảng thời gian không thực tế. Vì lý do đó, ta có thể tìm kiếm các từ cụ thể trong cache sự kiện.

Giả sử ta có một tập hợp các ứng dụng web đang chạy trên web server của bạn và ta muốn đảm bảo thông tin xác thực đăng nhập không được chuyển dưới dạng văn bản thuần túy thông qua các biểu mẫu.

Hãy thêm một vài cờ vào lệnh được sử dụng trong ví dụ trước:

sudo sysdig -r act1.scap.gz -A -c echo_fds fd.ip=111.111.111.111 and proc.name=httpd and evt.is_io_read=true and evt.buffer contains form 

Ở đây lớp evt , cùng với trường is_io_read , cho phép ta chỉ kiểm tra các sự kiện đã đọc (từ quan điểm của server ). Ngoài ra, evt.buffer cho phép ta tìm kiếm một từ cụ thể bên trong cache sự kiện (từ có form trong trường hợp này). Bạn có thể thay đổi từ khóa tìm kiếm thành từ khóa phù hợp với các ứng dụng của bạn.

Kết quả sau cho thấy tên user và password đang được chuyển từ client đến server ở dạng văn bản thuần túy (do đó, bất kỳ ai có đủ chuyên môn đều có thể đọc được):

------ Read 551B from 111.111.111.111:41135->your_server_ip:80  POST /login.php HTTP/1.1 Host: your_server_ip Connection: keep-alive Content-Length: 35 Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Origin: http://104.236.40.111 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 Content-Type: application/x-www-form-urlencoded Referer: http://104.236.40.111/ Accept-Encoding: gzip,deflate Accept-Language: en-US,en;q=0.8  login=sammy&pass=password&Submit=Login 

Nếu bạn tìm thấy một lỗ hổng bảo mật tương tự, hãy thông báo cho group nhà phát triển của bạn ngay lập tức.

Kết luận

Những gì bạn có thể thực hiện với sysdig trong việc kiểm tra lưu lượng mạng trên server LAMP hầu hết bị giới hạn bởi trí tưởng tượng và yêu cầu ứng dụng của một người. Ta đã biết cách tìm user có băng thông cao nhất, kiểm tra lưu lượng truy cập từ các IP cụ thể và sắp xếp các kết nối theo từ khóa dựa trên yêu cầu từ các ứng dụng của bạn.

Nếu bạn có câu hỏi nào khác về bài viết này hoặc muốn đề xuất về cách làm việc với sysdig trong môi trường LAMP hiện tại của bạn, vui lòng gửi comment của bạn bằng cách sử dụng biểu mẫu bên dưới.


Tags:

Các tin liên quan

Giới thiệu về quyền của Linux
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Giới thiệu về Linux Terminal
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Cách tạo server để gửi thông báo đẩy bằng GCM tới thiết bị Android bằng Python
2014-11-11
Cách cài đặt và cấu hình server Mumble (Murmur) trên Ubuntu 14.04
2014-11-11
Cách chạy server trò chuyện UnrealIRCd trên Debian 7
2014-10-22
Cách cấu hình xác thực dựa trên khóa SSH trên server Linux
2014-10-20
Cách bảo vệ server của bạn trước lỗ hổng POODLE SSLv3
2014-10-15