Cách bảo vệ SSH bằng Fail2Ban trên Ubuntu 20.04 hiệu quả

Lượt xem
Home

SSH là một trong những phương pháp phổ biến nhất hiện nay để kết nối đến các server cloud. Để tránh bị tấn công brute force, bạn có thể sử dụng các giải pháp VPN hoặc những đơn giản hơn như Fail2Ban. Bài viết này sẽ hướng dẫn chi tiết cách triển khai để bảo vệ SSH bằng Fail2Ban trên Ubuntu 20.04

Giới thiệu về SSH

SSH là một phương thức đơn giản, ổn định và dễ dàng mở rộng, chủ yếu được dùng để kết nối đến các server remote hoặc cloud. Mặt khác, vì được sử dụng vô cùng phổ biến nên SSH dễ dàng trở thành mục tiêu của nhiều loại hình tấn công. Trong đó một hình thức phổ biến là brute force, thường là những chuỗi đăng nhập lặp đi lặp lại nhiều lần đến từ các user hoặc bot.

Giới thiệu về SSH
Giới thiệu về SSH

Một số phương pháp bảo vệ phổ biến là disable tính năng xác thực bằng mật khẩu, hoặc sử dụng các giải pháp VPNWireGuard. Các giải pháp này giúp ngăn chặn việc kết nối trực tiếp đến port SSH 22 mặc định từ bên ngoài. Mặc dù có tính hiệu quả cao, nhưng những giải pháp này lại tương đối phức tạp, làm giảm tính chất tự động hóa của SSH.

Từ đó, nhiều người dùng chuyển sang sử dụng công cụ Fail2ban – cho phép ngăn chặn tấn công brute force bằng cách tạo các rule để tự động thay đổi cấu hình tường lửa sau một số lần đăng nhập không thành công nhất định. Việc này giúp bảo vệ SSH một cách đơn giản, hiệu quả mà không cần sự truy cập từ các quản trị viên.

Các bước triển khai bảo vệ SSH bằng Fail2Ban trên Ubuntu 20.04

Để bắt đầu thực hiện theo hướng dẫn trong bài viết này, bạn đọc cần có sẵn server Ubuntu 20.04 và user non-root có quyền sudo. Ngoài ra, bạn cũng có thể sử dụng thêm một server thứ hai để kết nối thử và kiểm tra xem Fail2ban đã hoạt động chính xác hay chưa.

Dưới đây là những bước để triển khai Fail2ban bảo vệ SSH trên server Ubuntu 20.04.

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

Fail2ban là một phần mềm có sẵn trong repo của Ubuntu. Trước tiên, chạy lệnh dưới đây để cập nhật package rồi cài đặt Fail2ban (sử dụng user non-root với quyền sudo):

sudo apt update
sudo apt install fail2ban

Sau đó Fail2ban sẽ tự động được cài đặt. Theo mặc định thì Fail2ban sẽ chưa được enable sau khi cài xong. Bạn có thể chạy lệnh sau để kiểm tra:

systemctl status fail2ban.service
Output
○ fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled
     Active: inactive (dead)
       Docs: man:fail2ban(1)

Lưu ý: Fail2ban là một giải pháp tuyệt vời để đảm bảo tính riêng tư, bảo mật và ổn định của hệ thống. Nếu bạn đang sử dụng máy chủ ảo VPS thì bên cạnh những yếu tố trên, tốc độ cũng là một yếu tố quan trọng cần được tối ưu hóa. Một trong những cách để cải thiện tốc độ VPS nhanh chóng chính là sử dụng các gói VPS tốc độ cao từ Vietnix.

Hiện nay, Vietnix cung cấp nhiều gói máy chủ ảo (VPS) tốc độ cao khác nhau để phù hợp với nhu cầu của khách hàng, bao gồm VPS NVMe, VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp và VPS GPU. Các gói VPS này đều sở hữu nhiều tính năng hiện đại, bảo mật cao và ổn định mà người dùng mong muốn.

Hãy nhanh tay liên hệ với Vietnix để được tư vấn về các gói VPS phù hợp với nhu cầu của bạn ngay hôm nay. Đừng bỏ qua cơ hội để tối ưu hóa tốc độ VPS của bạn và đảm bảo tính ổn định của hệ thống.

Bước 2 – Cấu hình Fail2ban

Dịch vụ Fail2ban lưu trữ file cấu hình trong thư mục /etc/fail2ban, trong đó có file jail.conf. Hãy thử mở file rồi in 20 dòng đầu bằng option head -20:

cd /etc/fail2ban
head -20 jail.conf
Output
#
# WARNING: heavily refactored in 0.9.0 release.  Please review and
#          customize settings for your setup.
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in jail.local file,
#           or separate .conf files under jail.d/ directory, e.g.:
#
# HOW TO ACTIVATE JAILS:
#
# YOU SHOULD NOT MODIFY THIS FILE.
#
# It will probably be overwritten or improved in a distribution update.
#
# Provide customizations in a jail.local file or a jail.d/customisation.local.
# For example to change the default bantime for all jails and to enable the
# ssh-iptables jail the following (uncommented) would appear in the .local file.
# See man 5 jail.conf for details.
#
# [DEFAULT]

Có thể thấy rằng một số dòng đầu tiên được comment bằng dấu #, đây là phần tài liệu hướng dẫn, trong đó có yêu cầu không cho phép người dùng chỉnh sửa file này trực tiếp.

Để chỉnh sửa nội dung của file, bạn có thể tạo các profile riêng cho Fail2band trong từng file rồi lưu trong thư mục jail.d/, hoặc tạo rồi gộp các thiết lập local vào một file jail.local. File jail.conf sẽ thường xuyên được cập nhật bởi Fail2ban và được sử dụng như file cấu hình mặc định.

Trong hướng dẫn này, Vietnix sẽ tạo một file jail.local để cấu hình cho Fail2ban. Trước tiên, copy nội dung của file jail.conf vào jail.local như sau:

sudo cp jail.conf jail.local

Sau đó mở file bằng một text editor bất kỳ để chỉnh sửa:

sudo nano jail.local

Các thiết lập được viết trong phần [DEFAULT] ở phần đầu của file được áp dụng cho mọi dịch vụ được hỗ trợ bởi Fail2ban. Còn lại bạn có thể thấy những phần có chứa header [sshd] và các dịch vụ còn lại, chứa cấu hình riêng cho từng dịch vụ khác nhau, được áp dụng ghi đè lên các thiết lập mặc định ở phần [DEFAULT].

Các thiết lập mặc định

[DEFAULT]
. . .
bantime = 10m
. . .

Thông số bantime thiết lập thời gian một client bị ban khi xác thực không thành công, tính bằng đơn vị giây. Thiết lập mặc định là 10 phút.

[DEFAULT]
. . .
findtime = 10m
maxretry = 5
. . .

Hai tham số tiếp theo là findtimemaxretry. Trong đó biến maxretry chỉ định số lần tối đa một client được phép xác thực trong khoảng thời gian findtime trước khi bị ban. Theo thiết lập mặc định, fail2ban sẽ cấm các client xác thực không thành công quá 5 lần trong khoảng thời gian 10 phút.

[DEFAULT]
. . .
destemail = root@localhost
sender = root@<fq-hostname>
mta = sendmail
. . .

Nếu muốn nhận email cảnh báo từ Fail2ban, bạn có thể cập nhật các thiết lập như destemail, sendernamemta. Trong đó, destemail là địa chỉ email để gửi thông báo, sendername là giá trị của trường “From” của email, còn mta chỉ định dịch vụ mail sẽ sử dụng.

[DEFAULT]
. . .
action = $(action_)s
. . .

Đối số action dùng để chỉ định Fail2ban sẽ thực hiện hành động gì khi chặn một host. Hành động mặc định là cập nhật cấu hình tường lửa để chặn lưu lượng truy cập từ host bị chặn, có hiệu lực cho đến khi hết thời gian chặn.

Bên cạnh đó còn có một số option khác như sau:

…
# chặn và gửi email báo cáo đến destemail.
action_mw = %(action_)s
            %(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]

# chặn và gửi email báo cáo cùng với các đoạn log liên quan đến destemail.
action_mwl = %(action_)s
             %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]

# Kiểm tra phần note IMPORTANT action.d/xarf-login-attack để biết khi nào nên dùng action này
#
# chặn và gửi một email xarf cùng với các đoạn log liên quan đến destemail.
action_xarf = %(action_)s
             xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]

# chặn IP trên CloudFlare và gửi email báo cáo cùng với các đoạn log liên quan đến destemail.
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
…

Các thiết lập cho Jail

Tiếp theo là phần thiết lập dành riêng cho Jail, được chỉ định bởi các section header như [sshd].

Mỗi section (phần) này cần được enable riêng lẻ bằng cách thêm dòng enabled=True dưới header, ví dụ:

[jail_to_enable]
. . .
enabled = true
. . .

Theo mặc định, chỉ có dịch vụ SSH được enable. Bạn có thể để ý đến một số thiết lập hữu ích như filter, dùng để xem một dòng trong file log có cho biết một dòng trong file log là trường hợp xác thực thành công hay thất bại. Ngoài ra còn có logpath để cho fail2ban biết vị trí file log của một dịch vụ nhất định.

Giá trị của filter là tham chiếu đến một file nằm trong thư mục /etc/fail2ban/filter.d, không có phần mở rộng .conf. Các file này chứa những biểu thức chính quy (regular expression – regex) để cho biết một dòng trong file log có phải trường hợp xác thực không thành công hay không.

Bài viết này sẽ không đi chi tiết vào ý nghĩa của từng giá trị hay cách sử dụng regex vì đây là một kiến thức tương đối phức tạp.

Để kiểm tra các filter khả dụng, dùng lệnh dưới đây:

ls /etc/fail2ban/filter.d

Nếu tìm thấy file liên quan đến dịch vụ đang sử dụng, hãy thử mở bằng một text editor bất kỳ. Các file đều đi kèm hướng dẫn khá chi tiết nên bạn có thể dễ dàng hiểu được ý nghĩa của các đoạn script trong file. Hầu hết các filter đều có section tương ứng trong file jail.conf, vì vậy bạn có thể enable trong file jail.local rất dễ dàng.

Giả sử bạn đang chạy một website dựa trên Nginx và phát hiện một phần của trang đang có rất nhiều lượt đăng nhập lặp đi lặp lại. Khi đó, ta có thể yêu cầu file nginx-http-auth.conf kiểm tra file /var/log/nginx/errror.log. File /etc/fail2ban/jail.conf đã có sẵn thiết lập này trong phần [nginx-http-auth], bạn chỉ cần thêm tham số enabled như sau:

. . .
[nginx-http-auth]

enabled = true
. . .

Sau đó lưu rồi đóng file lại. Bây giờ bạn có thể enable dịch vụ Fail2ban:

sudo systemctl enable fail2ban

Sau khi enable, dịch vụ sẽ tự động chạy. Nếu muốn chạy thủ công thì hãy dùng lệnh sau:

sudo systemctl start fail2ban

Kiểm tra xem dịch vụ đang chạy chưa:

sudo systemctl status fail2ban
Output
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enab>
     Active: active (running) since Tue 2022-06-28 19:29:15 UTC; 3s ago
       Docs: man:fail2ban(1)
   Main PID: 39396 (fail2ban-server)
      Tasks: 5 (limit: 1119)
     Memory: 12.9M
        CPU: 278ms
     CGroup: /system.slice/fail2ban.service
             └─39396 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Jun 28 19:29:15 fail2ban20 systemd[1]: Started Fail2Ban Service.
Jun 28 19:29:15 fail2ban20 fail2ban-server[39396]: Server ready

Bước 3 – Kiểm tra chính sách chặn (không bắt buộc)

Bây giờ bạn sẽ thử dùng một server khác để SSH vào Fail2ban, với một tên bất kỳ:

ssh blah@your_server

Nhập một vài ký tự ngẫu nhiên khi được yêu cầu password, lặp lại quá trình này nhiều lần cho đến khi lỗi hiển thị được chuyển từ Permission denied thành Connection refused. Thông báo này cho biết server này đã bị chặn khỏi Fail2ban.

Bây giờ trên server Fail2ban, bạn có thể kiểm tra output của iptables để xem các quy tắc mới được cập nhật (iptables là một lệnh dùng để tương tác với cổng level thấp và các quy tắc tường lửa trên server).

sudo iptables -S
Output
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N f2b-sshd
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
…

Bây giờ pipe output của iptables -S với grep để tìm các quy tắc có chứa xâu “f2b“, tức là được thêm bởi fail2ban:

sudo iptables -S | grep f2b
Output
-N f2b-sshd
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A f2b-sshd -s 134.209.165.184/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -j RETURN

Có thể thấy dòng REJECT --reject-with icmp-port-unreachable đã được thêm bởi Fail2ban, đồng thời hiển thị địa chỉ IP vừa bị ban (là server bạn dùng để thử kết nối ở trên).

Nếu bạn cảm thấy quá trình cài đặt quá phức tạp hoặc gặp vấn đề trong quá trình thực hiện thì có thể tham khảo VPS Vietnix. Đội ngũ kỹ thuật của Vietnix luôn sẵn sàng đồng hành và hỗ trợ bạn giải quyết mọi vấn đề 24/7/365.

Với hơn 10 năm kinh nghiệm trong lĩnh vực cung cấp giải pháp VPS, Vietnix đã tạo dựng được uy tín và sự tin cậy với cộng đồng người dùng tại thị trường Việt Nam. Chúng tôi đã phục vụ cho hơn 50.000 khách hàng cá nhân, doanh nghiệp, nổi bật trong đó là GTV, Vietnamworks, SEOSONA, SAGO Media,…

Đặc biệt tỷ lệ khách hàng giới thiệu dịch vụ Vietnix sau khi sử dụng lên đến 97%. Với sự cam kết chất lượng và uy tín, Vietnix đã được trao giải thưởng Thương hiệu Việt Nam xuất sắc 2022, khẳng định vị thế doanh nghiệp trên thị trường. Hãy để Vietnix trở thành người đồng hành tin cậy cùng sự thành công của bạn.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093 – 07 088 44444
  • Email: sales@vietnix.com.vn

Lời kết

Qua bài viết hướng dẫn về cách bảo vệ SSH bằng Fail2Ban trên Ubuntu 20.04 này, bạn đọc đã biết được những bước thiết lập Fail2ban để bảo vệ kết nối SSH. Nếu có bất kỳ thắc mắc nào khác, hãy để lại ở phần comment bên dưới để được Vietnix hỗ trợ nhanh nhất nhé!

Chia sẻ lên

Theo dõi trên

Logo Google new

Đánh giá

5/5 - (73 bình chọn)

Hưng Nguyễn

Kết nối với mình qua

Icon Quote
Icon Quote
Đăng ký nhận tin
Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vietnix

Bình luận

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận