Cách bảo mật máy chủ Linux của bạn với Fail2ban

Tác giả sysadmin, T.Mười 24, 2023, 11:13:07 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách bảo mật máy chủ Linux của bạn với Fail2ban


Bạn không bao giờ có thể có quá nhiều bảo mật.

  • Fail2ban là tiện ích bảo mật tự điều chỉnh dành cho Linux, tự động chặn các địa chỉ IP có quá nhiều lỗi kết nối.
  • Nó tích hợp với tường lửa Linux (iptables) và thực thi các lệnh cấm bằng cách thêm các quy tắc vào tường lửa, trong khi vẫn giữ nguyên các chức năng tường lửa thông thường.
  • Bạn có thể định cấu hình Fail2ban bằng cách sao chép tệp cấu hình mặc định sang tệp mới có tên   Đăng nhập để xem liên kết, nơi bạn có thể thực hiện các tùy chỉnh duy trì qua các bản nâng cấp.

Với fail2ban, máy tính Linux của bạn sẽ tự động chặn các địa chỉ IP có quá nhiều lỗi kết nối. Đó là bảo mật tự điều chỉnh! Chúng tôi sẽ chỉ cho bạn cách sử dụng nó.

Bài viết về Tuần nhận thức về An ninh mạng này được mang đến cho bạn cùng với Incogni.

1. Fail2ban là gì?

Fail2ban là một tiện ích sẽ tự động chặn một địa chỉ IP nếu nó cố gắng kết nối với máy chủ quá nhiều lần nhưng không thành công.

Khi ai đó cố gắng kết nối với máy chủ của bạn — có thể là máy chủ SSH, máy chủ web hoặc email hay máy chủ Minecraft — họ thường được yêu cầu nhập tên người dùng và mật khẩu trước khi được phép truy cập. Người bình thường nhập (hoặc đoán) chi tiết tài khoản của họ sẽ không thể nhập nhiều hơn một lần thử trong vài giây một cách nhanh nhất. Khi thông tin đăng nhập được nhập nhanh hơn và thường xuyên hơn thì đó là dấu hiệu cho thấy bạn gặp sự cố — ai đó có thể đang thực hiện một cuộc tấn công vũ phu với một máy tính khác để thử đột nhập.

Để phát hiện một cuộc tấn công vũ phu, bạn cần theo dõi các yêu cầu kết nối không vào được tài khoản. Khi kẻ tấn công đã được xác định, họ sẽ bị cấm thực hiện các nỗ lực tiếp theo.

Cách duy nhất có thể đạt được điều này trên thực tế là tự động hóa toàn bộ quá trình. Với một chút cấu hình đơn giản, fail2ban sẽ quản lý việc theo dõi, cấm và bỏ cấm cho bạn.

fail2ban tích hợp với tường lửa Linux iptables. Nó thực thi các lệnh cấm đối với các địa chỉ IP bị nghi ngờ bằng cách thêm các quy tắc vào tường lửa. Để giải thích này rõ ràng, chúng tôi đang sử dụng iptablesmột bộ quy tắc trống.

Tất nhiên, nếu bạn lo ngại về bảo mật, có thể bạn đã cấu hình tường lửa với bộ quy tắc phổ biến. fail2ban chỉ thêm và xóa các quy tắc riêng của nó — các chức năng tường lửa thông thường của bạn sẽ không bị ảnh hưởng.

Chúng ta có thể thấy bộ quy tắc trống của mình bằng lệnh này:

Mã nguồn [Chọn]
sudo iptables -L

2. Cài đặt Fail2ban

Việc cài đặt fail2ban rất đơn giản trên tất cả các bản phân phối mà chúng tôi đã sử dụng để nghiên cứu bài viết này. Trên Ubuntu 20.04, lệnh như sau:

Mã nguồn [Chọn]
sudo apt-get install fail2ban
Trên Fedora 32, gõ:

Mã nguồn [Chọn]
sudo dnf install fail2ban
Trên Manjaro 20.0.1, chúng tôi đã sử dụng pacman:

Mã nguồn [Chọn]
sudo pacman -Sy fail2ban
3. Định cấu hình Fail2ban

Bản fail2ban cài đặt chứa tệp cấu hình mặc định có tên jail.conf. Tệp này bị ghi đè khi fail2ban được nâng cấp, vì vậy chúng tôi sẽ mất các thay đổi nếu thực hiện các tùy chỉnh đối với tệp này.

Thay vào đó, chúng tôi sẽ sao chép tệp jail.conf sang một tệp có tên là   Đăng nhập để xem liên kết. Bằng cách đưa các thay đổi cấu hình của chúng tôi vào   Đăng nhập để xem liên kết, chúng sẽ tồn tại qua các bản nâng cấp. Cả hai tệp đều được tự động đọc bởi fail2ban.

Đây là cách sao chép tập tin:

Mã nguồn [Chọn]
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Bây giờ hãy mở tệp trong trình chỉnh sửa yêu thích của bạn. Chúng tôi sẽ sử dụng gedit:

Mã nguồn [Chọn]
sudo gedit /etc/fail2ban/jail.local
Chúng tôi sẽ tìm hai phần trong tệp: [DEFAULT] và [sshd]. Tuy nhiên, hãy cẩn thận để tìm các phần thực tế. Những nhãn đó cũng xuất hiện ở gần đầu trong phần mô tả chúng, nhưng đó không phải là điều chúng ta muốn.


Bạn sẽ tìm thấy phần [DEFAULT] ở đâu đó quanh dòng 40. Đây là một phần dài có rất nhiều nhận xét và giải thích.


Cuộn xuống khoảng dòng 90 và bạn sẽ tìm thấy bốn cài đặt sau mà bạn cần biết:

  • ignip: Danh sách trắng các địa chỉ IP sẽ không bao giờ bị cấm. Họ có thẻ Ra tù miễn phí vĩnh viễn. Địa chỉ IP localhost (127.0.0.1) nằm trong danh sách theo mặc định, cùng với địa chỉ IPv6 tương đương (::1). Nếu có những địa chỉ IP khác mà bạn biết không bao giờ nên bị cấm, hãy thêm chúng vào danh sách này và chừa khoảng cách giữa mỗi địa chỉ.
  • bantime: Khoảng thời gian mà địa chỉ IP bị cấm ("m" là viết tắt của phút). Nếu bạn nhập một giá trị không có "m" hoặc "h" (theo giờ), giá trị đó sẽ được coi là giây. Giá trị -1 sẽ cấm vĩnh viễn địa chỉ IP. Hãy hết sức cẩn thận để không khóa mình vĩnh viễn.
  • findtime: Khoảng thời gian trong đó quá nhiều lần thử kết nối không thành công sẽ dẫn đến địa chỉ IP bị cấm.
  • maxretry: Giá trị cho "quá nhiều lần thử thất bại".

Nếu một kết nối từ cùng một địa chỉ IP thực hiện maxretry các lần thử kết nối không thành công trong findtimekhoảng thời gian đó thì chúng sẽ bị cấm trong suốt thời gian bantime. Ngoại lệ duy nhất là các địa chỉ IP trong ignoreipdanh sách.

fail2ban đặt các địa chỉ IP vào tù trong một khoảng thời gian nhất định. fail2ban hỗ trợ nhiều nhà tù khác nhau và mỗi nhà tù đại diện cho các cài đặt áp dụng cho một loại kết nối duy nhất. Điều này cho phép bạn có các cài đặt khác nhau cho các loại kết nối khác nhau. Hoặc bạn có thể fail2ban chỉ giám sát một tập hợp các loại kết nối đã chọn.

Bạn có thể đoán nó từ tên phần [DEFAULT], nhưng các cài đặt mà chúng tôi đã xem xét là mặc định. Bây giờ, hãy xem cài đặt cho SSH jail.

4. Cấu hình một nhà tù

Nhà tù cho phép bạn di chuyển các loại kết nối vào và ra khỏi fail2ban chế độ giám sát. Nếu cài đặt mặc định không khớp với cài đặt bạn muốn áp dụng cho tù, bạn có thể đặt các giá trị cụ thể cho bantime, findtime và maxretry.

Kéo xuống khoảng dòng 280, bạn sẽ thấy phần [sshd].


Đây là nơi bạn có thể đặt giá trị cho kết nối SSH jail. Để đưa nhà tù này vào mục theo dõi và cấm, chúng ta phải gõ dòng sau:

Mã nguồn [Chọn]
enabled = true
Chúng tôi cũng gõ dòng này:

Mã nguồn [Chọn]
maxretry = 3
Cài đặt mặc định là năm, nhưng chúng tôi muốn thận trọng hơn với các kết nối SSH. Chúng tôi giảm nó xuống còn ba, sau đó lưu và đóng tệp.

Chúng tôi đã thêm nhà tù này vào fail2ban mục theo dõi và ghi đè một trong các cài đặt mặc định. Nhà tù có thể sử dụng kết hợp cài đặt mặc định và cài đặt dành riêng cho nhà tù.

5. Kích hoạt Fail2ban

Cho đến nay, chúng tôi đã cài đặt fail2ban và cấu hình nó. Bây giờ, chúng ta phải kích hoạt nó để chạy như một dịch vụ tự động khởi động. Sau đó, chúng ta cần kiểm tra nó để đảm bảo nó hoạt động như mong đợi.

Để kích hoạt fail2ban dưới dạng dịch vụ, chúng tôi sử dụng systemctl lệnh:

Mã nguồn [Chọn]
sudo systemctl enable fail2ban
Chúng tôi cũng sử dụng nó để bắt đầu dịch vụ:

Mã nguồn [Chọn]
sudo systemctl start fail2ban

systemctl Chúng tôi cũng có thể kiểm tra trạng thái của dịch vụ bằng cách sử dụng:

Mã nguồn [Chọn]
sudo systemctl status fail2ban.service

Mọi thứ có vẻ ổn - chúng tôi đã bật đèn xanh nên tất cả đều ổn.

Hãy xem liệu fail2ban có đồng ý không:

Mã nguồn [Chọn]
sudo fail2ban-client status

Điều này phản ánh những gì chúng tôi thiết lập. Chúng tôi đã kích hoạt một jail duy nhất, có tên là [sshd]. Nếu thêm tên của nhà tù vào lệnh trước đó, chúng ta có thể xem xét kỹ hơn về nó:

Mã nguồn [Chọn]
sudo fail2ban-client status sshd

Điều này liệt kê số lượng lỗi và địa chỉ IP bị cấm. Tất nhiên, mọi số liệu thống kê ở thời điểm hiện tại đều bằng 0.

6. Kiểm tra nhà tù của chúng tôi

Trên một máy tính khác, chúng tôi sẽ thực hiện yêu cầu kết nối SSH tới máy thử nghiệm của mình và cố tình nhập sai mật khẩu. Bạn có ba lần thử để lấy đúng mật khẩu trong mỗi lần thử kết nối.

Giá trị maxretry sẽ kích hoạt sau ba lần thử kết nối không thành công, chứ không phải ba lần thử mật khẩu không thành công. Vì vậy, chúng tôi phải nhập sai mật khẩu ba lần để thử kết nối không thành công.

Sau đó, chúng tôi sẽ thực hiện một lần thử kết nối khác và nhập sai mật khẩu ba lần nữa. Lần thử mật khẩu không chính xác đầu tiên của yêu cầu kết nối thứ ba sẽ kích hoạt fail2ban.


Sau lần nhập sai mật khẩu đầu tiên trong yêu cầu kết nối thứ ba, chúng tôi không nhận được phản hồi từ máy từ xa. Chúng tôi không nhận được bất kỳ lời giải thích nào; chúng ta chỉ nhận được cái vai lạnh lùng.

Bạn phải nhấn Ctrl+C để quay lại dấu nhắc lệnh. Nếu thử lại một lần nữa, chúng ta sẽ nhận được phản hồi khác:

Mã nguồn [Chọn]
ssh [email protected]

Trước đây, thông báo lỗi là "Quyền bị từ chối". Lần này, kết nối bị từ chối hoàn toàn. Chúng tôi là những người không được chào đón. Chúng tôi đã bị cấm.

Chúng ta hãy xem lại chi tiết về nhà tù [sshd]:

Mã nguồn [Chọn]
sudo fail2ban-client status sshd

Có ba lỗi và một địa chỉ IP (192.168.4.25) đã bị cấm.

Như chúng tôi đã đề cập trước đây, fail2ban thực thi các lệnh cấm bằng cách thêm các quy tắc vào bộ quy tắc tường lửa. Chúng ta hãy xem xét lại bộ quy tắc (trước đây nó trống):

Mã nguồn [Chọn]
sudo iptables -L

Một quy tắc đã được thêm vào chính sách INPUT, gửi lưu lượng SSH đến chuỗi f2b-sshd. Quy tắc trong f2b-sshd chuỗi từ chối kết nối SSH từ 192.168.4.25. Chúng tôi không thay đổi cài đặt mặc định cho bantime, vì vậy, sau 10 phút, địa chỉ IP đó sẽ được bỏ cấm và có thể thực hiện các yêu cầu kết nối mới.

Nếu bạn đặt thời lượng cấm dài hơn (chẳng hạn như vài giờ), nhưng muốn cho phép địa chỉ IP thực hiện yêu cầu kết nối khác sớm hơn, bạn có thể tạm dừng yêu cầu đó sớm.

Chúng tôi gõ như sau để làm điều này:

Mã nguồn [Chọn]
sudo fail2ban-client set sshd unbanip 192.168.5.25
Trên máy tính từ xa của chúng tôi, nếu chúng tôi thực hiện một yêu cầu kết nối SSH khác và nhập đúng mật khẩu, chúng tôi sẽ được phép kết nối:

Mã nguồn [Chọn]
ssh [email protected]

Đơn giản hơn thường tốt hơn và fail2ban là một giải pháp tinh tế cho một vấn đề khó khăn. Nó cần rất ít cấu hình và hầu như không gây ra bất kỳ chi phí vận hành nào — cho bạn hoặc máy tính của bạn.