1 ngày bị SYN Flood Attack

Sáng thứ 7 với nhiều dự định cafe cùng vài đứa bạn thì gặp ngay một email không lấy gì vui vẻ lắm từ con Digital Ocean(DO).

Oh no! We've found an issue with your account and issued you a new ticket that needs to be addressed as soon as possible.

Thử truy cập vào các website thì cứ quay đều và không response, vậy là coi như xong. Mình vội vã tạo ticket nhờ support từ tụi DO, mình hỏi nó "tại sao mày lock cái server của tao, tao nợ tiền mầy có vài $ thôi mà":D.

Thông báo từ DO cho mình biết là mình bị SYN Flood nên nó phải disabled networking trên server của mình, nó có gởi bảo mình là muốn access và server thì vào cái web console đó đó mà gõ lệnh.

Tiếng Anh mình gà, ngữ pháp sai tứ tung, mình thì bảo mình chưa có kinh nghiệm về mấy vụ này nhờ nó support, mà thằng cha đó thì cứ bảo mày phải fix hết đi rồi nó mới re-enable lại. Thật là bực hết cả mình. Sau gần 8 tiếng tìm kiếm, sau mình bực quá, kết thúc nó một câu cuối "Bây giờ mày phải mở mạng lên cho tao, tao mệt lắm rồi, mấy cái website tao đang kinh doanh mà giờ nó chết hết, tao cũng hết muốn làm luôn rồi." (Nói thật lúc này nó không mở khóa cho mình chắc mình chuyển qua xài Vhost luôn). Rồi cuối cùng nó cũng chịu thua mình.

Về lại với cái console màu tím quen thuộc :3. Website mở chạy lại nhưng như rùa bò, htop không thấy cpu và ram tăng đột biến. Mình chẳng biết cái gì đang xảy ra.

Vào graph của DO thì thấy thế này mới hoảng hồn tại sao tụi nó lại lock cái server của mình.

Đã biết được cái gì xảy ra, giờ đi tìm cách giải quyết

SYN Flood Attack là gì

Syn Flood Attack là một kiểu tấn công từ chối dịch vụ, những attacker gởi một số lượng lơn các SYN request tới máy chủ sử dụng TCP, làm cho máy chủ tiêu tốn tài nguyên cũng như không thể đáp ứng được các truy cập thông thường khác. Kiểu tấn công có thể xảy ra trên bất kỳ dịch vụ nào sử dụng giao thức TCP mà chủ yếu là qua web HTTP.

Vậy làm sao để chống lại SYN Flood Attack.

Nói thì vậy, nhưng làm để biết được máy mình đang chạy, cách nào để xem các SYN request này một cách realtime.

Toàn bộ những comman bên dưới mình thao tác trên server chạy ubuntu 12.04, còn centos hay trên window thì mình chịu :(

Với cách tấn công dạng này, traffic outgoing rất kinh khủng, các tool để xem cho vui về dung lượng các request này.

iftop

nload

bmon

Tiếp đến xem những gì xảy ra trên card mạng của bạn, cái nào ra, cái nào vào, cái nào request, cái nào response ....

tcptrack -i eth0 (1)

tcptrack -i eth0 port 80 (2)

tcptrack -i eth0 src or dst 61.160.215.102

Chỉ cần 2 command line 1,2 mình thấy khá rõ tình hình hiện tại như thế nào.

Mình nghĩ giờ phải cần thời gian để tìm kiếm, mà lượng traffic như thế này thì không khéo thằng DO lại lôi mình ra lock lại thì toi. Thôi shutdown -h now và đi tắm rửa, ăn tối.

Như suy nghĩ mình đi chặng từng cái ip gởi request:

netstat -tuna | grep :80 | grep SYN_RECV

và dùng firewall apf để chặn lại:

apf –d 61.160.215.102

nhưng mỗi lần chặn IP này nó lại ra một cái IP khác. Thôi quay lại xem settings của mình có gì không ổn không?

vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

net.ipv4.conf.all.rp_filter = 1

net.ipv4.tcpsynackretries = 3

...

sysctl -p /etc/sysctl.conf //save lại

Restart lại cho chắc nhưng vẫn thấy bị tấn công và còn nặng hơn trước. Thôi cách này không xong, chuyển qua dùng iptables.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

iptables -A INPUT -f -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

iptables -A OUTPUT -p tcp --dport 80 -j DROP

iptables-save > /etc/network/iptables.rules //save iptables

Tham khảo thêm Linux Iptables block common attacks

và còn đọc thêm thấy cái này Linux Iptables Avoid IP Spoofing And Bad Addresses Attacks.

Restart lại máy cho chắc ăn và Huraaa!!!

Vậy là chặn được 1 vụ SYN Flood Attack, một ngày mệt mỏi nhưng cũng học được những kinh nghiệm xương máu.

Các bài viết nên đọc: