Kiến thức Hữu ích 😍

Bảo vệ SSH trên Ubuntu 20.04 bằng Fail2ban | Hướng dẫn chi tiết


Bảo vệ SSH bằng Fail2ban là gì trên Ubuntu 20.04 là một trong những bước đi đầu tiên và quan trọng nhất để tăng cường an ninh cho máy chủ của bạn. Trong môi trường số ngày nay, các cuộc tấn công mạng là gì tự động nhằm vào dịch vụ SSH diễn ra liên tục, với mục tiêu dò tìm mật khẩu yếu và chiếm quyền truy cập trái phép. Những cuộc tấn công brute-force này không chỉ gây rủi ro về mặt bảo mật mà còn tiêu tốn tài nguyên hệ thống một cách không cần thiết.

Fail2ban nổi lên như một giải pháp thông minh và hiệu quả, hoạt động như một người lính gác cần mẫn cho máy chủ của bạn. Công cụ này tự động giám sát các file log, phát hiện những hành vi đăng nhập sai lặp đi lặp lại từ một địa chỉ IP, và ngay lập tức chặn IP đó trong một khoảng thời gian nhất định. Bài viết này sẽ cung cấp một cái nhìn toàn diện, từ việc tìm hiểu về SSH là gì và các mối đe dọa, cho đến hướng dẫn chi tiết từng bước cài đặt và cấu hình Fail2ban trên hệ điều hành Ubuntu 20.04. Hãy cùng AZWEB khám phá cách thiết lập lá chắn bảo vệ vững chắc này.

Tìm hiểu về SSH và vai trò của bảo mật SSH

Để bảo vệ máy chủ hiệu quả, trước tiên chúng ta cần hiểu rõ công cụ quản trị chính và những rủi ro đi kèm. SSH là gì cánh cửa chính để bạn tương tác và quản lý server, nhưng cũng chính là mục tiêu hàng đầu của những kẻ tấn công.

SSH là gì và tại sao nó quan trọng?

SSH, viết tắt của Secure Shell, là một giao thức mạng mật mã hóa cho phép bạn quản lý và điều khiển máy chủ từ xa một cách an toàn. Hãy tưởng tượng bạn đang ngồi ở nhà nhưng có thể ra lệnh cho một máy chủ đặt ở nửa vòng trái đất, tất cả đều diễn ra trong một đường hầm được mã hóa, bảo mật. Mọi dữ liệu truyền đi, từ câu lệnh bạn gõ đến kết quả trả về, đều được bảo vệ khỏi việc nghe lén.

Đây là công cụ không thể thiếu đối với bất kỳ quản trị viên hệ thống nào. Nó được sử dụng để cập nhật phần mềm, sao chép tệp tin, khởi động lại dịch vụ và thực hiện vô số tác vụ quản trị khác. Chính vì vai trò trung tâm này, việc đảm bảo kết nối SSH luôn an toàn là ưu tiên số một. Nếu cổng SSH bị xâm nhập, kẻ tấn công sẽ có toàn quyền kiểm soát máy chủ của bạn.

Hình minh họa

Các nguy cơ bảo mật thường gặp đối với SSH

Mặc dù bản thân giao thức SSH rất an toàn, cách chúng ta sử dụng và cấu hình nó lại có thể tạo ra những lỗ hổng bảo mật nghiêm trọng. Mối đe dọa phổ biến và dai dẳng nhất chính là các cuộc tấn công dò mật khẩu tự động.

Hai hình thức tấn công chính là Brute-forceDictionary Attacks. Tấn công Brute-force hoạt động bằng cách thử tất cả các chuỗi mật khẩu có thể, trong khi Dictionary Attacks sử dụng một danh sách các mật khẩu phổ biến. Các bot tự động có thể thực hiện hàng ngàn lần thử đăng nhập mỗi giờ vào cổng SSH của bạn.

Nếu bạn sử dụng một mật khẩu yếu hoặc không có cơ chế phòng thủ nào, chỉ là vấn đề thời gian trước khi mật khẩu đúng được tìm ra. Hậu quả của việc này vô cùng nghiêm trọng: dữ liệu nhạy cảm bị đánh cắp, máy chủ bị biến thành một phần của mạng botnet là gì để tấn công các mục tiêu khác, hoặc toàn bộ hệ thống bị phá hủy. Do đó, việc triển khai các biện pháp bảo vệ chủ động là cực kỳ cần thiết.

Tổng quan về Fail2ban và chức năng bảo mật của nó

Khi đối mặt với các cuộc tấn công tự động không ngừng nghỉ, việc phòng thủ thủ công là không khả thi. Đây là lúc Fail2ban tỏa sáng, mang đến một giải pháp tự động hóa thông minh để bảo vệ máy chủ của bạn.

Fail2ban hoạt động như thế nào?

Về cơ bản, Fail2ban là gì một hệ thống phòng chống xâm nhập dựa trên log. Nó không phải là một tường lửa là gì, mà là một công cụ thông minh làm việc cùng với tường lửa của bạn. Nguyên lý hoạt động của nó khá đơn giản nhưng cực kỳ hiệu quả.

Fail2ban liên tục quét các tệp nhật ký (log files) của hệ thống, chẳng hạn như /var/log/auth.log trên Ubuntu. Nó sử dụng các bộ lọc (filters) được định nghĩa sẵn để tìm kiếm các dấu hiệu của hành vi độc hại, ví dụ như các lần đăng nhập SSH thất bại. Khi phát hiện một địa chỉ IP nào đó có số lần đăng nhập sai vượt quá ngưỡng cho phép (ví dụ: 5 lần) trong một khoảng thời gian nhất định (ví dụ: 10 phút), Fail2ban sẽ tự động kích hoạt một hành động. Hành động phổ biến nhất là thêm một quy tắc vào tường lửa hệ thống (như iptables) để chặn (ban) địa chỉ IP đó, không cho phép nó kết nối đến máy chủ trong một thời gian đã định.

Hình minh họa

Lợi ích khi sử dụng Fail2ban để bảo vệ SSH

Việc tích hợp Fail2ban vào hệ thống bảo mật mang lại nhiều lợi ích thiết thực cho các quản trị viên. Lợi ích rõ ràng nhất là giảm thiểu đáng kể rủi ro từ các cuộc tấn công brute-force. Bằng cách tự động chặn các IP tấn công, Fail2ban ngăn chặn chúng tiếp tục dò mật khẩu, bảo vệ tài khoản và tài nguyên máy chủ.

Thứ hai, Fail2ban giúp tự động hóa hoàn toàn quy trình bảo mật cơ bản. Thay vì phải ngồi xem log và chặn IP thủ công, quản trị viên có thể để Fail2ban làm việc 24/7. Điều này giúp giảm tải công việc, tiết kiệm thời gian và cho phép bạn tập trung vào các nhiệm vụ quan trọng khác. Hơn nữa, nó còn giúp giảm lượng “nhiễu” không cần thiết trong các tệp log, giúp việc phân tích và điều tra sự cố sau này trở nên dễ dàng hơn. Fail2ban là một công cụ nhẹ, hiệu quả và là lớp phòng thủ đầu tiên không thể thiếu cho bất kỳ máy chủ nào có cổng SSH mở ra Internet.

Hướng dẫn cài đặt và cấu hình Fail2ban trên Ubuntu 20.04

Bây giờ chúng ta sẽ đi vào phần thực hành. Việc cài đặt và cấu hình Fail2ban trên Ubuntu 20.04 rất đơn giản và nhanh chóng. Hãy làm theo từng bước dưới đây để thiết lập lớp bảo vệ tự động cho dịch vụ SSH của bạn.

Các bước cài đặt Fail2ban trên Ubuntu 20.04

Trước khi cài đặt bất kỳ phần mềm nào, bạn nên cập nhật danh sách gói của hệ thống để đảm bảo có được phiên bản mới nhất. Hãy mở terminal và chạy lệnh sau: sudo apt update

Sau khi quá trình cập nhật hoàn tất, bạn có thể tiến hành cài đặt Fail2ban bằng một lệnh duy nhất: sudo apt install fail2ban

Hệ thống sẽ tự động tải về và cài đặt các gói cần thiết. Sau khi cài đặt xong, dịch vụ Fail2ban sẽ được kích hoạt và tự động khởi chạy. Để kiểm tra trạng thái của dịch vụ và đảm bảo nó đang hoạt động, bạn có thể sử dụng lệnh: sudo systemctl status fail2ban

Nếu bạn thấy dòng chữ active (running) màu xanh lá, điều đó có nghĩa là Fail2ban đã được cài đặt thành công và đang chạy nền để bảo vệ máy chủ của bạn.

Hình minh họa

Cấu hình Fail2ban để bảo vệ SSH

Fail2ban đi kèm với một tệp cấu hình mặc định là /etc/fail2ban/jail.conf. Tuy nhiên, bạn không nên chỉnh sửa trực tiếp tệp này vì nó có thể bị ghi đè khi cập nhật phần mềm. Thay vào đó, chúng ta sẽ tạo một bản sao để tùy chỉnh. Hãy sao chép tệp cấu hình mặc định sang một tệp mới có tên jail.local: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Bây giờ, hãy mở tệp jail.local bằng một trình soạn thảo văn bản như nano: sudo nano /etc/fail2ban/jail.local

Tìm đến phần [sshd]. Mặc định trên Ubuntu, jail này đã được bật sẵn (enabled = true). Bạn có thể tùy chỉnh các thông số quan trọng sau đây:

  • maxretry: Số lần đăng nhập sai tối đa trước khi một IP bị chặn. Giá trị mặc định thường là 5.
  • findtime: Khoảng thời gian (giây) mà maxretry được tính. Ví dụ, findtime = 600 nghĩa là nếu một IP đăng nhập sai 5 lần trong vòng 10 phút, nó sẽ bị chặn.
  • bantime: Thời gian (giây) một IP bị chặn. Ví dụ, bantime = 3600 có nghĩa là IP sẽ bị chặn trong 1 giờ.

Sau khi đã tùy chỉnh các thông số theo ý muốn, hãy lưu tệp và thoát khỏi trình soạn thảo. Cuối cùng, để các thay đổi có hiệu lực, bạn cần khởi động lại dịch vụ Fail2ban: sudo systemctl restart fail2ban

Vậy là xong! Fail2ban hiện đã được cấu hình để tự động bảo vệ dịch vụ SSH là gì của bạn.

Hình minh họa

Cách Fail2ban phát hiện và khóa IP đăng nhập sai

Hiểu được cơ chế hoạt động bên trong của Fail2ban sẽ giúp bạn tự tin hơn khi sử dụng và khắc phục sự cố nếu cần. Quá trình này bao gồm ba bước chính: quét log, khớp mẫu và thực thi hành động.

Đầu tiên, Fail2ban liên tục theo dõi tệp log của dịch vụ SSH, thường là /var/log/auth.log trên các hệ thống dựa trên Debian/Ubuntu. Tệp này ghi lại mọi nỗ lực xác thực, bao gồm cả các lần đăng nhập thành công và thất bại. Mỗi khi có một dòng mới được thêm vào tệp log, Fail2ban sẽ đọc nó.

Tiếp theo, Fail2ban sử dụng một bộ quy tắc được gọi là “filter” để phân tích các dòng log này. Filter về cơ bản là các biểu thức chính quy (regex) được thiết kế để nhận diện các mẫu cụ thể. Đối với SSH, filter sẽ tìm kiếm các dòng có chứa thông báo như “Failed password for invalid user” hoặc “Failed password for root”. Mỗi khi tìm thấy một dòng khớp với mẫu, nó sẽ ghi nhận lại địa chỉ IP nguồn của yêu cầu đó.

Hình minh họa

Điều kiện để Fail2ban thực hiện khóa một IP là khi số lần khớp mẫu từ cùng một địa chỉ IP vượt qua giá trị maxretry trong khoảng thời gian findtime. Ví dụ, nếu maxretry là 5 và findtime là 600 giây, khi IP 123.45.67.89 có 5 lần đăng nhập sai được ghi vào log trong vòng 10 phút, Fail2ban sẽ coi đây là một hành vi nguy hiểm.

Ngay lập tức, Fail2ban sẽ kích hoạt “action” tương ứng. Action mặc định cho SSH là sử dụng tường lửa hệ thống (thường là iptables hoặc nftables) để tạo một quy tắc mới. Quy tắc này sẽ chặn (DROP hoặc REJECT) tất cả các gói tin đến từ địa chỉ IP vi phạm (123.45.67.89) trong khoảng thời gian được định nghĩa bởi bantime. Sau khi hết thời gian bantime, quy tắc chặn sẽ được tự động gỡ bỏ, và IP đó có thể kết nối lại bình thường.

Kiểm tra và giám sát trạng thái của Fail2ban

Sau khi đã cài đặt và cấu hình, việc giám sát hoạt động của Fail2ban là rất quan trọng để đảm bảo nó đang bảo vệ máy chủ của bạn một cách hiệu quả. May mắn thay, Fail2ban cung cấp các công cụ dòng lệnh đơn giản để thực hiện việc này.

Để có cái nhìn tổng quan về tất cả các “jail” (quy tắc bảo vệ) đang hoạt động, bạn có thể sử dụng lệnh sau: sudo fail2ban-client status

Lệnh này sẽ liệt kê tất cả các jail đang được kích hoạt, ví dụ như [sshd].

Nếu bạn muốn xem chi tiết về một jail cụ thể, chẳng hạn như jail cho SSH, hãy chạy lệnh: sudo fail2ban-client status sshd

Kết quả trả về sẽ cung cấp thông tin rất hữu ích, bao gồm tổng số lần thất bại đã được phát hiện và quan trọng nhất là danh sách các địa chỉ IP hiện đang bị chặn. Đây là cách nhanh nhất để xác nhận rằng Fail2ban đang thực hiện đúng công việc của mình.

Hình minh họa

Ngoài việc kiểm tra trạng thái tức thời, bạn cũng nên xem xét các tệp log của chính Fail2ban để hiểu rõ hơn về hoạt động của nó theo thời gian. Tệp log này thường nằm ở /var/log/fail2ban.log. Bạn có thể xem nội dung của nó bằng lệnh: sudo tail -f /var/log/fail2ban.log

Lệnh này sẽ hiển thị những dòng log cuối cùng và tự động cập nhật khi có hoạt động mới. Trong log này, bạn sẽ thấy các thông báo chi tiết về việc Fail2ban tìm thấy các IP đáng ngờ, quyết định chặn (ban) chúng, và khi nào thì gỡ bỏ lệnh cấm (unban). Phân tích log là một kỹ năng quan trọng giúp bạn tinh chỉnh cấu hình và khắc phục sự cố hiệu quả.

Lỗi thường gặp và cách khắc phục

Mặc dù Fail2ban thường hoạt động ổn định, đôi khi bạn có thể gặp phải một vài sự cố. Dưới đây là hai vấn đề phổ biến và cách để chẩn đoán, khắc phục chúng.

Fail2ban không khóa được IP mặc dù bị đăng nhập sai

Đây là tình huống gây bối rối nhất: bạn thấy rõ các lần đăng nhập sai trong log hệ thống, nhưng Fail2ban lại không chặn IP nào cả. Nguyên nhân phổ biến nhất thường liên quan đến cấu hình.

Đầu tiên, hãy kiểm tra lại đường dẫn tệp log (logpath) trong tệp cấu hình jail.local. Đôi khi, trên một số hệ điều hành hoặc cấu hình tùy chỉnh, tệp log xác thực có thể nằm ở một vị trí khác so với mặc định. Hãy đảm bảo rằng logpath trong jail [sshd] của bạn trỏ đúng đến tệp log SSH của hệ thống (thường là /var/log/auth.log).

Một nguyên nhân khác có thể là do định dạng log đã thay đổi, khiến cho các bộ lọc (filter) mặc định của Fail2ban không còn nhận diện được các dòng log đăng nhập sai. Bạn có thể kiểm tra các biểu thức regex của filter bằng công cụ fail2ban-regex. Chạy lệnh fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf để xem Fail2ban có khớp được các dòng lỗi trong log của bạn hay không. Nếu không, bạn có thể cần phải tùy chỉnh lại filter.

Hình minh họa

Không thể khởi động Fail2ban hoặc lỗi dịch vụ

Nếu bạn gặp lỗi khi cố gắng khởi động hoặc khởi động lại dịch vụ Fail2ban, vấn đề gần như chắc chắn nằm ở lỗi cú pháp trong các tệp cấu hình của bạn. Một dấu ngoặc sai, một ký tự thừa, hoặc một giá trị không hợp lệ trong tệp jail.local có thể khiến dịch vụ không thể khởi chạy.

Cách tốt nhất để chẩn đoán là xem nhật ký hệ thống dành riêng cho dịch vụ Fail2ban. Sử dụng lệnh sau: sudo journalctl -u fail2ban

Lệnh này sẽ hiển thị tất cả các thông báo log liên quan đến Fail2ban, bao gồm cả các lỗi chi tiết khi khởi động. Hãy đọc kỹ các dòng lỗi màu đỏ, chúng thường sẽ chỉ rõ vấn đề nằm ở dòng nào trong tệp cấu hình nào. Một cách khác để kiểm tra cú pháp tệp cấu hình là chạy Fail2ban ở chế độ gỡ lỗi từ dòng lệnh: sudo fail2ban-client -d. Nó sẽ hiển thị các lỗi cấu hình một cách chi tiết hơn. Sau khi xác định và sửa lỗi, hãy thử khởi động lại dịch vụ.

Lời khuyên nâng cao để tăng cường bảo mật SSH

Fail2ban là một lớp phòng thủ tuyệt vời, nhưng nó không nên là biện pháp duy nhất. Để xây dựng một hệ thống phòng thủ vững chắc theo chiều sâu, bạn nên kết hợp Fail2ban với các thực tiễn bảo mật nâng cao khác.

Đầu tiên, hãy thay đổi cổng SSH mặc định. Hầu hết các bot tấn công tự động chỉ quét cổng 22. Bằng cách chuyển dịch vụ SSH sang một cổng khác (ví dụ: cổng 2222), bạn có thể tránh được phần lớn các cuộc tấn công tự động này. Đây là một thay đổi đơn giản nhưng mang lại hiệu quả tức thì.

Biện pháp mạnh mẽ nhất bạn có thể thực hiện là sử dụng xác thực bằng khóa công khai (SSH key) và vô hiệu hóa hoàn toàn việc đăng nhập bằng mật khẩu. Xác thực là gì bằng khóa SSH an toàn hơn rất nhiều so với mật khẩu và gần như không thể bị tấn công brute-force. Khi đã thiết lập SSH key, bạn nên chỉnh sửa tệp /etc/ssh/sshd_config và đặt PasswordAuthentication no.

Hình minh họa

Tiếp theo, hãy kết hợp Fail2ban với một tường lửa nâng cao như UFW (Uncomplicated Firewall). UFW giúp bạn dễ dàng quản lý các quy tắc tường lửa, chỉ cho phép các kết nối cần thiết và chặn mọi thứ khác theo mặc định. Fail2ban sẽ hoạt động liền mạch với UFW để thêm và xóa các quy tắc chặn IP động.

Cuối cùng, đừng bao giờ quên nguyên tắc cơ bản nhất: luôn theo dõi và cập nhật hệ thống thường xuyên. Hãy chạy sudo apt updatesudo apt upgrade định kỳ để đảm bảo rằng hệ điều hành và tất cả các phần mềm của bạn, bao gồm cả dịch vụ SSH, đều được vá các lỗ hổng bảo mật mới nhất. Một hệ thống được cập nhật đầy đủ sẽ giảm thiểu đáng kể bề mặt tấn công.

Kết luận

Cổng SSH là gì lối vào chính để quản lý máy chủ, và do đó, nó cũng là mục tiêu hàng đầu của các cuộc tấn công mạng là gì. Việc bỏ qua bảo mật cho SSH cũng giống như để ngỏ cửa chính ngôi nhà của bạn. Các cuộc tấn công brute-force tự động diễn ra không ngừng nghỉ, và nếu không có biện pháp phòng thủ chủ động, máy chủ của bạn sớm muộn cũng sẽ gặp nguy hiểm.

Fail2ban đã chứng tỏ là một công cụ cực kỳ hiệu quả và cần thiết cho bất kỳ quản trị viên hệ thống nào sử dụng Ubuntu 20.04. Với khả năng tự động giám sát log và chặn các địa chỉ IP có hành vi đáng ngờ, nó hoạt động như một hệ thống cảnh báo và phản ứng sớm, giúp giảm tải công việc và tăng cường đáng kể an ninh cho máy chủ.

Qua bài viết này của AZWEB, bạn đã được hướng dẫn chi tiết từ cách cài đặt, cấu hình cơ bản cho đến việc giám sát và khắc phục sự cố. Hãy áp dụng ngay những kiến thức này để thiết lập một lá chắn bảo vệ vững chắc cho dịch vụ SSH của bạn. Đừng dừng lại ở đây, hãy tiếp tục tìm hiểu thêm các bài viết về bảo mật máy chủ để không ngừng nâng cao kỹ năng và đảm bảo an toàn tối đa cho hạ tầng của mình.

Đánh giá