Header Ads Widget

Một số giải pháp phát hiện và phòng tránh DDOS


Khi server đột ngột chậm như rùa, mọi xử lý của server đều rất nặng nề nhiều khả năng do một trong những nguyên nhân sau:



1. Server bị DDOS

2. Server bị quá tải do thiếu RAM
3. Server bị quá tải do tốc độ xử lý của CPU không đảm bảo
4. Tốc độ truy xuất dữ liệu của HDD không đáp ứng nhu cầu read/write của data. (Thông thường xảy ra trên các ổ SATA 72krpm hoặc HDD sắp hỏng)

Trong bài viết này chúng ta đi vào vấn đề thứ 1: server bị DDOS, các vấn đề 2,3,4 có thể khắc phục dễ dàng bằng cách nâng cấp phần cứng.


Kiểm tra xem server có bị DDOS hay không:

netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Câu lệnh 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.

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.


– Đế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ị 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"


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:

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

Block 1 địa chỉ IP
iptables -A INPUT -s IP-ADDRESS -j DROP
 Block 1 địa chỉ IP theo Port
iptables -A INPUT -s 65.55.44.100 -p tcp --destination-port 25 -j DROP
Sau đó lưu lại:
service iptables save
Khởi động lại nếu muốn áp dụng ngay:
service iptables restart


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
Nếu như hoàn tất các bước nêu trên mà server vẫn chậm thì có nghĩa là vấn đề bạn gặp phải nằm vào trường hợp 2,3,4... chỉ việc nâng cấp server để đáp ứng nhu cầu truy cập của người sử dụng.

Xoá bỏ block IP?


# iptables -D INPUT -s xx.xxx.xx.xx -j DROP
# iptables -D INPUT -s 65.55.44.100 -j DROP
# service iptables save

Tìm địa chỉ IP đã block?

# /sbin/iptables -L INPUT -v -n | grep 1.2.3.4

Nhận xét