Cách sử dụng psad để phát hiện nỗ lực xâm nhập mạng trên VPS Ubuntu
Có thể phát hiện hoạt động mạng có thể cho thấy một nỗ lực xâm nhập có thể giúp bạn thực hiện các hành động thích hợp trước khi sự kiện xảy ra. Hệ thống phát hiện xâm nhập có sẵn vì lý do cụ thể này.Hệ thống phát hiện xâm nhập được sử dụng để ghi log các kết nối đáng ngờ và báo cáo khi có vẻ như hoạt động bất thường đang diễn ra. Một số chương trình được sử dụng hoàn toàn như một hệ thống thông báo, trong khi những chương trình khác có thể tích cực tìm cách chặn lưu lượng truy cập có vẻ có ý định gây hại.
Công cụ psad
, viết tắt của phát hiện tấn công quét cổng, là một phần mềm chủ động giám sát log firewall của bạn để xác định xem có sự kiện quét hoặc tấn công đang diễn ra hay không. Sau đó, nó có thể cảnh báo cho administrator hoặc thực hiện các bước tích cực để ngăn chặn mối đe dọa.
Trong hướng dẫn này, ta sẽ khám phá cách cài đặt và cấu hình psad trên VPS Ubuntu 12.04. Các thủ tục phải tương đối giống nhau trên các bản phân phối khác.
Cài đặt psad
Hệ thống phát hiện xâm nhập psad có sẵn trong repository lưu trữ mặc định của Ubuntu, vì vậy nó có thể dễ dàng có được thông qua apt:
sudo apt-get update sudo apt-get install psad
Để cấu hình gửi thư thông báo cho administrator , bạn cần cấu hình server thư postfix.
Trong hầu hết các trường hợp, bạn có thể chọn “Trang web Internet”, sau đó nhập domain được liên kết với server của bạn. Đây sẽ là phần domain của tên được sử dụng trong trường "Từ" trong các email được tạo bởi psad.
Cấu hình luật IPTables
Cách mà psad phát hiện hoạt động trên các cổng của server của bạn là theo dõi log do ứng dụng firewall tạo ra. Ubuntu đi kèm với firewall iptables theo mặc định, nhưng nó hoàn toàn không được cấu hình và không theo dõi hoặc chặn bất kỳ thứ gì theo mặc định.
Mặc dù bạn có thể không cần phải nhập các lệnh sau để chỉ cần kích hoạt ghi log , ta sẽ thực hiện một cấu hình mạnh mẽ hơn:
sudo iptables -A INPUT -j LOG sudo iptables -A FORWARD -j LOG
Nếu bạn đã nhập các luật ở trên, hãy xóa các luật trước khi cấu hình để ta có thể bắt đầu lại từ đầu.
sudo iptables -F
Bạn có thể xem các luật hiện tại (chỉ nên bao gồm các policy mặc định tại thời điểm này), bằng lệnh :
sudo iptables -S
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
Bây giờ ta có thể bắt đầu bổ sung các luật của bạn , chủ yếu là vào chuỗi INPUT. Ta muốn yêu cầu iptables bỏ các kết nối mà ta không cần hoặc không muốn. Ta cần thêm các luật để cho phép rõ ràng các kết nối được ủy quyền của ta trước khi thêm các hạn chế.
Luật đầu tiên sẽ cho phép tất cả lưu lượng truy cập được tạo bởi server của ta , được dẫn trực tiếp đến server của ta . Loại kết nối này thường được sử dụng để các dịch vụ giao tiếp với nhau và truyền thông tin dễ dàng:
sudo iptables -A INPUT -i lo -j ACCEPT
Tiếp theo, ta muốn thêm một luật để cho phép rõ ràng tất cả lưu lượng liên quan đến kết nối hiện có. Điều này sẽ cho phép các phiên hiện tại của ta tiếp tục không bị gián đoạn:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Tiếp theo, ta có thể thêm các dịch vụ mà ta muốn công khai. Đối với SSH, ta có thể thêm một dòng như sau:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Nếu ta có web server chạy trên cổng mặc định 80, ta có thể thêm luật như sau:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Thêm bất kỳ cổng nào khác cho các dịch vụ hợp lệ , có thể truy cập công cộng mà bạn muốn để ngỏ với cùng một cú pháp:
<pre>
sudo iptables -A INPUT -p <span class = “highlight”> giao thức </span> –dport <span class = “highlight”> port_num </span> -j CHẤP NHẬN
</pre>
Sau khi bạn hoàn tất việc thêm các dịch vụ hợp lệ , ta sẽ loại bỏ tất cả các kết nối còn lại. Bất kỳ thứ gì vi phạm luật này đều không phù hợp với luật dành cho lưu lượng truy cập hợp lệ của ta .
Trước khi làm điều đó, ta cần thêm luật yêu cầu iptables bắt đầu ghi lưu lượng truy cập. Điều này sẽ khiến iptables ghi lại lưu lượng truy cập chưa được xử lý.
sudo iptables -A INPUT -j LOG
Ta cũng nên thêm luật này vào chuỗi chuyển tiếp trong trường hợp ta chuyển tiếp lưu lượng truy cập ở nơi khác.
sudo iptables -A FORWARD -j LOG
Cuối cùng, hãy loại bỏ tất cả lưu lượng truy cập không liên quan chưa khớp. Ta có thể làm điều này bằng cách thêm một luật trùng với mọi thứ trong chuỗi vào cuối như sau:
sudo iptables -A INPUT -j DROP
Hoặc, ta có thể sử dụng chức năng policy tích hợp để cấu hình những gì sẽ xảy ra khi một gói tin chuyển xuống chuỗi mà không trùng với bất kỳ luật nào:
sudo iptables -P INPUT DROP
Các kết quả về chức năng hoàn toàn giống nhau.
Một điều cần lưu ý là nếu bạn cần xóa iptables của bạn và bạn cài đặt policy DROP (thay vì thêm nó như một luật ở cuối chuỗi), bạn nên đảo ngược policy trước khi xả:
sudo iptables -P INPUT ACCEPT sudo iptables -F
Nếu bạn không làm được điều này, các luật iptables của bạn sẽ bị xóa và chỉ có policy mặc định về việc loại bỏ tất cả các gói đến sẽ vẫn còn. Điều này sẽ cắt tất cả lưu lượng mạng đến server của bạn, bao gồm cả lưu lượng từ kết nối SSH của bạn.
Theo mặc định, iptables không duy trì các luật của nó giữa các lần khởi động lại, vì vậy sau khi bạn đã kiểm tra cấu hình của bạn và chắc chắn rằng nó thực hiện những gì bạn muốn, bạn có thể download và kích hoạt một công cụ làm cho các luật này bền vững:
sudo apt-get install iptables-persistent sudo service iptables-persistent start
Cấu hình psad để phát hiện quét
Bây giờ ta có một bộ luật iptables được cấu hình với cái được gọi là policy "thả mặc định", ta có thể bắt đầu cấu hình psad để bắt đầu phân tích cú pháp log .
Mở file cấu hình psad chính với quyền root:
sudo nano /etc/psad/psad.conf
Những điều đầu tiên bạn nên sửa đổi nằm ở đầu file . Bạn nên thay đổi thông số EMAIL_ADDRESSES
để trùng với các địa chỉ email mà bạn muốn thông báo khi báo cáo được tạo. Bạn cũng nên sửa đổi HOSTNAME
để trùng với domain của bạn để nó tham chiếu đến đúng máy:
<pre>
EMAIL_ADDRESSES <span class = “highlight”> address1@domain.com </span>, <span class = “highlight”> address2@other.com </span>;
HOSTNAME <span class = “highlight”> your_domain.com </span>;
</pre>
Đảm bảo kết thúc mỗi dòng của bạn bằng dấu chấm phẩy (;) để psad đọc file một cách chính xác.
Một phần mà bạn có thể cần xem qua là khai báo "mức độ nguy hiểm". Các cấp độ này là cách để psad phân loại các cấp độ đe dọa.
Chúng được tự động xác định bởi số lượng gói tin tham gia vào một sự kiện, nhưng bạn cũng có thể chỉ định một số loại lưu lượng nhất định thành một mức độ nguy hiểm nhất định. Các ngưỡng mặc định cho mỗi cấp độ cần đạt được là:
DANGER_LEVEL1 5; DANGER_LEVEL2 15; DANGER_LEVEL3 150; DANGER_LEVEL4 1500; DANGER_LEVEL5 10000;
Bạn có thể thay đổi các mức này tùy thuộc vào mức độ nhạy mà bạn muốn psad sử dụng cho các cảnh báo.
Bạn cũng có thể cấu hình psad nhạy cảm như thế nào thông qua tham số PORT_RANGE_SCAN_THRESHOLD
. Điều này xác định số lượng cổng trong một phạm vi phải được quét trước khi cảnh báo được nâng lên. Mặc định là cảnh báo sẽ được nâng lên sau khi quét hai cổng.
PORT_RANGE_SCAN_THRESHOLD 1;
Một trong những điều quan trọng nhất để cấu hình là tham số IPT_SYSLOG_FILE
, bởi vì nó hiện không được trỏ vào file mà log hệ thống sử dụng theo mặc định.
Sửa đổi điều này để trỏ đến file log hệ thống, nơi psad sẽ thực sự có cơ hội xem qua log hoạt động:
<pre>
IPT SYSLOG FILE <span class = “highlight”> / var / log / syslog </span>;
</pre>
Nếu bạn sử dụng một số cổng nhất định cho những việc như gõ cổng , bạn nên yêu cầu psad bỏ qua các nỗ lực trên các cổng này để bạn không kích hoạt cảnh báo thông qua các hoạt động thường ngày:
<pre>
BỎ QUA CỬA HÀNG < span class = “highlight”> cổng hoặc dải ô to_ignore </span>;
</pre>
Tương tự, bạn có thể bỏ qua các thông báo dựa trên những thứ khác thông qua các tham số IGNORE_PROTOCOLS
, IGNORE_INTERFACES
và IGNORE_LOG_PREFIXES
được đặt tên thích hợp.
Nếu bạn nhận thấy rằng bạn nhận được thông báo quá thường xuyên, bạn có thể đặt ngưỡng cho email bằng cách điều chỉnh mức phải đạt được trước khi email được gửi:
MIN_DANGER_LEVEL 1; # Controls psad logging and email alerts EMAIL_ALERT_DANGER_LEVEL 1; # Applies only for email alerts
Bạn cũng có thể giới hạn số lượng email trực tiếp bằng cách đặt điều này:
EMAIL_LIMIT 0;
Không nghĩa là không có giới hạn. Giới hạn này là số lượng email có thể được tạo ra bởi các mối đe dọa từ một địa chỉ IP.
Tạm thời, hãy lưu file .
Thực hiện phát hiện xâm nhập psad
Bây giờ ta đã có cấu hình psad cơ bản, hoàn chỉnh với khả năng cảnh báo, ta có thể triển khai các policy và kích hoạt hệ thống của bạn .
Trước khi bắt đầu, ta nên cập nhật các định nghĩa chữ ký của psad để nó có thể nhận dạng chính xác các kiểu tấn công đã biết. Thực hiện việc này bằng cách gọi:
sudo psad --sig-update
Thao tác này sẽ tìm nạp các file mới nhất và cập nhật database .
Bây giờ, ta cần khởi động lại dịch vụ để sử dụng các bản cập nhật này và áp dụng các thay đổi cấu hình của ta . Kiểu:
sudo service psad restart
Điều này sẽ thực hiện giám sát log của ta . Để xem trạng thái hiện tại của các sự kiện được phát hiện psad, hãy nhập:
sudo service psad status
[+] psadwatchd (pid: 3737) %CPU: 0.0 %MEM: 0.0 Running since: Fri Jan 10 15:36:04 2014 [+] psad (pid: 3735) %CPU: 0.0 %MEM: 0.3 Running since: Fri Jan 10 15:36:04 2014 Command line arguments: [none specified] Alert email address(es): example@domain.com [+] Version: psad v2.1.7 [+] Top 50 signature matches: [NONE] [+] Top 25 attackers: [NONE] [+] Top 20 scanned ports: [NONE] [+] iptables log prefix counters: [NONE] Total packet counters: tcp: 0, udp: 0, icmp: 0 [+] IP Status Detail: [NONE] Total scan sources: 0 Total scan destinations: 0 [+] These results are available in: /var/log/psad/status.out
Như bạn thấy , chưa có gì được tìm thấy. Ta cũng có thể thấy rằng các sự kiện được phát hiện được ghi vào các file nằm tại /var/log/psad/
.
Thực hiện quét cổng kiểm tra
Từ một máy tính khác, ta nên cố gắng quét các cổng của server để tạo ra một số lần truy cập vào firewall . Ta có thể làm điều này với tiện ích nmap
.
Ta sẽ thực hiện quét cổng SYN tcp từ một máy khác. Ta sẽ yêu cầu nó giả định server của ta đã hoạt động bằng cách chuyển cho nó tùy chọn -PN
:
<pre>
sudo nmap -PN -sS <span class = “highlight”> tên domain server hoặc ip </span>
</pre>
<pre>
Bắt đầu Nmap 5.51 ( http://nmap.org ) lúc 2014-01-10 15:54 EST
Báo cáo quét Nmap cho domain hoặc ip của server
Server đã tăng (độ trễ 0,013 giây).
Không hiển thị: 999 cổng được lọc
DỊCH VỤ NHÀ NƯỚC CỔNG
22 / tcp mở ssh
Nmap done: 1 địa chỉ IP (1 server lưu trữ) được quét trong 6,84 giây
</pre>
Như bạn thấy , quá trình quét này cho biết những gì tôi đã cấu hình cho firewall của bạn . Mỗi cổng được gắn nhãn là “đã lọc” cho biết rằng nó được bảo vệ bởi firewall , ngoại trừ cổng SSH, cổng này bị lộ.
Trên server của bạn , bạn nên chạy lại trạng thái lệnh :
sudo service psad status
Bạn sẽ thấy danh sách cảnh báo lớn hơn rất nhiều. Bởi vì sự kiện chỉ là một lần quét 1000 cổng, nó đã kích hoạt một khớp chữ ký cho nhiều mối đe dọa khác nhau. Đối với một cuộc tấn công nhọn hơn, tập trung vào một cổng hoặc điểm vào cụ thể, chữ ký sẽ hữu ích hơn nhiều.
Nếu bạn cài đặt cảnh báo qua email, bạn cũng sẽ nhận được một hoặc hai email. Nếu bạn có domain được liên kết với máy tính mà bạn đã quét, bạn sẽ thấy báo cáo “là ai” về chủ sở hữu được liên kết với quá trình quét.
Bạn có thể sử dụng điều này để cố gắng liên hệ với chủ sở hữu của IP hoặc có thể là ISP hoặc nhà cung cấp dịch vụ lưu trữ.
Thực hiện ngăn chặn xâm nhập
Bây giờ ta đã xác minh ta có thể phát hiện hoạt động cố gắng truy cập vào server của bạn , ta có thể tùy chọn triển khai cơ chế ngăn chặn nơi psad có thể tự động sửa đổi các luật iptables để cấm máy quét.
Trước khi thực hiện việc này, ta nên xem qua file auto_dl
:
sudo nano /etc/psad/auto_dl
Tệp này chỉ định mức độ nguy hiểm mà ta nên tự động đặt các địa chỉ IP nhất định. Ví dụ: nếu ta có kẻ tấn công liên tục cố gắng thăm dò hệ thống của ta , ta có thể tự động đặt chúng ở mức nguy hiểm 5:
<pre>
<span class = “highlight”> attacker_ip </span> 5;
</pre>
Mặt khác, về cơ bản bạn có thể miễn các địa chỉ IP nhất định gây ra phản ứng từ psad. Ta có thể thêm localhost tại đây và đặt nó thành “0” nếu ta chưa thêm luật một cách rõ ràng vào iptables của bạn .
Đối với mục đích của ta , vì ta sẽ đặt psad để tự động chặn lưu lượng truy cập từ một IP mối đe dọa được phát hiện, ta nên thêm máy tính gia đình của bạn vào danh sách này để ta không tự khóa mình:
<pre>
<span class = “highlight”> ip máy tính local </span> 0;
</pre>
Lưu file khi bạn hoàn tất.
Mở lại file cấu hình psad:
sudo nano /etc/psad/psad.conf
Tìm kiếm tham số có tên ENABLE_AUTO_IDS
. Đây là luật cho phép psad sửa đổi firewall của ta để chặn các địa chỉ nhất định. Nếu bạn muốn tự động làm điều này, bạn có thể thay đổi nó như sau:
ENABLE_AUTO_IDS Y;
Tiếp theo, ta muốn quyết định mức độ đe dọa đủ lớn để chặn IP vi phạm. Ta có thể làm điều đó bằng cách điều chỉnh thông số này:
AUTO_IDS_DANGER_LEVEL 5;
Một tùy chọn quan trọng khác là tổng thời gian khối tính bằng giây:
AUTO_BLOCK_TIMEOUT 3600;
Điều này sẽ chặn chúng trong một giờ theo mặc định.
Kiểm tra ngăn chặn xâm nhập
Ta có thể kiểm tra cách thức hoạt động của điều này bằng cách tự cấm tạm thời. Trong cùng một file cấu hình, ta sẽ đặt các thông số sau:
ENABLE_AUTOIDS Y; AUTO_IDS_DANGER_LEVEL 4; AUTO_BLOCK_TIMEOUT 60;
Thao tác này sẽ bật cấu hình firewall tự động, sẽ đặt ngưỡng ở mức nguy hiểm 4, ngưỡng mà ta đạt được khi quét SYN thông thường và đặt thời gian chặn trong 60 giây.
Lưu và đóng file .
Mở file auto_dl
nếu bạn đã thêm địa chỉ IP nhà của bạn và tạm thời comment điều đó.
<pre>
<span class = “highlight”> ip máy tính local </span> 0;
</pre>
Bây giờ, khởi động lại psad để đọc lại các file này:
sudo service psad restart
Từ máy tính ở nhà, bạn có thể chạy lại quá trình quét mà bạn đã thực hiện lần trước:
<pre>
sudo nmap -PN -sS <span class = “highlight”> miền server or_ip </span>
</pre>
Đến đây, sau một vài giây, nếu bạn được kết nối với máy psad của bạn thông qua SSH, kết nối của bạn sẽ bị ngắt. Bạn sẽ không thể kết nối lại trong 60 giây.
Điều này là do psad đã thực hiện hành động khi quá trình quét của bạn đã chạm đủ cổng để đạt mức nguy hiểm 4. Nó đã sửa đổi các luật iptables để chuyển hướng lưu lượng truy cập sang các chuỗi khác tạm thời chặn IP của bạn.
Khi bạn có thể đăng nhập lại, bạn có thể xem tàn tích của sự chuyển hướng này bằng cách kiểm tra các luật có thể áp dụng của bạn :
sudo iptables -S
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT -N PSAD_BLOCK_FORWARD -N PSAD_BLOCK_INPUT -N PSAD_BLOCK_OUTPUT -A INPUT -j PSAD_BLOCK_INPUT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -j LOG -A FORWARD -j PSAD_BLOCK_FORWARD -A FORWARD -j LOG -A OUTPUT -j PSAD_BLOCK_OUTPUT
Như bạn thấy , nhiều chuỗi hơn đã được tạo ra và tất cả đầu vào đều được chuyển vào một trong những chuỗi này. Trong thời gian cấm, chuỗi này sẽ bỏ các nỗ lực kết nối đối với IP của kết nối gia đình của bạn.
Đến đây bạn đã thử nghiệm chức năng này, hãy hoàn nguyên nó về những gì bạn muốn sử dụng. Bạn có thể nên tăng thời hạn cấm nếu bạn đang có kế hoạch thực sự sử dụng chức năng này. Ngoài ra, bạn nên thêm lại các địa chỉ IP mà bạn biết rằng bạn sẽ kết nối với:
<pre>
máy tính local ip 0;
</pre>
<pre>
BẬT AUTOIDS Y;
AUTO IDS NGUY HIỂM CẤP 5;
AUTO BLOCK TIMEOUT 3600;
</pre>
Đừng quên khởi động lại psad khi bạn đã hoàn tất việc cấu hình dịch vụ của bạn cho ứng dụng trong thế giới thực:
sudo service psad restart
Lưu ý có một số kiểu tấn công có thể giả mạo địa chỉ IP nguồn. Điều này nghĩa là kẻ tấn công nghi ngờ rằng bạn đã bật chức năng tự động chặn có thể khiến bạn vô tình cấm các trang web hoặc dịch vụ hợp lệ . Hãy hết sức cẩn thận và cân nhắc giữa chi phí và lợi ích của loại cấu hình này.
Kết luận
Bằng cách cấu hình chính xác công cụ phát hiện xâm nhập mạng như psad, bạn sẽ tăng cơ hội nhận được các cảnh báo cần thiết về các mối đe dọa trước khi sự cố thực sự xảy ra. Các công cụ như psad có thể cung cấp cho bạn cảnh báo nâng cao và có thể tự động giải quyết một số tình huống.
Key để sử dụng psad hiệu quả là cấu hình mức độ nguy hiểm và cảnh báo qua email một cách thích hợp, sau đó theo dõi mọi vấn đề. Công cụ này, cùng với các tài nguyên phát hiện xâm nhập khác như tripwire có thể cung cấp vùng phủ sóng khá tốt để có thể phát hiện các nỗ lực xâm nhập.
<div class = “author”> Bởi Justin Ellingwood </div>
Các tin liên quan
Cách sử dụng PM2 để thiết lập môi trường sản xuất Node.js trên VPS Ubuntu2014-01-10
Cách sử dụng Makefiles để tự động hóa các tác vụ lặp đi lặp lại trên Ubuntu VPS
2014-01-07
Cách thiết lập CouchDB với ElasticSearch trên VPS Ubuntu 13.10
2013-12-30
Cách sử dụng Celery với RabbitMQ để xếp hàng các tác vụ trên Ubuntu VPS
2013-12-19
Cách thiết lập một Honeypot Pháo binh trên VPS Ubuntu
2013-12-04
Cách triển khai Bộ sao chép trong MongoDB trên VPS Ubuntu
2013-12-03
Cách tạo một cụm Sharded trong MongoDB bằng VPS Ubuntu 12.04
2013-12-02
Cách sử dụng ApacheBench để thực hiện kiểm tra tải trên VPS Ubuntu 13.10
2013-11-25
Cách cài đặt control panel Ajenti trên Ubuntu 13.04
2013-11-12
Cách thiết lập và cài đặt Django CMS trên VPS Debian 7 hoặc Ubuntu 13
2013-11-12