Cách chặn Brute Force SSH bằng DenyHosts

DenyHosts là phần mềm mã nguồn mở giúp chặn các cuộc tấn công vét cạn – brute force đăng nhập bằng SSH giúp bảo vệ an toàn Server Linux của bạn hơn. Đây là Tool  khá nhẹ và sử dụng rất đơn giản, chỉ cần vượt quá số lần đăng nhập sai, IP đó sẽ bị chặn không thể dò Key, Passoword SSH được nửa.

Chặn các cuộc tấn công máy chủ SSH (Brute Force Attacks) bằng DenyHosts

DenyHosts theo dõi và phân tích Log của SSH để tìm các đăng nhập sai, các cuộc tấn công dựa trên dictionary và các cuộc tấn công brute force bằng cách chặn các địa chỉ IP gốc và thêm entry vào tệp /etc/hosts.deny trên máy chủ và ngăn chặn địa chỉ IP khỏi thực hiện thêm bất kỳ nỗ lực đăng nhập nào như vậy.

DenyHosts là công cụ rất cần thiết cho tất cả các hệ thống dựa trên Linux, đặc biệt khi chúng ta cho phép đăng nhập ssh vào các máy chủ Linux từ xa.

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt và cấu hình DenyHosts trên các bản phân phối Linux dựa trên RHEL như Fedora, CentOS, Rocky Linux và AlmaLinux.

Cách cài đặt DenyHosts trong Linux

Theo mặc định, công cụ DenyHosts không được tích hợp sẵn trong hệ thống Linux, chúng ta cần cài đặt nó bằng cách sử dụng kho lưu trữ EPEL của bên thứ ba. Sau khi thêm kho lưu trữ, hãy cài đặt gói DenyHosts bằng lệnh yum sau.

# yum install epel-release
# yum install denyhosts

Cấu hình DenyHosts cho các địa chỉ IP trong Whitelist

Sau khi cài đặt Denyhosts, hãy đảm bảo đưa địa chỉ IP của chính bạn vào whitelist, để không bao giờ bị chặn. Để thực hiện việc này, hãy mở tệp /etc/hosts.allow.

# vi /etc/hosts.allow

Bên dưới mô tả, hãy thêm từng địa chỉ IP vào một dòng riêng biệt mà bạn không muốn chặn.

#
# hosts.allow   This file contains access rules which are used to
#               allow or deny connections to network services that
#               either use the tcp_wrappers library or that have been
#               started through a tcp_wrappers-enabled xinetd.
#
#               See 'man 5 hosts_options' and 'man 5 hosts_access'
#               for information on rule syntax.
#               See 'man tcpd' for information on tcp_wrappers
#
sshd: 172.16.25.125
sshd: 172.16.25.126
sshd: 172.16.25.127

Cấu hình DenyHosts cho các cảnh báo qua email

Tệp cấu hình chính nằm trong /etc/denyhosts.conf. Tệp này được sử dụng để gửi thông báo qua email về các thông tin đăng nhập bị nghi ngờ. Mở tệp này bằng trình chỉnh sửa vi.

# vi /etc/denyhosts.conf

Tìm dòng ‘ADMIN_EMAIL‘ và thêm địa chỉ email của bạn tại đây để nhận thông báo qua email về thông tin đăng nhập đáng ngờ (đối với nhiều email, hãy sử dụng dấu phẩy). Mỗi biến đều được ghi chép đầy đủ vì vậy hãy định cấu hình nó theo ý của bạn.

############ DENYHOSTS REQUIRED SETTINGS ############
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
BLOCK_SERVICE  = sshd
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 1
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/lock/subsys/denyhosts

############ DENYHOSTS OPTIONAL SETTINGS ############
ADMIN_EMAIL = ravisaive@tecmint.com
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <tecmint@tecmint.com>
SMTP_SUBJECT = DenyHosts Daily Report

############ DENYHOSTS OPTIONAL SETTINGS ############
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h

Khởi động lại dịch vụ DenyHosts

Khi bạn đã hoàn tất cấu hình, hãy khởi động lại denyhosts. Chúng ta cũng thêm denyhosts vào startup.

# chkconfig denyhosts on
# service denyhosts start

Xem nhật ký DenyHosts

Để xem nhật ký denyhosts có bao nhiêu kẻ tấn công và tin tặc đang cố gắng truy cập vào máy chủ của bạn. Hãy sử dụng lệnh sau:

# tail -f /var/log/secure
Nov 28 15:01:43 tecmint sshd[25474]: Accepted password for root from 172.16.25.125 port 4339 ssh2
Nov 28 15:01:43 tecmint sshd[25474]: pam_unix(sshd:session): session opened for user root by (uid=0)
Nov 28 16:44:09 tecmint sshd[25474]: pam_unix(sshd:session): session closed for user root
Nov 29 11:08:56 tecmint sshd[31669]: Accepted password for root from 172.16.25.125 port 2957 ssh2
Nov 29 11:08:56 tecmint sshd[31669]: pam_unix(sshd:session): session opened for user root by (uid=0)
Nov 29 11:12:00 tecmint atd[3417]: pam_unix(atd:session): session opened for user root by (uid=0)
Nov 29 11:12:00 tecmint atd[3417]: pam_unix(atd:session): session closed for user root
Nov 29 11:26:42 tecmint sshd[31669]: pam_unix(sshd:session): session closed for user root
Nov 29 12:54:17 tecmint sshd[7480]: Accepted password for root from 172.16.25.125 port 1787 ssh2

Xóa địa chỉ IP bị chặn khỏi DenyHosts

Nếu bạn muốn xóa địa chỉ IP bị chặn đó khỏi denyhosts. Bạn cần phải dừng công cụ.

# /etc/init.d/denyhosts stop

Để loại bỏ hoặc xóa hoàn toàn địa chỉ IP bị chặn. Bạn cần chỉnh sửa các tệp sau và xóa địa chỉ IP.

# vi /etc/hosts.deny
# vi /var/lib/denyhosts/hosts
# vi /var/lib/denyhosts/hosts-restricted
# vi /var/lib/denyhosts/hosts-root
# vi /var/lib/denyhosts/hosts-valid
# vi /var/lib/denyhosts/users-hosts

Sau khi xóa địa chỉ IP bị chặn, hãy khởi động lại dịch vụ.

# /etc/init.d/denyhosts start

Địa chỉ IP vi phạm đã được thêm vào tất cả các tệp trong thư mục /var/lib/denyhosts, vì vậy rất khó xác định tệp nào chứa địa chỉ IP vi phạm. Một trong những cách tốt nhất để tìm ra địa chỉ IP là sử dụng lệnh grep. Ví dụ để tìm ra địa chỉ IP 172.16.25.125:

cd /var/lib/denyhosts
grep 172.16.25.125 *

Whitelist địa chỉ IP vĩnh viễn trong DenyHosts

Nếu bạn có danh sách địa chỉ IP tĩnh muốn đưa vào whitelist vĩnh viễn. Hãy mở tệp  /var/lib/denyhosts/allowed-hosts. Bất kỳ địa chỉ IP nào có trong tệp này sẽ không bị chặn theo mặc định.

# vi /var/lib/denyhosts/allowed-hosts

Và thêm từng địa chỉ IP trên từng dòng riêng biệt. Sau đó lưu và đóng tập tin.

# We mustn't block localhost
127.0.0.1
172.16.25.125
172.16.25.126
172.16.25.127
Previous Post Next Post