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à một cách tự bảo mật. Bài viết dưới đây sẽ chỉ bạn cách sử dụng chúng.
Bảo mật
Nếu máy tính của bạn chấp nhận những yêu cầu kết nối mới, ví dụ như các kết nối Secure Shell hoặc hoạt động một trang web hay trình duyệt email, bạn cần phải bảo vệ nó khỏi những tấn công từ bên ngoài.
Để làm được việc này, bạn cần kiểm soát những yêu cầu kết nối bị lỗi tới tài khoản của mình. Nếu không được xác thực trong một thời gian ngắn, chúng sẽ bị cấm thực hiện các hành động tiếp theo.
Các đơn giản nhất để làm được việc này là tự động hóa toàn bộ quá trình. Với cấu hình đơn giản, fail2ban sẽ kiểm soát, cấm hoặc bỏ cấm toàn bộ các kết nối giúp bạn.
fail2ban tích hợp với các iptable của tường lửa Linux. Nó sẽ thi hành lệnh cấm đối với các địa chỉ IP đáng nghi bằng cách thêm các quy tắc vào tường lửa. Để giải thích cặn kẽ hơn, các iptable dưới đây sẽ xuất hiện với bộ quy tắc trống.
Tất nhiên, nếu bạn lo lắng về vấn đề bảo mật, có lẽ bạn đang sử dụng tường lửa được trang bị bộ quy tắc phổ biến. fail2ban chỉ thêm hoặc xóa đi những quy tắc của riêng chương trình, nên các chức năng của tường lửa trong máy bạn sẽ vẫn còn nguyên.
Bộ quy tắc trống sẽ sử dụng lệnh này:
sudo iptables -L
Cài đặt fail2ban
Cài đặt fail2ban rất đơn giản. Trên Ubuntu 20.04, hãy làm theo bước sau:
sudo apt-get install fail2ban
Trên Fedora 32, nhập:
sudo dnf install fail2ban
Trên Manjaro 20.0.1, chúng ta sử dụng:
sudo pacman -Sy fail2ban
Cấu hình fail2ban
Cài đặt fail2ban bao gồm file cấu hình mặc định jail.conf. File này được ghi đè lên khi fail2ban được nâng cấp, nên cơ hội chỉnh sửa file này gần như bằng 0.
Thay vào đó, chúng ta đổi file jail.conf thay bằng jail.local. Khi cấu hình thay đổi trong jail.local, chúng sẽ giữ nguyên trong suốt quá trình nâng cấp. Cả hai file này được được tự động đọc bởi fail2ban.
Cách để sao chép file:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Bạn có thể mở file bằng gedit:
sudo gedit /etc/fail2ban/jail.local
Tìm hai section [DEFAULT] và [sshd] trong file. Bạn có thể tìm thấy [DEFAULT] quanh dòng thứ 40. Đây là một phần vô cùng nhiều bình luận và giải thích.
Kéo xuống khoảng xong thứ 90, bạn sẽ thấy 4 cài đặt nên biết:
- ignoreip: Đây là danh sách các địa chỉ IP có kim bài miễn tử, không bao giờ bị cấm. Chúng là các địa chỉ IP (127.0.0.1) được liệt kê từ mặc định, cùng với IPv6 tương đương (::1). Nếu còn biết các địa chỉ IP nào khác cũng không thể bị cấm, hãy thêm vào danh sách này bằng cách để thừa ra một dòng trống giữa mỗi địa chỉ.
- bantime: Khoảng thời gian mà mỗi địa chỉ IP bị cấm (kí tự “m” là viết tắt của minutes/số phút). Nếu bạn nhập giá trị không có “m” hoặc “h” (hours/giờ), hệ thống sẽ tự tính theo giây. Để giá trị là -1 thì địa chỉ IP sẽ bị cấm vĩnh viễn. Hãy cẩn thận với điều này nhé.
- findtime: Lượng thời gian IP bị cấm sau quá nhiều lần kết nối thất bại.
- maxretry: Giá trị thể hiện “kết nối thất bại quá nhiều lần”.
Nếu kết nối từ cùng một địa chỉ IP gặp phải kết nối thất bại maxretry trong một khoảng findtime nhất định, chúng sẽ bị cấm trong theo khoảng thời gian trong bantime. Ngoại lệ duy nhất là IP này có mặt trong danh sách ignoreip.
fail2ban chỉ đưa địa chỉ IP vào jail trong một thời gian nhất định. fail2ban hỗ trợ nhiều loại jail khác nhau, và mỗi loại đều đại diện cho những cài đặt được áp dụng cho một loại kết nối riêng biệt. Điều này cho phép bạn có nhiều điều chỉnh khác nhau cho các loại kết nối. Hoặc fail2ban chỉ dùng để điều khiển một set các loại kết nối khác nhau.
Bạn sẽ phải đoán từ trong section [DEFAULT], nhưng những cài đặt chúng ta thấy đều là mặc định. Giờ thì đến phần cài đặt cho SSH jail.
Tạo cấu hình một Jail
Jail cho phép chuyển những kết nối ra và vào bảng điều khiển của fail2ban. Nếu các cài đặt mặc định không khớp với những thứ bạn muốn cho vào jail, bạn có thể đặt những giá trị riêng biệt như bantime, findtime và maxretry.
Xuống đến khoảng dòng 280, bạn sẽ thấy section [sshd].
Đây là nơi bạn có thể đặt các giá trị jail cho kết nối SSH. Để gộp jail này vào bảng điều khiển và bảng cấm, hãy gõ dòng sau:
enabled = true
Gõ tiếp:
maxretry = 3
Cài đặt mặc định là 5, nhưng hãy cẩn thận hơn với những kết nối SSH. Hãy giảm xuống 3, rồi lưu và đóng file lại.
Một jail có thể sử dụng cả cài đặt mặc định và cài đặt jail đặc thù.
Kích hoạt fail2ban
fail2ban đã được cài đặt xong, bây giờ phải kích hoạt chạy dịch vụ auto-start.
Để kích hoạt fail2ban, sử dụng systemctl command:
sudo systemctl enable fail2ban
Chúng cũng được dùng để khởi động dịch vụ:
sudo systemctl start fail2ban
Chúng ta cũng có thể kiểm tra tình trạng dịch vụ bằng cách sử dụng systemctl:
sudo systemctl status fail2ban.service
Khi đèn xanh bật lên, mọi thứ nằm trong tình trạng hoàn hảo.
Giờ hãy xem fail2ban hoạt động ra sao:
sudo fail2ban-client status
Việc này phản ánh những gì đã được cài đặt bên trên. Kích hoạt một jail đơn, đặt tên là [sshd]. Nếu đặt gộp cả tên của jail trong lệnh trước, chúng ta có thể thấy được:
sudo fail2ban-client status sshd
Một danh sách những kết nối hỏng và địa chỉ IP bị cấm sẽ xuất hiện. Tất nhiên tất cả các chỉ số đều bằng 0 lúc này.
Thử nghiệm Jail.
Trên một máy tính khác, một yêu cầu kết nối SSH được gửi tới thiết bị được thử nghiệm và mật khẩu bị cố tình đánh sai. Bạn sẽ có ba lần gõ lại mật khẩu cho mỗi lần kết nối.
Giá trị maxretry sẽ bật ra ngay sau khi kết nối hỏng 3 lần, chứ không phải 3 lần gõ sai mật khẩu. Điều này có nghĩa là 3 lần gõ sai mật khẩu bằng một lần kết nối hỏng.
Thử thêm một lần kết nối khác và gõ sai mật khẩu 3 lần. Lần sau đầu tiên của kết nối thứ ba, fail2ban sẽ được bật.
Sau lần sau đó, chúng ta sẽ không nhận được phản hồi gì từ máy chủ, không giải thích, không thông báo gì thêm.
Bạn phải ấn tổ hợp Ctrl + C để quay trở lại command prompt. Nếu thử thêm lần nữa, một phản hồi khác bật ra:
ssh dave@ubuntu20-04.local
Trước đó, thông báo lỗi là “Permission denied”. Lần này thì kết nối đó bị từ chối luôn.
Hãy nhìn lại các chi tiết của [sshd] jail lần nữa:
sudo fail2ban-client status sshd
Như đã đề cập ở trên, fail2ban cấm các IP bằng cách thêm quy tắc mới vào bộ quy tắc của tường lửa. Hãy cùng để ý bộ quy tắc đó lúc này (đầu tiên là trống):
sudo iptables -L
Một quy tắc đã được thêm vào INPUT policy, gửi traffic của SSH đến chuỗi f2b-ssh. Quy tắc trong chuỗi f2b-sshd từ chối các kết nối SSH từ địa chỉ 192.168.4.25. Các cài đặt bantime mặc định không hề bị thay thế, vì vậy sau 10 phút, những địa chỉ IP này sẽ được bỏ cấm và có thể yêu cầu nối lại từ đầu.
Nếu đặt bantime dài (như vài giờ đồng hồ) nhưng đột nhiên muốn truy cập lại địa chỉ IP đó sớm hơn, bạn có thể chỉnh lại thời gian.
Gõ dòng sau:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Trên máy chủ, nếu yêu cầu một kết nối SSH khác và gõ đúng mật khẩu, chúng ta sẽ được kết nối:
ssh dave@ubuntu20-04.local
Đơn giản và hiệu quả
Đơn giản luôn luôn hiệu quả và fail2ban là một giải pháp nhanh chóng để giải quyết vấn đề. Nó chỉ mất chút thời gian cài đặt và sau đó tất cả mọi hoạt động trên máy tính đều là tự động.