Chống Brute-force cho Fedora Server với Fail2ban: Đừng để SSH ‘mở toang’ cửa

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Server Fedora của bạn có thực sự an toàn?

Bạn vừa build xong một con Fedora Server, deploy Nginx và cảm thấy mọi thứ đã sẵn sàng. Nhưng hãy thử gõ lệnh lastb. Bạn sẽ sốc khi thấy hàng nghìn lượt đăng nhập thất bại từ những IP lạ hoắc ở tận Nga, Trung Quốc hay Brazil chỉ sau một đêm.

Thực tế, một server có IP công khai thường hứng chịu từ 2.000 đến 5.000 cú ‘thử khóa’ mỗi ngày. Mật khẩu mạnh có thể giúp bạn trụ vững. Tuy nhiên, việc hệ thống phải gồng mình xử lý hàng vạn request giả mạo này sẽ ngốn sạch tài nguyên CPU và băng thông một cách vô ích.

Tại sao botnet lại ‘ghé thăm’ bạn liên tục?

Không có hacker nào ngồi gõ từng mật khẩu đâu. Đó là các mạng lưới botnet được lập trình để quét sạch dải IP trên Internet. Khi phát hiện cổng 22 (SSH) đang mở, chúng sẽ tự động thực hiện tấn công Brute-force. Chúng thử các username phổ biến như admin, root kết hợp với hàng triệu mật khẩu trong từ điển.

Kẻ hở lớn nhất chính là SSH – dịch vụ bắt buộc phải mở để quản trị từ xa. Nếu cứ để mặc cho bot quét, sớm muộn gì ‘chìa khóa’ của bạn cũng bị dò ra. Tệ hơn, server có thể bị treo hoàn toàn do tràn log hệ thống.

Những mẹo chống đỡ thủ công (và giới hạn của chúng)

Anh em quản trị thường truyền tai nhau vài cách ‘chữa cháy’ nhanh:

  • Đổi cổng SSH: Thay cổng 22 bằng 2222. Cách này lọc được các bot ‘nghiệp dư’. Tuy nhiên, một script Nmap đơn giản chỉ mất vài giây để tìm ra cổng SSH mới của bạn.
  • Dùng SSH Key: Đây là cách an toàn nhất. Tuy nhiên, nó khá bất tiện nếu bạn cần truy cập gấp từ một thiết bị mới mà không mang theo private key.
  • Chặn IP bằng Firewall: Thấy IP xấu thì dùng firewalld chặn. Nhưng bạn không thể ngồi canh log 24/7 để gõ lệnh chặn hàng nghìn IP thủ công.

Fail2ban – ‘Người gác cổng’ tự động trên Fedora

Giải pháp thực dụng nhất chính là Fail2ban. Công cụ này hoạt động như một bảo vệ quán bar: nó soi log hệ thống, đếm số lần nhập sai mật khẩu. Nếu một IP vượt quá giới hạn, Fail2ban sẽ ra lệnh cho Firewall ‘cấm cửa’ IP đó ngay lập tức trong một khoảng thời gian nhất định.

Trên Fedora, Fail2ban phối hợp cực tốt với firewalldsystemd-journald. Đây là bộ ba bảo mật hoàn hảo cho server của bạn.

Bước 1: Cài đặt Fail2ban

Fail2ban có sẵn trong repo chính thức của Fedora. Bạn chỉ cần mở terminal và chạy lệnh:

sudo dnf install fail2ban fail2ban-firewalld -y

Gói fail2ban-firewalld rất quan trọng. Nó giúp Fail2ban giao tiếp trực tiếp với tường lửa mặc định của Fedora mà không cần cấu hình phức tạp.

Bước 2: Thiết lập luật ‘nhốt’ kẻ xấu

Đừng bao giờ sửa trực tiếp file /etc/fail2ban/jail.conf vì nó sẽ bị ghi đè khi cập nhật phần mềm. Hãy tạo một bản sao để tùy chỉnh:

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

Mở file jail.local và tìm phần [DEFAULT] để chỉnh các thông số sau:

  • bantime = 1h: Thời gian ‘vào tù’ (nên để 1h hoặc tăng lên 24h nếu muốn gắt hơn).
  • findtime = 10m: Khoảng thời gian để đếm lỗi.
  • maxretry = 5: Sai quá 5 lần là bị chặn.

Đặc biệt, hãy cấu hình riêng cho SSH ở phần [sshd]:

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = systemd

Lưu ý: Fedora dùng log định dạng binary của systemd. Dòng backend = systemd là bắt buộc để Fail2ban có thể đọc được dữ liệu.

Bước 3: Kích hoạt hệ thống

Sau khi lưu file, hãy khởi động dịch vụ và thiết lập tự động chạy khi boot máy:

sudo systemctl enable --now fail2ban

Kiểm tra trạng thái hoạt động bằng lệnh:

sudo fail2ban-client status

Nếu thấy Jail list: sshd xuất hiện, nghĩa là ‘lưới’ đã giăng xong.

Bước 4: Kiểm tra danh sách ‘đen’

Sau vài tiếng, bạn sẽ thấy thành quả. Hãy chạy lệnh này để xem có bao nhiêu IP đang bị ‘nhốt’:

sudo fail2ban-client status sshd

Nếu chẳng may bạn tự khóa chính mình do gõ sai mật khẩu, hãy dùng console của nhà cung cấp VPS và gõ:

sudo fail2ban-client set sshd unbanip [IP_CỦA_BẠN]

Kinh nghiệm thực tế để Fail2ban chạy mượt hơn

Qua thời gian quản trị Fedora, mình rút ra 3 lưu ý nhỏ:

  1. Whitelist IP cá nhân: Thêm IP nhà hoặc công ty vào dòng ignoreip trong jail.local. Việc này giúp bạn không bao giờ bị ‘văng’ ra ngoài một cách vô lý.
    ignoreip = 127.0.0.1/8 ::1 1.2.3.4 (IP của bạn)
  2. Kiểm soát Firewalld: Fail2ban chỉ là lớp bảo vệ tầng ứng dụng. Hãy đảm bảo firewalld của bạn chỉ mở những cổng thực sự cần thiết như 80, 443 và SSH.
  3. Theo dõi log real-time: Muốn xem Fail2ban đang ‘xử’ IP nào trong thời gian thực? Hãy dùng lệnh:
    sudo tail -f /var/log/fail2ban.log

Bảo mật server là một quá trình cải thiện liên tục. Với Fail2ban, bạn đã xây dựng được lớp phòng thủ tự động vững chắc. Bạn sẽ bớt phải lo lắng về những cuộc tấn công dò mật khẩu rẻ tiền để tập trung vào việc phát triển ứng dụng.

Share: