วันเสาร์ที่ 19 กุมภาพันธ์ พ.ศ. 2554

[ไอที] ป้องกัน SYN-FLOOD ด้วยการ Limit SYN Packet


ตัวอย่างง่ายๆ ที่อาจช่วยป้องกัน SYN-FLOOD ทำให้ server ยังอยู่ได้ไม่ม่องเท่งก่อน เวลาอันควร

เอาคำสั่งนี้ไว้บนๆ สุดหน่อย จะช่วยได้มากครับ
คำสั่งแรกเป็นคำสั่ง Limit syn  Packet ให้อยู่ในช่วง 75 Packet ต่อวินาที และไม่เกิน 100 ต่อวินาที
iptables -A INPUT -p tcp --syn -m limit --limit 75/s --limit-burst 100 -j ACCEPT

คำสั่งที่ 2 ถ้ามันเกินจากนั้นก็จะถูก Drop ด้วยคำสั่งถัดมา
iptables -A INPUT -p tcp --syn -j DROP


** สำหรับการป้องกันด้วยวิธีนี้ยังไม่ถือว่าดีนัก

----------------------------


วิธีที่ง่ายกว่านั้นคือ drop syn packet (ที่เป็น packet เริ่ม) ทิ้งไปเลยครับ


iptables -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP


เพราะถ้า packet เริ่มไม่เป็น syn แสดงว่ามันกำลังเข้าสู่ขั้นตอนการ syn ack ของ tcp อยู่
แล้วจะทำให้ตรวจสอบได้ว่า host ปลายทางมีตัวตนจริงๆ หรือไม่ด้วย (เพราะการ accept connection ต้องมีการ ack กลับมาด้วย)
(ยังโดนยิง)
---------------

iptables -N syn-flood
iptables -A syn-flood  -m limit --limit 75/s --limit-burst 100 -j RETURN
iptables -A syn-flood -j LOG --log-prefix "SYN-FLOOD:"
iptables -A syn-flood -j DROP

ไม่มีความคิดเห็น:

แสดงความคิดเห็น