Để kết nối với VPS chúng ta thường sử dụng port 22. Đây chính là lỗ hổng chết người các hacker có thể sử dụng để dò tìm password đăng nhập vào VPS của bạn.

Một biện pháp hạn chế việc này đó là thay đổi port SSH từ 22 sang một port khác (HocVPS Script đã tự động đổi sang port 2222 khi cài đặt). Tuy nhiên, việc này chỉ hạn chế một chút thôi vì nếu muốn, hacker có thể scan open port để biết được bạn đang sử dụng port nào để tấn công tiếp.

Giải pháp để chúng ta chấm dứt vấn đề này đó là sử dụng một công cụ tự động block IP khi VPS bị tấn công, đó là Fail2Ban. Hôm nay, mình sẽ giới thiệu cách hướng dẫn và cài đặt trong bài này.

Fail2Ban là một ứng dụng chạy nền theo dõi log file để phát hiện những địa chỉ IP đăng nhập sai password SSH nhiều lần. Sau đó, Fail2Ban sử dụng iptable firewall rules để block ngay địa chỉ IP với một khoảng thời gian định trước.

HocVPS Script đặt vấn đề bảo mật và sự đơn giản lên hàng đầu, do đó khi sử dụng bạn không cần phải quan tâm gì nữa nhé. Yên tâm phát triển website thôi.

Cài đặt Fail2Ban

Chúng ta sẽ cài đặt Fail2Ban thông qua Repo EPEL

yum install epel-release
yum install fail2ban

Cấu hình Fail2Ban

Sau khi cài đặt xong, bạn mở file cấu hình của Fail2Ban lên sẽ thấy một số thông số 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

Trong đó

  • ignoreip: không block những địa chỉ này, thường địa chỉ IP ở VN là địa chỉ động, nên chúng ta không sử dụng được option này.
  • bantime: khoảng thời gian (giây) 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 false tối đa

Cấu hình mặc định của Fail2Ban khá là ổn rồi, chúng ta không cần thiết phải cập nhật mà đến bước tiếp theo.

Cấu hình Fail2Ban bảo vệ SSH

Tạo file cấu hình

nano /etc/fail2ban/jail.local

Và sử dụng nội dung sau:

[sshd]

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

Trong đó

  • enabled: kích hoạt bảo vệ, nếu muốn tắt bạn hãy chuyển thành false
  • filter: giữ mặc định để sử dụng file cấu hình /etc/fail2ban/filter.d/sshd.conf
  • action: fail2ban sẽ ban địa chỉ IP nếu match filter /etc/fail2ban/action.d/iptables.conf. Nếu bạn đã thay đổi port ssh, sửa đoạn port=ssh bằng port mới, ví dụ port=2222
  • logpath: đường dẫn file log fail2ban sử dụng để theo dõi
  • maxretry: số lần login false tối đa
  • bantime: thời gian ban IP 3600 giây = 1 giờ, bạn có thể điều chỉnh lại nếu muốn

Khởi động Service Fail2Ban

chkconfig --level 23 fail2ban on
service fail2ban start

Cuối cùng check lại iptables xem đã có rule của Fail2Ban chưa:

iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-SSH tcp -- anywhere anywhere tcp dpt:EtherNet/IP-1

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain f2b-SSH (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Theo dõi SSH login

– Bạn có thể sử dụng lệnh sau để biết được VPS/Server đã từng bị tấn công SSH chưa:

cat /var/log/secure | grep 'Failed password' | sort | uniq -c

Kết quả thường sẽ là như bên dưới, đã từng có rất nhiều đợt tấn công:

 1 Aug 19 14:18:42 vultr sshd[24424]: Failed password for root from 61.160.223.66 port 1283 ssh2
 1 Aug 19 14:18:45 vultr sshd[24424]: Failed password for root from 61.160.223.66 port 1283 ssh2
 1 Aug 19 14:18:47 vultr sshd[24424]: Failed password for root from 61.160.223.66 port 1283 ssh2
 1 Aug 19 14:18:57 vultr sshd[24426]: Failed password for root from 61.160.223.66 port 1388 ssh2
 1 Aug 19 14:18:59 vultr sshd[24426]: Failed password for root from 61.160.223.66 port 1388 ssh2
 1 Aug 19 14:19:02 vultr sshd[24426]: Failed password for root from 61.160.223.66 port 1388 ssh2
 1 Aug 19 14:19:03 vultr sshd[24426]: Failed password for root from 61.160.223.66 port 1388 ssh2
 1 Aug 19 14:19:05 vultr sshd[24426]: Failed password for root from 61.160.223.66 port 1388 ssh2
 1 Aug 19 14:19:08 vultr sshd[24485]: Failed password for root from 61.160.223.66 port 1536 ssh2
 1 Aug 19 14:19:10 vultr sshd[24485]: Failed password for root from 61.160.223.66 port 1536 ssh2
 1 Aug 19 14:19:12 vultr sshd[24485]: Failed password for root from 61.160.223.66 port 1536 ssh2
 1 Aug 19 14:19:14 vultr sshd[24485]: Failed password for root from 61.160.223.66 port 1536 ssh2
 1 Aug 19 14:19:16 vultr sshd[24485]: Failed password for root from 61.160.223.66 port 1536 ssh2
 1 Aug 19 14:19:29 vultr sshd[24490]: Failed password for root from 61.160.223.66 port 1629 ssh2
 1 Aug 19 14:19:31 vultr sshd[24490]: Failed password for root from 61.160.223.66 port 1629 ssh2
 1 Aug 19 14:19:34 vultr sshd[24490]: Failed password for root from 61.160.223.66 port 1629 ssh2
 1 Aug 19 14:19:36 vultr sshd[24490]: Failed password for root from 61.160.223.66 port 1629 ssh2
 1 Aug 19 14:19:38 vultr sshd[24490]: Failed password for root from 61.160.223.66 port 1629 ssh2

– Để xem IP đã bị banned bởi Fail2Ban bạn sử dụng lệnh:

fail2ban-client status sshd

Output trả về sẽ có dạng như thế này:

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

– Để xóa IP khỏi danh sách banned, bạn sử dụng lệnh sau

fail2ban-client set sshd unbanip 103.207.68.41

Hi vọng với Fail2Ban, chúng ta sẽ không còn thấy thông báo login false mỗi lần login SSH nữa.

Mọi thông tin chi tiết, hãy tham khảo thêm trên trang chủ của Fail2Ban. Chúc bạn thành công.

Nếu bạn sử dụng dịch vụ cài đặt VPS của Học VPS, sẽ được tự động cấu hình bảo mật VPS rồi nhé.

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

143 Comments

  1. bé heo 4 comment

    Nếu cài thêm Firewalld thì đoạn code này thêm hàm action thế nào để nó bảo vệ luôn Firewalld thế ad

    [sshd]

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

  2. Tran 2 comment

    Check lại iptables xem đã có rule của Fail2Ban chưa: Thì output báo không có rule của f2b thì phải làm sao adm ơi?

  3. Pham Hong Vi 48 comment

    đã cài fail2ban mà mỗi ngày vẫn thấy hơn 200 lần login fail. check fail2ban-client status sshd
    thì thấy nó band có 3 ip @@

  4. Minh Dũng 1 comment

    Mình nhập lệnh:
    “fail2ban-client status sshd”
    Thì nhận thông báo này:
    “fail2ban [1865]: ERROR NOK: (‘sshd’,)
    Sorry but the jail ‘sshd’ does not exist”
    Admin xem giúp mình được không?

    1. Tommy 36 comment

      Bạn sửa dòng lệnh bằng dòng này sẽ xem được nhé
      fail2ban-client status sshd

  5. Tô Triều 1 comment

    Website của mình đang bị tấn công vào Cron làm cpu lúc nàoo cũng 200%.

    Check thì lúc nào nó cũng tấn công kèm query string này:
    ?doing_wp_cron=1607962588.7466139793395996093750

  6. tuấn 1 comment

    danh sách ban có hiệu lực trong vòng 1 tiếng đúng k b? hình như mình nhập sai nhiều quá nên nó ban luôn cả static.vnpt.vn (mình dùng máy ở nhà, mạng vnpt connect). không biết nó tự unban sau 1 tiếng không. mình có dùng unbanip rồi mà chỉ ip thôi thì chưa đủ, vẫn không connect được

  7. viet an 12 comment

    File fail2ban của mình nặng quá tận 2gb, có cách nào giảm dung lượng dc ko bạn?

      1. Việt An 12 comment

        nó hiện lên thế này bạn
        8.6G /
        3.6G /var
        3.1G /var/lib
        2.0G /var/lib/fail2ban
        1.9G /home
        1.8G /usr
        1.1G /swapfile
        1012M /var/lib/fail2ban/fail2ban.sqlite3.20200806-071358
        1012M /var/lib/fail2ban/fail2ban.sqlite3.20200806-070935
        942M /var/lib/mysql
        835M /usr/lib
        483M /usr/lib/firmware
        352M /usr/share
        339M /usr/lib64
        325M /var/log

        làm sao để giảm đi hả bạn

  8. Kami 5 comment

    vậy khi IP của chính mình bị ban thì phải chờ bao lâu mới login vào đc?
    Hocvps block Ip thời gian bao lâu vậy?

    1. Việt Phương Moderator

      3 tiếng bạn à. Bạn truy cập qua remote của nhà cung cấp hoặc reset modem là đổi được IP

  9. Hải Nam 3 comment

    Việt Phương cho mình hỏi sao website của mình khi mở 4G hoặc Fake IP thì truy cập vào được nhưng khi sử dụng mạng wifi bình thường thì không được mặc dù đã reset lại modem wifi và thấy IP mạng có thay đổi. Cảm ơn Bạn

  10. haodv 22 comment

    Mình cài đặt hocvps lên VPS, nhưng giờ login bằng ZOC Terminal, ko vào được, khả năng là bị block IP rồi. Hocvps block Ip thời gian bao lâu vậy ad ơi

  11. Binh Nguyen 86 comment

    Status for the jail: sshd
    |- Filter
    | |- Currently failed: 0
    | |- Total failed: 1671
    | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    `- Actions
    |- Currently banned: 4
    |- Total banned: 442
    `- Banned IP list: 36.89.209.22 138.197.105.79 3.92.255.1 106.12.91.102

  12. Tinhtiennet 23 comment

    Không hiểu sao mới vừa đăng ký server là có tấn công liền. Ngoài cách đổi port ssh ra. Mình không cho ping thấy ip server luôn. Mà sao thỉnh thoảng vẫn thấy báo login shh faild. Sao hacker biết ip mình còn mà tấn công vậy ad?

    1. Việt Phương Moderator

      Vẫn có tấn công dò IP. Ví dụ mình từng đọc thấy việc dò dãy IP của Vultr để tấn công, chỉ chờ 1 con sơ hở 🙂

    2. D 11 comment

      Bác đổi port, dùng đăng nhập bằng public key, chỉnh fail2ban maxretry = 1, banaction = iptables-allports
      Check IP thì toàn thấy OVH, DO, Vultr, nhiều lúc mới tạo VPS để mặc định chưa cài gì, hôm sau bị khóa vì băng thông vài TB, khó hiểu thật brute force hay ping to death thì làm sao mà mấy TB được nhỉ?

  13. Quang Anh 21 comment

    Mình đang bị báo lạm dụng, bạn nào hiểu cách gỡ giúp mình với

    Dear Sir/Madam,
    We have detected abuse from the IP address 45.77.130.189, which according to a whois lookup is on your network. We would appreciate if you would investigate and take action as appropriate.
    Log lines are given below, but please ask if you require any further information.
    (If you are not the correct person to contact about this please accept our apologies – your e-mail address was extracted from the whois record by an automated process. This mail was generated by Fail2Ban.)
    Note: Local timezone is -0400 (EDT)
    45.77.130.189 – – [17/Apr/2019:07:56:43 -0400] “GET /wp-login.php HTTP/1.1” 200 3630 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:07:56:55 -0400] “POST /wp-login.php HTTP/1.1” 200 4601 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:08:27:18 -0400] “GET /wp-login.php HTTP/1.1” 200 2594 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:08:27:19 -0400] “POST /wp-login.php HTTP/1.1” 200 3573 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:08:27:20 -0400] “GET /wp-login.php HTTP/1.1” 200 2594 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:08:27:21 -0400] “POST /wp-login.php HTTP/1.1” 200 3610 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:08:27:21 -0400] “GET /wp-login.php HTTP/1.1” 200 2594 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”
    45.77.130.189 – – [17/Apr/2019:08:27:22 -0400] “POST /wp-login.php HTTP/1.1” 200 3604 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0”

    1. Việt Phương Moderator

      Hiện tại VPS bạn nằm trong danh sách IP lạm dụng. Do server đối phương dùng Fail2Ban nên họ sẽ tự phát hiện được vấn đề này và gửi mail báo về bạn. Bạn kiểm tra lại VPS xem có code ẩn hay script gì đi tấn công bên ngoài không nhé.