Thứ sáu, 11/10/2013 | 00:00 GMT+7

Cách bảo vệ SSH bằng fail2ban trên Debian 7

Có một server hoặc máy tính kết nối với mạng đi kèm với một số rủi ro nhất định. Bất kỳ máy nào, kể cả VPS, được kết nối với internet đều là mục tiêu tiềm ẩn cho các cuộc tấn công độc hại.


Mặc dù có một firewall được cấu hình tốt sẽ ngăn chặn nhiều loại truy cập bất hợp lệ , nhưng bạn vẫn cần phải mở một số dịch vụ nhất định để cho phép mình có khả năng đăng nhập và quản trị server . SSH là dịch vụ thường được sử dụng nhất để đăng nhập vào các hệ thống từ xa, và vì vậy nó cũng là một trong những dịch vụ được nhắm đến thường xuyên nhất.

May mắn là có một công cụ có sẵn có thể giảm thiểu vector tấn công này, được gọi là fail2ban . Điều này có thể được cấu hình để cho phép đăng nhập hợp lệ bằng SSH, nhưng cấm địa chỉ IP sau khi chúng không thể xác thực chính xác sau một số lần nhất định.

Ta sẽ cài đặt và cấu hình phần mềm này trên VPS Debian 7.

Bước một –– Cài đặt fail2ban


Debian bao gồm fail2ban trong repository lưu trữ mặc định của nó. Ta có thể download và cài đặt nó bằng bộ lệnh sau:

sudo apt-get update sudo apt-get install fail2ban 

Thao tác này không chỉ cài đặt fail2ban mà còn khởi động dịch vụ với cài đặt mặc định.

Bước hai –– Cấu hình fail2ban


Cấu hình fail2ban được giữ trong folder /etc/fail2ban . Tệp cấu hình chỉ định các luật cấm mặc định được gọi là jail.conf .

Vì cách fail2ban cập nhật các file cấu hình của nó khi chương trình có version mới, ta không nên chỉnh sửa file cấu hình mặc định.

Thay vào đó, ta nên sao chép nó vào một vị trí mới và chỉnh sửa nó ở đó:

cd /etc/fail2ban sudo cp jail.conf jail.local sudo nano jail.local 

Tại đây, ta có thể thay đổi cài đặt nào mà ta không thích đã được đặt trong cấu hình mặc định.

Cấu hình mặc định


Phần bắt đầu [DEFAULT] cấu hình các giá trị mặc định có thể bị overrides trong các ngữ cảnh cụ thể hơn sau này trong cấu hình. Bạn nên có giá trị mặc định mạnh.

Hầu hết các cài đặt đã được đưa ra đều là lựa chọn tốt cho các tùy chọn mặc định. Tuy nhiên, có một số khu vực sẽ được hưởng lợi từ cấu hình.

Cấm mặc định


Ta có thể cấu hình cách fail2ban thực hiện lệnh cấm của nó bằng cách sửa đổi một vài tham số. Dưới đây là một số điều quan trọng hơn:

  • ignoreip : Tham số này nhận một danh sách các địa chỉ IP cần được loại trừ khỏi các luật fail2ban. Các địa chỉ IP hoặc khối được liệt kê ở đây sẽ không có giới hạn nào được đặt ra, vì vậy hãy chọn chúng một cách khôn ngoan và cụ thể.

    • Địa chỉ IP và dải ô được phân tách bằng khoảng trắng.
    • Bạn nên thêm địa chỉ IP nhà riêng hoặc cơ quan của bạn vào cuối danh sách để không bị chặn nếu gặp khó khăn khi đăng nhập.
    • Điều này sẽ trông giống như: “ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS
  • bantime : Phần này liệt kê khoảng thời gian lệnh cấm sẽ kéo dài nếu khách hàng không xác thực chính xác. Nó được đưa ra trong vài giây.

    • Giá trị mặc định cấm khách hàng trong 10 phút.
  • maxretry : Tham số này chỉ định số lần thử được phép trước khi lệnh cấm được thực hiện.

Xác định Hành động Cấm


Khi cần có lệnh cấm, fail2ban có thể xử lý theo nhiều cách khác nhau. Nó quyết định các hành động cần thiết bằng cách xem các thông số sau:

  • Banaction : Cài đặt này chỉ định file cấu hình sẽ được sử dụng khi cần có lệnh cấm.

    • Giá trị của tham số này đề cập đến một file trong folder /etc/fail2ban/action.d , sẽ xử lý quá trình cấm thực tế.
    • Giá trị mặc định sử dụng iptables (tường lửa) để cấm một IP trên tất cả các cổng khi nó không xác thực được. Ta sẽ xem xét các quy định cấm cụ thể sau.
  • action : Tham số này chỉ định một trong các phím tắt hành động được liệt kê phía trên nó. Về cơ bản, nó gọi một tập lệnh banaction (như đã đề cập ở trên), sau đó gán thông tin thích hợp cho các biến và chuyển chúng đến tập lệnh.

    • Hành động mặc định là action_ , gọi tập lệnh và chuyển tên, cổng, giao thức và chuỗi cho tập lệnh. Nó không gửi địa chỉ email hoặc dòng log như một số hành động khác vẫn làm.

Cấu hình cảnh báo qua email


Nếu bạn muốn cấu hình fail2ban để gửi email cho bạn khi nó đưa ra lệnh cấm, bạn cũng có thể cấu hình nó trong phần mặc định.

Nếu bạn đã cấu hình một server thư trên máy của bạn , bạn có thể cấu hình fail2ban để gửi email đến một địa chỉ bên ngoài. Nếu không, bạn có thể gửi nó đến một account unix local .

Có hai thông số liên quan:

  • destemail : Tùy chọn này đặt địa chỉ email sẽ được thông báo trong trường hợp bị cấm.

    • Giá trị mặc định, “root @ localhost”, sẽ gửi thư đến account root của máy tính hiện tại.
    • Nếu bạn đã cấu hình server thư, vui lòng thay đổi địa chỉ này thành địa chỉ gửi thư bên ngoài.
  • mta : Điều này chỉ định tác nhân thư sẽ được sử dụng để gửi thư.

    • Nếu bạn có server thư được cấu hình với sendmail, hãy để nguyên tùy chọn mặc định (sendmail).
    • Nếu bạn chưa cấu hình server thư nhưng muốn thư local được gửi tới account user , bạn có thể thay đổi “sendmail” thành “mail”.

Nếu bạn muốn cấu hình email, bạn sẽ phải chỉnh sửa tham số action như đã đề cập ở trên. Thay đổi hành động thành “action mw” hoặc “action mwl” để chuyển thông tin email đến tập lệnh cấm.

Nếu bạn đã cấu hình gửi thư local , bạn có thể kiểm tra thư bằng lệnh :

sudo nano /var/mail/mail 

Cấu hình các nhà tù dành riêng cho ứng dụng


Sâu hơn nữa trong file , bạn sẽ thấy các phần được đánh dấu như thế này:

<pre>
[<span class = “highlight”> application_name </span>]
</pre>

Bạn có thể giải mã hầu hết các tham số.

Tham số filter chỉ định một file trong folder /etc/fail2ban/filter.d . Điều này cho fail2ban biết cách phân tích cú pháp file log của chương trình để xác thực không thành công.

Biến logpath giữ đường dẫn đến file log của dịch vụ, biến fail2ban sẽ phân tích cú pháp cho các lỗi.

Bạn có thể overrides bất kỳ thông số mặc định nào khác tại đây. Ví dụ, tùy chọn maxretry cho SSH khác với tùy chọn dault trong cài đặt Debian.

Bước 3 –– Cấu hình iptables


Ta sẽ không thực sự cấu hình nhiều iptables, nhưng ta sẽ xem xét file cấu hình thực hiện hành vi của nó. Điều này sẽ giúp ta hiểu cách fail2ban thực hiện các policy cấm của nó.

Mở file đã được chỉ định trong cấu hình tù của ta theo tham số banaction :

sudo nano /etc/fail2ban/action.d/iptables-multiport.conf 

Ở đây, ta có thể thấy điều gì thực sự xảy ra khi fail2ban gọi IP bị cấm. Nó sử dụng phần mềm firewall iptables để thực hiện các luật .

Khi fail2ban bắt đầu, nó gọi các dòng sau:

actionstart = iptables -N fail2ban-<name>               iptables -A fail2ban-<name> -j RETURN   # questionable usefulness               iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name> 

Điều này khởi tạo môi trường để chuyển lưu lượng truy cập qua một chuỗi lọc.

Phần mềm iptables kiểm soát lưu lượng truy cập dựa trên "kênh" hoặc "chuỗi". Mỗi kênh này áp dụng các luật trên tất cả lưu lượng truy cập được cung cấp cho nó để quyết định xem nó có được chấp nhận hay không.

Dòng đầu tiên, iptables -N fail2ban-<name> , tạo một chuỗi mới có tên “fail2ban-” với tên của dịch vụ theo sau. Điều này sẽ giữ các luật cấm địa chỉ IP nhất định.

Dòng tiếp theo, iptables -A fail2ban-<name> -j RETURN , thêm một luật vào chuỗi ta vừa tạo, luật này yêu cầu iptables trả lại quyền kiểm soát cho chuỗi được gọi là chuỗi này.

Dòng cuối cùng, iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name> , thêm một luật vào chuỗi INPUT (được chỉ định trong file jail.local của ta ) ngay lập tức chuyển quyền kiểm soát cho chuỗi fail2ban mới của ta .

Vì vậy, stream hiện tại là lưu lượng đến được xử lý bởi chuỗi INPUT của ta . Đến đây, nó truy cập luật chuyển quyền điều khiển đến chuỗi fail2ban. Luật đầu tiên trong chuỗi này chuyển quyền kiểm soát trở lại chuỗi đã gọi nó, chuỗi INPUT.

Vì vậy, tại thời điểm này, sự kiểm soát chỉ được chuyển qua lại mà không có gì thực sự xảy ra. Tuy nhiên, ta đã cài đặt quy trình kiểm soát sẽ chứa các luật bổ sung. Khi ta cần cấm một địa chỉ IP, ta có thể thêm một luật khác vào chuỗi fail2ban ngay trên nơi nó chuyển quyền kiểm soát trở lại chuỗi INPUT.

Ta có thể thấy các hành động bổ sung để loại bỏ các luật fail2ban, khi dịch vụ dừng, tại đây:

actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>              iptables -F fail2ban-<name>              iptables -X fail2ban-<name> 

Về cơ bản, điều này chỉ đảo ngược tất cả các luật mà ta vừa xây dựng.

Khi bạn cấm một khách hàng, luật này được thực hiện:

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP 

Điều này yêu cầu iptables loại bỏ bất kỳ gói nào từ địa chỉ IP đó, điều này sẽ cấm họ thậm chí cố gắng xác thực lại.

Khi thời gian bắt đầu trôi qua, luật này sẽ đảo ngược lệnh cấm:

actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP 

Nếu bạn muốn xem luật nào được triển khai và địa chỉ IP nào hiện bị cấm, bạn có thể kiểm tra luật iptables hiện tại bằng lệnh :

sudo iptables -L 

Nếu bất kỳ khách hàng nào bị cấm, họ sẽ ở trong chuỗi cuối cùng.

Bước bốn –– Khởi động lại fail2ban


Khi bạn đã thực hiện bất kỳ thay đổi nào đối với cấu hình của bạn , bạn cần khởi động lại fail2ban để triển khai các luật mới.

Bạn có thể thực hiện việc này bằng lệnh lệnh sau:

sudo service fail2ban restart 

Để kiểm tra các luật mới của bạn , bạn có thể tạo một version VPS khác và xác thực không đúng mục đích từ máy đó đủ thời gian để kích hoạt luật cấm. Sau đó, cuộc gọi SSH của bạn thậm chí sẽ không trả lại dấu nhắc password .

Nếu bạn nhìn vào các luật iptable trên server mà bạn đã cấu hình , bạn sẽ thấy một luật mới:

sudo iptables -L 

Chain INPUT (policy ACCEPT) target     prot opt source               destination          fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh  Chain FORWARD (policy ACCEPT) target     prot opt source               destination           Chain OUTPUT (policy ACCEPT) target     prot opt source               destination           Chain fail2ban-ssh (1 references) target     prot opt source               destination          DROP       all  --  xxx-xxxxxxxx.dyn.xxxxxxxxx.net  anywhere             RETURN     all  --  anywhere             anywhere 

Bạn có thể xem luật mới thứ hai từ dưới cùng.

Kết luận


Đến đây bạn sẽ có một số bảo mật bổ sung bằng cách làm cho server của bạn trở thành mục tiêu khó bị bạo lực hơn. Mặc dù đây là một khởi đầu tuyệt vời, nhưng một giải pháp hoàn thiện hơn sẽ là vô hiệu hóa hoàn toàn xác thực password và chỉ cho phép xác thực dựa trên khóa.

<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan