Tấn công từ chối dịch vụ phân tán (DDoS – Distributed Denial Of Service) là kiểu tấn công làm cho hệ thống máy tính hay hệ thống mạng quá tải, không thể cung cấp dịch vụ hoặc phải dừng hoạt động. Trong các cuộc tấn công DDoS, máy chủ dịch vụ sẽ bị “ngập” bởi hàng loạt các lệnh truy cập từ lượng kết nối khổng lồ.

Khi số lệnh truy cập quá lớn, máy chủ sẽ quá tải và không còn khả năng xử lý các yêu cầu. Hậu quả là người dùng không thể truy cập vào các dịch vụ trên các trang web bị tấn công DDoS.

Mình xin chia sẻ lại bài của BKNS, giới thiệu một số lệnh cơ bản để kiểm tra server trong trường hợp này.

– Đếm lượng connection vào Port 80:

netstat -n | grep :80 |wc -l

– Kiểm tra số lượng connection đang ở trạng thái SYN_RECV:

netstat -n | grep :80 | grep SYN_RECV|wc -l

– Hiển thị tất cả các IP đang kết nối và số lượng kết nối từ mỗi IP:

netstat -an|grep :80 |awk '{print $5}'|cut -d":" -f1|sort|uniq -c|sort -rn

– Nếu muốn kiểm tra IP nào mở nhiều SYN thì thêm vào:

netstat -an|grep :80|grep SYN |awk '{print $5}'|cut -d":" -f1|sort|uniq -c|sort -rn

– Đối với server có nhiều IP, để kiểm tra IP nào đang bị tấn công:

netstat -plan | grep :80 | awk '{print $4}'| cut -d: -f1 |sort |uniq -c

– Hiển thị tất cả các IP đang kết nối và số lượng kết nối từ mỗi IP:

netstat -an | grep ':80' | awk '{print $5}' | sed s/'::ffff:'// | cut -d":" -f1 | sort | uniq -c

– Hiển thị số lượng kết nối mỗi loại

netstat -an | grep :80 | awk '{print $6}' | sort | uniq -c
61 ESTABLISHED
 13 FIN_WAIT1
 17 FIN_WAIT2
 1 LISTEN
 25 SYN_RECV
 298 TIME_WAIT

– Hiển thị tất cả các IP đang kết nối và số lượng kết nối từ mỗi IP

watch "netstat -an | grep ':80' | awk '{print \$5}' | sed s/'::ffff:'// | cut -d\":\" -f1 | sort | uniq -c"
watch "netstat -an | grep :80 | awk '{print \$6}' | sort | uniq -c"

Khi đã phát hiện IP có dấu hiệu bất thường, bạn có thể sử dụng CSF để block IP đó lại.

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.

53 Comments

  1. Tran Huy Du 1 comment

    Mình gặp lỗi này. Mình dùng Cloudflare, bật proxy lên (xám sang vàng) thì chỉ sau 5-10 phút thì CPU lên 100% và web sập luôn. Tắt proxy đi thì ko bị nữa. Ban đầu mình tưởng do cài server hoặc code bị lỗi, nên cài đi cài lại nhiều lần và sửa lại code rất kỹ nhưng vẫn bị, tạo web chỉ có 1 file html trống thôi nó cũng bị.
    Bạn có thể tìm hiểu và giải thích giùm mình được ko?
    Cảm ơn nhiều!

  2. bo thu 2 comment

    Của mình nó thế này
    top – 09:23:54 up 7 min, 1 user, load average: 13.70, 10.39, 4.99
    Dùng digitalocean gói 5 usd
    Kiểm tra như trên thì không thấy gì

  3. Nozomi 8 comment

    Em thấy web của em bị chậm kinh khủng, vào web toàn đợi từ 5s – 40s
    Web của em realtime Google An là 750 mà kiểm tra với lệnh netstat -n | grep :80 |wc -l tận 2k2 nhưng check số lượng ip kết nối từ mỗi ip cao nhất chỉ 50.
    Không biết có phải bị DDos không nữa? vì bình thường nó không có lag như vậy. Và nếu là DDos thì làm thế nào để khác phục hả anh Luân?

  4. Mimikkyu 23 comment

    DDoS khó chặn lắm 🙁 Nguyên lý của nó hoạt động của nó như thế này:

    Thay UA của browser thành nhiều UA khác nhau cho mỗi request, mình đếm trong file có khoảng 3k cái UA khác nhau. Hầu hết là các UA của bot crawler như Google, Yahoo, Yandex,… nên hầu hết các server/anti không chặn những request này vì nếu chặn sẽ không tốt cho SEO.
    http://www.fastsnaps.net/f/527ee72e8f0c64.png
    http://www.fastsnaps.net/f/527ee72e8f0c65.png

    Thay string vào sau dấu ?= ví dụ https://hocvps.com/?id=vultr
    Điều này không ảnh hưởng đến quá trình load trang, vẫn sẽ gây tốn CPU gây quá tải. Nhưng lại có thể bypass Anti DDoS cực tốt, vì các URL dạng https://hocvps.com/?id=vultr sẽ không được cache. Nên các dịch vụ anti thường cho các URL này “bypass to origin”.
    http://www.fastsnaps.net/f/527ee72e8f036d.png

    Cuối cùng là tạo vài nghìn request qua các Proxy hoặc Socks, hàng nghìn IP request liên tục thì Anti nào đỡ nổi?
    http://www.fastsnaps.net/f/527ee72e8f036c.png

    1. Mimikkyu 23 comment

      Mình viết cmt bằng hiểu biết của mình :v nếu có gì sai mong mọi người lượng thứ 😀

  5. PNDD 2 comment

    Mình bị ddos flood port 80, mình dùng csf để redirect từ linux qua server chính, mình đã cấu hình firewall chặn block 100 connect trong 10s, cho hỏi như vậy có chặn được ddos hay không ?

    1. Luân Trần Admin

      Bạn phân tích IP tấn công có header như thế nào, có điểm chung để chặn ko?

      1. PNDD 2 comment

        Tấn công kiểu botnet flood port 80 tầm trên 600mb/s, line 100mb thì chỉ thấy tràn rồi bên data nó chặn ip mình ra ngoài thôi chứ không kịp làm gì, mình cho đi qua 1 dedicated linux (600mb) mà không biết có chặn được không, hay linux nó redirect về luôn mà không chặn. Bên máy windows server thì mình firewall chặn hết chỉ nhận mỗi ip của linux.

  6. khachsancatba.vn 1 comment

    Dạo gần đây mình cũng hay thấy trang của mình không truy cập được, nay đọc được bài này thì phải về kiểm tra xem thế nào. Thanks admin nhiều !!!

    1. Luân Trần Admin

      Bạn edit lại nội dung file cấu hình: /etc/nginx/conf.d/domain.com.conf rồi restart lại nginx là ok

        1. Luân Trần Admin

          Bạn dùng luôn lệnh này để block ip:
          iptables -A INPUT -s 1.2.3.4 -j DROP

  7. Phong 1 comment

    Đơn vị cho thuê server vừa gửi thông báo : Server của mình đi tấn công server khác qua UDP port 53 . Vậy làm sao để kiểm tra được tình trạng này ? Nhờ các bạn giúp đỡ

        1. Việt Phương Moderator

          Thường CentOs mặc định có. Không có bạn sử dụng ss thay thế
          Còn cài đặt sử dụng
          yum install net-tools

          1. Nguyễn Huyền 20 comment

            Mình cài cái của bạn rồi nhưng vẫn không sử dụng được các dòng lệnh của netstat mà hocvs đưa ở trên để kiểm tra vps có bị dos ko? nhập dòng lệnh nào cũng : -bash: netstat: command not found

          2. Việt Phương Moderator

            1. Bạn cài net-tools chưa?
            2. Bạn check qua lệnh: yum whatprovides netstat

          3. Nguyễn Huyền 20 comment

            Mình cài lại yum install net-tools 3 lần mới dùng được bạn ơi, chả biết sao nữa, chắc lúc cài đặt vps bị gì nó dow và cài ko hết hay sao ấy.

  8. Mak Job 1 comment

    Mình dùng lệnh “netstat -n | grep :80 | grep SYN_RECV|wc -l” thấy có một IP có 50 kết nối, như thế có phải là đang bị ddos không Luân nhỉ? nhưng server kiểm tra thì vẫn ok

    1. Luân Trần Admin

      Chưa chắc nó là DDoS nhé bạn, cần xem request cụ thể của IP đó như thế nào trong access.log thì mới chắc được.

  9. Tiến Thịnh 22 comment

    Bác luân cho em hỏi tự nhiên dạo này site em ăn cpu rất kinh, vẫn là mã nguồn đó trước có lúc online 500 vẫn chỉ hết 50% cpu thôi mà giờ online 200 nhiều lúc đã hết cpu rồi .
    Cpu(s): 12.8%us, 28.4%sy, 0.0%ni, 28.8%id, 0.0%wa, 0.0%hi, 0.2%si, 29.8%st

    Cái chỉ số %st và %sy này lên rất cao, dạo gần đây site em thường xuyên bị lỗi 502 🙁

    em chạy gói 4cpu của ramnode đây mà, gõ lệnh top -c thì ra
    25497 nginx 20 0 555m 33m 19m S 24.5 3.3 0:24.24 php-fpm: pool www
    25491 nginx 20 0 557m 38m 24m S 20.8 3.8 0:21.38 php-fpm: pool www
    25488 nginx 20 0 555m 35m 22m S 20.2 3.5 0:23.44 php-fpm: pool www
    25512 nginx 20 0 557m 36m 22m S 17.5 3.7 0:19.02 php-fpm: pool www
    1991 mysql 20 0 799m 127m 4028 S 17.2 12.8 2845:56 /usr/sbin/mysqld –basedir=/usr
    25482 nginx 20 0 553m 35m 23m S 16.9 3.6 0:26.52 php-fpm: pool www
    25513 nginx 20 0 558m 37m 23m R 16.9 3.8 0:18.95 php-fpm: pool www
    25496 nginx 20 0 555m 36m 22m S 16.5 3.7 0:23.51 php-fpm: pool www
    25503 nginx 20 0 555m 34m 22m S 16.2 3.5 0:18.16 php-fpm: pool www
    15124 nginx 20 0 664m 64m 21m S 15.5 6.5 43:52.76 nginx: worker process
    25489 nginx 20 0 554m 37m 25m S 15.2 3.8 0:22.81 php-fpm: pool www
    25490 nginx 20 0 554m 37m 25m S 13.9 3.8 0:23.66 php-fpm: pool www
    25495 nginx 20 0 555m 36m 22m S 13.9 3.7 0:22.84 php-fpm: pool www
    25493 nginx 20 0 556m 35m 21m R 10.9 3.6 0:25.27 php-fpm: pool www
    25494 nginx 20 0 554m 33m 20m S 10.9 3.4 0:23.52 php-fpm: pool www
    25492 nginx 20 0 557m 36m 22m S 10.6 3.7 0:21.14 php-fpm: pool www
    25484 nginx 20 0 557m 43m 30m D 9.6 4.4 0:21.42 php-fpm: pool www
    15122 nginx 20 0 664m 62m 21m S 8.6 6.3 43:40.28 nginx: worker process
    25487 nginx 20 0 554m 32m 20m R 6.0 3.2 0:24.16 php-fpm: pool www
    15125 nginx 20 0 650m 51m 21m S 3.6 5.2 44:28.94 nginx: worker process
    25516 nginx 20 0 554m 32m 20m R 3.3 3.3 0:16.74 php-fpm: pool www
    25478 root 20 0 548m 8192 1116 S 2.3 0.8 0:01.35 php-fpm: master process (/etc/ph
    25483 nginx 20 0 558m 40m 25m S 2.3 4.1 0:21.85 php-fpm: pool www
    15123 nginx 20 0 652m 53m 21m S 1.7 5.3 44:29.89 nginx: worker process

    Chủ yếu là thằng php-fpm: pool www ăn hết cpu anh ạ, có cách nào giải quyết không 🙁

  10. Nguyen Thu 2 comment

    Anh Luân ơi, em hỏi chút, server em đặt cổng là 8121 thì khi em check netstat -n | grep :80 |wc -l với port 80 thì nó ra số 320 nhưng GA thống kê online thì chỉ có 60 thì có gọi là bất thường ko à?

    1. Luân Trần Admin

      Mỗi con số được tính toán khác nhau, nên bạn không thể nào so sánh 2 cái được đâu.

  11. nguyễn tiến thành 1 comment

    của em khi kiểm tra netstat -n | grep :80 |wc -l lên đến 628

    vào kiểm tra bruce monitor trong directadmin thì thấy nhiều địa chỉ ip tấn công cao nhất là 100000 lần login failue

    vào wp-admin thì toàn báo lỗi quá tải error etablishing database connection

    1. Luân Trần Admin

      Bạn check xem các request tấn công có gì đặc biệt không? Check trong access.log

  12. nguyễn văn chiến 1 comment

    của em bị những 5000 lượt truy cập dơ web luôn bị tấn công vào cổng 80 nhờ các bác tư vấn giúp em với, và em đang muốn vào kiểm tra ip tấn công và cách thức ddos trên direct admin thì vào theo từng bước hướng dẫn giúp em với. thank các bác

  13. Lão Còi 6 comment

    Bác Luân cho em hỏi, em kiểm tra thì nó trả về IP của VPS có số lượng kết nối lớn nhất, gần 500 lận. Vậy là sao hả bác? Còn 1 số IP khác khoảng 20 như vậy có phải là cao không?

    1. Luân Trần Admin

      Bác check lại access log file xem những ip đó đang request đến file nào, có thường xuyên không?

      1. Khải 1 comment

        Bác Luân có thể chỉ cho mình làm sao ghi lại được log IP request đến file, vì mình xem log file php-fpm.log không thấy ip mà chỉ thấy request đến file như sau:

        [21-Oct-2016 21:17:27] WARNING: [pool www] child 26868 said into stderr: “ERROR: Unable to open primary script: /home/domain/public_html/admin.php (No such file or directory)”

        Vì có nhiều số request kiểu như mò trang admin của mình, vì trang admin của mình đã chuyển nơi khác

  14. Nguyễn Đức Anh 10 comment

    thông thường cpu trên vps và ram lên cực điểm, làm treo hệ thống cho đến khi mình reset lại vps. kêt cả mình sử dụng code tự reset lại mysql khi cpu hoạt động trên 80% mà vẫn bị. Code mình dùng vbb 4.2.

    1. Luân Trần Admin

      Việc CPU và RAM cao cực điểm như bạn nói ko thể nào chứng minh được VPS đang bị DDoS, có thể do code của bạn nặng, online hoặc visit nhiều dẫn đến quá tải.

      Mình nghiêng về giải pháp tối ưu server, code và nâng cấp RAM/CPU đi.

  15. Nguyễn Đức Anh 10 comment

    mình cũng bị đánh dos liên tục, dùng cả tường lửa vps và tường lửa của code website mà vẫn không ăn thua. Ai có mưu kế gì bày mình đỡ dos với

    1. Luân Trần Admin

      Bạn phân tích như thế nào để biết được đang bị DDoS, nhiều khi do plugin WP làm cho hệ thống quá tải đó.

  16. Du 22 comment

    Dấu hiệu nào để mình biết là bị ddos bác ơi. Em đang cần quá. Em đang bị DDos hay sao ấy. Gói 10$ mà có 80 On là max cpu. Reset lên đc 180 là lại nằm. Bác chỉ em các nhận biết với

    1. Du 22 comment

      Em thấy có ip kết nối nhiều nhất là 15 có nên ban ip này ko ạ. Hoặc bao nhiêu kết nối thì nên ban ạ

    2. Luân Trần Admin

      Để phát hiện khá là khó, mình không thể hướng dẫn cụ thể được. Hôm vừa rồi update cái plugin Google Authenticator bị 1 loạt request vào file admin-ajax.php, cứ tưởng bị DDoS cơ mà mày mò cả ngày xong mới phát hiện ra được vấn đề @@

      1. Minh Cuong 6 comment

        Hình như mình cũng bị như cậu, cậu có cách giải quyết gì hướng dẫn mình vs, mình cài plugin seo của yoast.