Các biện pháp và công cụ giúp giảm thiểu các cuộc tấn công DDoS – Phần 1
Trong bài viết này mình sẽ nói về một số biện pháp và công cụ (mình đã từng áp dụng) trợ giúp những người quản trị hệ thống có thể giảm thiểu các cuộc tấn công DoS/DDoS.
1. Đối với hệ thống server sử dụng nền tảng Linux.
1.1. Dạng tấn công layer 3 (mô hình OSI)
Với các kiểu tấn công ở layer 3, ta sẽ sử dụng iptables (công cụ mã nguồn mở và có sẵn trên linux) để giới hạn các gói tin từ kẻ tấn công gửi tới.
- Kiểu tấn công ICMP Flood: ta sẽ thiết lập các rule trên iptables để limit các gói tin icmp. Ví dụ lệnh dưới đây sẽ chỉ cho phép 1 gói tin icmp/1s từ 1 nguồn, các gói tin còn lại vượt ngưỡng sẽ bị loại bỏ.
- Kiểu tấn công UDP Flood: ta sẽ thiết lập các rule trên iptables để limit các gói tin udp. Ví dụ lệnh dưới đây sẽ giới hạn chỉ cho phép 10 gói tin udp/1s từ 1 nguồn, các gói tin vượt quá sẽ bị drop.
- Kiểu tấn công SYN Flood: tương tự ta cũng thiết lập các lệnh limit các gói tin SYN vào hệ thống
1.2. Dạng tấn công layer 7 (mô hình OSI)
Với kiểu tấn công ở layer 7, ta sẽ sử dụng iptables kết hợp với việc phân tíck bằng tay để chặn.
- Tấn công nhỏ lẻ (chỉ từ 1 số nguồn ip cố định): phân tích log access để chặn các ip tấn công.
- Tấn công lớn (từ một mạng bonet lớn):
o B1: Hạn chế các gói tin đi vào từ tầng 3 bằng cách sử dụng iptable (mấy lệnh limit hay hitcount) -> mục đích để không bị tốn nhiều tài nguyên cho việc xử lý các gói tin cũng như có thể bị đầy bảng contractk trên iptables.
o B2. Chặn các ip trên tầng 7.
Sau khi hạn chế ở tầng 3, sẽ vấn có một số ip tấn công lọt vào được. Bạn viết một đoạn code python hay c cũng được, mục đích để chặn các ip lọt
Ý tưởng code:
• 1. định kỳ kiểm tra xem có những ip nào đang có kết nối nhiều tới server (lệnh này: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n)
• 2. Gưi ds ip đến iptables để drop (Việc chọn ds ip này có thể sẽ bị chặn nhầm ip thường, phụ thuộc vào việc bạn chọn mức ở trên)
• 3. Sau khoảng 1 thời gian check lại nếu không thấy truy cập nữa thì bỏ drop nó đi
- Với kiểu tấn công mà khi mà các nguồn tấn công đều từ nước khác. Ta có thể đưa ra giải pháp tạm thời là chặn tất cả các dải địa chỉ IP từ nước ngoài để dịch vụ lên được (Tham khảo link code ở đây nhé: https://www.cyberciti.biz/faq/block-entier-country-using-iptables/ ).
- Vơi dạng tấn công mà kẻ tấn công sử dụng tools tấn công có lưa lại chữ ký trên log access. Ví dụ:
Trường hợp này ta có thể sử dụng iptables chặn theo string. Ví dụ lệnh sau sẽ block tất cả request có chứa cụm từ “$MyNick ddosim|$Lock”
- Ngoài ra sẽ có các kiểu tấn công đặc biệt khác. Với mỗi kiểu sẽ có những biện pháp xử lý khác nhau.
Đối với hệ thống server sử dụng nền tảng Windows mình sẽ giới thiệu trong bài sau, các bạn đón xem nhé.
1. Đối với hệ thống server sử dụng nền tảng Linux.
1.1. Dạng tấn công layer 3 (mô hình OSI)
Với các kiểu tấn công ở layer 3, ta sẽ sử dụng iptables (công cụ mã nguồn mở và có sẵn trên linux) để giới hạn các gói tin từ kẻ tấn công gửi tới.
- Kiểu tấn công ICMP Flood: ta sẽ thiết lập các rule trên iptables để limit các gói tin icmp. Ví dụ lệnh dưới đây sẽ chỉ cho phép 1 gói tin icmp/1s từ 1 nguồn, các gói tin còn lại vượt ngưỡng sẽ bị loại bỏ.
Mã:
iptables -N icmp_flood
iptables -A INPUT -p icmp -i eth0 -j icmp_flood
iptables -A icmp_flood -i eth0 -p icmp -m limit --limit 1/s -j ACCEPT
iptables -A icmp_flood -i eth0 -p icmp -m limit --limit 1/s -j LOG --log-prefix "iptables: limit icmp"
iptables -A icmp_flood -i eth0 -p icmp -j DROP
iptables -A OUTPUT -p icmp -j ACCEPT
- Kiểu tấn công UDP Flood: ta sẽ thiết lập các rule trên iptables để limit các gói tin udp. Ví dụ lệnh dưới đây sẽ giới hạn chỉ cho phép 10 gói tin udp/1s từ 1 nguồn, các gói tin vượt quá sẽ bị drop.
Mã:
iptables -N udp_flood
iptables -A INPUT -p udp -j udp_flood
iptables -A udp_flood -p udp -m state --state NEW -m recent --update --seconds 1 --hitcount 10 -j LOG --log-prefix "iptables: udp"
iptables -A udp_flood -p udp -m state --state NEW -m recent --update --seconds 1 --hitcount 10 -j RETURN
iptables -A udp_flood -j DROP
- Kiểu tấn công SYN Flood: tương tự ta cũng thiết lập các lệnh limit các gói tin SYN vào hệ thống
Mã:
iptables -N syn_flood
iptables -A INPUT -i eth0 -p tcp --syn -j syn_flood
iptables -A syn_flood -m limit --limit 1/s --limit-burst 10 -j LOG --log-prefix "SYN flood: "
iptables -A syn_flood -m limit --limit 1/s --limit-burst 10 -j RETURN
iptables -A syn_flood -j DROP
1.2. Dạng tấn công layer 7 (mô hình OSI)
Với kiểu tấn công ở layer 7, ta sẽ sử dụng iptables kết hợp với việc phân tíck bằng tay để chặn.
- Tấn công nhỏ lẻ (chỉ từ 1 số nguồn ip cố định): phân tích log access để chặn các ip tấn công.
- Tấn công lớn (từ một mạng bonet lớn):
o B1: Hạn chế các gói tin đi vào từ tầng 3 bằng cách sử dụng iptable (mấy lệnh limit hay hitcount) -> mục đích để không bị tốn nhiều tài nguyên cho việc xử lý các gói tin cũng như có thể bị đầy bảng contractk trên iptables.
Mã:
iptables -N limit_new_tcp
iptables -A INPUT -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -j limit_new_tcp
iptables -A limit_new_tcp -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
iptables -A limit_new_tcp -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j LOG --log-prefix "iptables: Limit new TCP"
iptables -A limit_new_tcp -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -j DROP
o B2. Chặn các ip trên tầng 7.
Sau khi hạn chế ở tầng 3, sẽ vấn có một số ip tấn công lọt vào được. Bạn viết một đoạn code python hay c cũng được, mục đích để chặn các ip lọt
Ý tưởng code:
• 1. định kỳ kiểm tra xem có những ip nào đang có kết nối nhiều tới server (lệnh này: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n)
• 2. Gưi ds ip đến iptables để drop (Việc chọn ds ip này có thể sẽ bị chặn nhầm ip thường, phụ thuộc vào việc bạn chọn mức ở trên)
• 3. Sau khoảng 1 thời gian check lại nếu không thấy truy cập nữa thì bỏ drop nó đi
- Với kiểu tấn công mà khi mà các nguồn tấn công đều từ nước khác. Ta có thể đưa ra giải pháp tạm thời là chặn tất cả các dải địa chỉ IP từ nước ngoài để dịch vụ lên được (Tham khảo link code ở đây nhé: https://www.cyberciti.biz/faq/block-entier-country-using-iptables/ ).
- Vơi dạng tấn công mà kẻ tấn công sử dụng tools tấn công có lưa lại chữ ký trên log access. Ví dụ:
Trường hợp này ta có thể sử dụng iptables chặn theo string. Ví dụ lệnh sau sẽ block tất cả request có chứa cụm từ “$MyNick ddosim|$Lock”
Mã:
iptables -I INPUT -m string --algo bm --string "$MyNick ddosim|$Lock" -j DROP
iptables -I FORWARD -m string --algo bm --string "$MyNick ddosim|$Lock" -j DROP
- Ngoài ra sẽ có các kiểu tấn công đặc biệt khác. Với mỗi kiểu sẽ có những biện pháp xử lý khác nhau.
Đối với hệ thống server sử dụng nền tảng Windows mình sẽ giới thiệu trong bài sau, các bạn đón xem nhé.
Chỉnh sửa lần cuối bởi người điều hành: