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ảo mật An ninh An ninh
Nữ công tước xứ Windsor, Wallis Simpson, từng nói nổi tiếng, “Bạn không bao giờ có thể quá giàu hoặc quá gầy.” Chúng tôi đã cập nhật điều này cho thế giới kết nối hiện đại của chúng tôi: 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, chẳng hạn như kết nối 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 brute-force và những kẻ đoán mật khẩu.
Để làm như vậy, bạn sẽ cần theo dõi các yêu cầu kết nối không vào được tài khoản. Nếu họ liên tục không xác thực được trong một thời gian ngắn, họ sẽ bị cấm thực hiện thêm các nỗ lực khác.
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ộ quy trình. Với một chút cấu hình đơn giản, fail2ban
sẽ quản lý việc giám sát, 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 nghi ngờ bằng cách thêm các quy tắc vào tường lửa. Để giữ cho lời giải thích này gọn gàng, chúng tôi đang 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 đã 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 của riêng 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 cách sử dụng lệnh này:
sudo iptables -L
LIÊN QUAN: Hướng dẫn cho Người mới bắt đầu về iptables, Tường lửa Linux
Cài đặt fail2ban
Đang cài đặt fail2ban
là đơ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:
sudo apt-get install fail2ban
Trên Fedora 32, nhập:
sudo dnf install fail2ban
Trên Manjaro 20.0.1, chúng tôi đã sử dụng pacman
:
sudo pacman -Sy fail2ban
Định cấu hình fail2ban
Các fail2ban
cài đặt chứa tệp cấu hình mặc định có tên là 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 của mình nếu chúng tôi 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 vào một tệp có tên là jail.local. Bằng cách đưa các thay đổi cấu hình của chúng tôi vào jail.local, chúng sẽ tồn tại qua các lần nâng cấp. Cả hai tệp đều được đọc tự động bởi fail2ban
.
Đây là cách sao chép tệp:
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
:
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ế. Các 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à những gì chúng tôi muốn.
Bạn sẽ tìm thấy [DEFAULT] phần ở đâu đó xung quanh dòng 40. Đó là một phần dài với rất nhiều bình luận 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:
-
bỏ qua: Danh sách trắng các địa chỉ IP sẽ không bao giờ bị cấm. Họ có thẻ Ra khỏi 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 IPv6 tương đương của nó (::1
). Nếu có những địa chỉ IP khác mà bạn biết không bao giờ bị cấm, hãy thêm chúng vào danh sách này và để lại khoảng cách giữa mỗi địa chỉ. - bantime: Khoảng thời gian đị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ị mà không có “m” hoặc “h” (hàng giờ) thì nó sẽ được coi là giây. Giá trị -1 sẽ cấm vĩnh viễn một địa chỉ IP. Hãy hết sức cẩn thận để không tự khóa mình vĩnh viễn.
- thời gian tìm thấy: Khoảng thời gian mà trong đó quá nhiều lần kết nối không thành công sẽ dẫn đến một địa chỉ IP bị cấm.
- tối đa: Giá trị cho “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 làm cho maxretry
nỗ lực kết nối thất bại trong findtime
thời gian, chúng bị cấm trong thời gian bantime
. Các ngoại lệ duy nhất là các địa chỉ IP trong ignoreip
danh 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ể có fail2ban
chỉ giám sát một tập hợp các kiểu kết nối đã chọn.
Bạn có thể đoán nó từ [DEFAULT] tên phần, nhưng cài đặt chúng tôi đã xem xét là cài đặt mặc định. Bây giờ, hãy xem các cài đặt cho SSH jail.
LIÊN QUAN: Cách chỉnh sửa tệp văn bản bằng đồ họa trên Linux với gedit
Cấu hình nhà tù
Jails cho phép bạn di chuyển các loại kết nối vào và ra fail2ban's
giám sát. Nếu cài đặt mặc định không khớp với những 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
.
Cuộn xuống khoảng dòng 280, và bạn sẽ thấy [sshd] phần.
Đây là nơi bạn có thể đặt giá trị cho tù kết nối SSH. Để đưa nhà tù này vào diện theo dõi và cấm, chúng ta phải nhập dòng sau:
enabled = true
Chúng tôi cũng gõ dòng này:
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's
giám sát và ghi đè một trong các cài đặt mặc định. Một nhà tù có thể sử dụng kết hợp các cài đặt mặc định và cài đặt riêng cho nhà tù.
Bậ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 phải cho phép 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 rằng 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 systemctl
chỉ huy:
sudo systemctl enable fail2ban
Chúng tôi cũng sử dụng nó để bắt đầu dịch vụ:
sudo systemctl start fail2ban
Chúng tôi có thể kiểm tra trạng thái của dịch vụ bằng cách sử dụng systemctl
, quá:
sudo systemctl status fail2ban.service
Mọi thứ có vẻ ổn — chúng tôi đã bật đèn xanh, vì vậy tất cả đều ổn.
Hãy xem nếu fail2ban
đồng ý:
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 nhà tù duy nhất, có tên là [sshd]. Nếu chúng tôi bao gồm tên của nhà tù với lệnh trước của chúng tôi, chúng tôi có thể xem xét sâu hơn về nó:
sudo fail2ban-client status sshd
Danh sách này liệt kê số lượng lỗi và địa chỉ IP bị cấm. Tất nhiên, tất cả các số liệu thống kê ở thời điểm hiện tại đều là con số không.
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 kiểm tra của mình và nhập sai mật khẩu có chủ đích. Bạn nhận được ba lần thử lấy mật khẩu ngay trong mỗi lần kết nối.
Các maxretry
giá trị sẽ kích hoạt sau ba lần thử kết nối thất bại, không phải ba lần nhập mật khẩu không thành công. Vì vậy, chúng ta phải gõ sai mật khẩu ba lần để kết nối thất bại lần một.
Sau đó, chúng tôi sẽ thực hiện một lần 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 lần 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 một bờ vai lạnh.
Bạn phải nhấn Ctrl + C để quay lại dấu nhắc lệnh. Nếu chúng tôi thử lại một lần nữa, chúng tôi sẽ nhận được một phản hồi khác:
ssh dave@ubuntu20-04.local
Trước đây, thông báo lỗi là “Quyền bị từ chối”. Lần này, kết nối hoàn toàn bị từ chối. Chúng tôi là cá tính không grata. Chúng tôi đã bị cấm.
Chúng ta hãy xem xét các chi tiết của [sshd] vào tù một lần nữa:
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. Hãy xem xét lại bộ quy tắc (trước đây nó trống):
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 f2b-sshd
chuỗi. Quy tắc trong f2b-sshd
chuỗi từ chối các 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, trong 10 phút nữa, đị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 hạn cấm dài hơn (chẳng hạn như vài giờ), nhưng muốn cho phép một đị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 hoãn sớm hơn.
Chúng tôi gõ như sau để thực hiện việc này:
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 mật khẩu chính xác, chúng tôi sẽ được phép kết nối:
ssh dave@ubuntu20-04.local
Đơ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 thanh lịch cho một vấn đề phức tạp. Nó cần rất ít cấu hình và hầu như không áp đặt bất kỳ chi phí hoạt động nào — cho bạn hoặc máy tính của bạn.