Để 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. Thạch 1 comment

    Mình cài thành công nhưng khi test mình cố ý nhập sai trên 5 lần nhưng sao không cấm IP của mình nhỉ ? Mong Bác nào chỉ giáo e sai ở đâu được không ạ, Thanks

  2. hainguyen 6 comment

    ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    f2b-NoAuthFailures tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    f2b-SSH tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
    ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    f2b-NoAuthFailures tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    f2b-SSH tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
    ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    f2b-NoAuthFailures tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051
    f2b-SSH tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
    ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
    ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:8051

    không hiểu sao cài hocvps rồi tới Letcrypt thì filemanager không vào được nữa

    check fail2ban thì thấy NoAuthFailures, cố accept mà vẫn ko run lại đc filemanager

    admin help với

        1. Việt Phương Moderator

          Nếu thế thì không có liên quan gì đến HocVPS Admin
          Thế bạn cung cấp toàn bộ Nginx Conf trong /etc/nginx/conf.d

          1. hainguyen 6 comment

            default.conf empty file,
            domain của mình là domain chính và vps cũng chỉ có 1 mình nó,

          2. Việt Phương Moderator

            Nếu bạn cài domain chính thì sao lại bỏ phần Admin HocVPS? Vừa cmt trc bạn bảo bỏ phần này nên mình mới nghĩ là có nhiều hơn 1 domain trong VPS

          3. hainguyen 6 comment

            ah theo hướng dẫn thì để dùng biểu tượng đám mây màu vàng của Cloudflare thì đã làm như vậy,

            _ Để kết hợp sử dụng CDN Cloudflare (biểu tượng đám mây vàng):

            Thiết lập Full (strict) trong menu Crypto SSL tại trang quản lý Cloudflare.
            Không cấu hình SSL phần Admin HocVPS. Khi đó, truy cập HocVPS Admin bằng ip:port
            Không thể gia hạn tự động SSL Let’s Encrypt. Gia hạn thủ công 3 tháng 1 lần.

            Phải chăng đó là lỗi do nó, giúp mình giải quyết nếu có thể,
            Cảm ơn Phương

          4. Việt Phương Moderator

            Tốt nhất, như đã nói, bạn cung cấp Nginx Conf của website đã cài đặt. Chứ mô tả cách làm thì khác gì bài hướng dãn đâu
            Và bạn truy cập HocVPS Admin qua ip hay domain?

          5. hainguyen 6 comment

            https://www.dropbox.com/s/xd79ebqlkzmxixa/config.txt?dl=0

            Toàn bộ config đây Phương ơi, xin phép replace cái domain name vì không được phù hợp thuần phong mỹ tục và thông lệ quốc tế 😀

            Và bạn truy cập HocVPS Admin qua ip hay domain?
            ~~~~> Cả 2 đều không được.

            nó bị f2b-NoAuthFailures sau khi add ACCEPT 🙁

          6. Việt Phương Moderator

            Thiếu phần HocVPS Admin rồi. Trong bài viết mình ghi là không cấu hình tức là để nguyên nó, không làm gì chứ không phải là xóa nó đi 🙁

  3. Kiên 21 comment

    Chào bạn, tôi muốn thêm một dãy địa chỉ ip vào danh sách trắng của file2ban thì làm thế nào nhỉ.

    192.88.134.0/23
    185.93.228.0/22
    2a02:fe80::/29
    66.248.200.0/22

    Thank you !

    1. Việt Phương Moderator

      Bạn thêm vào dòng ignoreip trong /etc/fail2ban/jail.conf nhé. Ví dụ
      ignoreip = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

  4. Binh Nguyen 87 comment

    |- Filter
    | |- Currently failed: 1
    | |- Total failed: 2747
    | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    `- Actions
    |- Currently banned: 3
    |- Total banned: 530
    `- Banned IP list: 118.97.213.118 118.193.234.101 164.160.28.20

    Nhìn sợ thật và cuối cùng bị đỏi info wp-config 🙁

    1. Việt Phương Moderator

      Nếu bạn không quá cần truy cập ở nhiều nơi thì khóa hẳn SSH Password, chỉ đăng nhập qua SSH Key thì không lo gì SSH Brute Attack

      1. Binh Nguyen 87 comment

        Nếu mình khóa SSH Password xài SSH Key nếu sau này cần thì vẫn mở lại xài được SSH Password được phải k?

        1. Việt Phương Moderator

          Được bạn, chỉ là 1 thiết lập trong SSHD thôi. Cơ mà phải truy cập vào đc VPS mới khóa/mở nhé chứ không thực hiện từ ngoài đc đâu

  5. Binh Nguyen 87 comment

    Sao phần Banned IP list không thấy ghi ip ta?

    Status for the jail: sshd
    |- Filter
    | |- Currently failed: 0
    | |- Total failed: 1856
    | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    `- Actions
    |- Currently banned: 0
    |- Total banned: 338
    `- Banned IP list:

  6. Binh Nguyen 87 comment

    Cho mình hỏi chút: Mình dùng lệnh “cat /var/log/secure | grep ‘Failed password’ | sort | uniq -c” check thì thấy 1 đống list ip của bọn china 120.209.139.68 và sao khi dùng lệnh “fail2ban-client status sshd” thì k thấy IP đã bị banned nào bởi Fail2Ban hết:
    Status for the jail: sshd
    |- Filter
    | |- Currently failed: 0
    | |- Total failed: 0
    | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    `- Actions
    |- Currently banned: 0
    |- Total banned: 0
    `- Banned IP list:

    1. Việt Phương Moderator

      Có thiết lập hết mà bạn. Sai Y lần thì ban. Tự động gỡ ban sau X giờ
      Và bạn đọc log từ /var/log/secure là toàn bộ truy cập SSH, bất kể cổng nào. Ví dụ attacker cố tấn công dò pass SSH cổng 1234 và cổng ý không phải cổng SSH thì Fail2Ban cũng k cần chặn làm gì. Chỉ chặn truy cập vào cổng SSH đang dùng

  7. Trất Minh 38 comment

    Mình có thắc mắc là F2B thì dùng rule của iptable, mà nếu như mình sử dụng CentOS 7 và chạy Hocvps script thì sẽ dùng Firewall ID (không dùng iptable nữa). Vậy thì trên CentOS 7, F2B vẫn hoạt động đc chứ ad?

    1. Việt Phương Moderator

      Hiện tại HocVPS đã quay trở lại sử dụng Iptables trên CentOS7 bạn nhé.

  8. tung 26 comment

    Bác Luân cho em hỏi nhờ với.
    Cái centos 7 của em đã có firewalld, vậy có cần phải cài thêm phần mềm Fail2ban nữa ko ạ
    Mong hồi âm sớm của bác

    1. Việt Phương Moderator

      2 rule ví dụ trong bài là Fail2Ban kết hợp cùng Iptables nên nếu bạn dùng FirewallD mình nghĩ rule không tương thích

  9. Nam 6 comment

    Mình chạy lệnh này trên SSH : fail2ban-client status ssh-iptables

    thì báo lỗi :
    [root@51-xx-xxx-xxx home]# Sorry but the jail ‘ssh-iptables’ does not exist
    bash: Sorry: command not found…

    IP của mình bị block và mình muốn gỡ IP đó ra 😀 . giờ phải đăng nhập từ máy khác . lỗi này là ntn vậy ad

  10. Gà Con 13 comment

    Hello , Em bị block khi vào website nhưng vào bằng ip us hay eu thì vẫn bình thường . Check trên fail2ban thì ko thấy xuất hiện ip . Các bác cho em xin cách khắc phục với ạ

    1. Việt Phương Moderator

      Website bạn là gì? Có thể bạn dùng module chặn theo quốc gia. Và bạn stop fail2ban xem ntn. kiểm tra cả rule bên iptables

  11. Hien Thanh 1 comment

    Mình không dùng F2B mà cấu hình thẳng iptables ntn:

    # iptables -I INPUT -p tcp –dport 22 -i eth0 -m state –state NEW -m recent –set
    # iptables -I INPUT -p tcp –dport 22 -i eth0 -m state –state NEW -m recent –update –seconds 60 –hitcount 4 -j DROP

    Đến nay vẫn hoạt động bình thường, kiểm tra ssh hết bị attack, mình có cần phải cấu hình thêm F2B ko?

    1. Việt Phương Moderator

      Tùy nhu cầu của bạn thôi, cấu hình iptables trên của bạn chắc là 4 lần fail?

  12. V An. 8 comment

    Hocvps script có được tự động cài đặt chức năng này hay không bạn nhỉ? Hay là nếu mình muốn thì mới cài thêm vào?

  13. 52 comment

    Ad có hướng dẫn ban Ip 1 số nước không ad ơi 🙂 ban hết ip mấy nước đi cho khỏi bị tấn công

  14. tncong 28 comment

    Sao chúng nó cứ dò vps mình nhiều thế nhỉ, hôm nào cũng đăng nhập vào vps mà cứ thấy báo vài chục lần loggin fail là thấy sợ sợ sao đó 🙁

    Status for the jail: ssh-iptables
    |- Filter
    | |- Currently failed: 1
    | |- Total failed: 1591
    | `- File list: /var/log/secure
    `- Actions
    |- Currently banned: 20
    |- Total banned: 432
    `- Banned IP list: ………….

    1. Việt Phương Moderator

      Fail2Ban vẫn hoạt động tốt mà, giúp bạn ban đến 432 còn gì 🙂 Còn bạn e ngại thì có thể dùng SSH Keys, disable luôn đăng nhập sử dụng password

  15. tncong 28 comment

    file cấu hình fail2ban của hocvps script ở đường dẫn nào thế, mình muốn chỉnh block từ 1 tiếng lên tận 3 ngày 🙁 tự nhiên bị dò pass nhiều quá

      1. tncong 28 comment

        Thank bác Phương, cho e hỏi thêm là sửa xong thì dùng lệnh gì để có hiệu lực ạ? Stop rồi start hay dùng mỗi lệnh reload ạ?

  16. kinh 16 comment

    cho mình hỏi, h bị chính fail2ban ngăn ko cho đăng nhập SSH của mình thì mình phải làm sao ạ. xin cám ơn.

    1. Việt Phương Moderator

      Bạn chờ 1 giờ hoặc vào VPS terminal qua web console trên trang quản lý VPS (nếu NCC VPS có hỗ trợ chức năng này)

  17. HUY NGUYỄN 1 comment

    Mình bật iptables và fail2ban lên nhưng chỉ connect đc port 22, các services http mysql đều không hoạt động. Nếu mình tắt iptables thì hoạt động bình thường.
    Giúp mình với.

    1. Việt Phương Moderator

      Mình nghĩ iptables bạn đã block các port của service khác, enable mỗi port SSH 22. Bạn có thể check iptables -L để biết các port enable/disable. Hướng dẫn qua bài viết này : https://hocvps.com/iptables/

    1. Việt Phương Moderator

      Bạn kiểm tra Log của Fail2Ban tại /var/log xem log có note về xung đột gì không?

      1. Cong Minh Vuong 22 comment

        Log ghi lại như vậy. Có rất nhiều đoạn giống tương tự như vậy. Hình như sau khi cài CSF nó vô hiệu hóa iptables. Fail2Ban chỉ làm việc với iptables thôi hay sao ý.
        2017-04-18 07:02:25,381 fail2ban.action [26829]: ERROR iptables -w -n -L INPUT | grep -q ‘f2b-SSH[ \t]’ — stdout: ”
        2017-04-18 07:02:25,381 fail2ban.action [26829]: ERROR iptables -w -n -L INPUT | grep -q ‘f2b-SSH[ \t]’ — stderr: ”
        2017-04-18 07:02:25,381 fail2ban.action [26829]: ERROR iptables -w -n -L INPUT | grep -q ‘f2b-SSH[ \t]’ — returned 1
        2017-04-18 07:02:25,382 fail2ban.CommandAction [26829]: ERROR Invariant check failed. Trying to restore a sane environment
        2017-04-18 07:02:25,485 fail2ban.action [26829]: ERROR iptables -w -D INPUT -p tcp –dport 2222 -j f2b-SSH
        iptables -w -F f2b-SSH
        iptables -w -X f2b-SSH — stdout: ”
        2017-04-18 07:02:25,486 fail2ban.action [26829]: ERROR iptables -w -D INPUT -p tcp –dport 2222 -j f2b-SSH
        iptables -w -F f2b-SSH
        iptables -w -X f2b-SSH — stderr: “iptables v1.4.21: Couldn’t load target `f2b-SSH’:No such file or directory\n\nTry `iptables -h’ or ‘iptables –help’ for more information.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\n”
        2017-04-18 07:02:25,486 fail2ban.action [26829]: ERROR iptables -w -D INPUT -p tcp –dport 2222 -j f2b-SSH
        iptables -w -F f2b-SSH
        iptables -w -X f2b-SSH — returned 1
        2017-04-18 07:02:25,486 fail2ban.actions [26829]: ERROR Failed to execute unban jail ‘ssh-iptables’ action ‘iptables’ info ‘{‘matches’: ‘Apr 16 15:57:30 li1638-81 sshd[13683]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=1.180.206.195 user=rootApr 16 15:57:32 li1638-81 sshd[13683]: Failed password for root from 1.180.206.195 port 33885 ssh2Apr 16 15:57:35 li1638-81 sshd[13683]: Failed password for root from 1.180.206.195 port 33885 ssh2Apr 16 15:57:36 li1638-81 sshd[13683]: Failed password for root from 1.180.206.195 port 33885 ssh2Apr 16 15:57:39 li1638-81 sshd[13683]: Failed password for root from 1.180.206.195 port 33885 ssh2Apr 16 15:57:41 li1638-81 sshd[13683]: Failed password for root from 1.180.206.195 port 33885 ssh2’, ‘ip’: ‘1.180.206.195’, ‘time’: 1492472183.912033, ‘failures’: 6}’: Error stopping action

        1. Việt Phương Moderator

          Đúng vậy, Fail2Ban dùng rule bên Iptables bạn nhé. Bên cạnh đó, Iptables được cài đặt mặc định ở các server CentOS nên được sử dụng từ đầu

          1. Việt Phương Moderator

            Mình nghĩ không. Fail2Ban/CSF đều hoạt động dựa trên Iptables. Bạn dùng Fail2Ban thì thôi CSF và ngược lại. Nếu muốn cấu hình sâu/chi tiết, bạn sử dụng CSF nhé. Bên cạnh đó, bạn có dùng Cloudfare không?

          2. Việt Phương Moderator

            1. Bạn dùng CSF hoặc Fail2Ban nhé. Nếu cấu hình sâu thì bạn sử dụng CSF.
            2. Nếu bạn dùng CSF thì phải cho các IP của Cloudfare vào list allow của CSF

  18. Cong Minh Vuong 22 comment

    Góp ý anh em nên set lên 6 lần để tránh bản thân lâu lâu đổi pass quên bấm nhầm vẫn chưa đến mức bị Ban. Tăng thời gian lên 2592000=30day cho tụi nó ra đảo húp cháo. Dạo gần đây căng quá. IP VPS mình không để lộ ra ngoài bao giờ (dùng Cloudflare) thế mà nó vẫn lần ra.

    [ssh-iptables]
    enabled = true
    filter = sshd
    action = iptables[name=SSH, port=2222, protocol=tcp]
    logpath = /var/log/secure
    maxretry = 6
    bantime = 2592000

    [nginx-http-auth]
    enabled = true
    filter = nginx-http-auth
    action = iptables[name=NoAuthFailures, port=2223, protocol=tcp]
    logpath = /home/www.youthhouse.vn/logs/nginx_error.log
    maxretry = 6
    bantime = 2592000

    1. Việt Phương Moderator

      Yeap. Bạn có thể thay đổi tùy chỉnh Fail2Ban phù hợp với nhu cầu. Ngoài ra, bạn sử dụng SSH Keys và Disable Password login là khỏi bị dò SSH luôn

  19. Ngọc Trâm 2 comment

    Anh luân cho em hỏi là em cài đặt xong nhưng không hiện file fail2ban trong filezilla, remove cài lại vẫn không thấy hiện là sao vậy ạ?

      1. Ngọc Trâm 2 comment

        Lần đầu tiên cài thì có, nhưng mình cài sai nên xoá và remove xong cài lại thì k thấy hiện nữa ạ

        1. Việt Phương Moderator

          Bạn hãy xóa Fail2Ban với lệnh #yum remove fail2ban rồi cài đặt lại nhé.

  20. Cedric 2 comment

    Cảm ơn bài viết của bạn. Mình đang tìm hiểu tính năng send email notification khi ban 1 ip cố gắng truy cập SSH. Nhưng vẫn chưa thành công nhờ bạn có thể chia sẽ thêm về phần thiết lập send email notification được không.

    1. Luân Trần Admin

      Thường ít người dùng send mail notification vì như vậy chả mấy chốc mà ngập hòm mail mất. Nếu bạn vẫn muốn, hãy bỏ dấu # trước sendmail-whois và điền email dest, sender nhé.
      Restart lại fail2ban nữa.

  21. Lữ Phú Hòa 17 comment

    Tương tự áp dụng bảo vệ ftpserver luôn nhé.

    [vsftpd-iptables]

    enabled = true
    filter = vsftpd
    action = iptables[name=VSFTPD, port=21,
    # sendmail-whois[name=VSFTPD, dest=you@example.com]
    logpath = /var/log/vsftpd.log
    maxretry = 5
    bantime = 1800

    1. Lữ Phú Hòa 17 comment

      làm tương tự để bảo vệ ftpserver luôn, đây là đính chính thêm!
      ==========
      #thêm vào bên dưới file này luôn
      nano /etc/fail2ban/jail.local
      [vsftpd-iptables]
      enabled = true
      filter = vsftpd
      action = iptables[name=VSFTPD, port=21, protocol=tcp]
      # sendmail-whois[name=VSFTPD, dest=you@example.com]
      logpath = /var/log/vsftpd.log
      maxretry = 5
      bantime = 1800

      ==========
      /var/log/vsftpd.log
      các bạn mở file /etc/vsftpd/vsftpd.conf ra thêm dual_log_enable=YES nếu chưa có để tạo thêm file log này nhé
      ==========
      tương tự dùng lệnh này để kiểm tra ip và xóa ip bị banip:
      fail2ban-client status vsftpd-iptables
      fail2ban-client set vsftpd-iptables unbanip 103.207.68.41

    1. Luân Trần Admin

      Cái này là thông báo website không truy cập được, dùng Google Apps chứ đâu liên quan đến Fail2ban nhỉ?

  22. dung 9 comment

    cho em hỏi.
    iptables -D f2b-SSH -s banned_ip -j DROP
    lệnh này xóa tất cả các ip band.
    còn nếu mình muốn xóa 1 IP trong dãy ip đó thì làm sao nhỉ

  23. Bảo 17 comment

    VPS của mình bị scan nhiều quá
    Có tùy chỉnh nào giúp banned vĩnh viễn ip nếu login fail nhiều quá không Luân ?

    1. Luân Trần Admin

      Bạn tăng thời gian ban lên gấp 1.000 lần trong file /etc/fail2ban/jail.conf là xong 😀

  24. Tommy Nguyen 36 comment

    Muốn ban vĩnh viễn 1 IP thì làm sao hả Luân?
    Hiện tại mình thấy VPS đang bị tấn công bởi 1 IP từ Trung Quốc.

  25. dantruongx 1 comment

    Bài viết có 2 chổ chưa chuẩn:

    Thứ nhất: iptables -L chỉ để liệt kệ rule và chain của iptables chứ ko phải để ktra IP đã bị banned, để kiểm tra ip banned các bạn vào /var/log/fail2ban.
    Thứ hai: việc chỉ sử dụng cấu hình mặc định của fail2ban thì chỉ có banned ip trong 1 thời gian nhất định, mà đa số các ip scan chắc chắn là chạy theo script nó sẽ quay lại scan các bạn nhiều và nhiều lần nữa, các bạn nên tìm hiểu kỹ cách tạo action trên f2b kết hợp với iptables và ipset để blog vĩnh viễn ip scan (đương nhiên là mình có thể unblock manual đc), sau này đỡ tốn tài nguyên banned rồi lại unbaned.
    Thân.

  26. thanh ho 5 comment

    Hi ban,
    iptables -D f2b-SSH -s banned_ip -j DROP dùng lệnh này để gỡ bỏ IP bị ban thì nó báo lỗi : iptables v1.4.21: host/network `banned_ip’ not found
    Try `iptables -h’ or ‘iptables –help’ for more information.
    Mình thử delete rules trong chain của f2b-SSH nhưng restart fail2ban thì nó vẫn hiện lại IP bị ban.Vậy làm thế nào đây?

  27. tu vu 52 comment

    Mình thấy kết bài bạn có câu:
    “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é.”
    – vậy mình có cần phải cài cái này để bảo mật nữa không bạn LT ơi

  28. Le Trung 3 comment

    Sau khi cài xong và kiểm tra file log thì thấy thế này, có phải fail2ban bị lỗi ko bạn
    Sep 26 06:41:05 netstore fail2ban.action[13509]: ERROR iptables -D INPUT -p tcp –dport ssh -j f2b-SSH#012iptables -F f2b-SSH#012ipt ables -X f2b-SSH — stdout: ”
    Sep 26 06:41:05 netstore fail2ban.action[13509]: ERROR iptables -D INPUT -p tcp –dport ssh -j f2b-SSH#012iptables -F f2b-SSH#012ipt ables -X f2b-SSH — stderr: ”
    Sep 26 06:41:05 netstore fail2ban.action[13509]: ERROR iptables -D INPUT -p tcp –dport ssh -j f2b-SSH#012iptables -F f2b-SSH#012ipt ables -X f2b-SSH — returned 1

          1. Le Trung 3 comment

            Đây là bảng iptables
            DROP all — 222.219.184.71 anywhere
            DROP all — 40.23.96.123.broad.zs.zj.dynamic.163data.com.cn anywhere
            DROP all — 182.100.67.113 anywhere
            DROP all — 23.246.244.126-static.reverse.softlayer.com anywhere
            DROP all — hotel564.startdedicated.net anywhere
            DROP all — webstage.ca anywhere
            DROP all — dsl-209-205-186-212.i-55.com anywhere
            DROP all — fixed-203-240-181.iusacell.net anywhere
            DROP all — 45.63.48.15.vultr.com anywhere
            DROP all — c1114054-25742.cloudatcost.com anywhere
            DROP all — hosted-by.ecatel.net anywhere
            DROP all — 42.123.82.179 anywhere
            DROP all — 182.73.199.250 anywhere
            DROP all — 183.37.251.173 anywhere
            DROP all — 176.101.237.123 anywhere
            DROP all — 117.79.146.58 anywhere
            DROP all — 206.191.151.226 anywhere
            DROP all — 61.139.5.22 anywhere
            DROP all — 123.142.167.44 anywhere
            DROP all — 1.255.87.242 anywhere
            DROP all — dns165.online.tj.cn anywhere

          2. Luân Trần Admin

            Có vẻ đang hoạt động bình thường và đã block vài địa chỉ IP rồi đó.

  29. Nguyen Tung 43 comment

    Bác Luân cho em hỏi chút với.
    Phần mềm này so với CSF thì như thế nào ạ
    EM setup CSF rồi thì có nên setup thêm phần mềm này nữa không ạ

  30. thanhlt 6 comment

    Bác luân cho mình hỏi, sao khi mình dùng lệnh trong SSH để check nhưng kết quả trả về lại không giống trong bài viết của bác:

    Ví dụ:

    iptables -L -n, thì xuất hiện các dòng:

    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    Và lệnh: iptables -L, cũng xuất hiện:

    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    Cảm ơn bác!9

        1. thanhlt 6 comment

          Fail2ban mình kiểm tra lại đã hoạt động, sau khi mình reboot lại VPS. Hiện chưa ban Mình muốn hỏi thêm là, nội dung trong file jail.conf của mình là thế này chứ không như của bác chia sẻ:

          # “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/8

          # External command that will take an tagged arguments to ignore, e.g. ,
          # and return true if the IP is to be ignored. False otherwise.
          #
          # ignorecommand = /path/to/command
          ignorecommand =

          # “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 = 5

          – Mình để nguyên vẫn được chứ? có nên sửa lại như nội dung file bác đã chia sẻ ở trên không? Thân!

  31. canhdx 3 comment

    Cho mình hỏi là nếu như mình dùng CentOs7 sau đó mình disable FirewallD đi và sử dụng Iptables thì các rules của thằng fail2ban này sinh ra hoạt động có ổn định không vậy bạn?

  32. thanhlt 6 comment

    – Chương trình này update như thế nào trên ssh vậy bác Luân? Mình dùng hocvps Script ver 1.1 mới nhất thì khỏi đổi đoạn: port=ssh nhỉ?

    – Lệnh: cat /var/log/secure | grep ‘Failed password’ | sort | uniq -c mình thấy báo login rất nhiều và liên tục vậy có nên đổi pass ko? Thân!

    1. Luân Trần Admin

      Pass SSH của bạn phức tạp ko sợ nó đoán ra thì ko cần đổi.

      Nếu bạn login SSH sử dụng port 22 thì để nguyên port=ssh, không cần đổi.

      1. thanhlt 6 comment

        cập nhật Fail2Ban thế nào nếu có bản nâng cấp qua SSH cho VPS của mình vậy bác Luân? Thân!

        1. Luân Trần Admin

          Nó là một chương trình bình thường, nên bạn cập nhật qua yum:
          yum upgrade fail2ban

  33. Luân Trần Admin

    Tình hình là mình tiết kiệm được hơn 130MB RAM sau khi tiến hành bảo vệ SSH, block thẳng tay IP dò pass login 😀

    1. Vector 4 comment

      Bài viết rất hay, mấy ngày gần đây đọc log file secure thấy có IP từ HK brute force liên tục trong khoảng thời gian ngắn khiến rất nhiều file log secure được tạo ra , có vẻ là đang dùng tools. em đã cài Fail2Ban hy vọng có thể tiết kiệm được nhiều dung lượng!. Anh có thể cho e biết cách xem những IP mà F2B banned ở đâu không? để em kiểm tra xem F2B có làm việc không đó mà 😀

      1. Luân Trần Admin

        Mình mới bổ sung bài viết nhé, bạn tham khảo lệnh này: iptables -L -n

        1. Vector 4 comment

          Mặc dù e vẫn để port 22 nhưng các brutter vẫn chăm chăm brute vào port 5 số.
          Nhìn chung tác dụng hơn mong muốn, trưa nay set bantime 1 tiếng thì xem log ban đúng 1 tiếng, giờ để ban 1 ngày là nuột…

          1. Trung 19 comment

            Bạn có thể hướng dẫn cụ thể cách set bantime k?
            Thks!

          2. Luân Trần Admin

            Ngay đoạn đầu phần Cấu hình Fail2Ban có bantime đó bạn, tính bằng giây – second nhé.

  34. Khoiwr 23 comment

    Chào Luân!

    Lời đầu tiên cảm ơn Luân đã có bài viết hay này.
    Mình xin hỏi. Minh lỡ tay xóa mất thư mục fail2ban trên Filezilla. Giờ làm sao để cài đặt lại vậy Luân?

    Trân Trọng!

    1. Luân Trần Admin

      Bạn hãy xóa Fail2Ban với lệnh yum remove fail2ban rồi cài đặt lại nhé.

      1. Lê Minh Tấn Khởi 23 comment

        Thanks Luân đã làm thành công.

        Và xin hỏi luân mình chạy lệnh ” cat /var/log/secure | grep ‘Failed password’ | sort | uniq -c ”

        Kết quả:

        1 Aug 23 19:34:49 CENTOS65MIN-001 sshd[2537]: Failed password for root from 45.114.11.22 port 50298 ssh2

        Như vậy là đã từng bị tấn công hả Luân?

          1. Lê Minh Tấn Khởi 23 comment

            Thanks Luân nha. May mà mình theo dõi bài viết của Luân thường xuyên. Mình xem kỹ thì hôm nay mới bị. hihi thanks Luân nhiều