2013 - 2020 © LARMER. All Rights Reserved.
Câu lện trên sẽ trả về hàng loạt IP chiếm nhiều connection nhất trên server. Cần lưu ý rằng DDOS có thể xuất phát từ một lượng nhỏ connection. Do đó việc kết quả trả về connection thấp bạn vẫn có thể trong tình trạng under attack.
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Một phương pháp khác:
netstat -n | grep :80 |wc -l netstat -n | grep :80 | grep SYN |wc -l
Dòng lệnh thứ nhất trả về số lượng active connection (connection đang hoạt động). Rất nhiều kiểu tấn công DDOS bằng cách mở một kết nối connection lên server rồi không làm gì cả khiến cho server chờ đợi cho đến khi timeout. Nến nếu dòng lệnh thứ nhất trả về trên 500 thì server của bạn rất nhiều khả năng bị DDOS.
Dòng lệnh thứ 2 trả về kết quả trên 100 thì rất nhiều khả năng server bạn trong tình trang syn attack DDOS.
Lưu ý: cách tính trên chỉ là tương đối, một số website có lưu lượng truy cập lớn thì phương pháp detect này có thể không chính xác.
Một số phương pháp khắc phục:
Cách khắc phục nhanh nhất là block các IP chiếm nhiều connection nhất trong "giờ cao điểm":
Cách 1:
route add địa-chỉ-ip reject
vd: route add 192.168.0.168 reject
Kiểm tra bằng lệnh:
route -n |grep địa-chỉ-ip
Cách 2: sử dụng iptables
iptables -A INPUT 1 -s địa-chỉ-ip -j DROP/REJECT service iptables restart service iptables save
Sau đó xóa hết tất cả connection hiện hành và khơi động lại service httpd
killall -KILL httpd service httpd restart
Một số lệnh cơ bản khác
– Đế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
Nó sẽ hiển thị như sau
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.
Tiếp đến, chúng ta cần tham khảo về phân tích Log của VPS
Chú ý: Demo được thực hiện trên CentMinMod những VPS khác thì thay được dẫn File log nhé
Tham khảo thêm: Các dòng lệnh bỏ túi trong Linux
Lệnh tail để liệt kê các dòng cuối cùng trong file, ở đây ví dụ là 10 bạn có thể thay đổi thành 100, 1000… tùy theo muốn xem nhiều hay ít.
I. Đơn giản
Check log chung của Server
tail -10 /usr/local/nginx/logs/access.log
tail -10 /usr/local/nginx/logs/error.log
Nếu sử dụng Webserver như VestaCP thì thêm vào
tail -10 /usr/local/vestacp/nginx/logs/access.log
tail -10 /usr/local/vestacp/nginx/logs/error.log
Check log từng Domain:
tail -10 /home/nginx/domains/domainname.com/log/access.log
tail -10 /home/nginx/domains/domainname.com/log/error.log
Kiểm tra trong /var/log
ls -lhrt /var/log
Check PHP-FPM
tail -10 /var/log/php-fpm/www-error.log /var/log/php-fpm/www-php.error.log
Kiểm tra log trong cơ sơ dữ liệu MySQL / MariaDB
tail -10 /var/log/mysqld.log
Kiểm tra log trong CSF firewall
tail -10 /var/log/lfd.log
Kiểm tra log trong Mail
tail -10 /var/log/maillog
For Cron job
tail -10 /var/log/cron
II. Nâng cao
Lấy tất cả các log trong 1 ngày
Ví dụ mình lấy các log trong ngày 5/12/2015
grep -w '05/Dec/2015' /home/nginx/domains/domain.com/log/access.log
Lấy log trong nhiều ngày bất kỳ
Lấy tất cả các log trong ngày 5/12/2015 và ngày 4/12/2015
grep -w '05/Dec/2015\|04/Dec/2015' /home/nginx/domains/domain.com/log/access.log
Lấy tất cả IP trong file log
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /home/nginx/domains/domain.com/log/access.log
Lấy log trong ngày được và chuyển hướng google
Chỉ lấy các dòng có chuổi là “05/Dec/2015” VÀ “google” (Được hiểu là Log của ngày 5/12/2015 và được chuyển hướng từ google)
grep -w '05/Dec/2015.*google' /home/nginx/domains/domain.com/log/access.log
Xuất ra log trong ngày và điều kiện “hoặc”
Chỉ lấy các dòng có chuổi là “05/Dec/2015” và “google” HOẶC có chuổi là “04/Dec/2015” và “google”
grep -w '05/Dec/2015.*google\|04/Dec/2015.*google' /home/nginx/domains/domain.com/log/access.log
Xuất ra tất cả IP với điều kiện
Xuất tất cả các IP được chuyển hướng từ Google được ghi nhận từ ngày 4 và 5/12/2015
grep -w '05/Dec/2015.*google\|04/Dec/2015.*google' /home/nginx/domains/domain.com/log/access.log | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
Xuất số kết nối của IP đến server trong ngày
Đếm xem số lần kết nối của một IP được chuyển hướng từ Google trong ngày 5/12/2015
grep -w '05/Dec/2015.*google' /home/nginx/domains/domain.com/log/access.log | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | soft | uniq -cd | sort -nr
Xuất ra tất cả các IP có >10 kết nối trong ngày
Kiểm tra tất cả các IP có > 10 kết nối trong ngày 5/12/2015
grep -w '05/Dec/2015' /home/nginx/domains/domain.com/log/access.log | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq -cd | sort -nr | grep -v '^ *[1-9] '
Xem toàn bộ chuyển hướng từ google trong 1 tháng
Xuất ra màn hình toàn bộ log được chuyển hướng từ google tháng 12/2015 nhưng không chứa bot.html
grep -w 'Dec/2015.*google.com' /home/nginx/domains/domain.com/log/access.log | grep -v 'bot.html'
Xem link có nhiều lượt truy cập nhất trong tháng
Link có nhiều lượt truy cập nhất từ google trong tháng 12/2015, không tính bot
grep -w 'Dec/2015.*google.com' /home/nginx/domains/domain.com/log/access.log | grep -v 'bot.html' | grep -o
Bài viết liên quan