Hướng dẫn cài đặt Fail2ban bảo vệ SSH trên CentOS

Nếu bạn có một hệ thống máy chủ VPS/Cloud Server thì hẳn bạn phải thường xuyên sử dụng giao thức SSH (port 22) để quản lý VPS của bạn. Nhưng bạn có biết dịch vụ SSH mặc định có thể mở ra một số lổ hổng rất nguy hiểm để hacker tấn công hay không. Cuộc tấn công thường thấy nhất đó là tấn công kiểu “Brute Force“, dò tìm mật khẩu SSH của user trên VPS/Cloud Server liên tục và tự động hoàn toàn.

Chính vì thế, hôm nay chúng ta sẽ học cách cài đặt một chương trình có thể hạn chế cuộc tấn công “Brute Force” vào dịch vụ SSH. Đó chính là chương trình dịch vụ “Fail2ban“, bài viết bao gồm hướng dẫn cài đặt và cấu hình Fail2ban bảo vệ SSH Server.

Cơ chế hoạt động của Fail2ban

Chương trình Fail2ban sẽ chạy nền dịch vụ và quét file log được chỉ định bởi người dùng hoặc sử dụng mẫu cấu hình mặc định. Sau đó Fail2ban sẽ sử dụng các khuôn mẫu mà Fail2ban quy định để lọc và trích xuất các thông tin cần thiết. Từ những thông tin đó mà Fail2ban sẽ quyết định khoá truy cập IP đang thực hiện hoạt động đáng ngờ, như đăng nhập SSH sai mật khẩu quá nhiều lần,…

Về cơ bản thì Fail2ban sẽ tạo ra bộ rule tường lửa iptables để chặn truy cập từ địa chỉ IP đã xác định trong 1 khoảng thời gian nhất định. Như vậy Fail2ban có khả năng giảm thiểu rất nhiều số hoạt động đăng nhập không chính xác vào dịch vụ hệ thống.

Đọc thêm bài : 13 cách bảo vệ dịch vụ SSH trên Linux

Lưu ý:
– Fail2ban không khuyến khích hoạt động với các chương trình tường lửa khác như CSF, vì sẽ xung đột hoạt động điều khiển tường lửa ‘iptables‘.
– Fail2ban chỉ là dịch vụ chạy nền và tương tác với các rule tường lửa ‘iptables’ qua các cấu hình được chỉ định bởi người dùng.
– Fail2ban không thể giải quyết vấn đề về mật khẩu yếu, không đủ mạnh hay phức tạp để thoát khỏi cuộc tấn công Brute Force.
– Trang chủ Fail2ban : http://www.fail2ban.org/wiki/index.php/Main_Page

1. Cài đặt chương trình Fail2ban

Chương trình Fail2ban không có sẵn trên Repo gốc của CentOS, mà bạn có thể cài đặt chương trình qua Repo EPEL . Vậy chúng ta sẽ cài đặt chương trình Repository EPEL trên CentOS 7 trước.

# yum install -y epel-release

Sau đó tiến hành cài đặt gói ‘Fail2ban‘ bằng ‘yum‘.

# yum install -y fail2ban

2. Tiến hành cấu hình chương trình Fail2ban

Bạn đã cài đặt xong Fail2ban, thì hãy mở file cấu hình các giá trị toàn cục (global config) của Fail2ban để xem các thông số mặc định như sau :

# nano /etc/fail2ban/jail.conf

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1

# "bantime" is the number of seconds that a host is banned.
bantime = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 3

 
Giải thích cấu hình
:
ignoreip: danh sách các địa chỉ IP mà chúng ta không muốn bị khoá truy cập, có thể coi đây là 1 whitelist địa chỉ IP.
bantime: khoảng thời gian (giây) mà Fail2ban sẽ khoá truy cập từ địa chỉ (block) IP.
findtime: khoảng thời gian (giây) một IP phải login thành công.
maxretry: số lần login thất bại tối đa

Nhìn chung thì cấu hình toàn cục của Fail2Ban thì ổn rồi, chúng ta không cần thiết phải cập nhật lại nội dung file này. Giờ điều chúng ta cần làm đó là tạo file cấu hình với nội dung chỉ định cho việc bảo vệ dịch vụ SSH trên VPS/Cloud Server với nội dung như dưới.

# vi /etc/fail2ban/jail.local
[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=22, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=fail2ban@lab.cuongquach.com]
logpath = /var/log/secure
maxretry = 5
bantime = 3600

 
Giải thích cấu hình
:
enabled : kích hoạt chức năng cho phép Fail2ban bảo vệ dịch vụ được cấu hình trong section [ssh-iptables]. Bạn có thể tắt phần cấu hình 1 section bằng giá trị “false”.
filter : bạn có thể tìm thấy tên của các mẫu file quy chuẩn hoạt động filter riêng của Fail2ban được cấu hình sẵn trong thư mục ‘/etc/fail2ban/filter.d/*‘. Ta sử dụng tên ‘ssh’, vì nó là alias name tương ứng file ‘/etc/fail2ban/filter.d/sshd.conf‘, nếu file này không tồn tại thì hoạt động bảo vệ port SSH sẽ không hoạt động.
action :
-+ fail2ban sẽ ban địa chỉ IP nếu thông tin lọc khớp với khuôn mẫu trong file ‘/etc/fail2ban/filter.d/sshd.conf‘, các hành vi ban địa chỉ IP được quy định tại ‘/etc/fail2ban/action.d/iptables.conf‘ .
-+ Nếu bạn sử dụng một port khác cho dịch vụ SSH lắng nghe trên server thì bạn có thể phải chỉ định lại thông tin ‘port=<port_number>‘ trong phần cấu hình.
-+ Nếu bạn có địa chỉ mail, thì Fail2ban sẽ gửi email đến cho bạn khi địa chỉ IP bị ban. Bạn cũng nên lưu ý, việc gởi mail thành công hay không phụ thuộc nhiều vào dịch vụ MTA mặc định của hệ thống.
logpath : đường dẫn file log Fail2ban sử dụng để lọc liên tục các thông báo đăng nhập sai.
maxretry : số lần login thất bại tối đa cho phép.
bantime : thời gian khoá truy cập từ IP đăng nhập sai quá số lần ‘maxretry’. 3600 giây = 1 giờ. Bạn có thể thay đổi giá trị theo mong muốn. `

3. Khởi động dịch vụ Fail2ban

Bạn tiến hành khởi động dịch vụ Fail2ban lên và cấu hình cho dịch vụ Fail2ban sẽ khởi động cùng hệ thống OS khi reboot.

+ CentOS 6

# service fail2ban start
# chkconfig --level 23 fail2ban on

+ CentOS 7

# systemctl start fail2ban
# systemctl enable fail2ban

Ta có thể kiểm tra thử xem dịch vụ tường lửa ‘iptables‘ đã có bộ rule mà Fail2ban đã áp lên iptables để sử dụng chưa. Kể từ lúc này bạn có thể để dịch vụ Fail2ban hoạt động ngầm và bảo vệ bạn khỏi các cuộc tấn công SSH Brute Force.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
f2b-SSH    tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
f2b-NoAuthFailures  tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:2233 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain f2b-NoAuthFailures (1 references)
target     prot opt source               destination         

Chain f2b-SSH (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

4. Lệnh quản lý fail2ban

Bạn muốn biết là đã có IP nào bị banned bởi chương trình Fail2ban chưa thì có thể sử dụng lệnh sau. Output lệnh dưới hiển thị hiện có 1 địa chỉ IP đang bị banned. :

# fail2ban-client status ssh-iptables

Status for the jail: ssh-iptables
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- File list: /var/log/secure
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 123.231.112.221

Còn nếu giờ bạn muốn xóa địa chỉ IP khỏi danh sách banned, bạn có thể dùng lệnh sau:

# fail2ban-client set ssh-iptables unbanip 123.231.112.221

Như vậy bạn đã có thể tự thực hiện cài đặt và cấu hình Fail2ban để bảo vệ SSH khỏi các cuộc tấn công Brute Force vào hệ thống VPS/Cloud Server rồi. Chúc các bạn thành công.

Quách Chí Cường (Theo VINADATA – CLOUD SERVER/CDN )

Previous article13 cách cấu hình bảo mật SSH Server trên Linux
Next articleSự kiện “Giới thiệu dịch vụ điện toán đám mây trên nền tảng công nghệ Microsoft” – (HCM-14/06/2017)
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !