Tin tức và phân tích của tất cả các thiết bị di động

Cách bảo mật máy chủ Linux với fail2ban

Với fail2ban, PC Linux của bạn sẽ tự động chặn các địa chỉ IP có quá nhiều kết nối bị lỗ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ảo mật Bảo mật Bảo mật

Nữ công tước xứ Windsor, Wallis Simpson, từng nói: “Bạn không bao giờ có thể quá giàu hoặc quá gầy”. Chúng tôi đã cập nhật nó cho thế giới hiện đại, được kết nối của chúng ta: bạn không bao giờ có thể quá cẩn thận hoặc quá an toàn.

Nếu máy tính của bạn chấp nhận các yêu cầu kết nối đến như Secure Shell (SSH) hoặc hoạt động như một máy chủ web hoặc email, bạn cần bảo vệ nó khỏi các cuộc tấn công vũ phu và đoán mật khẩu.

Để thực hiện việc này, bạn cần theo dõi các yêu cầu kết nối không đến tài khoản của mình. Nếu họ không xác thực nhiều lần trong một khoảng thời gian ngắn, họ sẽ bị cấm thực hiện các lần thử tiếp theo.

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

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

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

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

sudo iptables -L

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 trông như thế này:

sudo apt-get install fail2ban

Sudo apt-get install fail2ban trong cửa sổ đầu cuối.

Trong Fedora 32, nhập:

sudo dnf install fail2ban

sudo dnf install fail2ban trong cửa sổ đầu cuối.

Ở Manjaro 20.0.1 chúng tôi đã sử dụng pacman:

sudo pacman -Sy fail2ban

sudo pacman -Sy fail2ban trong cửa sổ đầu cuối.

thiết lập Fail2ban

Quá trình cài đặt fail2ban bao gồm một tệp cấu hình mặc định có tên là jailbreak.conf. Tệp này bị ghi đè sau khi nâng cấp fail2ban, vì vậy chúng tôi sẽ mất các thay đổi nếu chúng tôi thực hiện các tùy chỉnh trong tệp này.

Thay vào đó, chúng ta sẽ sao chép tệp Jail.conf vào một tệp có tên là Jail.local. Bằng cách đặt các thay đổi cấu hình của chúng tôi trong Jail.local, chúng sẽ tồn tại trong quá trình cập nhật. Cả hai tệp đều được fail2ban tự động đọc.

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

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

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local trong cửa sổ đầu cuối.

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:

sudo gedit /etc/fail2ban/jail.local

Chúng tôi sẽ tìm kiếm hai phần trong tệp: [DEFAULT] và [sshd]. Hãy cẩn thận để tìm đúng phần mặc dù. Các nhãn này cũng xuất hiện ở trên cùng trong phần mô tả chúng, nhưng đó không phải là điều chúng ta đang nói đến.

/etc/fail2ban/jail.local đã được mở trong cửa sổ gedit.

Bạn sẽ tìm thấy tập tin [DEFAULT] phần đâu đó xung quanh dòng 40. Đây là một phần dài với nhiều bình luận và giải thích.

/etc/fail2ban/jail.local đã mở trong gedit và cuộn xuống dòng 89.

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 lưu ý:

bỏ qua: 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 máy chủ cục bộ (127.0.0.1) được liệt kê theo mặc định cùng với bản sao IPv6 của nó (:: 1). Nếu có những địa chỉ IP khác mà bạn biết là không bao giờ nên bị cấm, hãy thêm chúng vào danh sách này và để khoảng cách giữa chúng.
bantime: thời gian mà địa chỉ IP bị chặn (chữ “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” (cho giờ), giá trị đó sẽ được coi là giây. Giá trị -1 sẽ chặn vĩnh viễn địa chỉ IP. Hãy cẩn thận để không tự khóa mình vĩnh viễn.
findtime: khoảng thời gian mà quá nhiều lần kết nối không thành công sẽ khiến một địa chỉ IP bị chặn.
maxretry: Giá trị “quá nhiều lần thử không thành công”.

Nếu một kết nối từ cùng một địa chỉ IP khiến các lần thử kết nối không thành công trong quá trình tìm kiếm, thì chúng sẽ bị chặn trong thời gian cấm. Các ngoại lệ duy nhất là địa chỉ IP từ danh sách bỏ qua.

fail2ban giam giữ các địa chỉ IP trong một khoảng thời gian nhất định. fail2ban hỗ trợ nhiều nhà tù khác nhau, 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. Điều này cho phép bạn có các cài đặt khác nhau cho các loại cuộc gọi khác nhau. Hoặc bạn chỉ có thể theo dõi fail2ban cho một nhóm loại kết nối đã chọn.

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

Cấu hình nhà tù

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

Cuộn xuống khoảng dòng 280 và bạn sẽ thấy tệp [sshd] Tiết diện.

/etc/fail2ban/jail.local đã mở trong gedit và cuộn xuống dòng 280.

Tại đây bạn có thể đặt các giá trị tù kết nối SSH. Để cho phép nhà tù này được theo dõi và cấm, chúng ta cần nhập dòng sau:

enabled = true

Chúng tôi cũng nhập dòng này:

maxretry = 3

Mặc định là năm, nhưng chúng tôi muốn cẩn thận hơn với các kết nối SSH. Chúng tôi giảm xuống còn ba, sau đó lưu và đóng tệp.

Chúng tôi đã thêm nhà tù này vào giám sát fail2ban và thay thế một trong các giá trị 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ù.

Kích hoạt fail2ban

Cho đến nay, chúng tôi đã cài đặt fail2ban và định cấu hình nó. Bây giờ chúng ta cần kích hoạt nó để chạy như một dịch vụ tự 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 như một dịch vụ, chúng tôi sử dụng phần mở rộng lệnh systemctl:

sudo systemctl enable fail2ban

Chúng tôi cũng sử dụng nó để chạy dịch vụ:

sudo systemctl start fail2ban

Sudo systemctl enable fail2ban trong cửa sổ đầu cuối.

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

sudo systemctl status fail2ban.service

Sudo systemctl status fail2ban.service trong cửa sổ đầu cuối.

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

Hãy xem fail2ban có phù hợp không:

sudo fail2ban-client status

trạng thái của ứng dụng khách Sudo fail2ban trong cửa sổ đầu cuối.

Nó phản ánh những gì chúng ta đã tạo ra. Chúng tôi đã bao gồm một nhà tù được gọi là [sshd]. Nếu chúng ta 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ó:

sudo fail2ban-client status sshd

Sudo fail2ban-client sshd status trong cửa sổ đầu cuối.

Chứa danh sách các lỗi và địa chỉ IP bị chặn. Tất nhiên, tất cả các số liệu thống kê tại thời điểm này là con số không.

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

Trên một máy khác, chúng tôi sẽ gửi yêu cầu kết nối SSH đến máy kiểm tra của chúng tôi 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ẽ được kích hoạt sau ba lần thử kết nối không thành công, không phải sau 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 để cố gắng kết nối không thành công.

Sau đó, chúng tôi sẽ thực hiện một nỗ lực khác để kết nối và nhập sai mật khẩu ba lần. Lần đầu tiên cung cấp mật khẩu không hợp lệ trong yêu cầu kết nối thứ ba sẽ kích hoạt fail2ban.

ssh dave@ubtuntu20-04.local trong cửa sổ đầu cuối với nhiều lần thử mật khẩu không thành công.

Sau mật khẩu không chính xác đầ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ính từ xa. Chúng tôi không nhận được lời giải thích; chúng ta chỉ nhận được một vai lạnh.

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

ssh [email protected]

ssh dave@ubuntu20-04.local trong cửa sổ đầu cuối với phản hồi bị từ chối kết nối.

Trước đây, thông báo lỗi là “Quyền bị từ chối”. Lần này cuộc gọi bị từ chối. Chúng tôi là cá nhân không grata. Chúng tôi đã bị cấm.

Hãy xem chi tiết [sshd] nhà tù một lần nữa:

sudo fail2ban-client status sshd

Sudo fail2ban-client sshd status trong cửa sổ đầu cuối.

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 đó, 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. Hãy xem xét lại bộ quy tắc (trước đó nó trống):

sudo iptables -L

Sudo iptables -L trong cửa sổ đầu cuối.

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. Một quy tắc trong chuỗi f2b-sshd từ chối các kết nối SSH đến 192.168.1.4.25. Chúng tôi chưa thay đổi cài đặt bantime mặc định, vì vậy sau 10 phút, địa chỉ IP này sẽ được mở khóa và có thể gửi yêu cầu kết nối mới.

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

Để làm điều này, chúng tôi nhập:

sudo fail2ban-client set sshd unbanip 192.168.5.25

Sudo fail2ban-client đặt sshd unbanip 192.168.5.25 trong cửa sổ đầu cuối.

Trên máy từ xa của chúng tôi, nếu chúng tôi yêu cầu lại kết nối SSH và nhập đúng mật khẩu, chúng tôi sẽ có thể kết nối:

ssh [email protected]

ssh dave@ubuntu20-04.local trong cửa sổ đầu cuối.

Đơn giản và hiệu quả

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

Mục lục