Bạn có thể nhìn thấy các quy tắc iptables dưới đây. Rất đơn giản để làm điều này. Đây là một cách đơn giản để chống lại các cuộc tấn công Brute Force Attacks thông qua cổng SSH trên máy chủ/máy chủ ảo (Server/VPS) của bạn.



-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 4 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j LOG --log-prefix "SSH brute force "
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -j ACCEPT

Cách ngăn chặn tấn công brute force qua SSH

Như các bạn đã biết thì SSH là một mục tiêu tấn công của khá nhiều hacker trên thế giới. Trong đó tấn công Brute Force là một kiểu tấn công khá phổ biến. Brute Force là gì? Theo định nghĩa từ Wikipedia:

Kiểu tấn công brute force là kiểu tấn công được dùng cho tất cả các loại mã hóa. Brute force hoạt động bằng cách thử tất cả các chuỗi mật khẩu có thể để tìm ra mật khẩu. Vì thế nên thời gian cần rất lâu, tùy theo độ dài của mật khẩu nhưng khả năng để tìm ra là luôn luôn nếu không giới hạn thời gian. Brute force chỉ được dùng khi các phương pháp khác đều không có hiệu quả.

Như vậy, các hacker sẽ dùng các đoạn mã tự động để thử đăng nhập vào Server/VPS của bạn với mật khẩu bất kỳ. Mặc định, các máy chủ sử dụng cổng SSH mặc định là 22. Các hacker sẽ tấn công vào cổng này để thử đăng nhập, nếu bạn áp dụng cách đổi cổng SSH mặc định, nguy cơ bị tấn công Brute Force sẽ giảm đi đáng kể, tuy nhiên không phải là không bị các hacker mò ra.

Khi các bạn thêm những quy tắc trên vào iptables sẽ loại bỏ được các đăng nhập thất bại và từ chối truy cập từ những IP tấn công vào máy chủ. Để thêm những quy tắc trên, các bạn tiến hành nhập lệnh:

vi /ect/sysconfig/iptables

Và thêm những đoạn code trên vào rồi lưu lại. (Nhớ là phải trước dòng COMMIT nhé)

Những quy tắc trên là gì? Nó hoạt động như thế nào? Nó có tác dụng gì?

Chúng ta sẽ cùng tìm hiểu. Bạn đặt năm quy tắc trên vào bộ lọc iptables:

  1. Quy tắc đầu tiên nói với hệ thống rằng:
    Các gói tin TCP đi vào và cố gắng thiết lập một kết nối SSH. Đánh dấu chúng là SSH. Lưu ý đến nguồn gốc của gói tin.
  2. Quy tắc thứ hai:
    Nếu một gói tin cố gắng thiết lập một kết nối SSH đến, và gói đó là gói thứ tư đến từ cùng một nguồn trong 30 giây, chỉ từ chối chúng (reject).
  3. Quy tắc thứ ba và thứ tư có nghĩa là:
    Nếu một gói tin kết nối SSH đến, và đó là lần thứ ba từ cùng một nguồn trong 30 giây, ghi lại nó vào bản ghi hệ thống một lần, sau đó ngay lập tức từ chối nó và quên nó.
  4. Quy tắc thứ năm:
    Bất kỳ gói SSH không dừng lại cho đến nay, hãy chấp nhận nó.

Cách ngăn chặn tấn công brute force qua SSH

Và đó là tất cả. Bạn có thể thay đổi network interface (-i eth0.103) hoặc thay đổi số giây và số lần kết nối... Nhưng bạn lưu ý rằng số lần kết nối ở quy tắc thứ 2 phải cao hơn các quy tắc sau đó vì đây là một biện pháp ngăn chặn các gói dữ liệu sau khi qua quy tắc 2 tiếp tục xuống chuỗi quy tắc kế tiếp, do đó cuộc tấn công Brute Force không spam các bản ghi (logs) của bạn.

Ngoài ra, bạn cũng có thể thử các quy tắc sau. Về cơ bản thì cũng giống như trên.


### SSH - Do not block internal hosts/networks
-A INPUT -m state --state NEW -m tcp -p tcp --source 192.168.123.45 --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --source 192.168.234.0/24 --dport 22 -j ACCEPT
### SSH - Block brute force attempts
-A INPUT -m state --state NEW -p tcp --dport 22 -m recent --set --name ssh --rsource
-A INPUT -m state --state NEW -p tcp --dport 22 -m recent --update --seconds 3600 --hitcount 20 --rttl --name ssh --rsource -j REJECT
-A INPUT -m state --state NEW -p tcp --dport 22 -m recent --update --seconds 3600 --hitcount 19 --rttl --name ssh --rsource -j LOG --log-prefix "SSH brute force attempt: "
-A INPUT -m state --state NEW -p tcp --dport 22 -m recent --update --seconds 3600 --hitcount 19 --rttl --name ssh --rsource -j REJECT
-A INPUT -m state --state NEW -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --rttl --name ssh --rsource -j REJECT
### SSH - No limit reached
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT


  • Dòng 2 và 3 thêm một số trường hợp ngoại lệ không bao giờ bị chặn. Nếu bạn dùng IP tĩnh thì nên thêm vào (dòng 2) hoặc IP động, nếu bạn biết tính net mask thì thêm vào dải IP của bạn (dòng 3)
  • Dòng 5 đánh dấu gói tin với 1 cái tên (Hoặc chính xác hơn là tên của danh sách sẽ lưu các IP nguồn)
  • Dòng 6 từ chối tất cả các gói đến cổng 22 nếu có 20 hoặc nhiều hơn nỗ lực đăng nhập trong vòng một giờ.
  • Dòng 7 ghi vào bản log sau 19 lần đăng nhập thất bại và dòng 8 từ chối gói tin đó.
  • Dòng 9 từ chối gói nếu có 5 hoặc nhiều hơn đăng nhập thất bại trong vòng một phút.
  • Dòng 11 cuối cùng: cho phép các gói tin nếu chúng không bị loại bỏ trước đó.

Bằng cách này bạn sẽ được:

Sau khi đăng nhập thất bại 4 lần, yêu cầu bị từ chối. Nhưng sau một phút, nó sẽ hoạt động trở lại. Trong vòng 1 giờ, nó được phép thử đăng nhập 19 lần, nếu tất cả thất bại thì nó sẽ bị khóa. Bạn có thể thay đổi thời gian hoặc số lần đăng nhập thất bại, tùy vào yêu cầu của bạn.

Với thủ thuật trên, hy vọng bạn sẽ phần nào tránh được các cuộc tấn công Brute Force.

(Khi trích dẫn thông tin từ website này cần ghi rõ © nphunghung.com 2012 - 2014)

VN:F [1.9.22_1171]
Rating: 9.0/10 (1 vote cast)
Cách ngăn chặn tấn công brute force qua SSH, 9.0 out of 10 based on 1 rating

Là một người đam mê tìm tòi khám phá trong công nghệ và sẵn sàng chia sẻ những gì mà mình biết.

3 Comments

  1. Securing OpenSSH – Bảo vệ OpenSSH | Nguyễn Phùng Hưng Blog - Chia sẻ đam mê Says Reply

    [...] thêm SSH public key vào Centos Cách ngăn chặn tấn công brute force qua SSH Cách thêm SSH public key vào Centos Cách ngăn chặn tấn công brute [...]

  2. Lão Còi Says Reply

    Chào bạn,

    Web mình mấy hôm nay cũng bị tấn công kiểu này. Mình đã dùng cách vô hiệu hóa chức năng đăng nhập bằng password, thay vào đó đăng nhập bằng ssh privatekey. Như vậy coi như đã giải quyết xong kiểu tấn công này rồi. Tuy nhiên mình thắc mắc chút là so với cách bạn giới thiệu thì cái nào hiệu suất tốt hơn cho VPS?

    Mình newbie nên mong bạn chỉ dẫn :)

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
    • Nguyễn Phùng Hưng Says Reply

      Dù làm cách nào thì nó vẫn âm thầm tấn công vào ssh của mình, vấn đề nó có scan được port và mình có open login bằng pass hay không thôi. Theo mình thì cách thiết lập login SSH bằng key, sau đó vô hiệu hóa đăng nhập bằng pass (như bạn đã làm) là vẫn hiệu quả và an toàn hơn hết rồi. Ngoài ra bạn cũng có thể (nên) đổi port SSH, nhưng đổi xong thì nhớ chỉnh sửa lại trong iptables và các ứng dụng firewall không thì không login vào được.

      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

Leave a Reply


9 + = ten